Le nombre de nœuds NUMA est-il toujours égal aux sockets?

16

J'ai utilisé lscpupour vérifier la configuration de deux serveurs:

[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

L'autre:

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

Je me demande donc si la quantité de nœuds NUMA est toujours égale aux sockets en fait. Y a-t-il un exemple où ils ne sont pas égaux?

Nan Xiao
la source

Réponses:

20

Pourquoi vous interrogez-vous sur le nombre de nœuds NUMA? La partie importante est la topologie NUMA, qui indique comment ces «nœuds» sont connectés.

J'ai vérifié quelques systèmes, y compris le système à 8 sockets (processeurs 10 cœurs) composé de 4 lames interconnectées à 2 sockets (Hitachi Compute Node 2000). Ici aussi, le nombre de nœuds NUMA est égal au nombre de sockets CPU (8). Cela dépend de l'architecture du processeur, principalement de la conception de son bus mémoire.

L'ensemble NUMA (accès mémoire non uniforme) définit comment chaque CPU logique peut accéder à chaque partie de la mémoire. Lorsque vous avez un système à 2 sockets, chaque CPU (socket) a sa propre mémoire, à laquelle il peut accéder directement. Mais il doit également pouvoir accéder à la mémoire de l'autre socket - et cela prend bien sûr plus de cycles CPU que d'accéder à la mémoire locale. Les nœuds NUMA spécifient quelle partie de la mémoire système est locale pour quel processeur. Vous pouvez avoir plusieurs couches de topologie, par exemple dans le cas du système HP Superdome (qui utilise des processeurs Intel Itanium2), vous avez une mémoire de socket de processeur local, puis une mémoire sur un socket différent à l'intérieur de la même cellule, puis une mémoire dans d'autres cellules (qui ont le latence la plus élevée).

Vous pouvez configurer le NUMA dans votre système pour qu'il se comporte de manière à offrir les meilleures performances possibles pour votre charge de travail. Vous pouvez par exemple autoriser tous les CPU à accéder à toute la mémoire, ou accéder uniquement à la mémoire locale, ce qui modifie ensuite la façon dont le planificateur Linux répartira les processus entre les CPU logiques disponibles. Si vous avez de nombreux processus ne nécessitant pas beaucoup de mémoire, utiliser uniquement la mémoire locale peut être avantageux, mais si vous avez des processus volumineux (base de données Oracle avec sa mémoire partagée), utiliser toute la mémoire parmi tous les processeurs peut être préférable.

Vous pouvez utiliser des commandes telles que numastatou numactl --hardwarepour vérifier l'état NUMA sur votre système. Voici les informations de cette machine à 8 prises:

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

Vous pouvez y voir la quantité de mémoire présente dans chaque nœud NUMA (socket CPU) et la quantité de mémoire utilisée et libre.

La dernière section montre la topologie NUMA - elle montre les "distances" entre les nœuds individuels en termes de latences d'accès à la mémoire (les nombres sont relatifs seulement, ils ne représentent pas le temps en ms ou quoi que ce soit). Ici, vous pouvez voir la latence de la mémoire locale (le nœud 0 accédant à la mémoire en 0, le nœud 1 en 1, ...) est de 10 tandis que la latence à distance (le nœud accédant à la mémoire sur un autre nœud) est de 21. Bien que ce système se compose de 4 individus lames, la latence est la même pour différentes prises sur la même lame ou une autre lame.

Un document intéressant sur NUMA est également disponible sur le portail RedHat .

Marki555
la source
3

Non. Le nombre de nœuds NUMA n'est pas toujours égal au nombre de sockets. Par exemple, un AMD Threadripper 1950X possède 1 socket et 2 nœuds NUMA tandis qu'un système double Intel Xeon E5310 peut afficher 2 sockets et 1 nœud NUMA.

user3135484
la source