На проходящей в эти дни конференции Linux Plumbers 2022 инженер из компании Western Digital выступил с докладом о разработке экспериментального драйвера для SSD-накопителей с интерфейсом NVM-Express (NVMe), написанного на языке Rust и работающего на уровне ядра Linux. Несмотря не то, что драйвер пока находится на раннем этапе развития и специально не оптимизирован, проведённое тестирование показало, что производительность NVMe-драйвера на языке Rust соответствует имеющемуся в ядре NVMe-драйверу, написанному на языке Си.
![](https://www.opennet.ru/opennews/pics_base/CFD0C5CECEC5D4_1663046977.png)
![](https://www.opennet.ru/opennews/pics_base/CFD0C5CECEC5D4_1663046998.png)
В докладе говорится, что текущий 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.