最近在调试 DPDK
时,发现当程序中需要申请超过 1 GB
的内存空间时,通过 mmap()
申请到的这些内存空间不全在同一个节点上,这在 DPDK
中会被视为内存申请失败,进而报错。光看 DPDK
的代码,不能确定是否是因为某个结点上的内存不足造成的,毕竟 mmap()
是返回成功的,只是对应的物理内存不在期望的节点上。此时,应该借助 numastat
工具查看各个节点上的内存使用情况,以判断是否是因为节点内存不足造成的。
具体而言,可以使用numastat -m
命令来查看各节点的内存情况,运行结果如下:
$ numastat -m
Per-node system memory usage (in MBs):
Node 0 Node 1 Total
--------------- --------------- ---------------
MemTotal 130071.25 130936.88 261008.12
MemFree 63539.12 109492.38 173031.50
MemUsed 66532.12 21444.50 87976.62
Active 20647.88 8211.31 28859.19
Inactive 41927.44 11211.94 53139.38
Active(anon) 2621.88 459.50 3081.38
Inactive(anon) 811.94 436.06 1248.00
Active(file) 18026.00 7751.81 25777.81
Inactive(file) 41115.50 10775.88 51891.38
Unevictable 0.06 0.00 0.06
Mlocked 0.06 0.00 0.06
Dirty 1.62 8.81 10.44
Writeback 0.00 0.00 0.00
FilePages 59183.38 18567.69 77751.06
Mapped 182.06 88.44 270.50
AnonPages 3397.62 859.88 4257.50
Shmem 27.81 30.62 58.44
KernelStack 9.50 7.50 17.00
PageTables 27.25 5.75 33.00
NFS_Unstable 0.00 0.00 0.00
Bounce 0.00 0.00 0.00
WritebackTmp 0.00 0.00 0.00
Slab 2800.81 1562.38 4363.19
SReclaimable 977.81 571.69 1549.50
SUnreclaim 1823.00 990.69 2813.69
AnonHugePages 0.00 0.00 0.00
ShmemHugePages 0.00 0.00 0.00
ShmemPmdMapped 0.00 0.00 0.00
HugePages_Total 0.00 0.00 0.00
HugePages_Free 0.00 0.00 0.00
HugePages_Surp 0.00 0.00 0.00