WD разработва NVMe драйвер в Rust. Експериментиране с Rust на FreeBSD

На конференцията Linux Plumbers 2022, която се провежда тези дни, инженер от Western Digital изнесе презентация за разработването на експериментален драйвер за SSD устройства с интерфейс NVM-Express (NVMe), написан на езика Rust и работещ в ядрото на Linux ниво. Въпреки факта, че проектът все още е на ранен етап на разработка, тестването показа, че производителността на драйвера NVMe на езика Rust съответства на драйвера NVMe, написан на езика C, наличен в ядрото.

WD разработва NVMe драйвер в Rust. Експериментиране с Rust на FreeBSD
WD разработва NVMe драйвер в Rust. Експериментиране с Rust на FreeBSD

В доклада се посочва, че текущият драйвер за NVMe в C е напълно задоволителен за разработчиците, но подсистемата NVMe е добра платформа за изследване на осъществимостта на разработването на драйвери в Rust, тъй като е доста проста, широко използвана, има високи изисквания за производителност и има доказана референтна реализация за сравнение и поддържа различни интерфейси (dev, pci, dma, blk-mq, gendisk, sysfs).

Отбелязва се, че драйверът PCI NVMe за Rust вече предоставя функционалността, необходима за работа, но все още не е готов за широко използване, тъй като изисква индивидуални подобрения. Бъдещите планове включват освобождаване на кода от съществуващи опасни блокове, поддръжка на операции за премахване на устройство и разтоварване на драйвери, поддръжка на интерфейса sysfs, внедряване на мързелива инициализация, създаване на драйвер за blk-mq и експериментиране с използване на асинхронен програмен модел за queue_rq.

Освен това можем да отбележим експериментите, проведени от NCC Group за разработване на драйвери на езика Rust за ядрото на FreeBSD. Като пример, ние разглеждаме подробно прост ехо драйвер, който връща данни, записани във файла /dev/rustmodule. В следващата фаза на експериментиране NCC Group обмисля възможността за преработка на основните компоненти на ядрото на езика Rust, за да подобри сигурността на мрежовите и файловите операции.

Въпреки това, въпреки че е показано, че е възможно да се създават прости модули на езика Rust, по-тясната интеграция на Rust в ядрото на FreeBSD ще изисква допълнителна работа. Например, те споменават необходимостта от създаване на набор от абстракционни слоеве върху подсистемите и структурите на ядрото, подобно на добавките, подготвени от проекта Rust за Linux. В бъдеще планираме да проведем подобни експерименти с ядрото на Illumos и да идентифицираме общи абстракции в Rust, които могат да се използват в драйвери, написани на Rust за Linux, BSD и Illumos.

Според Microsoft и Google около 70% от уязвимостите в техните софтуерни продукти са причинени от несигурна работа с паметта. Очаква се, че използването на езика Rust ще намали риска от уязвимости, причинени от несигурна работа с паметта, и ще елиминира появата на грешки като достъп до област на паметта, след като тя е била освободена и препълване на буфера.

Безопасното боравене с паметта е осигурено в Rust по време на компилиране чрез проверка на референции, проследяване на собствеността върху обекта и продължителността на живот (обхват) на обекта, както и чрез оценка на коректността на достъпа до паметта по време на изпълнение на кода. Rust също осигурява защита срещу препълване на цели числа, изисква задължителна инициализация на стойностите на променливите преди употреба, обработва грешките по-добре в стандартната библиотека, прилага концепцията за неизменни препратки и променливи по подразбиране, предлага силно статично въвеждане за минимизиране на логическите грешки.

Източник: opennet.ru

Добавяне на нов коментар