การเปิดใช้งาน NUMA สำหรับ Intel Core i7


22

ในเคอร์เนล Linux เอกสารสำหรับCONFIG_NUMAsays:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

ฉันมีโปรเซสเซอร์ Intel Core i7 แต่ AFAICT มันมีเพียงหนึ่งโหนด NUMA:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

ดังนั้นจุดประสงค์ของการมีCONFIG_NUMA=yคืออะไรเมื่อ i7 มีเพียง NUMA โหนดเดียว?

คำตอบ:


13

ฉันคิดว่าภาพนี้อธิบายได้มากพอ:

                  ป้อนคำอธิบายรูปภาพที่นี่

  • ซ็อกเก็ตหรือโหนด numaเป็นชุดของแกนที่มีการเข้าถึงหน่วยความจำภายใน แต่ละซ็อกเก็ตมี 1 คอร์หรือมากกว่า โปรดทราบว่าสิ่งนี้ไม่จำเป็นต้องอ้างถึงซ็อกเก็ตแบบฟิสิคัล แต่เป็นสถาปัตยกรรมหน่วยความจำของเครื่องซึ่งจะขึ้นอยู่กับผู้ขายชิปของคุณ

  • หน่วยประมวลผลกลาง (cpu core, หน่วยประมวลผลตรรกะ) หมายถึงหน่วยประมวลผลเดียวที่สามารถทำการคำนวณได้

ดังนั้นข้างต้นบ่งชี้ว่าคุณจะต้องใช้โปรเซสเซอร์หลายตัวในเครื่องเพื่อใช้ประโยชน์จากสถาปัตยกรรม NUMA

คุณสามารถรวบรวมการสนับสนุน NUMA ในเคอร์เนลและรันบนเครื่องประมวลผลเดียว มันคล้ายกับการรองรับ SMP มันรวบรวมในเช่นกัน แต่เมื่อเคอร์เนลตรวจพบว่ามีหน่วยประมวลผลเดียวในระบบจะไม่ใช้มัน (ปิดการใช้งานมัน) การถือครองเช่นเดียวกันสำหรับ NUMA คุณสามารถตรวจสอบdmesgบัฟเฟอร์ของเคอร์เนลหรือ/var/log/dmesgไฟล์สำหรับข้อความที่เกี่ยวข้อง:

NUMA - โปรเซสเซอร์เดียว (หรือปิดใช้งาน NUMA) X โปรเซสเซอร์หลายตัว:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - โปรเซสเซอร์เดี่ยว X หลายโปรเซสเซอร์:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

อ้างอิง


2
@slm - สิ่งที่คุณพูดมีเหตุผล แต่ทำไมเอกสารเคอร์เนล (อ้างถึงในคำถามของฉัน) บอกว่าฉันควรเปิดใช้CONFIG_NUMAงานcore i7หรือไม่
user1968963

1
เนื่องจาก Haswell ไม่เป็นความจริงอีกต่อไปว่า NUMA จะไม่ใช้งานสำหรับเครื่อง 'ตัวประมวลผลเดียว' (หมายถึงซ็อกเก็ตเดี่ยว) ผลิตภัณฑ์ Haswell บางตัวมีคุณสมบัติที่ Intel ใช้ในโหมด 'Cluster on Die' โปรเซสเซอร์ซ็อกเก็ตเดี่ยวมีตัวควบคุมหน่วยความจำหลายตัวที่รวมเข้าด้วยกันดังนั้นจึงมีหลายเส้นทางไปยังหน่วยความจำซึ่งด้วยคุณสมบัตินี้อาจถือว่าเป็นภูมิภาค NUMA ที่แตกต่างกันทั้งหมดซึ่งรวมอยู่ในซ็อกเก็ตเดียว
Paul Caheny

16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

อันดับแรกโปรดทราบว่าIntel Core i7เป็นเพียงการกำหนดทางการตลาดและวลีIntel Core i7 (หรือใหม่กว่า)นั้นคลุมเครือมาก ดังนั้นมันหมายความว่าอย่างไร

เคอร์เนล Linux Kconfigช่วยแก้ไขข้อความที่กล่าวถึงIntel Core 7iจากนั้นแก้ไขเป็นIntel Core i7เสร็จสิ้นในเดือนพฤศจิกายนปี 2008 บันทึกการยืนยันใช้:

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

สามารถอ้างถึง Intel Core i7 CPU ที่วางจำหน่ายหรือประกาศตามสเปคได้เท่านั้น นั่นคือโปรเซสเซอร์Bloomfield ที่ใช้Nehalem microarchitectureซึ่งย้ายตัวควบคุมหน่วยความจำจาก Northbridge ไปยัง CPU (ซึ่ง AMD ได้ทำในปี 2003 กับ Opteron / AMD64) และแนะนำQuickPath Interconnect / QPI (ซึ่งเป็นจี้ของ HyperTransport ของ AMD) สำหรับ CPU / CPU และ CPU / IOH (IO hub, ex-Northbridge) เชื่อมต่อโครงข่าย

CPU Bloomdale i7 เป็นรายการแรกในรูปแบบการตั้งชื่อCore i {3,5,7}ใหม่ ดังนั้นเมื่อข้อความ Linux doc นั้นถูกเขียนขึ้นi7ไม่ได้อ้างถึง Core i7 โดยเฉพาะเมื่อเทียบกับ i5 (เป็นครั้งแรกใน 09/2009) หรือ i3 (เป็นครั้งแรกใน 01/2010) แต่ในทุกโอกาสที่ Nehalem microarchitecture ใหม่ที่มี ตัวควบคุมหน่วยความจำในตัวและ QPI

มีข่าวประชาสัมพันธ์ของ Intel ตั้งแต่วันที่ 11/2551 ใน i7 ( Intel เปิดตัวโปรเซสเซอร์ที่เร็วที่สุดในโลก ) ซึ่งระบุว่าโปรเซสเซอร์ Core i7 มากกว่าแบนด์วิดท์หน่วยความจำของแพลตฟอร์ม Intel "Extreme" ก่อนหน้านี้ถึงสองเท่าแต่ไม่ได้พูดถึง NUMA เลย .

เหตุผลคือฉันคิดว่า NUMA ไม่สำคัญสำหรับพีซีแบบเดสก์ท็อป

NUMA สำคัญสำหรับเซิร์ฟเวอร์ราคาแพงที่มีซ็อกเก็ต CPU หลายตัว (ไม่ใช่แค่หลายคอร์ในซ็อกเก็ตเดียว) ที่มีช่องทางเข้าถึงหน่วยความจำฟิสิคัลเฉพาะ (ไม่ใช่แค่คอนโทรลเลอร์หน่วยความจำเพียงตัวเดียว) ดังนั้นซีพียูแต่ละตัวจะมีหน่วยความจำเฉพาะ กว่าหน่วยความจำของ CPU อื่น ๆ (คิดว่าซ็อกเก็ต 8 ซ็อก 64 คอร์ RAM 256 GB) NUMA หมายความว่า CPU สามารถเข้าถึงหน่วยความจำระยะไกล (หน่วยความจำภายในของ CPU อื่น) นอกเหนือจากหน่วยความจำภายในแม้ว่าจะมีราคาสูงกว่า NUMA คือการสังเคราะห์สถาปัตยกรรมหน่วยความจำที่ใช้ร่วมกันเช่น SMP ซึ่งหน่วยความจำทั้งหมดสามารถใช้ได้กับทุกคอร์และสถาปัตยกรรมหน่วยความจำแบบกระจายเช่น MPP (การประมวลผลแบบขนานจำนวนมาก) ซึ่งทำให้แต่ละโหนดเป็นบล็อกเฉพาะของหน่วยความจำ เป็น MPP แต่ดูเหมือนว่า SMP จะเป็นแอปพลิเคชัน

เมนบอร์ดเดสก์ท็อปไม่มีซ็อกเก็ตคู่และซีพียูเดสก์ท็อปของ Intel รวมถึงรุ่น i7 สุดขีดขาดลิงก์ QPI เพิ่มเติมสำหรับการกำหนดค่าซ็อกเก็ตคู่

ตรวจสอบบทความWikipedia QPIเพื่อดูว่า QPI เกี่ยวข้องกับ NUMA อย่างไร:

ในรูปแบบที่ง่ายที่สุดบนมาเธอร์บอร์ดโปรเซสเซอร์เดียวมีการใช้ QPI เดี่ยวเพื่อเชื่อมต่อโปรเซสเซอร์กับ IO Hub (เช่นเพื่อเชื่อมต่อ Intel Core i7 กับ X58) ในอินสแตนซ์ที่ซับซ้อนมากขึ้นของสถาปัตยกรรมแยกคู่ลิงค์ QPI เชื่อมต่อโปรเซสเซอร์หนึ่งตัวหรือมากกว่าและหนึ่งหรือมากกว่าหนึ่งฮับ IO หรือฮับสายงานการผลิตในเครือข่ายบนแผงวงจรหลักทำให้ส่วนประกอบทั้งหมดสามารถเข้าถึงส่วนประกอบอื่น ๆ ผ่านเครือข่าย เช่นเดียวกับ HyperTransport QuickPath Architecture ถือว่าตัวประมวลผลจะมีตัวควบคุมหน่วยความจำแบบรวมและเปิดใช้งานสถาปัตยกรรมแบบ non-uniform access memory (NUMA)

[ ... ]

แม้ว่าโปรเซสเซอร์ Core i7 ระดับไฮเอนด์บางรุ่นจะเปิดเผย QPI แต่ Nehalem เดสก์ท็อปและโปรเซสเซอร์มือถืออื่น ๆ มีไว้สำหรับบอร์ดซ็อกเก็ตเดี่ยว (เช่น LGA 1156 Core i3, Core i5 และโปรเซสเซอร์ Core i7 อื่น ๆ จาก Lynnfield / Clarksfield และตระกูลสืบทอด) อย่าเปิดเผย QPI จากภายนอกเพราะโปรเซสเซอร์เหล่านี้ไม่ได้มีวัตถุประสงค์เพื่อมีส่วนร่วมในระบบมัลติซ็อกเก็ต อย่างไรก็ตามมีการใช้ QPI ภายในชิปเหล่านี้ […]

วิธีที่ Intel Nehalem CPU บนบอร์ดเซิร์ฟเวอร์หลายซ็อกเก็ตทำให้การเข้าถึงหน่วยความจำนอกพื้นที่ผ่าน QPI นอกจากนี้ในบทความเกี่ยวกับ NUMA :

Intel ประกาศความเข้ากันได้ NUMA สำหรับเซิร์ฟเวอร์ x86 และ Itanium ในปลายปี 2550 ด้วยซีพียู Nehalem และ Tukwila ตระกูลซีพียูทั้งสองแห่งใช้ชิปเซ็ตทั่วไปร่วมกัน การเชื่อมต่อโครงข่ายเรียกว่า Intel Quick Path Interconnect (QPI) AMD ดำเนินการ NUMA พร้อมกับโปรเซสเซอร์ Opteron (2003) โดยใช้ HyperTransport

ตรวจสอบรายงานนี้ตั้งแต่วันที่ 11/2008เพื่อดูว่า Intel ปิดใช้งานลิงก์ QPI หนึ่งในสองรายการใน i7 จึงปิดการใช้งานการกำหนดค่าซ็อกเก็ตสองซ็อกเก็ตโดยใช้ NUMA

การติดตั้งใช้งานเดสก์ท็อประดับสูงครั้งแรกของ Nehalem คือชื่อรหัส Bloomfield และโดยพื้นฐานแล้วจะเป็นซิลิกอนเดียวกันที่ควรเข้าไปในเซิร์ฟเวอร์สองซ็อกเก็ตในที่สุด เป็นผลให้ชิป Bloomfield มาพร้อมกับลิงก์ QPI สองช่องบนตัวเครื่องตามที่ระบุไว้ด้านบน อย่างไรก็ตามลิงค์ QPI ที่สองไม่ได้ใช้งาน ในเซิร์ฟเวอร์ 2P ที่ยึดตามสถาปัตยกรรมนี้การเชื่อมต่อที่สองจะเชื่อมโยงสองซ็อกเก็ตและเหนือกว่านั้น CPU จะแชร์ข้อความแคชการเชื่อมโยงกัน (โดยใช้โปรโตคอลใหม่) และข้อมูล (เนื่องจากระบบย่อยหน่วยความจำจะเป็น NUMA) - อื่น ๆ ไปที่ Opteron

ดังนั้นฉันจึงหลงทางไปจากคำถามของคุณเกี่ยวกับผลการวิจัยของ Google ... คุณกำลังถามว่าทำไมเอกสาร Linux เริ่มแนะนำให้เปิดใช้ในปลายปี 2008 หรือไม่ ไม่แน่ใจว่าคำถามนี้มีคำตอบที่ถูกต้อง ... เราต้องถามผู้เขียนเอกสาร การเปิด NUMA บนไม่เป็นประโยชน์ต่อผู้ใช้ CPU บนเดสก์ท็อป แต่ก็ไม่ได้ทำร้ายพวกเขาอย่างมีนัยสำคัญในขณะที่ช่วยเหลือผู้ใช้หลายซ็อกเก็ตดังนั้นทำไมไม่ นี่อาจเป็นเหตุผล พบว่าสะท้อนให้เห็นในการสนทนาเกี่ยวกับการปิดใช้งาน NUMA บน Arch Linux tracker ( FS # 31187 - [linux] - ปิดการใช้งาน NUMA จากไฟล์ config )

ผู้เขียนเอกสารอาจคิดถึงศักยภาพของ NUMA ของสถาปัตยกรรม Nehalem ซึ่งเมื่อมีการเขียนเอกสารโปรเซสเซอร์ Core i7 ที่ 11/2008 (920, 940, 965) เป็นตัวแทนเพียงคนเดียว ชิป Nehalem แรกที่ NUMA จะได้ทำจริงๆความรู้สึกที่น่าจะเป็นไตรมาสที่ 1/2009 โปรเซสเซอร์ Xeon มีการเชื่อมโยง QPI คู่เช่นXeon E5520


2

ฉันคิดว่าถ้าคุณใช้--showสวิตช์มันอาจจะสมเหตุสมผลมากกว่า:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

ดังนั้นคุณสามารถควบคุมการใช้งานของ physcpubind เช่นนี้:

$ numactl --physcpubind=+0-2 myapp

สิ่งนี้จะ จำกัด แอปพลิเคชันmyappให้กับ 2 คอร์ CPU แรก ระบบของฉันคือ i5 ที่มี 4 คอร์

อ้างอิง


2

ฉันค้นคว้าสิ่งเดียวกันสำหรับพีซีตั้งโต๊ะของฉันในขณะที่สร้างเคอร์เนลด้วยตัวเอง ฉันตัดสินใจปิดใช้งาน NUMA หลังจากการวิจัยมาก CPU ของฉันเป็น Core i7 3820 ซึ่งมี 8 โปรเซสเซอร์พร้อม HT หน้านี้ช่วยในการตัดสินใจของฉัน

ปิดใช้งาน NUMA จากไฟล์กำหนดค่า

โดยสรุป NUMA นั้นคุ้มค่าถ้าคุณมีซ็อกเก็ต CPU มากกว่า 1 ซ็อกเก็ต (โดยไม่คำนึงถึงคอร์) มีพลังการประมวลผลที่น้อยมากใน 1 CPU Socket แม้จะมีหลายคอร์ แต่ก็แทบจะไม่สังเกตเห็นได้ชัดเจนว่าการกระจายส่วนใหญ่จะเปิดใช้งานเนื่องจากจะให้ประโยชน์มากกับเซิร์ฟเวอร์และเครื่องที่มีซ็อกเก็ตมากกว่า 1 ตัว


1

ในพีซีที่มี CPU มากที่สุดหนึ่งตัว NUMA นั้นไร้ประโยชน์โดยสิ้นเชิง รู้สึกฟรีปิดการใช้งานในเคอร์เนลของคุณเอง

คุณสามารถควบคุมพันธะ CPU โดยtaskset (1)

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