Чи завжди кількість вузлів NUMA дорівнює розеткам?


16

Я 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-вузлів завжди дорівнює розеткам. Чи є приклад, коли вони не рівні?

Відповіді:


20

Чому вам цікаво кількість NUMA-вузлів? Важливою частиною є топологія NUMA, яка говорить про те, як пов’язані ті "вузли".

Я перевірив декілька систем, включаючи 8-сокетну (10-ядерну процесорну систему), що складається з 4-х взаємопов’язаних 2-гніздових лопатей (Hitachi Compute Node 2000). Також тут кількість вузлів NUMA дорівнює кількості розеток процесора (8). Це залежить від архітектури процесора, головним чином від його дизайну шини пам'яті.

Весь NUMA (нерівномірний доступ до пам'яті) визначає, як кожен логічний процесор може отримати доступ до кожної частини пам'яті. Коли у вас є 2 системи сокет, кожен процесор (сокет) має власну пам’ять, до якої він може безпосередньо отримати доступ. Але він також повинен мати можливість доступу до пам'яті в іншому сокеті - і це, звичайно, займає більше циклів процесора, ніж доступ до локальної пам'яті. Вузли NUMA вказують, яка частина системної пам'яті є локальною для цього процесора. Ви можете мати більше шарів топології, наприклад, у випадку системи HP Superdome (яка використовує процесори Intel Itanium2), ви маєте локальну пам'ять розеток процесора, потім пам'ять у різних сокетах всередині однієї комірки, а потім пам'ять в інших клітинках (у яких є найвища затримка).

Ви можете налаштувати NUMA у вашій системі таким чином, щоб забезпечити найкращу ефективність роботи. Наприклад, ви можете дозволити всім процесорам отримати доступ до всієї пам’яті або отримати доступ лише до локальної пам’яті, яка потім змінює спосіб розподілу процесорів Linux розподіляти процеси між доступними логічними процесорами. Якщо у вас багато процесів, що вимагають не багато пам’яті, використання лише локальної пам’яті може принести користь, але якщо у вас є великі процеси (база даних Oracle зі спільною пам’яттю), можливо, краще використовувати всю пам’ять серед усіх процесорів.

Ви можете використовувати команди, такі як 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 socket), і скільки його використовується та безкоштовно.

Останній розділ показує топологію NUMA - він показує "відстані" між окремими вузлами з точки зору затримок доступу до пам'яті (номери лише відносні, вони не представляють час у мс чи що-небудь). Тут ви можете побачити затримку до локальної пам'яті (вузол 0 доступу до пам'яті в 0, вузол 1 в 1, ...) - 10, а віддалена затримка (вузол, що отримує доступ до пам'яті на іншому вузлі) - 21. Хоча ця система складається з 4 окремих лопаті, затримка однакова для різних розеток на одній і тій же лезі.

Цікавий документ про NUMA також є на порталі RedHat .


3

Ні. Кількість вузлів NUMA не завжди дорівнює кількості розеток. Наприклад, AMD Threadripper 1950X має 1 розетку та 2 NUMA-вузли, тоді як подвійна система Intel Xeon E5310 може показувати 2 розетки та 1 вузол NUMA.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.