vGPU от NVIDIA идёт в открытое ядро: разбор серии патчей с vGPU Manager для Nova
5 сентября NVIDIA отправила в рассылку ядра Linux серию из 13 патчей: vGPU-менеджер и VFIO-вариантный драйвер, работающие поверх открытого драйвера Nova. Тема нишевая, но прецедент первый: NVIDIA vGPU может заработать на полностью открытом хост-стеке. Ниже коротко о том, в чём вообще цимес, как vGPU устроен сейчас и что именно прислали на ревью.
Как сегодня делить GPU NVIDIA между виртуалками
Сейчас это довольно нетривиальная задача. По сути у нас есть два стула пути:
Первый путь, passthrough целиком: GPU через VFIO отдаётся одной ВМ, работает даже с GeForce. Но хост при этом полностью теряет карту. Делить её нельзя, и схема «одна карта = один пользователь» масштабируется плохо.
Второй путь, проприетарный vGPU: карта режется на несколько виртуальных GPU с фиксированными профилями памяти, гостю видится обычная NVIDIA-карта. Так живут VDI, облачный гейминг и инференс-фермы. Официальная поддержка только на лицензируемых платах датацентр- и воркстейшн-класса (A16, L4, L40S, A100/H100, RTX 6000 Ada и т.п.); GeForce вне игры, хотя аппаратный SR-IOV в кремнии есть давно. Для работы нужны проприетарный хост-драйвер, закрытый vGPU Manager и лицензионный сервер по подписке. В homelab'ах выживают полулегальные разлочки вроде vgpu_unlock, ломающиеся на каждом релизе драйвера.
Открытые kernel-модули NVIDIA, которые компания публикует с 2022 года были распиарены, но картину вообще не поменяли: kernel-часть vgpu-vfio там есть, но менеджер и весь верхний уровень закрыты и намертво привязаны к фирменному стеку. Открытого vGPU до этой недели не существовало.
Nova: Rust-драйвер NVIDIA в дереве ядра
Nova пишется на Rust прямо в дереве ядра. Низкоуровневую логику выполняет GSP (GPU System Processor), процессор на самой карте с прошивкой Resource Manager; ядро получает тонкий открытый слой. База, nova-core, уже в mainline с ядра 6.20, функциональная часть дозревает в ветке drm-rust-next. NVIDIA держит в проекте команду инженеров и параллельно открыла репозиторий NVIDIA/nova с публичным CI: любой патч прогоняется на кластере реальных GPU, отчёт о тестах падает прямо в PR.
Что именно выложили
Серию «Introduce NVIDIA vGPU manager and VFIO variant driver» отправил Zhi Wang, экс-мейнтейнер Intel GVT-g, теперь инженер NVIDIA. Объём: 36 файлов, около 4,5 тыс. строк. Внутри четыре части:
- vGPU-менеджер переехал внутрь nova-core: ядро, Rust, лицензия GPL. Реестр инстансов, пулы VRAM-слотов по профилям, обмен GMC-командами с прошивкой через очереди GSP, канал PluginRpc через BAR1, зачистка гостевой памяти (CeUtils), логи плагинов в debugfs;
- VFIO-вариантный драйвер (drivers/vfio/pci/nvidia-vgpu) нарочито тонкий: биндится на SR-IOV VF через driver_override, подсовывает гостю правильные PCI ID виртуальной карты, дальше делегирует стандартному vfio-pci-core; iommufd работает из коробки;
- граница между двумя модулями: три GPL-символа nvidia_vgpu_open/close/reset;
- переработка прошлогоднего RFC: менеджер перенесли из VFIO-драйвера в ядро, копии прошивочных заголовков из VFIO-части убрали.
Итог по архитектуре: хосту больше не нужен проприетарный драйвер вообще, достаточно upstream-ядра и QEMU. Гости могут быть и Linux, и Windows.
Но есть парочка оговорок
- серия только ушла на ревью, так что до «vGPU в ядре в следующей мажорной версии» ещё далеко: контрольный путь (создание и жизненный цикл vGPU) и производительность впереди, о зрелости речи пока не идёт;
- почти наверняка это история про воркстейшн- и датацентр-карты, GeForce снова в стороне: лицензионная модель vGPU никуда не делась, и будет ли открытый стек работать без лицензии, неизвестно;
- сама Nova до десктопа ещё не доросла, в первую очередь это compute-сценарии.
#ит_заметки #linux #nvidia #gpu #passthrough #vfio #homelab