linux中的大页面计算

时间:2016-11-23 08:10:46

标签: linux memory

我在linux中有以下配置:

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

然后我运行我的测试应用程序,它消耗了巨大的页面,然后再次观看:

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页免费, 哪个数字我弄错了?!或者我错了两个?!

1 个答案:

答案 0 :(得分:2)

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

系统中有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。

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