ทำความเข้าใจสถาปัตยกรรม NUMA

Understanding Numa Architecture



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

การออกแบบบัส I/O แสดงถึงหลอดเลือดแดงของคอมพิวเตอร์และกำหนดอย่างมีนัยสำคัญว่าสามารถแลกเปลี่ยนข้อมูลระหว่างส่วนประกอบเดียวที่ระบุไว้ข้างต้นได้มากเพียงใดและรวดเร็วเพียงใด หมวดหมู่อันดับต้น ๆ นำโดยส่วนประกอบที่ใช้ในด้านคอมพิวเตอร์ประสิทธิภาพสูง (HPC) ในช่วงกลางปี ​​2020 ในบรรดาตัวแทนร่วมสมัยของ HPC ได้แก่ Nvidia Tesla และ DGX, Radeon Instinct และผลิตภัณฑ์เร่งความเร็วที่ใช้ Intel Xeon Phi GPU (ดู [1,2] สำหรับการเปรียบเทียบผลิตภัณฑ์)







ทำความเข้าใจ NUMA

Non-Uniform Memory Access (NUMA) อธิบายสถาปัตยกรรมหน่วยความจำที่ใช้ร่วมกันที่ใช้ในระบบมัลติโปรเซสเซอร์ร่วมสมัย NUMA เป็นระบบคอมพิวเตอร์ที่ประกอบด้วยโหนดเดี่ยวหลายโหนดในลักษณะที่หน่วยความจำรวมถูกแชร์ระหว่างโหนดทั้งหมด: CPU แต่ละตัวถูกกำหนดหน่วยความจำภายในของตัวเองและสามารถเข้าถึงหน่วยความจำจาก CPU อื่นในระบบ [12,7]



NUMA เป็นระบบที่ชาญฉลาดซึ่งใช้สำหรับเชื่อมต่อหน่วยประมวลผลกลาง (CPU) หลายตัวกับหน่วยความจำคอมพิวเตอร์จำนวนเท่าใดก็ได้ที่มีอยู่ในคอมพิวเตอร์ โหนด NUMA เดียวเชื่อมต่อผ่านเครือข่ายที่ปรับขนาดได้ (บัส I/O) เพื่อให้ CPU สามารถเข้าถึงหน่วยความจำที่เกี่ยวข้องกับโหนด NUMA อื่นๆ ได้อย่างเป็นระบบ



หน่วยความจำภายในคือหน่วยความจำที่ CPU ใช้ในโหนด NUMA เฉพาะ หน่วยความจำต่างประเทศหรือระยะไกลคือหน่วยความจำที่ CPU ใช้จากโหนด NUMA อื่น คำว่าอัตราส่วน NUMA อธิบายอัตราส่วนของค่าใช้จ่ายในการเข้าถึงหน่วยความจำต่างประเทศกับค่าใช้จ่ายในการเข้าถึงหน่วยความจำภายใน ยิ่งอัตราส่วนมากเท่าใด ค่าใช้จ่ายก็จะยิ่งมากขึ้นเท่านั้น ดังนั้นจึงต้องใช้เวลาในการเข้าถึงหน่วยความจำนานขึ้น





อย่างไรก็ตาม จะใช้เวลานานกว่าเมื่อ CPU นั้นเข้าถึงหน่วยความจำในเครื่องของตัวเอง การเข้าถึงหน่วยความจำภายในเป็นข้อได้เปรียบที่สำคัญ เนื่องจากเป็นการรวมเวลาแฝงต่ำกับแบนด์วิดท์สูง ในทางตรงกันข้าม การเข้าถึงหน่วยความจำที่เป็นของ CPU อื่น ๆ มีเวลาแฝงที่สูงขึ้นและประสิทธิภาพแบนด์วิดท์ต่ำลง

มองย้อนกลับไป: วิวัฒนาการของมัลติโปรเซสเซอร์หน่วยความจำร่วม

Frank Dennemann [8] ระบุว่าสถาปัตยกรรมระบบสมัยใหม่ไม่อนุญาตให้ใช้ Uniform Memory Access (UMA) อย่างแท้จริง แม้ว่าระบบเหล่านี้ได้รับการออกแบบมาโดยเฉพาะสำหรับจุดประสงค์นั้นก็ตาม พูดง่ายๆ ก็คือ แนวคิดของการคำนวณแบบขนานคือการมีกลุ่มของโปรเซสเซอร์ที่ทำงานร่วมกันเพื่อคำนวณงานที่กำหนด ซึ่งจะทำให้การคำนวณตามลำดับแบบคลาสสิกเร็วขึ้น



ตามที่ Frank Dennemann อธิบาย [8] ในช่วงต้นทศวรรษ 1970 ความต้องการระบบที่สามารถให้บริการการดำเนินการของผู้ใช้พร้อมกันหลายรายการและการสร้างข้อมูลที่มากเกินไปได้กลายเป็นกระแสหลักด้วยการแนะนำระบบฐานข้อมูลเชิงสัมพันธ์ แม้จะมีอัตราประสิทธิภาพของตัวประมวลผลเดียวที่น่าประทับใจ แต่ระบบมัลติโปรเซสเซอร์ก็มีความพร้อมที่ดีกว่าในการจัดการเวิร์กโหลดนี้ เพื่อจัดหาระบบที่คุ้มค่า พื้นที่ที่อยู่หน่วยความจำที่ใช้ร่วมกันจึงกลายเป็นจุดสนใจของการวิจัย ในช่วงแรก ระบบที่ใช้สวิตช์แบบคานขวางได้รับการสนับสนุน อย่างไรก็ตาม ด้วยความซับซ้อนของการออกแบบนี้จึงถูกปรับขนาดพร้อมกับโปรเซสเซอร์ที่เพิ่มขึ้น ซึ่งทำให้ระบบที่ใช้บัสมีความน่าสนใจยิ่งขึ้น โปรเซสเซอร์ในระบบบัส [สามารถ] เข้าถึงพื้นที่หน่วยความจำทั้งหมดได้โดยการส่งคำขอบนบัส ซึ่งเป็นวิธีที่ประหยัดค่าใช้จ่ายมากในการใช้หน่วยความจำที่มีอยู่อย่างเหมาะสมที่สุด

อย่างไรก็ตาม ระบบคอมพิวเตอร์ที่ใช้บัสมักมีปัญหาคอขวด ซึ่งเป็นแบนด์วิดท์ในจำนวนที่จำกัดซึ่งนำไปสู่ปัญหาในการขยายขนาด ยิ่งเพิ่ม CPU ลงในระบบมาก แบนด์วิดท์ต่อโหนดก็จะยิ่งน้อยลง ยิ่งเพิ่ม CPU เข้าไปมาก บัสก็จะยิ่งยาวขึ้น และเวลาแฝงก็จะยิ่งสูงขึ้น

ซีพียูส่วนใหญ่ถูกสร้างขึ้นในระนาบสองมิติ ซีพียูยังต้องเพิ่มตัวควบคุมหน่วยความจำในตัว วิธีแก้ปัญหาง่ายๆ ในการมีบัสหน่วยความจำสี่ตัว (บน ล่าง ซ้าย ขวา) ไปยังแต่ละคอร์ของ CPU ช่วยให้แบนด์วิดท์ที่พร้อมใช้งานเต็มรูปแบบ แต่นั่นก็ยังดำเนินต่อไป ซีพียูหยุดนิ่งด้วยสี่คอร์เป็นเวลานาน การเพิ่มร่องรอยด้านบนและด้านล่างทำให้บัสตรงข้ามไปยัง CPU ที่ตรงข้ามกันในแนวทแยงได้ เนื่องจากชิปกลายเป็น 3D การวาง CPU แบบ 4 คอร์บนการ์ด จากนั้นเชื่อมต่อกับบัส เป็นขั้นตอนต่อไปที่สมเหตุสมผล

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

การปรับปรุงประสิทธิภาพของการเข้าถึงข้อมูลเป็นหนึ่งในเป้าหมายหลักของการออกแบบ CPU ร่วมสมัย คอร์ CPU แต่ละคอร์มีแคชระดับหนึ่งขนาดเล็ก (32 KB) และแคชระดับ 2 ที่ใหญ่กว่า (256 KB) คอร์ต่างๆ ในภายหลังจะแชร์แคชระดับ 3 ของหลาย MB ซึ่งมีขนาดเพิ่มขึ้นอย่างมากเมื่อเวลาผ่านไป

เพื่อหลีกเลี่ยงการขาดแคช — การขอข้อมูลที่ไม่ได้อยู่ในแคช — ต้องใช้เวลาวิจัยจำนวนมากในการค้นหาจำนวนแคช CPU ที่เหมาะสม โครงสร้างการแคช และอัลกอริธึมที่เกี่ยวข้อง ดู [8] สำหรับคำอธิบายโดยละเอียดเพิ่มเติมของโปรโตคอลสำหรับการแคชสอดแนม [4] และการเชื่อมโยงกันของแคช [3,5] รวมถึงแนวคิดการออกแบบเบื้องหลัง NUMA

การสนับสนุนซอฟต์แวร์สำหรับ NUMA

มีสองมาตรการเพิ่มประสิทธิภาพซอฟต์แวร์ที่อาจช่วยปรับปรุงประสิทธิภาพของระบบที่สนับสนุนสถาปัตยกรรม NUMA — ความสัมพันธ์ของโปรเซสเซอร์และการจัดวางข้อมูล ตามที่อธิบายไว้ใน [19] ความสัมพันธ์ของโปรเซสเซอร์ […] ช่วยให้สามารถผูกและยกเลิกการเชื่อมโยงของกระบวนการหรือเธรดกับ CPU ตัวเดียว หรือช่วงของ CPU เพื่อให้กระบวนการหรือเธรดทำงานบน CPU หรือ CPU ที่กำหนดเท่านั้น ซีพียูใด ๆ การจัดตำแหน่งข้อมูลระยะหมายถึงการปรับเปลี่ยนซอฟต์แวร์ซึ่งรหัสและข้อมูลจะถูกเก็บไว้ในหน่วยความจำให้ใกล้เคียงที่สุด

ระบบปฏิบัติการที่เกี่ยวข้องกับ UNIX และ UNIX ที่แตกต่างกันรองรับ NUMA ด้วยวิธีต่อไปนี้ (รายการด้านล่างนำมาจาก [14]):

  • Silicon Graphics IRIX รองรับสถาปัตยกรรม ccNUMA มากกว่า 1240 CPU พร้อมซีรี่ส์เซิร์ฟเวอร์ Origin
  • Microsoft Windows 7 และ Windows Server 2008 R2 เพิ่มการรองรับสถาปัตยกรรม NUMA มากกว่า 64 ลอจิคัลคอร์
  • เคอร์เนล Linux เวอร์ชัน 2.5 มีการรองรับ NUMA พื้นฐานอยู่แล้ว ซึ่งได้รับการปรับปรุงเพิ่มเติมในเคอร์เนลรุ่นต่อๆ ไป เวอร์ชัน 3.8 ของเคอร์เนล Linux นำรากฐาน NUMA ใหม่ที่อนุญาตให้มีการพัฒนานโยบาย NUMA ที่มีประสิทธิภาพมากขึ้นในเคอร์เนลรุ่นต่อมา [13] เคอร์เนลลินุกซ์เวอร์ชัน 3.13 ได้นำนโยบายมากมายที่มุ่งเป้าไปที่การวางกระบวนการไว้ใกล้หน่วยความจำ ร่วมกับการจัดการกรณีต่างๆ เช่น การมีเพจหน่วยความจำที่ใช้ร่วมกันระหว่างกระบวนการ หรือการใช้เพจขนาดใหญ่ที่โปร่งใส การตั้งค่าการควบคุมระบบใหม่ทำให้สามารถเปิดหรือปิดการปรับสมดุล NUMA ได้ เช่นเดียวกับการกำหนดค่าพารามิเตอร์การปรับสมดุลหน่วยความจำ NUMA ต่างๆ [15]
  • ทั้ง Oracle และ OpenSolaris โมเดลสถาปัตยกรรม NUMA พร้อมการแนะนำกลุ่มลอจิคัล
  • FreeBSD เพิ่มความสัมพันธ์ NUMA เริ่มต้นและการกำหนดค่านโยบายในเวอร์ชัน 11.0

ในหนังสือ Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai เสนอว่าการศึกษาสถาปัตยกรรม NUMA นั้นเน้นไปที่สภาพแวดล้อมการประมวลผลระดับไฮเอนด์เป็นหลัก และเสนอ NUMA-aware Radix Partitioning (NaRP) ซึ่งช่วยเพิ่มประสิทธิภาพการทำงาน ของแคชที่ใช้ร่วมกันในโหนด NUMA เพื่อเร่งความเร็วแอปพลิเคชันข่าวกรองธุรกิจ ด้วยเหตุนี้ NUMA จึงแสดงถึงจุดกึ่งกลางระหว่างระบบหน่วยความจำที่ใช้ร่วมกัน (SMP) กับโปรเซสเซอร์บางตัว [6]

NUMA และ Linux

ตามที่ระบุไว้ข้างต้น เคอร์เนล Linux รองรับ NUMA ตั้งแต่เวอร์ชัน 2.5 ทั้ง Debian GNU/Linux และ Ubuntu รองรับ NUMA สำหรับการเพิ่มประสิทธิภาพกระบวนการด้วยแพ็คเกจซอฟต์แวร์สองชุด numactl [16] และ numad [17] ด้วยความช่วยเหลือของคำสั่ง numactl คุณสามารถแสดงรายการสินค้าคงคลังของโหนด NUMA ที่พร้อมใช้งานในระบบของคุณ [18]:

# numactl --ฮาร์ดแวร์
มีอยู่:2โหนด(0-1)
โหนด0ซีพียู:0 1 2 3 4 5 6 7 16 17 18 19 ยี่สิบ ยี่สิบเอ็ด 22 2. 3
โหนด0ขนาด:8157MB
โหนด0ฟรี:88MB
โหนด1ซีพียู:8 9 10 สิบเอ็ด 12 13 14 สิบห้า 24 25 26 27 28 29 30 31
โหนด1ขนาด:8191MB
โหนด1ฟรี:5176MB
ระยะทางของโหนด:
โหนด0 1
0:10 ยี่สิบ
1:ยี่สิบ 10

NumaTop เป็นเครื่องมือที่มีประโยชน์ซึ่งพัฒนาโดย Intel สำหรับตรวจสอบพื้นที่หน่วยความจำรันไทม์และวิเคราะห์กระบวนการในระบบ NUMA [10,11] เครื่องมือนี้สามารถระบุปัญหาคอขวดด้านประสิทธิภาพที่เกี่ยวกับ NUMA ที่อาจเกิดขึ้น และด้วยเหตุนี้จึงช่วยปรับสมดุลการจัดสรรหน่วยความจำ/CPU ใหม่เพื่อเพิ่มศักยภาพของระบบ NUMA ให้ได้มากที่สุด ดู [9] สำหรับคำอธิบายโดยละเอียดเพิ่มเติม

สถานการณ์การใช้งาน

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

ระบบ NUMA ค่อนข้างน่าสนใจสำหรับแอปพลิเคชันฝั่งเซิร์ฟเวอร์ เช่น การทำเหมืองข้อมูลและระบบสนับสนุนการตัดสินใจ นอกจากนี้ การเขียนแอปพลิเคชันสำหรับการเล่นเกมและซอฟต์แวร์ประสิทธิภาพสูงจะง่ายขึ้นมากด้วยสถาปัตยกรรมนี้

บทสรุป

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

ลิงค์และข้อมูลอ้างอิง

  1. เปรียบเทียบ NVIDIA Tesla กับ Radeon Instinct https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. เปรียบเทียบ NVIDIA DGX-1 กับ Radeon Instinct https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. การเชื่อมโยงแคช, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. การสอดแนมรถโดยสาร วิกิพีเดีย https://th.wikipedia.org/wiki/Bus_snooping
  5. แคชโปรโตคอลเชื่อมโยงกันในระบบมัลติโปรเซสเซอร์, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. วิทยาการคอมพิวเตอร์และเทคโนโลยี – Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet และ Marco Cesati: การทำความเข้าใจสถาปัตยกรรม NUMA ในการทำความเข้าใจเคอร์เนล Linux รุ่นที่ 3 O'Reilly https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive ตอนที่ 1: จาก UMA ถึง NUMA https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: เครื่องมือตรวจสอบระบบ NUMA http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. นุมาทอป https://github.com/intel/numatop
  11. แพ็คเกจ numatop สำหรับ Debian GNU / Linux https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: การทำความเข้าใจการเข้าถึงหน่วยความจำ/สถาปัตยกรรมแบบไม่สม่ำเสมอ (NUMA) https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. ข่าวเคอร์เนลลินุกซ์สำหรับเคอร์เนล 3.8, https://kernelnewbies.org/Linux_3.8
  14. การเข้าถึงหน่วยความจำที่ไม่สม่ำเสมอ (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. เอกสารการจัดการหน่วยความจำ Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. แพ็คเกจ numactl สำหรับ Debian GNU/Linux https://packages.debian.org/sid/admin/numactl
  17. แพ็คเกจ numad สำหรับ Debian GNU/Linux https://packages.debian.org/buster/numad
  18. จะค้นหาได้อย่างไรว่าการกำหนดค่า NUMA เปิดใช้งานหรือปิดใช้งานอยู่?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. ความสัมพันธ์ของโปรเซสเซอร์, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

ขอบคุณ

ผู้เขียนขอขอบคุณ Gerold Rupprecht สำหรับการสนับสนุนในขณะที่เตรียมบทความนี้

เกี่ยวกับผู้เขียน

Plaxedes Nehanda เป็นคนที่มีทักษะหลากหลายและขับเคลื่อนตัวเองได้ ซึ่งสวมหมวกหลายใบ ในหมู่พวกเขา ได้แก่ นักวางแผนงาน ผู้ช่วยเสมือน ผู้ถอดเสียง และนักวิจัยตัวยง ซึ่งประจำอยู่ที่เมืองโจฮันเนสเบิร์ก ประเทศแอฟริกาใต้

Prince K. Nehanda เป็นวิศวกรเครื่องมือวัดและควบคุม (มาตรวิทยา) ที่ Paeflow Metering ในเมืองฮาราเร ประเทศซิมบับเว

Frank Hofmann ทำงานบนท้องถนน - โดยเฉพาะจากเบอร์ลิน (เยอรมนี), เจนีวา (สวิตเซอร์แลนด์) และ Cape Town (แอฟริกาใต้) - ในฐานะนักพัฒนา ผู้ฝึกสอน และผู้แต่งนิตยสารเช่น Linux-User และ Linux Magazine เขายังเป็นผู้เขียนร่วมของหนังสือการจัดการแพ็คเกจ Debian ( http://www.dpmb.org ).