WD utvecklar en NVMe-drivrutin i Rust. Experimenterar med Rust på FreeBSD

Vid den pågående Linux Plumbers 2022-konferensen i dagarna gjorde en ingenjör från Western Digital en presentation om utvecklingen av en experimentell drivrutin för NVM-Express (NVMe) SSD:er skrivna i Rust och körs på Linux-kärnnivå. Trots att projektet fortfarande befinner sig i ett tidigt utvecklingsstadium, visade de genomförda testerna att prestanda för Rust NVMe-drivrutinen motsvarar NVMe-drivrutinen skriven i C i kärnan.

WD utvecklar en NVMe-drivrutin i Rust. Experimenterar med Rust på FreeBSD
WD utvecklar en NVMe-drivrutin i Rust. Experimenterar med Rust på FreeBSD

Rapporten säger att den nuvarande NVMe-drivrutinen i C är helt tillfredsställande för utvecklare, men NVMe-delsystemet är en bra plattform för att utforska möjligheten att utveckla drivrutiner i Rust, eftersom det är ganska enkelt, flitigt använt, har höga prestandakrav och har en beprövad referensimplementering för jämförelse och stöder olika gränssnitt (dev, pci, dma, blk-mq, gendisk, sysfs).

Det noteras att Rust PCI NVMe-drivrutinen redan tillhandahåller den funktionalitet som krävs för drift, men är ännu inte redo för utbredd användning, eftersom den kräver separata förbättringar. Planer för framtiden inkluderar att bli av med de befintliga osäkra blocken, stöd för att ta bort enheten och ladda ur drivrutinen, stödja sysfs-gränssnittet, implementera lat initialisering, skapa en drivrutin för blk-mq och experimentera med en asynkron programmeringsmodell för queue_rq.

Dessutom kan vi notera de experiment som utförts av NCC Group för att utveckla drivrutiner i Rust-språket för FreeBSD-kärnan. Som ett exempel analyseras en enkel ekodrivrutin som returnerar data som skrivits till filen /dev/rustmodule i detalj. I nästa experimentfas överväger NCC-koncernen att omarbeta kärnkomponenterna i Rust för att förbättra säkerheten för nätverks- och filoperationer.

Med det sagt, även om det har visat sig att det är möjligt att skapa enkla moduler i Rust, kommer en tätare integration av Rust i FreeBSD-kärnan att kräva ytterligare arbete. Till exempel nämner det behovet av att skapa en uppsättning abstraktionslager över delsystem och kärnstrukturer, liknande tillägg som utarbetats av Rust for Linux-projektet. I framtiden är det planerat att genomföra liknande experiment med Illumos-kärnan och lyfta fram vanliga abstraktioner i Rust som skulle kunna användas i Rust-skrivna drivrutiner för Linux, BSD och Illumos.

Enligt Microsoft och Google orsakas cirka 70 % av sårbarheterna i deras mjukvaruprodukter av osäker minneshantering. Det antas att användningen av Rust-språket kommer att minska risken för sårbarheter orsakade av osäker minneshantering, och eliminera förekomsten av fel som att komma åt ett minnesområde efter att det har frigjorts och buffertöverskridanden.

Minnessäkerhet tillhandahålls i Rust vid kompileringstillfället genom referenskontroll, hålla reda på objektägande och objektlivslängd (scope), samt genom utvärdering av korrektheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Källa: opennet.ru

Lägg en kommentar