我在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页免费, 哪个数字我弄错了?!或者我错了两个?!
答案 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。
如果我的算法是正确的,这里没有错。