您为什么想知道NUMA节点的数量?重要的部分是NUMA拓扑,它表示如何连接这些“节点”。
我检查了很少的系统,包括由4个互连的2插槽刀片组成的8插槽(10核CPU)系统(Hitachi Compute Node 2000)。同样,这里的NUMA节点数等于CPU插槽数(8)。这取决于CPU架构,主要取决于其内存总线设计。
整个NUMA(非统一内存访问)定义了每个逻辑CPU如何访问内存的每个部分。当您有2个套接字系统时,每个CPU(套接字)都有自己的内存,可以直接访问。但是它还必须能够访问另一个套接字中的内存-与访问本地内存相比,这当然需要更多的CPU周期。NUMA节点指定系统内存的哪个部分位于哪个CPU本地。您可以具有更多的拓扑层,例如,在HP Superdome系统(使用Intel Itanium2 CPU)的情况下,您具有本地CPU插槽内存,然后在同一单元中位于不同插槽上,然后在其他单元中具有内存(具有最高延迟)。
您可以在系统中配置NUMA,使其行为能够为您的工作负载提供最佳性能。例如,您可以允许所有CPU访问所有内存,或仅访问本地内存,然后更改linux调度程序在可用逻辑CPU之间分配进程的方式。如果您有许多不需要大量内存的进程,则仅使用本地内存会有所裨益,但是,如果您有大型进程(带有共享内存的Oracle数据库),则在所有cpus中使用所有内存可能会更好。
您可以使用诸如numastat
或的命令numactl --hardware
来检查系统上的NUMA状态。这是该8插槽机器的信息:
hana2:~ # lscpu
Architecture: x86_64
CPU(s): 160
Thread(s) per core: 2
Core(s) per socket: 10
CPU socket(s): 8
NUMA node(s): 8
NUMA node0 CPU(s): 0-19
NUMA node1 CPU(s): 20-39
NUMA node2 CPU(s): 40-59
NUMA node3 CPU(s): 60-79
NUMA node4 CPU(s): 80-99
NUMA node5 CPU(s): 100-119
NUMA node6 CPU(s): 120-139
NUMA node7 CPU(s): 140-159
hana2:~ # numactl --hardware
available: 8 nodes (0-7)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
node 0 size: 130961 MB
node 0 free: 66647 MB
node 1 cpus: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
node 1 size: 131072 MB
node 1 free: 38705 MB
node 2 cpus: 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
node 2 size: 131072 MB
node 2 free: 71668 MB
node 3 cpus: 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
node 3 size: 131072 MB
node 3 free: 47432 MB
node 4 cpus: 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
node 4 size: 131072 MB
node 4 free: 68458 MB
node 5 cpus: 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
node 5 size: 131072 MB
node 5 free: 62218 MB
node 6 cpus: 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
node 6 size: 131072 MB
node 6 free: 68071 MB
node 7 cpus: 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
node 7 size: 131008 MB
node 7 free: 47306 MB
node distances:
node 0 1 2 3 4 5 6 7
0: 10 21 21 21 21 21 21 21
1: 21 10 21 21 21 21 21 21
2: 21 21 10 21 21 21 21 21
3: 21 21 21 10 21 21 21 21
4: 21 21 21 21 10 21 21 21
5: 21 21 21 21 21 10 21 21
6: 21 21 21 21 21 21 10 21
7: 21 21 21 21 21 21 21 10
在那里,您可以看到每个NUMA节点(CPU插槽)中存在的内存量以及已使用和释放的内存量。
最后一部分显示了NUMA拓扑-根据内存访问延迟显示了各个节点之间的“距离”(数字仅是相对的,它们不代表以毫秒为单位的时间)。在这里,您可以看到本地内存的延迟(节点0访问内存中的0,节点1处于1,...)的延迟为10,而远程延迟(节点访问其他节点上的内存)的延迟为21。刀片,对于同一刀片或其他刀片上的不同插槽,等待时间是相同的。
关于NUMA的有趣文档也在RedHat门户上。