从Java垃圾收集跳转到JVM NUMA设置,好奇想检查我的CentOS服务器是否具备NUMA功能。是否有*ix命令或工具可以获取此信息?
我并不是专家,但这里有一些东西:
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?
特别地,你可以在这里查看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
您也可以使用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
对于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
您也可以从/sys
查询信息(这也是像numactl
这样的工具在底层执行的操作)。正如其他人指出的那样,使用dmesg将不可靠,因为它通常无法具有无限缓冲。
要查找当前有多少个NUMA节点,请执行以下操作:
cat /sys/devices/system/node/online
0-3