NUMA 노드의 양은 항상 소켓과 동일합니까?

NUMA 노드의 양은 항상 소켓과 동일합니까?

lscpu나는 두 개의 서버 구성을 확인하는 데 사용했습니다 .

[root@localhost ~]# lscpu
Architecture:          x86_64
......
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26

다른 것:

[root@localhost Packages]# lscpu
Architecture:          x86_64
.....
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 45

그래서 실제로는 NUMA 노드의 양이 항상 소켓과 같은지 궁금합니다. 같지 않은 예가 있나요?

답변1

NUMA 노드 수가 궁금한 이유는 무엇입니까? 중요한 부분은 "노드"가 어떻게 연결되어 있는지를 알려주는 NUMA 토폴로지입니다.

4개의 상호 연결된 2소켓 블레이드(Hitachi Compute Node 2000)로 구성된 8소켓(10코어 CPU) 시스템을 포함하여 몇 가지 시스템을 검사했습니다. 또한 여기서 NUMA 노드 수는 CPU 소켓 수(8)와 같습니다. 이는 CPU 아키텍처, 주로 메모리 버스 설계에 따라 다릅니다.

전체 NUMA(Non-Uniform Memory Access)는 각 논리적 CPU가 메모리의 각 부분에 액세스하는 방법을 정의합니다. 2소켓 시스템이 있는 경우 각 CPU(소켓)에는 직접 액세스할 수 있는 자체 메모리가 있습니다. 그러나 다른 소켓의 메모리에도 액세스할 수 있어야 하며 이는 물론 로컬 메모리에 액세스하는 것보다 더 많은 CPU 주기를 필요로 합니다. NUMA 노드는 시스템 메모리의 어느 부분이 어느 CPU에 로컬인지 지정합니다. 더 많은 토폴로지 계층을 가질 수 있습니다. 예를 들어 Intel Itanium2 CPU를 사용하는 HP Superdome 시스템의 경우 로컬 CPU 소켓 메모리가 있고 동일한 셀 내의 다른 소켓에 메모리가 있고 다른 셀( 가장 높은 대기 시간).

워크로드에 대해 가능한 최상의 성능을 제공하도록 시스템에서 NUMA를 구성할 수 있습니다. 예를 들어 모든 CPU가 모든 메모리에 액세스하도록 허용하거나 로컬 메모리에만 액세스하도록 허용할 수 있습니다. 그러면 Linux 스케줄러가 사용 가능한 논리 CPU 간에 프로세스를 배포하는 방법이 변경됩니다. 많은 메모리를 필요로 하지 않는 프로세스가 많은 경우 로컬 메모리만 사용하는 것이 이점이 될 수 있지만, 대규모 프로세스(공유 메모리가 있는 Oracle 데이터베이스)가 있는 경우 모든 CPU 중에서 모든 메모리를 사용하는 것이 더 나을 수 있습니다.

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 토폴로지를 보여줍니다. 이는 메모리 액세스 대기 시간 측면에서 개별 노드 간의 "거리"를 보여줍니다(숫자는 상대적일 뿐이며 시간을 ms 단위로 나타내지 않습니다). 여기서는 로컬 메모리(0에서 메모리에 액세스하는 노드 0, 1에서 노드 1, ...)에 대한 대기 시간이 10인 반면 원격 대기 시간(다른 노드의 메모리에 액세스하는 노드)은 21인 것을 볼 수 있습니다. 이 시스템은 4개의 개인으로 구성되어 있지만 블레이드의 경우 동일한 블레이드 또는 다른 블레이드의 다른 소켓에 대한 대기 시간은 동일합니다.

NUMA에 관한 흥미로운 문서도 있습니다.RedHat 포털.

답변2

아니요. NUMA 노드 수가 항상 소켓 수와 같지는 않습니다. 예를 들어, AMD Threadripper 1950X에는 소켓 1개와 NUMA 노드 2개가 있는 반면, 듀얼 Intel Xeon E5310 시스템에는 소켓 2개와 NUMA 노드 1개가 표시될 수 있습니다.

답변3

실제로는 그렇지 않습니다. 내 서버에서:

➜ lscpu
Socket(s):             2
NUMA node(s):          4
NUMA node0 CPU(s):     0-31,128-159
NUMA node1 CPU(s):     32-63,160-191
NUMA node2 CPU(s):     64-95,192-223
NUMA node3 CPU(s):     96-127,224-255

NUMA node0과 node1은 소켓 0에 위치하고 나머지 두 개는 내 서버의 소켓 1에 위치합니다.

관련 정보