การวิจัยทางเทคนิคล่าสุดได้จุดประกายการถกเถียงอย่างร้อนแรงในชุมชนนักพัฒนา โดยท้าทายสมมติฐานพื้นฐานอย่างหนึ่งของคอมพิวเตอร์ที่ว่าการเข้าถึงหน่วยความจำจะเร็วกว่าการเข้าถึงดิสก์เสมอ การวิจัยนี้แสดงให้เห็นสถานการณ์ที่ solid-state drives ( SSDs ) สมัยใหม่สามารถทำงานได้ดีกว่าการทำงานของหน่วยความจำแบบดั้งเดิม ซึ่งเป็นการพลิกผันความรู้ทั่วไปที่มีมา
![]() |
---|
การสำรวจพลวัตที่เปลี่ยนแปลงไปของการเข้าถึงหน่วยความจำเทียบกับการเข้าถึงดิสก์ในคอมพิวเตอร์สมัยใหม่ |
แบนด์วิดท์ PCIe ปัจจุบันเทียบเท่าแบนด์วิดท์หน่วยความจำ
การเปิดเผยที่น่าตกใจที่สุดมุ่งเน้นไปที่วิธีที่สถาปัตยกรรมฮาร์ดแวร์สมัยใหม่ได้พัฒนาขึ้น ระบบระดับไฮเอนด์ในปัจจุบันมีการเชื่อมต่อ PCIe 5.0 ที่สามารถส่งแบนด์วิดท์ได้สูงถึง 64 GB/s ในสล็อต x16 เดียว เมื่อรวมกันหลายเลนแล้ว แบนด์วิดท์ PCIe รวมสามารถเกินแบนด์วิดท์หน่วยความจำ DDR5 แบบดั้งเดิมในหลายการกำหนดค่า การเปลี่ยนแปลงนี้แสดงถึงการเปลี่ยนแปลงพื้นฐานในภูมิทัศน์คอมพิวเตอร์ที่นักพัฒนาหลายคนยังไม่เข้าใจอย่างเต็มที่
โปรเซสเซอร์ระดับเซิร์ฟเวอร์ขยายแนวโน้มนี้อย่างมาก โปรเซสเซอร์ AMD EPYC รุ่นที่ห้ามีเลน PCIe 5.0 ถึง 128 เลน ส่งแบนด์วิดท์ทางทฤษฎีเกิน 1TB/s เมื่อเทียบกับประมาณ 600GB/s จากระบบหน่วยความจำ DDR5 12 ช่องสัญญาณ แม้ว่าตัวเลขเหล่านี้จะแสดงค่าสูงสุดทางทฤษฎี แต่ก็แสดงให้เห็นว่าอินเทอร์เฟซการจัดเก็บข้อมูลได้ตามทันบัสหน่วยความจำแล้ว
PCIe: Peripheral Component Interconnect Express มาตรฐานการเชื่อมต่อความเร็วสูงที่ใช้โดย SSDs และการ์ดจอสมัยใหม่
ผลการเปรียบเทียบประสิทธิภาพ:
- Basic mmap() พื้นฐาน: ประมาณ 610 MB/s
- io_uring ที่ปรับปรุงแล้ว: ใกล้เคียงขีดจำกัดทางทฤษฎีของ SSD
- แบนด์วิดท์หน่วยความจำ ( DDR5 ): ประมาณ 64 GB/s ต่อช่องสัญญาณ (โดยทั่วไปจะมี 2 ช่องสัญญาณ)
- PCIe 5.0 x16 : แบนด์วิดท์ทางทฤษฎี 64 GB/s
- PCIe รวมของเซิร์ฟเวอร์: มากกว่า 1TB/s (128 เลน PCIe 5.0 บน EPYC )
- หน่วยความจำเซิร์ฟเวอร์: ประมาณ 600 GB/s (12 ช่องสัญญาณ DDR5 )
รูปแบบการเข้าถึงหน่วยความจำสำคัญกว่าความเร็วดิบ
การวิจัยเผยให้เห็นว่าประสิทธิภาพหน่วยความจำไม่ได้เกี่ยวกับแบนด์วิดท์เพียงอย่างเดียว แต่ขึ้นอยู่กับรูปแบบการเข้าถึงเป็นอย่างมาก การเข้าถึงหน่วยความจำแบบสุ่ม ซึ่งเลียนแบบการทำงานของฐานข้อมูลในโลกแห่งความเป็นจริงและการไล่ตาม pointer สามารถทำให้ประสิทธิภาพหน่วยความจำช้าลงอย่างมากเนื่องจาก cache miss ในขณะเดียวกัน SSDs สมัยใหม่ด้วยคอนโทรลเลอร์ที่ซับซ้อนและกลไกการแคชสามารถรักษาประสิทธิภาพที่สม่ำเสมอมากขึ้นในรูปแบบการเข้าถึงที่แตกต่างกัน
การอภิปรายในชุมชนเน้นย้ำถึงการมองข้ามที่สำคัญในการทดสอบประสิทธิภาพแบบดั้งเดิม การทดสอบส่วนใหญ่มุ่งเน้นไปที่รูปแบบการเข้าถึงแบบลำดับที่เอื้อประโยชน์ต่อหน่วยความจำ ในขณะที่แอปพลิเคชันจริงมักแสดงรูปแบบการเข้าถึงแบบสุ่มที่ SSDs สามารถเป็นเลิศได้ ช่องว่างระหว่างประสิทธิภาพหน่วยความจำในกรณีที่ดีที่สุดและแย่ที่สุดนั้นใหญ่กว่าที่นักพัฒนาหลายคนตระหนัก
Cache miss: เมื่อโปรเซสเซอร์มองหาข้อมูลในหน่วยความจำแคชที่เร็วแต่ไม่พบ จึงถูกบังคับให้เดินทางที่ช้ากว่าไปยังหน่วยความจำหลัก
![]() |
---|
เปรียบเทียบประสิทธิภาพ throughput ระหว่างรูปแบบการเข้าถึงแบบ sequential และ random ในหน่วยความจำและ SSD |
เทคนิค I/O ขั้นสูงปลดล็อกศักยภาพ SSD
การสืบสวนแสดงให้เห็นว่าเทคนิค I/O สมัยใหม่เช่น io_uring สามารถปรับปรุงประสิทธิภาพ SSD อย่างมากเมื่อเทียบกับการแมปหน่วยความจำแบบดั้งเดิม ( mmap ) ในขณะที่การทำงาน mmap พื้นฐานบรรลุประมาณ 610MB/s ในการทดสอบ การใช้งาน io_uring ที่ปรับให้เหมาะสมสามารถบรรลุความเร็วที่เข้าใกล้ขีดจำกัดทางทฤษฎีของฮาร์ดแวร์การจัดเก็บข้อมูล
อย่างไรก็ตาม ชุมชนได้ตั้งคำถามสำคัญเกี่ยวกับวิธีการทดสอบ นักพัฒนาหลายคนชี้ให้เห็นการปรับให้เหมาะสมที่ขาดหายไปเช่น huge pages, แฟล็ก MAP_POPULATE และการดึงข้อมูลล่วงหน้าของหน่วยความจำที่เหมาะสมซึ่งสามารถปรับปรุงแนวทางที่ใช้หน่วยความจำได้อย่างมีนัยสำคัญ เทคนิคเหล่านี้สามารถลดค่าใช้จ่ายของการค้นหาตารางหน้าและปรับปรุงประสิทธิภาพแคช
MAP_HUGETLB ไม่สามารถใช้สำหรับการ mmap ไฟล์บนดิสก์ได้ สามารถใช้ได้เฉพาะกับ MAP_ANONYMOUS กับ memfd หรือกับไฟล์บนระบบไฟล์เทียม hugetlbfs เท่านั้น
io_uring: อินเทอร์เฟซ Linux สมัยใหม่สำหรับการทำงาน I/O แบบอะซิงโครนัสที่ลดค่าใช้จ่ายของ system call Huge pages: หน้าหน่วยความจำขนาดใหญ่ที่ลดจำนวนรายการตารางหน้าที่จำเป็น ปรับปรุงประสิทธิภาพสำหรับชุดข้อมูลขนาดใหญ่
การปรับแต่งทางเทคนิคหลักที่กล่าวถึง:
- แฟล็ก MAP_HUGETLB และ MAP_HUGE_1GB สำหรับการรองรับ huge page
- MAP_POPULATE สำหรับการดึงข้อมูลล่วงหน้าในหน่วยความจำ
- io_uring สำหรับการดำเนินการ I/O แบบอะซิงโครนัส
- คำสั่ง SIMD vector (128-bit และ 256-bit)
- Direct Data I/O ( DDIO ) สำหรับการถ่ายโอนข้อมูลตรงสู่แคช
- การคลี่ลูปด้วยตนเองเพื่อการปรับแต่งคอมไพเลอร์
![]() |
---|
การตรวจสอบประสิทธิภาพระบบและการปรับแต่งในแอปพลิเคชัน SSD โดยใช้เทคนิค I/O ขั้นสูง |
ผลกระทบในโลกแห่งความเป็นจริงสำหรับการออกแบบแอปพลิเคชัน
การวิจัยนี้แนะนำว่านักพัฒนาควรพิจารณาสมมติฐานของตนเกี่ยวกับการแลกเปลี่ยนระหว่างการจัดเก็บข้อมูลกับหน่วยความจำใหม่ สำหรับแอปพลิเคชันที่จัดการกับชุดข้อมูลขนาดใหญ่ที่ไม่พอดีในหน่วยความจำทั้งหมด การเข้าถึง SSD ที่ปรับให้เหมาะสมอย่างระมัดระวังอาจทำงานได้ดีกว่าแนวทางดั้งเดิมที่อาศัยหน่วยความจำเสมือนและการสลับเป็นหลัก
การค้นพบนี้มีความเกี่ยวข้องโดยเฉพาะสำหรับระบบฐานข้อมูล ภาระงานการวิเคราะห์ และแอปพลิเคชันใดๆ ที่ประมวลผลข้อมูลมากกว่า RAM ที่มีอยู่ แทนที่จะสมมติว่าการเข้าถึงหน่วยความจำจะดีกว่าเสมอ นักพัฒนาอาจได้รับประโยชน์จากแนวทางแบบผสมผสานที่ใช้ประโยชน์จากทั้งการจัดเก็บข้อมูลที่เร็วและกลยุทธ์การแคชที่ชาญฉลาด
การถกเถียงในชุมชนเทคนิคสะท้อนคำถามที่กว้างขึ้นเกี่ยวกับวิธีที่วิวัฒนาการของฮาร์ดแวร์ควรมีอิทธิพลต่อการออกแบบซอฟต์แวร์ เมื่อเทคโนโลยีการจัดเก็บข้อมูลยังคงก้าวหน้าและต้นทุนหน่วยความจำยังคงมีนัยสำคัญ ลักษณะประสิทธิภาพเหล่านี้จะกลายเป็นสิ่งสำคัญมากขึ้นสำหรับสถาปนิกระบบและนักพัฒนาแอปพลิเคชันที่จะต้องเข้าใจ