NVIDIA ha publicat un conjunt de pegats per al nucli Linux с реализацией технологии vGPU, позволяющей использовать виртуальные GPU NVIDIA в системах виртуализации. Работа vGPU организуется аппаратно через разделение ресурсов физического GPU NVIDIA и привязки каждому vGPU своей виртуальной функции PCI Express (VF, Virtual Function), что позволяет создавать на базе гостевых систем мощные виртуальные рабочие станции, способные выполнять ресурсоёмкие вычислительные и графические операции. Драйвер может использоваться с видеокартами NVIDIA на базе микроархитектуры Ada Lovelace. Число создаваемых vGPU зависит от модели видеокарты.
Al costat de l'amfitrió, l'operació de creació i aparellament de vGPU amb sistemes convidats la proporciona el controlador Nouveau modificat i, al costat del convidat, s'utilitzen controladors NVIDIA propietaris estàndard (al sistema convidat, les capacitats de vGPU són similars a les d'una GPU normal). ). Per a la vGPU, una part de la memòria s'assigna des del framebuffer de la GPU física, que s'assigna a aquesta vGPU i només la fa servir. Hi ha disponibles diversos tipus de vGPU, que difereixen en propòsit, mida de memòria de vídeo, nombre de pantalles virtuals i resolució màxima de pantalla.
Реализация включает в себя базовый драйвер nvkm (core driver), построенный на базе открытого драйвера Nouveau, и менеджер vGPU — vgpu_mgr, реализованный в форме модуля VFIO (Virtual Function I/O). Менеджер vGPU выполняет такие функции, как создание/удаление vGPU, выбор типа vGPU, предоставление API для управления из пространства пользователя. Менеджер vGPU взаимодействует с базовым драйвером GPU, который непосредственно обращается к оборудованию, выполняет загрузку прошивки GSP, вызывает связанные с vGPU функции прошивки, управляет совместными ресурсами, резервирует память в GPU, занимается обработкой исключений, определяет конфигурацию оборудования и выполняет обработку системных событий, таких как переход в спящий режим. +———————+ +———————+ +———————+ | Linux VM | | Windows VM | | Guest VM | | +—————-+ | | +—————-+ | | +—————-+ | | |Applications… | | | |Applications… | | | |Applications… | | | +—————-+ | | +—————-+ | | +—————-+ | … | +—————-+ | | +—————-+ | | +—————-+ | | | Guest Driver | | | | Guest Driver | | | | Guest Driver | | | +—————-+ | | +—————-+ | | +—————-+ | +———^———-+ +———-^———+ +———-^———+ | | | +———————————————————————+ |+———————+ +———————+ +———————+| || QEMU | | QEMU | | QEMU || || | | | | || |+———————+ +———————+ +———————+| +———————————————————————+ | | | +————————————————————————————————+ | +—————————————————————-+ | | | VFIO | | | | | | | +————————+ | +————————+ +———————————+| | | | Core Driver vGPU | | | | | || | | | Support | || | | +————————+ | | NVIDIA vGPU Manager | | NVIDIA vGPU VFIO Variant Driver || | | | NVIDIA GPU Core | | | | | || | | | Driver | | +————————+ +———————————+| | | +———^—————+ +—————————————————————-+ | | | | | | | +————————————————————————————————+ | | | | +———-|—————————|————————|———————-|———-+ | v +———-v———+ +————v———+ +————v———+ | | NVIDIA | PCI VF | | PCI VF | | PCI VF | | | Physical GPU | | | | | | | | | (Virtual GPU) | | (Virtual GPU) | | (Virtual GPU) | | | +———————+ +———————+ +———————+ | +————————————————————————————————+

Дополнительно можно отметить принятие в состав Mesa Vulkan-драйвера gfxstream (Graphics Streaming Kit), который может применяться для организации доступа к API Vulkan из гостевых систем на базе Linux, Android и Fuchsia. Основой драйвера выступает одноимённый генератор кода (Graphics Streaming Kit), применяемый для перенаправления обращений к графическим API при виртуализации API Vulkan. Драйвер разработан компанией Google и используется в эмуляторе платформы Android, виртуальном Android-устройстве Cuttlefish, сервисе Google Play Games и операционной системе Fuchsia. Поддержка gfxstream уже включена в состав QEMU и crosvm. Поддерживается совместное использование с виртуальными устройствами virtio-gpu и goldish.
Font: opennet.ru
