Apakah jumlah NUMA selalu sama dengan soket?


16

Saya sudah terbiasa lscpumemeriksa dua konfigurasi server:

[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

Yang lain:

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

Jadi saya bertanya-tanya apakah jumlah NUMA selalu sama dengan soket pada kenyataannya. Apakah ada contoh di mana mereka tidak sama?

Jawaban:


20

Mengapa Anda bertanya-tanya tentang jumlah NUMA node? Bagian yang penting adalah topologi NUMA, yang mengatakan bagaimana "simpul" itu terhubung.

Saya telah memeriksa beberapa sistem termasuk sistem 8-socket (10-core CPU) yang terdiri dari 4 bilah 2-socket yang saling berhubungan (Hitachi Compute Node 2000). Juga di sini jumlah NUMA node sama dengan jumlah soket CPU (8). Ini tergantung pada arsitektur CPU, terutama desain bus memorinya.

Seluruh NUMA (akses memori tidak seragam) mendefinisikan bagaimana setiap CPU logis dapat mengakses setiap bagian dari memori. Ketika Anda memiliki 2 sistem soket, setiap CPU (soket) memiliki memori sendiri, yang dapat langsung diakses. Tetapi juga harus dapat mengakses memori di soket lain - dan ini tentu saja membutuhkan lebih banyak siklus CPU daripada mengakses memori lokal. NUMA node menentukan bagian mana dari memori sistem yang merupakan tempat CPU itu berada. Anda dapat memiliki lebih banyak lapisan topologi, misalnya dalam kasus sistem HP Superdome (yang menggunakan CPU Intel Itanium2), Anda memiliki memori soket CPU lokal, kemudian memori pada soket berbeda di dalam sel yang sama dan kemudian memori di sel lain (yang memiliki latensi tertinggi).

Anda dapat mengkonfigurasi NUMA di sistem Anda untuk berperilaku seperti untuk memberikan kinerja terbaik untuk beban kerja Anda. Misalnya, Anda dapat mengizinkan semua CPU untuk mengakses semua memori, atau hanya mengakses memori lokal, yang kemudian mengubah cara penjadwal linux akan mendistribusikan proses di antara CPU logis yang tersedia. Jika Anda memiliki banyak proses yang tidak membutuhkan banyak memori, hanya menggunakan memori lokal dapat bermanfaat, tetapi jika Anda memiliki proses besar (database Oracle dengan memori bersama), menggunakan semua memori di antara semua CPU mungkin lebih baik.

Anda dapat menggunakan perintah seperti numastatatau numactl --hardwareuntuk memeriksa status NUMA di sistem Anda. Ini adalah info dari mesin 8-socket:

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

Di sana Anda dapat melihat jumlah memori yang ada di setiap simpul NUMA (soket CPU) dan berapa banyak yang digunakan dan gratis.

Bagian terakhir menunjukkan topologi NUMA - ini menunjukkan "jarak" antara masing-masing node dalam hal latensi akses memori (jumlahnya relatif saja, mereka tidak mewakili waktu dalam ms atau apa pun). Di sini Anda dapat melihat latensi ke memori lokal (simpul 0 mengakses memori pada 0, simpul 1 dalam 1, ...) adalah 10 sedangkan latensi jauh (simpul mengakses memori pada simpul lain) adalah 21. Meskipun sistem ini terdiri dari 4 individu bilah, latensi sama untuk soket yang berbeda pada bilah yang sama atau bilah lain.

Dokumen menarik tentang NUMA juga ada di portal RedHat .


3

Tidak. Jumlah NUMA node tidak selalu sama dengan jumlah soket. Misalnya, AMD Threadripper 1950X memiliki 1 soket dan 2 NUMA node sementara sistem Intel Xeon E5310 ganda dapat menunjukkan 2 soket dan 1 NUMA node.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.