WD utvikler en NVMe-driver i Rust. Eksperimenterer med Rust på FreeBSD

På Linux Plumbers 2022-konferansen som finner sted i disse dager, holdt en ingeniør fra Western Digital en presentasjon om utviklingen av en eksperimentell driver for SSD-stasjoner med NVM-Express (NVMe)-grensesnittet, skrevet på Rust-språket og kjører på Linux-kjernen nivå. Til tross for at prosjektet fortsatt er på et tidlig stadium av utviklingen, har testing vist at ytelsen til NVMe-driveren på Rust-språket tilsvarer NVMe-driveren skrevet på C-språket som er tilgjengelig i kjernen.

WD utvikler en NVMe-driver i Rust. Eksperimenterer med Rust på FreeBSD
WD utvikler en NVMe-driver i Rust. Eksperimenterer med Rust på FreeBSD

Rapporten slår fast at dagens NVMe-driver i C er helt tilfredsstillende for utviklere, men NVMe-delsystemet er en god plattform for å utforske muligheten for å utvikle drivere i Rust, siden den er ganske enkel, mye brukt, har høye ytelseskrav, og har en velprøvd referanseimplementering for sammenligning og støtter ulike grensesnitt (dev, pci, dma, blk-mq, gendisk, sysfs).

Det bemerkes at PCI NVMe-driveren for Rust allerede gir den funksjonaliteten som er nødvendig for drift, men er ennå ikke klar for utbredt bruk, da den krever individuelle forbedringer. Fremtidige planer inkluderer å kvitte seg med koden fra eksisterende usikre blokker, støtte fjerning av enheter og driverutlastingsoperasjoner, støtte sysfs-grensesnittet, implementere lat initialisering, lage en driver for blk-mq og eksperimentere med å bruke en asynkron programmeringsmodell for queue_rq.

I tillegg kan vi merke oss eksperimentene utført av NCC Group for å utvikle drivere i Rust-språket for FreeBSD-kjernen. Som et eksempel undersøker vi i detalj en enkel ekkodriver som returnerer data skrevet til filen /dev/rustmodule. I neste fase av eksperimentering vurderer NCC Group muligheten for å omarbeide kjernekomponentene til kjernen i Rust-språket for å forbedre sikkerheten til nettverks- og filoperasjoner.

Men selv om det har vist seg at det er mulig å lage enkle moduler i Rust-språket, vil en tettere integrasjon av Rust i FreeBSD-kjernen kreve ekstra arbeid. For eksempel nevner de behovet for å lage et sett med abstraksjonslag over undersystemene og kjernestrukturene, lik tilleggene utarbeidet av Rust for Linux-prosjektet. I fremtiden planlegger vi å utføre lignende eksperimenter med Illumos-kjernen og identifisere vanlige abstraksjoner i Rust som kan brukes i drivere skrevet i Rust for Linux, BSD og Illumos.

Ifølge Microsoft og Google er omtrent 70 % av sårbarhetene i programvareproduktene deres forårsaket av usikker minnehåndtering. Det forventes at bruk av Rust-språket vil redusere risikoen for sårbarheter forårsaket av usikkert arbeid med minne, og eliminere forekomsten av feil som tilgang til et minneområde etter at det har blitt frigjort og overkjørt bufferen.

Rust håndhever minnesikkerhet ved kompilering gjennom referansesjekking, objekteierskap og objektlevetidssporing (scopes), og ved å evaluere riktigheten av minnetilganger under kjøring. Rust gir også beskyttelse mot heltallsoverløp, krever at variabelverdier initialiseres før bruk, har bedre feilhåndtering i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, og tilbyr sterk statisk skriving for å minimere logiske feil.

Kilde: opennet.ru

Legg til en kommentar