NUMA düğümü miktarı her zaman sokete eşit mi?


16

lscpuİki sunucu yapılandırmasını kontrol etmek için kullandım :

[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

Diğeri:

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

Bu yüzden NUMA düğümlerinin miktarının her zaman yuvalara eşit olup olmadığını merak ediyorum. Eşit olmadıkları herhangi bir örnek var mı?

Yanıtlar:


20

Neden NUMA düğümü sayısını merak ediyorsunuz? Önemli olan, bu "düğümlerin" nasıl bağlandığını söyleyen NUMA topolojisidir.

4 adet birbirine bağlı 2 soketli blade'den oluşan 8 soketli (10 çekirdekli CPU) sistemi de dahil olmak üzere birkaç sistemi kontrol ettim (Hitachi Compute Node 2000). Ayrıca burada NUMA düğümlerinin sayısı CPU soketlerinin sayısına eşittir (8). Bu, CPU mimarisine, özellikle de bellek veri yolu tasarımına bağlıdır.

NUMA'nın tamamı (eşit olmayan bellek erişimi), her mantıksal CPU'nun belleğin her bir bölümüne nasıl erişebileceğini tanımlar. 2 soket sisteminiz olduğunda, her CPU'nun (soket) doğrudan erişebileceği kendi belleği vardır. Ancak diğer soketteki belleğe de erişebilmelidir - ve bu elbette yerel belleğe erişmekten daha fazla CPU döngüsü gerektirir. NUMA düğümü, sistem belleğinin hangi bölümünün hangi CPU'da yerel olduğunu belirtir. HP Superdome sistemi (Intel Itanium2 CPU kullanan) durumunda daha fazla topoloji katmanına sahip olabilirsiniz, yerel CPU soket belleğiniz, daha sonra aynı hücrenin içindeki farklı sokette bellek ve daha sonra diğer hücrelerde ( en yüksek gecikme).

Sisteminizdeki NUMA'yı iş yükünüz için mümkün olan en iyi performansı verecek şekilde davranacak şekilde yapılandırabilirsiniz. Örneğin, tüm CPU'ların tüm belleğe erişmesine veya yalnızca yerel belleğe erişmesine izin verebilirsiniz, bu da linux zamanlayıcının işlemleri mevcut mantıksal CPU'lar arasında nasıl dağıtacağını değiştirir. Çok fazla bellek gerektirmeyen birçok işleminiz varsa, yalnızca yerel belleği kullanmak yararlı olabilir, ancak büyük işlemleriniz (paylaşılan belleğiyle Oracle veritabanı) varsa, tüm cpus'lar arasındaki tüm belleği kullanmak daha iyi olabilir.

Sisteminizdeki NUMA durumunu kontrol etmek için numastatveya gibi komutları kullanabilirsiniz numactl --hardware. İşte bu 8 soketli makineden bilgiler:

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

Burada her bir NUMA düğümünde (CPU soketi) bulunan bellek miktarını ve ne kadarının kullanıldığını ve boş olduğunu görebilirsiniz.

Son bölüm NUMA topolojisini gösterir - bellek erişim gecikmeleri açısından tek tek düğümler arasındaki "mesafeleri" gösterir (sayılar yalnızca görecelidir, ms cinsinden zamanı temsil etmez). Burada yerel belleğin gecikme süresini (0'da belleğe erişen düğüm 0, 1'de 1 numaralı düğüm, ...) 10 iken, uzaktan gecikme süresi (diğer düğümdeki belleğe erişen düğüm) 21'dir. Bu sistem 4 kişiden oluşmasına rağmen bıçaklar, gecikme aynı bıçak veya diğer bıçak üzerindeki farklı soket için aynıdır.

NUMA hakkında ilginç bir belge de RedHat portalında .


3

Hayır. NUMA düğümü sayısı her zaman soket sayısına eşit değildir. Örneğin, bir AMD Threadripper 1950X'in 1 soketi ve 2 NUMA düğümü bulunurken, çift Intel Xeon E5310 sistemi 2 soket ve 1 NUMA düğümü gösterebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.