Nova: ไดรเวอร์ Rust ใหม่สำหรับ GPU NVIDIA กำลังจะมาถึง Linux 6.15

โนวา รัสต์

เมื่อหนึ่งปีก่อน Red Hat ได้ประกาศสำหรับงานของพวกเขาในไดร์เวอร์โอเพ่นซอร์สใหม่สำหรับการจัดการ GPU NVIDIA บนระบบ Linuxใหม่"- ต่างจากรุ่นก่อนอย่าง Nouveau ซึ่ง Nova จะอาศัยการมอบหมายการเริ่มต้นระบบและการควบคุมให้กับไมโครคอนโทรลเลอร์ GSP (GPU System Processor) ที่รวมอยู่ในการ์ดจอโดยตรง

และในตอนนี้ ในเวลาไม่กี่เดือน (ไม่เหมือนกับโปรเจ็กต์ใหม่ๆ อื่นๆ) ดูเหมือนว่าไดร์เวอร์จะมีความสมบูรณ์เพียงพอที่จะได้รับการเสนอเป็นชุดแพตช์เพื่อรวมเข้าในเคอร์เนล Linux 6.15 โดยนี่เป็นเวอร์ชันเริ่มต้นของไดร์เวอร์บน Linux

โนวา มันคือ ได้รับการออกแบบเป็นโมดูลเคอร์เนล Linux ซึ่งอาศัยระบบย่อย DRM เพื่อจัดการการโต้ตอบกับ GPU จากพื้นที่ผู้ใช้- การพัฒนานี้ถือเป็นวิวัฒนาการของ Nouveau โดยมีความแตกต่างที่สำคัญคือการที่มันมุ่งเป้าไปที่ GPU ที่มีเฟิร์มแวร์ GSP โดยเฉพาะ ซึ่งครอบคลุมรุ่นต่างๆ จากซีรีส์ NVIDIA GeForce RTX 2000 ที่ใช้สถาปัตยกรรมไมโครทัวริง

ความแตกต่างกับ Nouveau และข้อดีของ Nova

โนวา มุ่งหวังที่จะแก้ไขปัญหาเชิงโครงสร้างของนูโวซึ่งต้องมีการปรับปรุงครั้งใหญ่ในด้านต่างๆ เช่น การจัดการหน่วยความจำ (VMM/MMU) และการล็อคในโค้ด ไม่เหมือนกับ Nouveau, Nova ใช้ประโยชน์จากเฟิร์มแวร์ GSP ของ NVIDIA เพื่อลดความซับซ้อนในการเริ่มระบบและการควบคุม GPU ลดความซับซ้อนของโค้ด และขจัดความจำเป็นในการจัดการการ์ดรุ่นเก่า

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

โครงการ ได้รับการสนับสนุนจากความคิดริเริ่มขนานต่างๆ เช่น อุปกรณ์ป้องกันสนิม สำหรับการสร้างไดร์เวอร์ rust-pci สำหรับการโต้ตอบกับบัส PCI และ rust-drm สำหรับการบูรณาการกับระบบย่อย DRM และ GEM เครื่องมือเหล่านี้ยังใช้ในการพัฒนา drm-asahi ซึ่งเป็นไดรเวอร์ Rust สำหรับ GPU M1 และ M2 ของ Apple ซึ่งแนะถึงการบรรจบกันในโครงสร้างพื้นฐานของไดรเวอร์กราฟิกที่เขียนด้วย Rust

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

นี่ไม่ใช่ความพยายามอย่างต่อเนื่องเพียงอย่างเดียวในการรวม Rust เข้ากับเคอร์เนล ขณะนี้ไดรเวอร์และระบบอื่น ๆ กำลังได้รับการพัฒนาในภาษานี้ เช่น ไดรเวอร์ GPU ของ Apple AGX, การรองรับที่จัดเก็บข้อมูล NVMe, ระบบไฟล์ PuzzleFS และการใช้งานด้านความปลอดภัยและการจัดการอุปกรณ์ต่าง ๆ แนวโน้มของ Rust ยังคงได้รับแรงผลักดันในระบบนิเวศ Linux ซึ่งถือเป็นการเปลี่ยนแปลงครั้งสำคัญในวิธีการพิจารณาถึงความปลอดภัยและเสถียรภาพในการพัฒนาเคอร์เนลของระบบปฏิบัติการ

ระยะการดำเนินการ

ปัจจุบัน Nova อยู่ในระยะแรกของการใช้งานรวมถึง nova-core ซึ่งเป็นโมดูลที่มีโค้ดประมาณ 400 บรรทัด ที่สร้างการแยกส่วนที่จำเป็นในการสื่อสารกับเฟิร์มแวร์ GSP นอกจาก nova-core แล้ว ยังมีการเพิ่มลิงก์ที่จำเป็นสำหรับการรวมเข้ากับเฟิร์มแวร์ NVIDIA อีกด้วย

เป็นมูลค่าการกล่าวขวัญว่า เดิมที Nova วางแผนไว้ว่าจะมาถึงบน Linux 6.14 ด้วยโมดูล nova-core ที่ประกอบด้วยโค้ด 232 บรรทัด แต่สุดท้ายก็ไม่ได้รวมอยู่ด้วยเพราะ Greg Kroah-Hartman กล่าวถึงรายละเอียดบางอย่าง ที่ต้องขัดเกลา.

พร้อมคำยืนยันใหม่ที่จะรวมอยู่ด้วย ตอนนี้ตัวควบคุมจะย้ายไปยังเฟสถัดไป ซึ่งมีแผนจะเพิ่ม:

  • โนวา-DRM: ไดรเวอร์ DRM (Direct Rendering Manager) เพื่อจัดการการโต้ตอบกับ GPU จากพื้นที่ผู้ใช้
  • VFIO พร้อมตัวจัดการ vGPU: จะช่วยให้สามารถใช้ GPU เสมือนของ NVIDIA ในสภาพแวดล้อมเสมือนจริงได้

สุดท้ายนี้สิ่งสำคัญคือการชี้แจงว่า Nova eในสถานะปัจจุบันมันไม่ใช่ตัวควบคุมที่ใช้งานได้ และนั่นคือ ส่งแพทช์แล้ว มันเป็นเพียงพื้นฐานสำหรับการเริ่มพัฒนาคอนโทรลเลอร์เท่านั้น นั่นก็คือเป็นโค้ดที่จะวางรากฐานสำหรับการพัฒนาในอนาคต