Началось продвижение в ядро Linux драйвера Nova для GPU NVIDIA

Инженеры из компании Red Hat предложили для включения в состав ядра Linux первый набор патчей с реализацией драйвера Nova. Драйвер рассчитан на использование с GPU NVIDIA, оснащёнными GSP-прошивками, которые используются начиная с серии NVIDIA GeForce RTX 2000 на базе микроархитектуры Turing. В подобных GPU операции инициализации и управления реализованы в прошивке и выполняются отдельным микроконтроллером GSP (GPU System Processor). Предполагается, что в долгосрочной перспективе Nova заменит собой драйвер Nouveau для GPU с поддержкой GSP.

Новый драйвер написан на языке Rust и, так как инфраструктура для разработки Rust-драйверов ещё только развивается, код Nova намерены переносить в основной состав ядра поэтапно, по мере появления необходимых обвязок для языка Rust. На первом этапе для включения в ядро предложен драйвер “nova-core”, состояний из 232 строк кода. Nova-core реализует базовый уровень абстракций над программными интерфейсами прошивок GSP, и предоставляет API, независящий от версий прошивок.

На следующей стадии в ядро планируют включить DRM-драйвер nova-drm (Direct Rendering Manager) для взасимодействия с GPU из пространства пользователя, а также VFIO-драйвер с менеджером vGPU, позволяющим использовать виртуальные GPU NVIDIA в системах виртуализации.

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



Что касается прогресса добавления в ядро Linux возможностей для разработки драйверов на языке Rust, в состав ветки 6.14 приняты Rust-обвязки для PCI, платформ, Open Firmware, символьных устройств и некоторых функций ввода/вывода.
Грег Кроа-Хартман (Greg Kroah-Hartman), отвечающий за поддержку стабильной ветки ядра Linux, в pull-запросе с обновлением драйверов для ядра 6.14, охарактеризовал текущее состояние, как “почти готовность к написанию реального драйвера на Rust”.

Release. Ссылка here.