NUMA 策略命中/未命中统计

/sys/devices/system/node/node*/numastat

所有单位均为页。巨页有单独的计数器。

numa_hit、numa_miss 和 numa_foreign 计数器反映了进程从其首选节点分配内存的能力。如果成功,则在首选节点上递增 numa_hit,否则在首选节点上递增 numa_foreign,在分配成功的节点上递增 numa_miss。

通常,首选节点是进程执行所在的 CPU 本地节点,但诸如 mempolicies 之类的限制可能会改变这一点,因此还有两个基于 CPU 本地节点的计数器。local_node 类似于 numa_hit,并且在同一个节点上的 CPU 从节点分配时递增。other_node 类似于 numa_miss,并且在来自不同节点的 CPU 分配成功的节点上递增。请注意,没有与 numa_foreign 类似的计数器。

更详细地说

numa_hit

进程希望从此节点分配内存,并且成功了。

numa_miss

进程希望从另一个节点分配内存,但最终获得了来自此节点的内存。

numa_foreign

进程希望在此节点上分配,但最终获得了来自另一个节点的内存。

local_node

进程在此节点的 CPU 上运行,并从该节点获得了内存。

other_node

进程在不同节点的 CPU 上运行,并从该节点获得了内存。

interleave_hit

交错希望从此节点分配并成功了。

为了更易于阅读,您可以使用 numactl 包中的 numastat 实用程序 (http://oss.sgi.com/projects/libnuma/)。请注意,它目前仅在少量 CPU 的机器上运行良好。

请注意,在具有无内存节点的系统上(其中一个节点具有 CPU 但没有内存),numa_hit、numa_miss 和 numa_foreign 统计信息可能会严重倾斜。在当前内核实现中,如果进程首选无内存节点(即,因为它在其中一个本地 CPU 上运行),则实现实际上将最近的具有内存的节点之一视为首选节点。因此,此类分配不会增加无内存节点上的 numa_foreign 计数器,并且会使最近节点的 numa_hit、numa_miss 和 numa_foreign 统计信息倾斜。