WD entwickelt einen NVMe-Treiber in der Programmiersprache Rust. Experimente mit Rust unter FreeBSD

Auf der in diesen Tagen stattfindenden Konferenz Linux Plumbers 2022 hielt ein Ingenieur von Western Digital einen Vortrag über die Entwicklung eines experimentellen Treibers für SSDs mit NVM-Express (NVMe)-Schnittstelle, geschrieben in der Programmiersprache Rust und arbeitend auf der Linux-Kernel-Ebene. Obwohl sich das Projekt noch in einem frühen Stadium befindet, hat die durchgeführte Testung gezeigt, dass die Leistung des NVMe-Treibers in Rust der des bestehenden NVMe-Treibers im Kernel, der in C geschrieben ist, entspricht.

WD entwickelt einen NVMe-Treiber in der Programmiersprache Rust. Experimente mit Rust unter FreeBSD
WD entwickelt einen NVMe-Treiber in der Programmiersprache Rust. Experimente mit Rust unter FreeBSD

Im Vortrag wird darauf hingewiesen, dass der aktuelle NVMe-Treiber in C die Entwickler vollständig zufriedenstellt, die NVMe-Subsystem jedoch eine gute Grundlage für die Untersuchung der Machbarkeit der Entwicklung von Treibern in Rust darstellt, da es relativ einfach ist, weit verbreitet verwendet wird, hohe Leistungsanforderungen stellt, eine geprüfte Referenzimplementierung zum Vergleich aufweist und verschiedene Schnittstellen (dev, pci, dma, blk-mq, gendisk, sysfs) unterstützt.

Es wird festgestellt, dass der PCI NVMe-Treiber in Rust bereits die benötigte Funktionalität für den Betrieb bietet, aber noch nicht für den breiten Einsatz bereit ist, da er weitere Anpassungen erfordert. Zu den zukünftigen Plänen gehört die Beseitigung der bestehenden unsafe-Blöcke im Code, die Unterstützung von Geräteentfernungsoperationen und das Entladen des Treibers, die Unterstützung der sysfs-Schnittstelle, die Umsetzung einer verzögerten Initialisierung, die Erstellung eines Treibers für blk-mq und Experimente mit der Verwendung eines asynchronen Programmiermodells für queue_rq.

Video abspielen

Zusätzlich können die von der NCC Group durchgeführten Experimente zur Entwicklung von Treibern in der Programmiersprache Rust für den FreeBSD-Kernel erwähnt werden. Als Beispiel wird ein einfacher Echo-Treiber detailliert behandelt, der Daten zurückgibt, die in die Datei /dev/rustmodule geschrieben wurden. In der nächsten Phase der Experimente prüft die NCC Group die Möglichkeit, grundlegende Kernel-Komponenten in Rust zu überarbeiten, um die Sicherheit von Netzwerk- und Dateioperationen zu erhöhen.

Trotz der Möglichkeit, einfache Module in der Programmiersprache Rust zu erstellen, erfordert eine tiefere Integration von Rust in den FreeBSD-Kernel zusätzliche Arbeiten. Es wird beispielsweise auf die Notwendigkeit hingewiesen, eine Reihe von Abstraktionsschichten über den Subsystemen und Strukturen des Kernels zu schaffen, ähnlich den Erweiterungen, die im Projekt Rust for Linux entwickelt wurden. In Zukunft sind ähnliche Experimente mit dem Illumos-Kernel geplant, um allgemeine Abstraktionen in Rust zu identifizieren, die in mit Rust geschriebenen Treibern für Linux, BSD und Illumos verwendet werden könnten.

Laut Microsoft und Google werden etwa 70 % der Sicherheitsanfälligkeiten in ihren Softwareprodukten durch unsichere Speicheroperationen verursacht. Es wird angenommen, dass die Verwendung der Programmiersprache Rust das Risiko von durch unsichere Speicheroperationen verursachten Sicherheitsanfälligkeiten verringert und das Auftreten solcher Fehler wie das Zugreifen auf den Speicherbereich nach dessen Freigabe und das Überschreiten von Puffergrenzen ausschließt.

Die sichere Arbeit mit Speicher wird in Rust während der Kompilierung durch Überprüfung von Referenzen, Verfolgung des Eigentums an Objekten und Berücksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereich) sowie durch die Beurteilung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit des Codes gewährleistet. Rust bietet auch Mittel zum Schutz vor ganzzahligen Überläufen, erfordert die zwingende Initialisierung von Variablen vor deren Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet das Konzept der Immutabilität (unveränderlich) auf Referenzen und Variablen standardmäßig an und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.

Quelle: opennet.ru

60GB SSD 8Gb DDR4