WD розробляє NVMe-драйвер мовою Rust. Експерименти з Rust у FreeBSD

На конференції Linux Plumbers 2022, що проходить у ці дні, інженер з компанії Western Digital виступив з доповіддю про розробку експериментального драйвера для SSD-накопичувачів з інтерфейсом NVM-Express (NVMe), написаного на мові Rust і працює на рівні ядра Linux. Незважаючи на те, що проект поки що знаходиться на ранньому етапі розвитку, проведене тестування показало, що продуктивність NVMe-драйвера мовою Rust відповідає наявному в ядрі NVMe-драйверу, написаному мовою Сі.

WD розробляє NVMe-драйвер мовою Rust. Експерименти з Rust у FreeBSD
WD розробляє NVMe-драйвер мовою Rust. Експерименти з Rust у FreeBSD

У доповіді йдеться, що поточний NVMe-драйвер мовою Сі повністю влаштовує розробників, але підсистема NVMe є гарним майданчиком для вивчення доцільності розробки драйверів мовою Rust, оскільки вона досить проста, широко використовується, пред'являє високі вимоги до продуктивності, має перевірену еталонну реалізацію. для порівняння та підтримує різні інтерфейси (dev, pci, dma, blk-mq, gendisk, sysfs).

Зазначається, що PCI NVMe драйвер на Rust вже надає необхідну для роботи функціональність, але поки що не готовий для широкого використання, оскільки потребує окремих доопрацювань. Серед планів на майбутнє називається порятунок коду від наявних unsafe-блоків, підтримка операцій видалення пристрою та вивантаження драйвера, підтримка інтерфейсу sysfs, реалізація відкладеної ініціалізації, створення драйвера для blk-mq та експерименти з використанням асинхронної моделі програмування для queue_rq.

Додатково можна відзначити експерименти з розробки драйверів, що проводяться компанією NCC Group на мові Rust для ядра FreeBSD. Як приклад докладно розбирається простий echo-драйвер, який повертає дані, записані у файл /dev/rustmodule. На наступному етапі експериментів NCC Group розглядає можливість переробки мовою Rust базових компонентів ядра для підвищення безпеки мережевих та файлових операцій.

При цьому, незважаючи на те, що показано можливість створення простих модулів на мові Rust, щільніша інтеграція Rust в ядро ​​FreeBSD вимагатиме проведення додаткової роботи. Наприклад, згадується необхідність створення набору шарів абстракції над підсистемами та структурами ядра, подібними до надбудов, підготовлених проектом Rust for Linux. Надалі планується провести схожі експерименти з ядром Illumos та виділити загальні абстракції на Rust, які могли б використовуватися в написаних на Rust драйверах для Linux, BSD та Illumos.

За даними компаній Microsoft і Google, близько 70% уразливостей у їх програмних продуктах викликані небезпечною роботою з пам'яттю. Передбачається, що використання мови Rust дозволить знизити ризик появи вразливостей, спричинених небезпечною роботою з пам'яттю, та виключити появу таких помилок, як звернення до області пам'яті після її звільнення та вихід за межі буфера.

Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами та облік часу життя об'єктів (області видимості), а також оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

Джерело: opennet.ru

Додати коментар або відгук