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 таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.

Крыніца: opennet.ru

Дадаць каментар