Nova: Nuovo driver Rust per GPU NVIDIA in arrivo su Linux 6.15

Nova, Ruggine

Un anno fa Red Hat ha annunciatoal loro lavoro su un nuovo driver open source per la gestione delle GPU NVIDIA sui sistemi Linux,Nuovo". A differenza del suo predecessore, Nouveau, Nova si affida alla delega delle operazioni di inizializzazione e controllo a un microcontrollore GSP (GPU System Processor) integrato nella scheda grafica stessa.

E ora, nel giro di pochi mesi (a differenza di altri nuovi progetti), sembra che il driver abbia raggiunto una maturità sufficiente per essere proposto come un set di patch da integrare nel kernel Linux 6.15, che è la versione iniziale del driver su Linux.

Nova, è progettato come modulo del kernel Linux, che si basa sul sottosistema DRM per gestire l'interazione con la GPU dallo spazio utente. Il suo sviluppo è visto come un'evoluzione di Nouveau, con la differenza fondamentale che è rivolto esclusivamente alle GPU con firmware GSP, che comprende i modelli della serie NVIDIA GeForce RTX 2000 basati sulla microarchitettura Turing.

Differenze con Nouveau e vantaggi di Nova

Nova cerca di risolvere i problemi strutturali del Nouveau, che richiede una revisione radicale in ambiti quali la gestione della memoria (VMM/MMU) e i blocchi nel codice. A differenza di Nouveau, Nova sfrutta il firmware GSP di NVIDIA per semplificare l'inizializzazione e il controllo della GPU, riducendo la complessità del codice ed eliminando la necessità di gestire schede più vecchie.

Il Codice Nova è scritto in ruggine, un linguaggio che non solo migliora la sicurezza riducendo al minimo gli errori nella gestione della memoria, ma consente anche la creazione di livelli e astrazioni riutilizzabili per lo sviluppo di altri driver.

El proyecto È supportato da varie iniziative parallele, come rust-device per la creazione di driver, rust-pci per l'interazione con il bus PCI e rust-drm per l'integrazione con i sottosistemi DRM e GEM. Questi strumenti vengono utilizzati anche nello sviluppo di drm-asahi, il driver Rust per le GPU Apple M1 e M2, il che suggerisce una convergenza nell'infrastruttura dei driver grafici scritti in Rust.

L'uso del linguaggio La ruggine in questo sviluppo non è una coincidenza, poiché Rust offre meccanismi che facilitano la revisione e il refactoring, contribuendo a una maggiore stabilità del progetto. L'adozione di questo linguaggio nel kernel Linux risponde a una strategia più ampia che mira a modernizzare la scrittura dei moduli e a rendere lo sviluppo più accessibile ai nuovi collaboratori.

Questo non è l'unico tentativo in corso di integrare Rust nel kernel. Altri driver e sistemi sono attualmente in fase di sviluppo in questo linguaggio, come il driver GPU Apple AGX, il supporto per l'archiviazione NVMe, il file system PuzzleFS e varie implementazioni di sicurezza e gestione dei dispositivi. La tendenza verso Rust continua a prendere piede nell'ecosistema Linux, segnando un cambiamento significativo nel modo in cui la sicurezza e la stabilità vengono affrontate nello sviluppo del kernel del sistema operativo.

Fasi di implementazione

Attualmente, Nova è nella sua prima fase di implementazione, ha incorporato nova-core, un modulo con circa 400 linee di codice che stabilisce le astrazioni necessarie per comunicare con il firmware GSP. Insieme a nova-core, sono stati aggiunti anche i link essenziali per l'integrazione con il firmware NVIDIA.

Vale la pena ricordare che, Inizialmente Nova era previsto per arrivare su Linux 6.14 con un modulo nova-core composto da 232 linee di codice, ma alla fine non è stato incluso perché Greg Kroah-Hartman ha menzionato alcuni dettagli che aveva bisogno di essere lucidato.

Con la nuova conferma che sarà ora incluso, Ora il controllore passerà alle fasi successive in cui si prevede di aggiungere:

  • nova-drm: un driver DRM (Direct Rendering Manager) per gestire l'interazione con la GPU dallo spazio utente.
  • VFIO con gestore vGPU: consentirà l'uso delle GPU virtuali NVIDIA negli ambienti di virtualizzazione.

Infine, è importante chiarire che Nova eAllo stato attuale non è un controller funzionale e che il patch inviate Rappresentano solo la base per avviare lo sviluppo del controller, ovvero è il codice che getterà le basi per gli sviluppi futuri.