Entspricht die Anzahl der NUMA-Knoten immer den Sockets?

16

Ich habe die lscpuKonfiguration von zwei Servern überprüft:

[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

Das andere:

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

Ich frage mich also, ob die Anzahl der NUMA-Knoten tatsächlich immer gleich Sockets ist. Gibt es ein Beispiel, wo sie nicht gleich sind?

Nan Xiao
quelle

Antworten:

20

Warum wundern Sie sich über die Anzahl der NUMA-Knoten? Der wichtige Teil ist die NUMA-Topologie, die besagt, wie diese "Knoten" verbunden sind.

Ich habe einige Systeme überprüft, einschließlich eines 8-Socket-Systems (10-Core-CPUs), das aus 4 miteinander verbundenen 2-Socket-Blades besteht (Hitachi Compute Node 2000). Auch hier entspricht die Anzahl der NUMA-Knoten der Anzahl der CPU-Sockel (8). Dies hängt von der CPU-Architektur ab, hauptsächlich vom Speicherbusdesign.

Die gesamte NUMA (ungleichmäßiger Speicherzugriff) definiert, wie jede logische CPU auf jeden Teil des Speichers zugreifen kann. Bei einem System mit zwei Sockeln verfügt jede CPU (Sockel) über einen eigenen Speicher, auf den sie direkt zugreifen kann. Es muss aber auch in der Lage sein, auf den Speicher im anderen Socket zuzugreifen - und dies erfordert natürlich mehr CPU-Zyklen als der Zugriff auf den lokalen Speicher. NUMA-Knoten gibt an, welcher Teil des Systemspeichers lokal für welche CPU ist. Sie können über mehrere Topologieebenen verfügen, z. B. im Fall eines HP Superdome-Systems (das Intel Itanium2-CPUs verwendet), über einen lokalen CPU-Sockelspeicher, dann über einen Speicher in einem anderen Sockel in derselben Zelle und anschließend über einen Speicher in anderen Zellen (die über die Intel Itanium2-CPUs verfügen) höchste Latenz).

Sie können die NUMA in Ihrem System so konfigurieren, dass sie sich so verhält, dass die bestmögliche Leistung für Ihre Arbeitslast erzielt wird. Sie können beispielsweise zulassen, dass alle CPUs auf den gesamten Arbeitsspeicher zugreifen, oder nur auf den lokalen Arbeitsspeicher. Dadurch wird geändert, wie der Linux-Scheduler Prozesse auf die verfügbaren logischen CPUs verteilt. Wenn Sie viele Prozesse haben, die nicht viel Arbeitsspeicher benötigen, kann die Verwendung nur des lokalen Arbeitsspeichers von Vorteil sein. Wenn Sie jedoch über große Prozesse verfügen (Oracle-Datenbank mit gemeinsam genutztem Arbeitsspeicher), ist die Verwendung des gesamten Arbeitsspeichers unter allen CPUs möglicherweise besser.

Sie können Befehle wie numastatoder verwenden numactl --hardware, um den NUMA-Status Ihres Systems zu überprüfen. Hier sind Informationen von dieser 8-Socket-Maschine:

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

Dort können Sie sehen, wie viel Speicher in jedem NUMA-Knoten (CPU-Sockel) vorhanden ist und wie viel davon belegt und frei ist.

Der letzte Abschnitt zeigt die NUMA-Topologie - es zeigt die "Abstände" zwischen einzelnen Knoten in Bezug auf Speicherzugriffslatenzen (die Zahlen sind nur relativ, sie repräsentieren keine Zeit in ms oder irgendetwas). Hier sehen Sie, dass die Latenzzeit zum lokalen Speicher (Knoten 0 greift auf Speicher in 0 zu, Knoten 1 in 1, ...) 10 beträgt, während die Remote-Latenzzeit (Knoten greift auf Speicher in anderem Knoten zu) 21 beträgt. Dieses System besteht jedoch aus 4 einzelnen Elementen Blades ist die Latenz für verschiedene Sockel auf demselben Blade oder einem anderen Blade gleich.

Interessantes Dokument über NUMA ist auch im RedHat-Portal .

Marki555
quelle
3

Nein. Die Anzahl der NUMA-Knoten entspricht nicht immer der Anzahl der Sockets. Beispielsweise verfügt ein AMD Threadripper 1950X über 1 Socket und 2 NUMA-Knoten, während ein duales Intel Xeon E5310-System 2 Sockets und 1 NUMA-Knoten anzeigen kann.

user3135484
quelle