Nova: Нов драйвер на Rust за графични процесори на NVIDIA идва към Linux 6.15

Нова, Руст

Преди година Red Hat обявикъм тяхната работа върху нов драйвер с отворен код за управление на NVIDIA GPU на Linux системи,ново». За разлика от своя предшественик, Nouveau, Nova разчита на делегиране на инициализация и контролни операции на GSP (GPU System Processor) микроконтролер, интегриран в самата графична карта.

И сега, в рамките на няколко месеца (за разлика от други нови проекти), изглежда, че драйверът е придобил достатъчно зрялост, за да бъде предложен като набор от корекции, които да бъдат интегрирани в ядрото на Linux 6.15, като това е първоначалната версия на драйвера за Linux.

Нова, така е проектиран като модул на ядрото на Linux, който разчита на подсистемата DRM за управление на взаимодействието с GPU от потребителското пространство. Разработката му се разглежда като еволюция на Nouveau, като ключовата разлика е, че е насочена изключително към GPU с GSP фърмуер, който обхваща модели от серията NVIDIA GeForce RTX 2000, базирани на микроархитектурата Turing.

Разлики с Nouveau и предимства на Nova

Нов се стреми да реши структурни проблеми на Нуво, което изисква основен ремонт в области като управление на паметта (VMM/MMU) и ключалки в кода. За разлика от Nouveau, Nova използва GSP фърмуера на NVIDIA, за да опрости GPU инициализацията и контрола, намалявайки сложността на кода и елиминирайки необходимостта от работа с по-стари карти.

Кодът Нова написано е на Ръжда, език, който не само подобрява сигурността чрез минимизиране на грешките в управлението на паметта, но също така позволява създаването на многократно използвани слоеве и абстракции за разработването на други драйвери.

Проектът Подкрепя се от различни паралелни инициативи, като rust-device за създаване на драйвери, rust-pci за взаимодействие с PCI шината и rust-drm за интеграция с DRM и GEM подсистеми. Тези инструменти също се използват в разработването на drm-asahi, драйвера Rust за Apple M1 и M2 GPU, което предполага сближаване в инфраструктурата на графичните драйвери, написани на Rust.

Използването на езика Ръждата в това развитие не е случайност, тъй като Rust предлага механизми, които улесняват прегледа и преработването, което допринася за по-голяма стабилност на проекта. Приемането на този език в ядрото на Linux отговаря на по-широка стратегия, която се стреми да модернизира писането на модули и да направи разработката по-достъпна за нови сътрудници.

Това не е единственото продължаващо усилие за интегриране на Rust в ядрото. Други драйвери и системи в момента се разработват на този език, като драйвера на Apple AGX GPU, поддръжката за съхранение на NVMe, файловата система PuzzleFS и различни реализации за сигурност и управление на устройства. Тенденцията към Rust продължава да набира скорост в екосистемата на Linux, отбелязвайки значителна промяна в начина, по който се обръща внимание на сигурността и стабилността при разработването на ядрото на операционната система.

Фази на изпълнение

В момента Nova е в първата фаза на изпълнение, вграден nova-core, модул с приблизително 400 реда код, който установява абстракциите, необходими за комуникация с фърмуера на GSP. Заедно с nova-core са добавени и основни връзки за интеграция с фърмуера на NVIDIA.

Струва си да се спомене, че Първоначално беше планирано Nova да пристигне на Linux 6.14 с модул nova-core, състоящ се от 232 реда код, но в крайна сметка той не беше включен, защото Грег Кроа-Хартман спомена някои подробности които се нуждаеха от полиране.

С новото потвърждение, че вече ще бъде включено, Сега контролерът ще премине към следващите фази в който се предвижда да се добави:

  • нова-дрм: драйвер за DRM (Direct Rendering Manager) за управление на взаимодействието с GPU от потребителското пространство.
  • VFIO с vGPU мениджър: ще позволи използването на виртуални GPU на NVIDIA във виртуализационни среди.

И накрая, важно е да се изясни, че Nova eВ сегашното си състояние той не е функционален контролер и че изпратени пачове Те са само основата за започване на разработката на контролера, тоест кодът е този, който ще постави основата за бъдещо развитие.