WD opracowuje sterownik NVMe w języku Rust. Eksperymenty z Rust w FreeBSD

Na odbywającej się w tych dniach konferencji Linux Plumbers 2022 inżynier z firmy Western Digital zaprezentował referat na temat rozwoju eksperymentalnego sterownika dla dysków SSD z interfejsem NVM-Express (NVMe), napisanego w języku Rust i działającego na poziomie jądra Linux. Mimo że projekt jest wciąż na wczesnym etapie rozwoju, przeprowadzone testy wykazały, że wydajność NVMe-sterownika w języku Rust odpowiada istniejącemu w jądrze NVMe-sterownikowi, napisanemu w języku C.

WD opracowuje sterownik NVMe w języku Rust. Eksperymenty z Rust w FreeBSD
WD opracowuje sterownik NVMe w języku Rust. Eksperymenty z Rust w FreeBSD

W referacie stwierdzono, że obecny NVMe-sterownik w języku C w pełni zaspokaja potrzeby programistów, ale podsystem NVMe jest dobrą platformą do zbadania zasadności tworzenia sterowników w języku Rust, ponieważ jest stosunkowo prosty, szeroko stosowany, wymaga wysokiej wydajności, ma sprawdzoną referencyjną implementację do porównań oraz obsługuje różne interfejsy (dev, pci, dma, blk-mq, gendisk, sysfs).

Zaznaczono, że sterownik PCI NVMe w Rust już zapewnia potrzebną funkcjonalność, ale nie jest jeszcze gotowy do powszechnego użycia, ponieważ wymaga dalszych poprawek. W planach na przyszłość wymieniono usunięcie z kodu istniejących bloków unsafe, obsługę operacji usuwania urządzenia i rozładowania sterownika, wsparcie dla interfejsu sysfs, realizację opóźnionej inicjalizacji, stworzenie sterownika dla blk-mq oraz eksperymenty z wykorzystaniem asynchronicznego modelu programowania dla queue_rq.

Odtwarzaj wideo

Dodatkowo można wspomnieć o prowadzonych przez firmę NCC Group eksperymentach nad rozwojem sterowników w języku Rust dla jądra FreeBSD. Jako przykład dokładnie omawiany jest prosty echo-stertownik, który zwraca dane zapisane w pliku /dev/rustmodule. W następnej fazie eksperymentów NCC Group rozważa możliwość przepisania w języku Rust podstawowych komponentów jądra w celu zwiększenia bezpieczeństwa operacji sieciowych i plikowych.

Jednocześnie, mimo że pokazano możliwość tworzenia prostych modułów w języku Rust, głębsza integracja Rust z jądrem FreeBSD będzie wymagała dodatkowej pracy. Na przykład, wspomniano o konieczności stworzenia zestawu warstw abstrakcji nad subsystemami i strukturami jądra, podobnych do nakładek przygotowanych przez projekt Rust for Linux. W przyszłości planowane są podobne eksperymenty z jądrem Illumos oraz wydzielenie wspólnych abstrakcji w Rust, które mogłyby być używane w sterownikach napisanych w Rust dla Linuxa, BSD i Illumos.

Według danych firm Microsoft i Google, około 70% podatności w ich produktach programowych jest spowodowanych niebezpiecznym zarządzaniem pamięcią. Zakłada się, że wykorzystanie języka Rust pozwoli zmniejszyć ryzyko pojawienia się podatności związanych z niebezpiecznym zarządzaniem pamięcią oraz wyeliminować takie błędy jak dostęp do obszaru pamięci po jego zwolnieniu i przepełnienie bufora.

Bezpieczna praca z pamięcią w języku Rust jest zapewniana w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektów oraz uwzględnianie czasu życia obiektów (zakresu widoczności), a także poprzez ocenę poprawności dostępu do pamięci w czasie wykonywania kodu. Rust zapewnia również środki ochrony przed przepełnieniami wartości całkowitych, wymaga obowiązkowego inicjowania wartości zmiennych przed ich użyciem, lepiej obsługuje błędy w standardowej bibliotece, stosuje koncepcję niezmienności (immutable) referencji i zmiennych domyślnie oraz oferuje silną statyczną typizację w celu minimalizacji błędów logicznych.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster