Projekt virtio-nvgpu rozvíjí virtio zařízení, které umožňuje přístup k GPU NVIDIA z hostitelských systémů běžících pod hypervizorem KVM s minimálním snížením výkonu. Součástí je modul jádra nahrávaný do hostitelského systému a virtio zařízení prováděné na straně hostitelského prostředí. Kód modulu jádra je napsán v jazyce C a je distribuován pod licencí GPLv2, zatímco kód virtio zařízení je napsán v Rustu a je distribuován pod licencí Apache 2.0.
Podle odhadů vývojářů ztráta výkonu při přístupu k GPU nepřesahuje 2 %. Vysoké rychlosti se dosahuje díky přesměrování ioctl volání na nativní ovladač NVIDIA a práci na úrovni ABI ovladače NVIDIA, bez překladů požadavků na úrovni API. Na straně hostitelského systému se používají standardní knihovny a vysoce úrovňové ovladače NVIDIA, které běží v uživatelském prostoru.
V hostitelském systému se načte modul jádra, který poskytuje zařízení souborů /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm a předává volání ioctl() a mmap() přes virtqueue k obslužnému programu na straně hostitelského prostředí, který je předává hostitelskému ovladači NVIDIA. Pro odstranění přepínání kontextu mezi hostitelským systémem a virtuálním strojem jsou příkopy příkazů odráženy (mmap) do sdílené paměti, která je dostupná hostitelskému prostředí a GPU.
Na rozdíl od exkluzivního přístupu k GPU (VFIO Passthrough) projekt virtio-nvgpu umožňuje sdílený přístup k jednomu GPU z více virtuálních strojů, a na rozdíl od virtio-gpu (Venus, VirGL) pracuje skrze předání ABI k ovladači NVIDIA, ne na úrovni překladů grafických API Vulkan a OpenGL. Nevýhodami virtio-nvgpu jsou nedostatek plné izolace na bázi IOMMU (hostitelské systémy pracují skrze hostitelský ovladač NVIDIA a jsou omezeny pouze na filtrování volání ioctl) a vazba na ABI ovladače NVIDIA (ABI se mění v každé verzi a vyžaduje adaptaci virtio-nvgpu).
Možnosti virtio-nvgpu jsou dostatečné pro rendering, kódování videa a výpočty pomocí API Vulkan, OpenGL, NVENC a CUDA. Hlavní oblastí použití je uvedeno vytváření cloudových herních služeb nebo virtuálních pracovních míst, ve kterých je hra nebo grafická aplikace spuštěna v virtuálním stroji, ve které dochází k renderování, hardwarovému kódování výsledku pomocí NVENC a přenosu výstupu vzdálenému uživateli ve formě komprimovaného video streamu.
Zdroj: opennet.ru
