Nova en ny Direct Rendering Manager (DRM) kernedriver skrevet i Rust
Siden Nvidia udgav sine GPU-kernemoduler som open source, så det ud til, at både Nvidias proprietære driver og den open source Nouveau-driver ville opleve betydelige forbedringer med bidrag fra fællesskabet, og at Nouveau måske endda med tiden ville indhente det forsømte.
Efter flere måneder og en opbremsning i udviklingen af ​​Nouveau har Red Hat taget affære og for nylig annonceret, at de arbejder på Project Nova , som de præsenterer som en ny open source-driver til NVIDIA GPU'er, der udvikles i Rust.
Denne driver inkluderer GPU-initialisering og kontroloperationer i firmwaren ved hjælp af en separat GSP-mikrocontroller. Nova er designet som et Linux-kernemodul og bruger DRM-undersystemet (Direct Rendering Manager). Dette projekt betragtes som en fortsættelse af udviklingen af ​​Nouveau-driveren til GPU'er med GSP-firmware.
Danilo Krummrich (Red Hat) forklarer:
Med Nova har vi muligheden for at reducere kompleksiteten markant sammenlignet med Nouveau, af to hovedårsager. Først og fremmest er den historiske Nouveau-arkitektur, især omkring nvif/nvkm, ret kompliceret og ufleksibel og kræver et større eftersyn for at løse nogle problemer. Dernæst vil vi også benytte lejligheden til at bidrage til Rusts indsats i kernen og drage fordel af den øgede hukommelsessikkerhed, som Rust-programmeringssproget tilbyder.
Derudover nævnes det, at Red Hat med udviklingen af ​​Nova har til hensigt at benytte lejligheden til at bidrage til Rust-kernens indsats , da driverkoden, som nævnt, er skrevet i Rust og bruger flere lag til at udvikle videodrivere i dette sprog. For eksempel bruger driveren abstraktioner fra Rust-Device-grenen til at oprette drivere, komponenter fra Rust-Pci-grenen til at arbejde med PCI-bussen og links til DRM- og GEM-undersystemerne fra Rust-DRM-grenen.
Også nævnt er udviklingen af ​​drm-asahi Rust-driveren til Apple M1 og M2 chip GPU'er. Brugen af ​​Rust forventes at øge sikkerheden og pålideligheden af ​​driveren ved at reducere sandsynligheden for fejl ved arbejde med hukommelse og tillade kombinationen af ​​arbejde på videodriveren med udvikling af almindelige komponenter i Rust.
Novas mål er på sigt at blive en open source-driver til NVIDIA Linux , målrettet Turing GPU'er og nyere modeller (især i RTX 2000-serien), der understøtter GSP. Denne nye driver udvikles i Rust for at være lettere og mere fleksibel, hvilket gør den til en lovende mulighed.
En af grundene til at oprette en ny driver er at forenkle processen sammenlignet med Nouveau takket være brugen af ​​færdige drivere fra GSP-firmwaren. Dette undgår unødvendig kompleksitet i Nouveau-driverkoden, som skal understøtte ældre NVIDIA GPU'er og har problemer såsom VMM/MMU-kodelåse. Ved at udvikle Nova fra bunden og udelukkende fokusere på GSP-baserede GPU'er forventes disse problemer og komplikationer at blive undgået.
På den anden side nævner Red Hat også nogle af de punkter, den skal adressere, og siger, at med valget af Rust er det første problem, der skal løses, manglen på C-bindingsabstraktioner for end-to-end-kerneinfrastruktur:
"fx enhed/driver-abstraktioner... vi har brug for en bruger til upstream-abstraktionerne, men vi har også brug for abstraktionerne for at skabe en driver - vi vil udvikle Nova upstream og starte med kun en stub, der kun gør brug af nogle få abstraktioner Rust grundlæggende.
Endelig, hvis du er interesseret i at lære mere, kan du finde detaljerne på følgende link, samt se udviklings- og kildekoden i dens repository.