我在一台NUMA计算机上工作。它有两个节点,每个节点上有16 on的内存。当我运行一个大程序时,我同时使用htop和numactl --hardware来观察内存消耗。然而,我得到了两个不同的结果。
htop显示,我的程序总共消耗了大约20 in的内存。然而,numactl --hardware显示几乎使用了32 is。那么,哪一个是正确的呢?或者numactl --hardware显示的不是实际的驻留内存,而是其他类型的内存?

发布于 2014-06-30 18:01:41
numactl --hardware内存输出来自libnuma中的numa_node_size64()函数,该函数反过来从/sys/devices/system/node/node%d/meminfo中的MemTotal和MemFree值中获取信息。
假设您使用的是Linux,您可以尝试使用cat /sys/devices/system/node/node0/meminfo (与node1相同)来查看更详细的内存信息。您应该能够将其中一些值与htop输出相关联。如果这还不能解决问题,那么就必须查看内核源代码,看看MemFree值是如何派生出来的。
下面是我的单节点系统的示例输出。你会看到有很多信息:
Node 0 MemTotal: 7069704 kB
Node 0 MemFree: 4099480 kB
Node 0 MemUsed: 2970224 kB
Node 0 Active: 1677108 kB
Node 0 Inactive: 934216 kB
Node 0 Active(anon): 1056284 kB
Node 0 Inactive(anon): 46232 kB
Node 0 Active(file): 620824 kB
Node 0 Inactive(file): 887984 kB
Node 0 Unevictable: 16 kB
Node 0 Mlocked: 16 kB
Node 0 Dirty: 220 kB
Node 0 Writeback: 0 kB
Node 0 FilePages: 1556076 kB
Node 0 Mapped: 249100 kB
Node 0 AnonPages: 1055236 kB
Node 0 Shmem: 47276 kB
Node 0 KernelStack: 3712 kB
Node 0 PageTables: 33648 kB
Node 0 NFS_Unstable: 0 kB
Node 0 Bounce: 0 kB
Node 0 WritebackTmp: 0 kB
Node 0 Slab: 218156 kB
Node 0 SReclaimable: 168548 kB
Node 0 SUnreclaim: 49608 kB
Node 0 AnonHugePages: 0 kB
Node 0 HugePages_Total: 0
Node 0 HugePages_Free: 0
Node 0 HugePages_Surp: 0发布于 2014-07-02 12:09:51
事实证明,numactl --hardware将缓存视为“已用内存”,而不是“空闲内存”。这就是为什么它会比htop显示更多的内存消耗。
一本好书:http://www.linuxatemyram.com/
https://stackoverflow.com/questions/24486160
复制相似问题