Số lượng nút NUMA luôn bằng với ổ cắm?


16

Tôi đã sử dụng lscpuđể kiểm tra cấu hình hai máy chủ:

[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

Thứ khác, vật khác:

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

Vì vậy, tôi tự hỏi liệu số lượng nút NUMA luôn luôn bằng ổ cắm trên thực tế. Có ví dụ nào mà chúng không bằng nhau không?

Câu trả lời:


19

Tại sao bạn lại băn khoăn về số lượng nút NUMA? Phần quan trọng là cấu trúc liên kết NUMA, cho biết các "nút" đó được kết nối như thế nào.

Tôi đã kiểm tra một vài hệ thống bao gồm hệ thống 8 ổ cắm (CPU 10 lõi) bao gồm 4 lưỡi 2 ổ cắm được kết nối với nhau (Hitachi Compute Node 2000). Ngoài ra, ở đây số lượng nút NUMA bằng với số lượng ổ cắm CPU (8). Điều này phụ thuộc vào kiến ​​trúc CPU, chủ yếu là thiết kế bus bộ nhớ của nó.

Toàn bộ NUMA (truy cập bộ nhớ không đồng nhất) xác định cách mỗi CPU logic có thể truy cập từng phần của bộ nhớ. Khi bạn có 2 hệ thống ổ cắm, mỗi CPU (ổ cắm) có bộ nhớ riêng, nó có thể truy cập trực tiếp. Nhưng nó cũng phải có khả năng truy cập bộ nhớ trong ổ cắm khác - và điều này tất nhiên cần nhiều chu kỳ CPU hơn là truy cập bộ nhớ cục bộ. Các nút NUMA chỉ định phần nào của bộ nhớ hệ thống là cục bộ của CPU. Bạn có thể có nhiều lớp cấu trúc liên kết hơn, ví dụ trong trường hợp hệ thống HP Superdome (sử dụng CPU Intel Itanium2), bạn có bộ nhớ ổ cắm CPU cục bộ, sau đó bộ nhớ trên các ổ cắm khác nhau trong cùng một ô và sau đó là bộ nhớ trong các ô khác (có bộ nhớ độ trễ cao nhất).

Bạn có thể định cấu hình NUMA trong hệ thống của mình để hoạt động như để mang lại hiệu suất tốt nhất có thể cho khối lượng công việc của bạn. Ví dụ, bạn có thể cho phép tất cả các CPU truy cập vào tất cả bộ nhớ hoặc chỉ truy cập bộ nhớ cục bộ, sau đó thay đổi cách bộ lập lịch linux sẽ phân phối các quy trình giữa các CPU logic có sẵn. Nếu bạn có nhiều quy trình không cần nhiều bộ nhớ, chỉ sử dụng bộ nhớ cục bộ có thể có lợi, nhưng nếu bạn có các quy trình lớn (cơ sở dữ liệu Oracle với bộ nhớ dùng chung), sử dụng tất cả bộ nhớ trong tất cả các cpus có thể tốt hơn.

Bạn có thể sử dụng các lệnh như numastathoặc numactl --hardwaređể kiểm tra trạng thái NUMA trên hệ thống của mình. Dưới đây là thông tin từ máy 8 ổ cắm đó:

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

Ở đó bạn có thể thấy lượng bộ nhớ hiện diện trong mỗi nút NUMA (ổ cắm CPU) và số lượng bộ nhớ được sử dụng và miễn phí.

Phần cuối cùng hiển thị cấu trúc liên kết NUMA - nó hiển thị "khoảng cách" giữa các nút riêng lẻ về độ trễ truy cập bộ nhớ (các số chỉ là tương đối, chúng không biểu thị thời gian tính bằng ms hoặc bất cứ thứ gì). Ở đây bạn có thể thấy độ trễ của bộ nhớ cục bộ (nút 0 truy cập bộ nhớ trong 0, nút 1 trong 1, ...) là 10 trong khi độ trễ từ xa (nút truy cập bộ nhớ trên nút khác) là 21. Mặc dù hệ thống này bao gồm 4 cá nhân lưỡi cắt, độ trễ là như nhau cho các ổ cắm khác nhau trên cùng một lưỡi hoặc lưỡi khác.

Tài liệu thú vị về NUMA cũng có tại cổng thông tin RedHat .


4

Không. Số lượng các nút NUMA không phải lúc nào cũng bằng số lượng ổ cắm. Ví dụ: AMD Threadripper 1950X có 1 ổ cắm và 2 nút NUMA trong khi hệ thống Intel Xeon E5310 kép có thể hiển thị 2 ổ cắm và 1 nút NUMA.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.