Red Hat представил Nova, драйвер для GPU NVIDIA, написанный на языке Rust

Компания Rad Hat начала работу над проектом Nova, развивающим новый открытый драйвер для GPU NVIDIA, в которых операции инициализации и управления GPU вынесены в прошивку и выполняются отдельным микроконтроллером GSP (GPU System Processor). Новый драйвер оформлен в виде модуля для ядра Linux и использует подсистему DRM (Direct Rendering Manager). Проект позиционируется как продолжение развитие драйвера Nouveau для GPU с GSP-прошивками, используемыми начиная с серии NVIDIA GeForce RTX 2000 на базе микроархитектуры Turing, и в долгосрочной перспективе может заменить Nouveau.

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

Среди причин для создания нового драйвера также упоминается возможность добиться значительного упрощения по сравнению с драйвером Nouveau, благодаря задействованию многих готовых обработчиков, предоставляемых прошивкой GSP. Из-за необходимости поддержки старых GPU NVIDIA код драйвера Nouveau излишне усложнён и негибок, а для решения имеющихся в драйвере Nouveau проблем, например, связанных с блокировками в коде VMM/MMU, требуется существенная переработка кодовой базы.

В развиваемом с нуля новом драйвере Nova имеется возможность изначально избавиться от подобных пробоем и усложнений, так как можно обойтись без поддержки многих абстракций на стороне драйвера, которые в новых GPU NVIDIA уже реализованы на уровне прошивки. В Nouveau приходится совмещать код для поддержки старых и новых GPU, и оставление в драйвере Nova только поддержки GPU на базе GSP даст возможность отбросить весь груз по обеспечению совместимости с кодом для работы со старыми GPU.

Источник: http://www.opennet.ru/opennews/art.shtml?num=60821