Nova — новий драйвер ядра Direct Rendering Manager (DRM), написаний на Rust
Оскільки Nvidia випустила свої модулі ядра GPU як відкритий вихідний код, здавалося, що і власний драйвер Nvidia, і драйвер з відкритим кодом Nouveau матимуть значні покращення завдяки внеску, який може зробити спільнота, і навіть це в якийсь момент Nouveau міг би впоратися із завданням.
Через кілька місяців і Розвиток Nouveau сповільниться, Red Hat вжив заходів щодо цього питання і нещодавно оголосив про це працює над проектом Nova, який представляє собою новий відкритий драйвер для графічних процесорів NVIDIA, який розробляється в Rust.
Цей водій включає операції ініціалізації GPU та керування у мікропрограмному забезпеченні, використовуючи автономний мікроконтролер GSP. Nova розроблена як модуль для ядра Linux і використовує підсистему DRM (Direct Rendering Manager). Цей проект вважається продовженням розробки драйвера Nouveau для GPU з мікропрограмою GSP.
Данило Краммріх (Red Hat) пояснює:
З Nova ми маємо можливість значно зменшити складність порівняно з Nouveau з двох основних причин. Перш за все, історична архітектура Nouveau, особливо навколо nvif/nvkm, є досить складною та негнучкою та потребує капітального перегляду для вирішення деяких проблем. Крім того, ми також хочемо скористатися нагодою, щоб зробити внесок у роботу Rust над ядром і скористатися перевагами підвищеної безпеки пам’яті, яку пропонує мова програмування Rust.
Крім того, згадується, що з розвитком Nova, Red Hat має намір скористатися можливістю, щоб зробити внесок у роботу Rust над ядром, оскільки, як згадувалося, код драйвера написаний мовою Rust і використовує кілька рівнів для розробки відеодрайверів цією мовою. Наприклад, драйвер використовує абстракції з гілки Rust-Device для створення драйверів, компонентів з гілки Rust-Pci для роботи з шиною PCI та прив’язки для підсистем DRM і GEM з гілки Rust-DRM.
Також згадується розробка драйвера drm-asahi Rust для графічних процесорів Apple M1 і M2. Очікується, що використання Rust підвищить безпеку та надійність драйвера за рахунок зниження ймовірності помилок при роботі з пам’яттю та дозволу поєднувати роботу над відеодрайвером із розробкою загальних компонентів у Rust.
Мета від Нова є з часом стане драйвером з відкритим кодом для NVIDIA Linux, спрямований на графічні процесори Turing і новіші моделі (особливо в серії RTX 2000), які підтримують GSP. Цей новий контролер розробляється в Rust для досягнення більшої легкості та гнучкості, який представлений як перспективний варіант.
Один з причини щоб створити новий контролер полягає в спрощенні процесу порівняно з Nouveau, завдяки використанню готових до використання драйверів, які надає прошивка GSP. Це дозволяє уникнути непотрібної складності в коді драйвера Nouveau, який повинен підтримувати старіші графічні процесори NVIDIA та створює такі проблеми, як збої в коді VMM/MMU. Розробляючи Nova з нуля та зосереджуючись лише на графічних процесорах на основі GSP, можна сподіватися уникнути цих проблем і ускладнень.
З іншого боку, Red Hat також згадує деякі моменти, які їй необхідно вирішити, кажучи, що з вибором Rust першою проблемою, яку потрібно вирішити, є відсутність абстракцій зв’язування C для наскрізної інфраструктури ядра:
"наприклад, абстракції пристрою/драйвера... нам потрібен користувач для абстракцій висхідного потоку, але нам також потрібні абстракції для створення драйвера - ми хочемо розробити Nova upstream і почати лише з заглушки, яка використовує лише кілька абстракцій Rust основи.
нарешті, якщо ти є зацікавлений дізнатися більше про це, Ви можете перевірити деталі У наступному посиланні а також проконсультуватися з розробкою та ознайомитися з вихідним кодом цього у вашому сховищі.