WD entwickelt einen NVMe-Treiber in Rust. Experimentieren mit Rust unter FreeBSD

Auf der in diesen Tagen stattfindenden Linux Plumbers 2022-Konferenz hielt ein Ingenieur von Western Digital einen Vortrag über die Entwicklung eines experimentellen Treibers für SSD-Laufwerke mit der NVM-Express-Schnittstelle (NVMe), der in der Sprache Rust geschrieben ist und auf dem Linux-Kernel läuft Ebene. Obwohl sich das Projekt noch in einem frühen Entwicklungsstadium befindet, haben Tests gezeigt, dass die Leistung des NVMe-Treibers in der Rust-Sprache der des im Kernel verfügbaren NVMe-Treibers in der C-Sprache entspricht.

WD entwickelt einen NVMe-Treiber in Rust. Experimentieren mit Rust unter FreeBSD
WD entwickelt einen NVMe-Treiber in Rust. Experimentieren mit Rust unter FreeBSD

Der Bericht besagt, dass der aktuelle NVMe-Treiber in C für Entwickler völlig zufriedenstellend ist, das NVMe-Subsystem jedoch eine gute Plattform ist, um die Machbarkeit der Entwicklung von Treibern in Rust zu untersuchen, da es recht einfach ist, weit verbreitet ist, hohe Leistungsanforderungen stellt und über eine bewährte Referenzimplementierung zum Vergleich und unterstützt verschiedene Schnittstellen (dev, pci, dma, blk-mq, gendisk, sysfs).

Es wird darauf hingewiesen, dass der PCI-NVMe-Treiber für Rust bereits die für den Betrieb notwendige Funktionalität bereitstellt, jedoch noch nicht für den breiten Einsatz bereit ist, da einzelne Verbesserungen erforderlich sind. Zu den zukünftigen Plänen gehören das Entfernen des Codes von vorhandenen unsicheren Blöcken, die Unterstützung von Geräteentfernungs- und Treiber-Entladevorgängen, die Unterstützung der sysfs-Schnittstelle, die Implementierung einer verzögerten Initialisierung, die Erstellung eines Treibers für blk-mq und das Experimentieren mit der Verwendung eines asynchronen Programmiermodells für queue_rq.

Darüber hinaus können wir die von der NCC Group durchgeführten Experimente zur Entwicklung von Treibern in der Rust-Sprache für den FreeBSD-Kernel zur Kenntnis nehmen. Als Beispiel untersuchen wir im Detail einen einfachen Echo-Treiber, der in die Datei /dev/rustmodule geschriebene Daten zurückgibt. In der nächsten Experimentierphase erwägt die NCC Group die Möglichkeit, die Kernkomponenten des Kernels in der Rust-Sprache zu überarbeiten, um die Sicherheit von Netzwerk- und Dateivorgängen zu verbessern.

Obwohl sich gezeigt hat, dass es möglich ist, einfache Module in der Rust-Sprache zu erstellen, wird eine engere Integration von Rust in den FreeBSD-Kernel zusätzliche Arbeit erfordern. Sie erwähnen beispielsweise die Notwendigkeit, eine Reihe von Abstraktionsschichten über den Subsystemen und Kernelstrukturen zu erstellen, ähnlich den vom Rust für Linux-Projekt vorbereiteten Add-ons. In Zukunft planen wir, ähnliche Experimente mit dem Illumos-Kernel durchzuführen und gemeinsame Abstraktionen in Rust zu identifizieren, die in in Rust geschriebenen Treibern für Linux, BSD und Illumos verwendet werden könnten.

Nach Angaben von Microsoft und Google werden etwa 70 % der Schwachstellen in ihren Softwareprodukten durch unsichere Speicherverarbeitung verursacht. Es wird erwartet, dass die Verwendung der Rust-Sprache das Risiko von Schwachstellen aufgrund unsicherer Arbeit mit dem Speicher verringert und das Auftreten von Fehlern wie dem Zugriff auf einen Speicherbereich nach dessen Freigabe und dem Überlaufen des Puffers verhindert.

Die speichersichere Handhabung wird in Rust zur Kompilierungszeit durch Referenzprüfung, Verfolgung des Objektbesitzes und der Objektlebensdauer (Umfang) sowie durch die Bewertung der Korrektheit des Speicherzugriffs während der Codeausführung gewährleistet. Rust bietet außerdem Schutz vor Ganzzahlüberläufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet standardmäßig das Konzept unveränderlicher Referenzen und Variablen an und bietet starke statische Typisierung, um logische Fehler zu minimieren.

Source: opennet.ru

Kommentar hinzufügen