WD pracuje nad sterownikiem NVMe w języku Rust. Eksperymentowanie z Rustem na FreeBSD

Na odbywającej się obecnie konferencji Linux Plumbers 2022 inżynier z firmy Western Digital wygłosił prezentację na temat opracowania eksperymentalnego sterownika dla dysków SSD z interfejsem NVM-Express (NVMe), napisanego w języku Rust i działającego na jądrze Linuksa poziom. Pomimo tego, że projekt jest wciąż na wczesnym etapie rozwoju, testy wykazały, że wydajność sterownika NVMe w języku Rust odpowiada sterownikowi NVMe napisanemu w języku C dostępnemu w jądrze.

WD pracuje nad sterownikiem NVMe w języku Rust. Eksperymentowanie z Rustem na FreeBSD
WD pracuje nad sterownikiem NVMe w języku Rust. Eksperymentowanie z Rustem na FreeBSD

W raporcie stwierdza się, że obecny sterownik NVMe w języku C jest całkowicie zadowalający dla programistów, ale podsystem NVMe jest dobrą platformą do badania wykonalności opracowania sterowników w języku Rust, ponieważ jest dość prosty, szeroko stosowany, ma wysokie wymagania wydajnościowe i ma sprawdzona implementacja referencyjna do porównania i obsługuje różne interfejsy (dev, pci, dma, blk-mq, gendisk, sysfs).

Należy zauważyć, że sterownik PCI NVMe dla Rusta zapewnia już funkcjonalność niezbędną do działania, ale nie jest jeszcze gotowy do powszechnego użytku, ponieważ wymaga indywidualnych ulepszeń. Plany na przyszłość obejmują pozbycie się kodu z istniejących niebezpiecznych bloków, obsługę operacji usuwania urządzeń i wyładowywania sterowników, obsługę interfejsu sysfs, implementację leniwej inicjalizacji, utworzenie sterownika dla blk-mq i eksperymentowanie z użyciem asynchronicznego modelu programowania dla kolejki_rq.

Dodatkowo możemy odnotować eksperymenty prowadzone przez Grupę NCC w celu opracowania sterowników w języku Rust dla jądra FreeBSD. Jako przykład szczegółowo przeanalizujemy prosty sterownik echa, który zwraca dane zapisane do pliku /dev/rustmodule. W kolejnej fazie eksperymentów Grupa NCC rozważa możliwość przerobienia podstawowych komponentów jądra w języku Rust w celu poprawy bezpieczeństwa operacji sieciowych i plikowych.

Jednakże, chociaż wykazano, że możliwe jest tworzenie prostych modułów w języku Rust, ściślejsza integracja Rusta z jądrem FreeBSD będzie wymagała dodatkowej pracy. Wspominają na przykład o konieczności stworzenia zestawu warstw abstrakcji nad podsystemami i strukturami jądra, podobnie jak dodatki przygotowane przez projekt Rust for Linux. W przyszłości planujemy przeprowadzić podobne eksperymenty z jądrem Illumos i zidentyfikować typowe abstrakcje w Rust, które można wykorzystać w sterownikach napisanych w Rust dla Linuksa, BSD i Illumos.

Według Microsoft i Google około 70% luk w zabezpieczeniach ich oprogramowania wynika z niebezpiecznej obsługi pamięci. Oczekuje się, że zastosowanie języka Rust zmniejszy ryzyko wystąpienia podatności spowodowanych niebezpieczną pracą z pamięcią oraz wyeliminuje występowanie błędów, takich jak dostęp do obszaru pamięci po jej zwolnieniu i przepełnienie bufora.

Bezpieczna obsługa pamięci w Rust jest zapewniona w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektu i czasu życia obiektu (zakres), a także poprzez ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Rust zapewnia również ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie stosuje koncepcję niezmiennych odniesień i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych.

Źródło: opennet.ru

Dodaj komentarz