För ett år sedan meddelade Red Hattill deras arbete med en ny drivrutin med öppen källkod för att hantera NVIDIA GPU:er på Linux-system,Ny". Till skillnad från sin föregångare, Nouveau, förlitar sig Nova på att delegera initierings- och kontrolloperationer till en GSP (GPU System Processor) mikrokontroller integrerad i själva grafikkortet.
Och nu, inom loppet av några månader (till skillnad från andra nya projekt), verkar det som att drivrutinen har fått tillräckligt med mognad för att föreslås som en uppsättning patchar för att integreras i Linux 6.15-kärnan, detta är den första versionen av drivrutinen på Linux.
Nova, det är det designad som en Linux-kärnmodul, som är beroende av DRM-delsystemet för att hantera interaktion med grafikprocessorn från användarutrymmet. Dess utveckling ses som en utveckling av Nouveau, med den viktigaste skillnaden är att den uteslutande är inriktad på GPU:er med GSP-firmware, som täcker modeller från NVIDIA GeForce RTX 2000-serien baserade på Turing-mikroarkitekturen.
Skillnader med Nouveau och fördelar med Nova
Nytt strävar efter att lösa strukturella problem i Nouveau, vilket kräver en större översyn inom områden som minneshantering (VMM/MMU) och låsningar i koden. Till skillnad från Nouveau använder Nova NVIDIAs GSP-firmware för att förenkla GPU-initiering och kontroll, vilket minskar kodkomplexiteten och eliminerar behovet av att hantera äldre kort.
Nova-koden det är skrivet i Rust, ett språk som inte bara förbättrar säkerheten genom att minimera fel i minneshantering, utan också tillåter skapandet av återanvändbara lager och abstraktioner för utveckling av andra drivrutiner.
Projektet Det stöds av olika parallella initiativ, såsom rust-device för att skapa drivrutiner, rust-pci för interaktion med PCI-bussen och rust-drm för integration med DRM- och GEM-delsystem. Dessa verktyg används också i utvecklingen av drm-asahi, Rust-drivrutinen för Apple M1 och M2 GPU, vilket tyder på en konvergens i infrastrukturen för grafikdrivrutiner skrivna i Rust.
Användningen av språket Rost i denna utveckling är ingen slump, eftersom Rust erbjuder mekanismer som underlättar granskning och omstrukturering, vilket bidrar till större projektstabilitet. Antagandet av detta språk i Linux-kärnan svarar på en bredare strategi som försöker modernisera modulskrivning och göra utveckling mer tillgänglig för nya bidragsgivare.
Detta är inte det enda pågående försöket att integrera Rust i kärnan. Andra drivrutiner och system utvecklas för närvarande på detta språk, såsom Apple AGX GPU-drivrutinen, NVMe-lagringsstöd, PuzzleFS-filsystemet och olika implementeringar av säkerhet och enhetshantering. Trenden mot Rust fortsätter att ta fart i Linux-ekosystemet, vilket markerar en betydande förändring i hur säkerhet och stabilitet hanteras i utvecklingen av operativsystemets kärnor.
Implementeringsfaser
För närvarande, Nova är i sin första implementeringsfas, inkorporerad nova-core, en modul med cirka 400 rader kod som upprättar de abstraktioner som krävs för att kommunicera med GSP-firmware. Tillsammans med nova-core har viktiga länkar för integration med NVIDIAs firmware också lagts till.
Det är värt att nämna att, Nova var från början planerat att komma på Linux 6.14 med en nova-core-modul bestående av 232 rader kod, men i slutändan ingick den inte eftersom Greg Kroah-Hartman nämnde några detaljer som behövde polering.
Med den nya bekräftelsen att den nu kommer att inkluderas, Nu går styrenheten vidare till nästa faser där det planeras att lägga till:
- nova-drm: en DRM-drivrutin (Direct Rendering Manager) för att hantera interaktion med GPU:n från användarutrymmet.
- VFIO med vGPU-hanterare: kommer att tillåta användning av virtuella NVIDIA GPU:er i virtualiseringsmiljöer.
Slutligen är det viktigt att klargöra att Nova eI sitt nuvarande tillstånd är det inte en funktionell styrenhet och att patchar skickade De är bara grunden för att starta utvecklingen av controllern, det vill säga det är koden som kommer att lägga grunden för framtida utveckling.