在Linux中巨大的页面计算

我在Linux中有以下configuration:

cat /proc/sys/vm/nr_hugepages 100 cat /proc/meminfo | grep "Page" AnonPages: 149012 kB PageTables: 13800 kB AnonHugePages: 4096 kB HugePages_Total: 100 HugePages_Free: 100 HugePages_Rsvd: 0 HugePages_Surp: 0 numastat -m Per-node system memory usage (in MBs): Node 0 Node 1 Total --------------- --------------- --------------- HugePages_Total 100.00 100.00 200.00 HugePages_Free 100.00 100.00 200.00 

然后我运行我的testing应用程序,消耗巨大的页面,然后再看:

 AnonPages: 146592 kB PageTables: 13316 kB AnonHugePages: 4096 kB HugePages_Total: 100 HugePages_Free: 82 HugePages_Rsvd: 0 HugePages_Surp: 0 Per-node system memory usage (in MBs): Node 0 Node 1 Total --------------- --------------- --------------- HugePages_Total 100.00 100.00 200.00 HugePages_Free 100.00 64.00 164.00 

为什么numastat -m showes node1有64MB免费,但是meminfo显示82页免费,这个数字我错了? 还是我弄错了?

我会说这些数字是一致的。 没有错。

系统中有100个大页面。 每个页面代表2 MB的数据。 所以我们正在谈论200 MB的内存。

请注意,numastat -m命令以MB为单位显示内存(不是以页表示)。 在此NUMA计算机上,系统在NUMA节点(100 MB和100 MB)之间均匀分配此内存。 / proc / meminfo中的HugePages统计信息以页数表示。

一旦应用程序运行,您将获得82页免费,所以使用18页,导致使用18 * 2 MB = 36 MB。 numastat -m在节点1上显示64 MB空闲空间,实际上对应于100 MB – 36 MB。

如果我的算术是正确的,这里没有错。