จำนวนโหนด 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-socket (10-core CPUs) ซึ่งประกอบด้วย 4 เบลดเบลด 2 ซ็อกเก็ตที่เชื่อมต่อกัน (Hitachi Compute Node 2000) นอกจากนี้ที่นี่มีจำนวนโหนด NUMA เท่ากับจำนวนซ็อกเก็ต CPU (8) ขึ้นอยู่กับสถาปัตยกรรมของ CPU ส่วนใหญ่จะเป็นการออกแบบบัสหน่วยความจำ

NUMA ทั้งหมด (การเข้าถึงหน่วยความจำที่ไม่เหมือนกัน) กำหนดวิธีการที่แต่ละหน่วยความจำของ CPU สามารถเข้าถึงหน่วยความจำแต่ละส่วนได้ เมื่อคุณมีระบบซ็อกเก็ต 2 ตัว CPU แต่ละตัว (ซ็อกเก็ต) จะมีหน่วยความจำของตัวเองซึ่งสามารถเข้าถึงได้โดยตรง แต่จะต้องสามารถเข้าถึงหน่วยความจำในซ็อกเก็ตอื่น - และแน่นอนว่าต้องใช้รอบ CPU มากกว่าการเข้าถึงหน่วยความจำภายใน NUMA nodes ระบุว่าส่วนใดของหน่วยความจำระบบซึ่งอยู่ในระบบของ CPU ตัวใด คุณสามารถมีโทโพโลยีเลเยอร์มากขึ้นตัวอย่างเช่นในกรณีของระบบ HP Superdome (ซึ่งใช้ Intel Itanium2 ซีพียู) คุณมีหน่วยความจำซ็อกเก็ตซีพียูท้องถิ่นจากนั้นหน่วยความจำในซ็อกเก็ตที่แตกต่างกันภายในเซลล์เดียวกันและหน่วยความจำในเซลล์อื่น เวลาแฝงสูงสุด)

คุณสามารถกำหนดค่า NUMA ในระบบของคุณเพื่อให้ทำงานเช่นเพื่อให้ประสิทธิภาพที่ดีที่สุดสำหรับเวิร์กโหลดของคุณ ตัวอย่างเช่นคุณสามารถอนุญาตให้ซีพียูทั้งหมดเข้าถึงหน่วยความจำทั้งหมดหรือเข้าถึงเฉพาะหน่วยความจำภายในจากนั้นเปลี่ยนวิธีที่ตัวกำหนดเวลาลินุกซ์จะกระจายกระบวนการระหว่างซีพียูโลจิคัลที่มีอยู่ หากคุณมีกระบวนการจำนวนมากที่ต้องการหน่วยความจำไม่มากการใช้หน่วยความจำภายในเครื่องเท่านั้นอาจเป็นประโยชน์ แต่ถ้าคุณมีกระบวนการขนาดใหญ่ (ฐานข้อมูล Oracle พร้อมหน่วยความจำที่ใช้ร่วมกัน) การใช้หน่วยความจำทั้งหมดในซีพียูทั้งหมดอาจดีกว่า

คุณสามารถใช้คำสั่งเช่นnumastatหรือnumactl --hardwareเพื่อตรวจสอบสถานะ NUMA ในระบบของคุณ นี่คือข้อมูลจากเครื่อง 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

ที่นั่นคุณสามารถดูจำนวนหน่วยความจำที่มีอยู่ในแต่ละโหนด NUMA (ซ็อกเก็ต CPU) และจำนวนของหน่วยความจำที่ใช้และฟรี

ส่วนสุดท้ายแสดง NUMA ทอพอโลยี - มันแสดง "ระยะทาง" ระหว่างแต่ละโหนดในแง่ของเวลาแฝงการเข้าถึงหน่วยความจำ (ตัวเลขมีความสัมพันธ์เท่านั้นพวกเขาไม่ได้แสดงเวลาเป็นมิลลิวินาทีหรืออะไรก็ได้) ที่นี่คุณสามารถดูเวลาแฝงของหน่วยความจำภายใน (โหนด 0 เข้าถึงหน่วยความจำใน 0, โหนด 1 ใน 1, ... ) คือ 10 ในขณะที่เวลาแฝงระยะไกล (โหนดเข้าถึงหน่วยความจำบนโหนดอื่น) เป็น 21 แม้ว่าระบบนี้จะประกอบด้วย 4 ตัว ใบมีดเวลาแฝงจะเหมือนกันสำหรับซ็อกเก็ตที่แตกต่างกันบนใบมีดเดียวกันหรือใบมีดอื่น

เอกสารที่น่าสนใจเกี่ยวกับ NUMA ยังเป็นที่RedHat พอร์ทัล


3

ไม่จำนวนโหนด NUMA ไม่เท่ากับจำนวนซ็อกเก็ตเสมอไป ตัวอย่างเช่น AMD Threadripper 1950X มี 1 ซ็อกเก็ตและ 2 โหนด NUMA ในขณะที่ระบบ Dual Intel Xeon E5310 สามารถแสดง 2 ซ็อกเก็ตและ 1 NUMA โหนด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.