我的服务器是否具有NUMA? 如何知道我的服务器是否具有NUMA?

30
从Java垃圾收集跳转到JVM NUMA设置,好奇想检查我的CentOS服务器是否具备NUMA功能。是否有*ix命令或工具可以获取此信息?
5个回答

35

我并不是专家,但这里有一些东西:

Box 1,无 NUMA:

~$ dmesg | grep -i numa
[    0.000000] No NUMA configuration found

盒子 2,某些 NUMA:

~$ dmesg | grep -i numa
[    0.000000] NUMA: Initialized distance table, cnt=8
[    0.000000] NUMA: Node 4 [0,80000000) + [100000000,280000000) -> [0,280000000)

我的甚至没有显示“无NUMA配置”,在所有匹配项(Linux 2.6.18 / CentOS)中都没有出现... - Kevin
4
请让我为您翻译以下内容:“dmesg”也没有提到“NUMA”,因为这还太早了。相反,请使用“grep /var/log/dmesg”,因为它更可能拥有完整的日志记录。(“NUMA被关闭”是什么意思?) - Thanatos
对我来说,“dmesg”也没有提到“NUMA”,但我无法访问需要root权限的“/var/log/dmesg”。我运行了“find /proc|grep -i numa”并看到了一些“numa_maps”文件。我猜这也是NUMA已启用的标志。 - Roun
6
在 dmesg 中检查 Numa 相关消息的方法并不可靠。首先,由于 dmesg 读取内核环形缓冲区,当你使用 grep 搜索时,消息可能已经消失了,即会出现假阴性的情况。此外,你无法区分这种情况和内核早期运行或者剥离到足够程度以完全忽略 Numa 消息的情况。 - Donald_W
我从未说过它是可靠的。它只是众多工具中的一个。 - Nikolai Fetissov

26

我认为这个之前的问题很相似:如何确认NUMA?

特别地,你可以在这里查看NUMA手册:http://man7.org/linux/man-pages/man7/numa.7.html

从那里你会看到:

$ find /proc -name numa_maps
/proc/1/task/1/numa_maps
/proc/1/numa_maps
/proc/2/task/2/numa_maps
/proc/2/numa_maps
/proc/3/task/3/numa_maps
[etc if you have numa]

然后您可以这样获得更多详细信息:

$ grep NUMA=y /boot/config-`uname -r`
CONFIG_NUMA=y
CONFIG_K8_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_ACPI_NUMA=y

$ numactl --hardware
available: 2 nodes (0-1)
node 0 size: 18156 MB
node 0 free: 9053 MB
node 1 size: 18180 MB
node 1 free: 6853 MB
node distances:
node   0   1
  0:  10  20
  1:  20  10

16

您也可以使用lscpu命令获取此信息:

lscpu | grep -i numa
NUMA node(s):          2
NUMA node0 CPU(s):     0-19,40-59
NUMA node1 CPU(s):     20-39,60-79

13

对于Redhat 4、5、6和7系统,可以尝试以下方法确定NUMA配置是否已禁用:

numactl --show不显示多个节点。

# numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
cpubind: 0
nodebind: 0
membind: 0

或者 numactl --hardware 不列出多个节点

# numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
node 0 size: 524163 MB
node 0 free: 505253 MB
node distances:
node   0
  0:  10

9

您也可以从/sys查询信息(这也是像numactl这样的工具在底层执行的操作)。正如其他人指出的那样,使用dmesg将不可靠,因为它通常无法具有无限缓冲。

要查找当前有多少个NUMA节点,请执行以下操作:

cat /sys/devices/system/node/online
0-3

嗨 @zgerd!你知道是否有更深入的文件树 /sys/devices/system/node/ 相关文档吗?我在内核文档中搜索过,但不幸的是没有与此区域相关的文档。我想知道该目录中特定文件中存储了哪些统计数据。 - Michal16511
1
它记录在https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-devices-node下。 - zgerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接