Nestri Labs разрабатывает virtio-nvgpu — экспериментальный проект, который позволяет гостевым системам Linux KVM получать доступ к графическим процессорам NVIDIA без традиционного сквозного подключения PCI. Цель проекта — дать возможность нескольким изолированным игровым виртуальным машинам использовать один и тот же графический процессор NVIDIA, рендерить кадры, кодировать их с помощью NVENC и передавать результат удалённым клиентам.
Вместо того чтобы выделять весь графический процессор для одной виртуальной машины, virtio-nvgpu оставляет его на хосте Linux и позволяет нескольким виртуальным машинам совместно использовать его. Нестри продемонстрировал, как четыре виртуальные машины одновременно используют одну GeForce RTX 3060.
Проект работает с KVM и пользовательским устройством virtio. В гостевой системе собственные драйверы NVIDIA в пользовательском пространстве остаются без изменений, а драйвер ядра гостевой системы перенаправляет необходимые запросы на драйвер NVIDIA на хосте.
В отличие от подходов, основанных на трансляции вызовов Vulkan или OpenGL, virtio-nvgpu работает на уровне ABI драйвера ядра NVIDIA. Это позволяет выполнять большую часть работы с графическим процессором внутри гостевой системы и сокращает объем данных, передаваемых через границу виртуальной машины.
Согласно тестам Nestri, производительность близка к «голой» платформе и составляет около 2 % или меньше при типичных рабочих нагрузках. Проект также поддерживает рендеринг в Vulkan, представление в Wayland, кодирование NVENC и базовое перечисление устройств CUDA.
Связь с Nestri прямая. В проекте nesbox используются легковесные микровиртуальные машины на основе KVM для потоковой передачи облачных игр. Графические процессоры Intel и AMD уже используют существующие механизмы virtio-gpu, а virtio-nvgpu разрабатывается для обеспечения аналогичной поддержки оборудования NVIDIA.
На данный момент virtio-nvgpu остается экспериментальной технологией. Она не обеспечивает такую же изоляцию, как сквозной режим VFIO, и ее поддержка зависит от совместимости ABI драйвера NVIDIA. Тем не менее проект уже функционирует и поддерживает Vulkan, Wayland, NVENC и совместное использование графического процессора несколькими гостевыми системами.
Подробнее см. репозиторий проекта на GitHub.
