NVIDIA опубликовала код с реализацией vGPU на базе драйвера Nouveau

Компания NVIDIA опубликовала набор патчей для ядра Linux с реализацией технологии vGPU, позволяющей использовать виртуальные GPU NVIDIA в системах виртуализации. Работа vGPU организуется аппаратно через разделение ресурсов физического GPU NVIDIA и привязки каждому vGPU своей виртуальной функции PCI Express (VF, Virtual Function), что позволяет создавать на базе гостевых систем мощные виртуальные рабочие станции, способные выполнять ресурсоёмкие вычислительные и графические операции. Драйвер может использоваться с видеокартами NVIDIA на базе микроархитектуры Ada Lovelace. Число создаваемых vGPU зависит от модели видеокарты.

На стороне хост системы операции создания и сопряжения vGPU с гостевыми системами обеспечивает изменённый драйвер Nouveau, а на стороне гостевых систем используются штатные проприетарные драйверы NVIDIA (в гостевой системы возможности vGPU аналогичны обычному GPU). Для vGPU выделяется часть памяти из фреймбуфера физического GPU, которая закрепляется за данным vGPU и используется только им. Предоставляются различные типы vGPU, отличающиеся назначением, размером видеопамяти, числом виртуальных дисплеев и максимальным разрешением экрана.

Реализация включает в себя базовый драйвер 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.

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