Nova: Driver Rust baru untuk GPU NVIDIA hadir di Linux 6.15

Nova, Karat

Setahun yang lalu Red Hat mengumumkanuntuk pekerjaan mereka pada driver sumber terbuka baru untuk mengelola GPU NVIDIA pada sistem Linux,Baru". Tidak seperti pendahulunya, Nouveau, Nova mengandalkan pendelegasian operasi inisialisasi dan kontrol ke mikrokontroler GSP (GPU System Processor) yang terintegrasi ke dalam kartu grafis itu sendiri.

Dan sekarang, dalam hitungan beberapa bulan (tidak seperti proyek baru lainnya), tampaknya driver tersebut telah memperoleh cukup kematangan untuk diusulkan sebagai serangkaian patch yang akan diintegrasikan ke dalam kernel Linux 6.15, yang merupakan versi awal driver pada Linux.

Nova, itu dia dirancang sebagai modul kernel Linux, yang mengandalkan subsistem DRM untuk mengelola interaksi dengan GPU dari ruang pengguna. Pengembangannya dipandang sebagai evolusi dari Nouveau, dengan perbedaan utama yaitu ia secara eksklusif ditargetkan pada GPU dengan firmware GSP, yang mencakup model dari seri NVIDIA GeForce RTX 2000 berdasarkan mikroarsitektur Turing.

Perbedaan dengan Nouveau dan Kelebihan Nova

Nova berusaha memecahkan masalah struktural Nouveau, yang memerlukan perombakan besar-besaran di beberapa area seperti manajemen memori (VMM/MMU) dan penguncian kode. Tidak seperti Nouveau, Nova memanfaatkan firmware GSP NVIDIA untuk menyederhanakan inisialisasi dan kontrol GPU, mengurangi kerumitan kode dan menghilangkan kebutuhan untuk menangani kartu lama.

Kode Nova itu tertulis di Rust, bahasa yang tidak hanya meningkatkan keamanan dengan meminimalkan kesalahan dalam manajemen memori, tetapi juga memungkinkan pembuatan lapisan dan abstraksi yang dapat digunakan kembali untuk pengembangan driver lain.

Proyek Hal ini didukung oleh berbagai inisiatif paralel, seperti rust-device untuk membuat driver, rust-pci untuk interaksi dengan bus PCI dan rust-drm untuk integrasi dengan subsistem DRM dan GEM. Alat-alat ini juga digunakan dalam pengembangan drm-asahi, driver Rust untuk GPU Apple M1 dan M2, yang menunjukkan konvergensi dalam infrastruktur driver grafis yang ditulis dalam Rust.

Penggunaan bahasa Karat pada perkembangan ini bukan suatu kebetulan, karena Rust menawarkan mekanisme yang memfasilitasi peninjauan dan pemfaktoran ulang, yang berkontribusi pada stabilitas proyek yang lebih baik. Penerapan bahasa ini dalam kernel Linux merupakan respons terhadap strategi yang lebih luas yang berupaya memodernisasi penulisan modul dan membuat pengembangan lebih mudah diakses oleh kontributor baru.

Ini bukan satu-satunya upaya yang sedang berlangsung untuk mengintegrasikan Rust ke dalam kernel. Driver dan sistem lain saat ini sedang dikembangkan dalam bahasa ini, seperti driver GPU Apple AGX, dukungan penyimpanan NVMe, sistem file PuzzleFS, dan berbagai implementasi keamanan dan manajemen perangkat. Tren menuju Rust terus mendapatkan momentum dalam ekosistem Linux, menandai perubahan signifikan dalam cara menangani keamanan dan stabilitas dalam pengembangan kernel sistem operasi.

Tahapan implementasi

Saat ini, Nova sedang dalam fase pertama implementasinya, menggabungkan nova-core, sebuah modul dengan sekitar 400 baris kode yang menetapkan abstraksi yang diperlukan untuk berkomunikasi dengan firmware GSP. Bersamaan dengan nova-core, tautan penting untuk integrasi dengan firmware NVIDIA juga telah ditambahkan.

Perlu disebutkan bahwa, Nova awalnya direncanakan untuk hadir di Linux 6.14 dengan modul nova-core yang terdiri dari 232 baris kode, tetapi pada akhirnya tidak disertakan karena Greg Kroah-Hartman menyebutkan beberapa detail yang perlu dipoles.

Dengan konfirmasi baru bahwa hal itu sekarang akan disertakan, Sekarang pengontrol akan beralih ke fase berikutnya yang mana direncanakan akan ditambahkan:

  • nova-drm: driver DRM (Direct Rendering Manager) untuk mengelola interaksi dengan GPU dari ruang pengguna.
  • VFIO dengan manajer vGPU: akan memungkinkan penggunaan GPU virtual NVIDIA dalam lingkungan virtualisasi.

Terakhir, penting untuk mengklarifikasi bahwa Nova eDalam kondisi saat ini, ini bukan pengontrol yang berfungsi dan itu patch terkirim Mereka hanyalah dasar untuk memulai pengembangan pengontrol, artinya, kode tersebut akan meletakkan fondasi untuk pengembangan di masa mendatang.