Virtio-nvgpu projekt arendab virtio-seadet, mis võimaldab pääseda NVIDIA GPU-ile KVM hyperviisori haldamisel töötavates külg süsteemides minimaalse jõudluse kadumisega. Komponentide hulka kuuluvad külgsüsteemi laaditav kernelimoodul ja virtio-seade, mis töötab host-keskkonna küljel. Kernelimooduli kood on kirjutatud C keeles ja levitatakse GPLv2 litsentsi alusel, virtio-seadmestiku kood on kirjutatud Rustis ja levitatakse Apache 2.0 litsentsi alusel.
Arendajate hinnangul ei ületa GPU-le pääsemise jõudluse kadumine 2%. Suurt töökiirus saavutatakse, suunates NVIDIA pädevusi ioctl-kutsed otse NVIDIA draiverile ja töötades NVIDIA draiveri ABI tasemel, ilma API taseme päringute tõlkimiseta. Külgsüsteem kasutab standardsed NVIDIA raamatukogusid ja kõrgetasemelisi draivereid, mis töötavad kasutajaruumi tasemel.
Külgsüsteemi laaditakse kernelimoodul, mis pakub seadme faile /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm ja suunab ioctl() ja mmap() kõned virtqueue kaudu host-keskkonnas töötavale töötlejale, mis edastab need hosti NVIDIA draiverile. Context switchingi vähendamiseks host-süsteemi ja virtuaalse masina vahel peegelduvad käsu puut jaotised (mmap) ühisse mälu, mis on host-keskkonna ja GPU-s juurdepääsetav.
Erakordse GPU-le ligipääsu suunamise (VFIO Passthrough) erinevalt pakub virtio-nvgpu ühiskasutust ühe GPU jaoks mitmelt küljelt. virtuaalmasinate, ja erinevalt virtio-gpu (Venus, VirGL) töötab see ABI edastuse kaudu NVIDIA draiverile, mitte graafika API-de Vulkan ja OpenGL tõlkekihi tasemel. Virtio-nvgpu puuduseks on täieliku isoleerimise puudumine IOMMU baasil (külgsüsteemid töötavad läbi hosti NVIDIA draiveri ja piirduvad ainult ioctl-kõnede filtreerimisega) ja sõltuvus NVIDIA draiveri ABI-st (ABI muutub igas versioonis ja nõuab virtio-nvgpu kohandamist).
Virtio-nvgpu võimalused on piisavad renderdamiseks, video kodeerimiseks ja arvutamiseks API-de kaudu Vulkan, OpenGL, NVENC ja CUDA. Põhiliseks rakendusvaldkonnaks on nimetatud pilvepõhiste mänguteenuste või virtuaalsete töökohtade loomist, kus mäng või graafika rakendus käivitatakse. virtuaalses masinas, milles toimub renderdamine, tulemuse riistvaraline kodeerimine NVENC-i abil ja väljundi edastamine kaugkasutajale komprimeeritud videovoona.
Allikas: opennet.ru
