virtio-nvgpu — modul za pristup GPU NVIDIA iz KVM virtualnih mašina

Projekt virtio-nvgpu razvija virtio-uređaj koji omogućava pristup NVIDIA GPU-u iz gostujućih sustava koji rade pod hipervizorom KVM, uz minimalni gubitak performansi. Uključuje modul jezgre koji se učitava u gostujući sustav i virtio-uređaj koji se izvršava na strani host-okolice. Kod modula jezgre napisan je u C jeziku i distribuira se pod GPLv2 licencom, dok je kod virtio-uređaja napisan na Rustu i distribuira se pod Apache 2.0 licencom.

Prema procjeni developera, gubitak performansi prilikom pristupa GPU-u ne prelazi 2%. Visoka brzina rada postiže se preusmjeravanjem ioctl poziva na izvorni NVIDIA upravljački program i radom na razini ABI NVIDIA upravljačkog programa, bez prevođenja zahtjeva na razini API-ja. Na strani gostujućeg sustava koriste se standardne biblioteke i visokorazinski NVIDIA upravljački programi koji rade u korisničkom prostoru.

U gostujućem sustavu učitava se modul jezgre koji pruža datoteke uređaja /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm i preusmjerava ioctl() i mmap() pozive preko virtqueue-a do uređaja na strani host-okolice, koji ih prosljeđuje host-u NVIDIA upravljačkom programu. Kako bi se izbjegla prebacivanja konteksta između host sustava i virtualne mašine, naredbeni predmemorija se reflektira (mmap) u zajedničku memoriju dostupnu host-okolici i GPU-u.

Za razliku od ekskluzivnog prosljeđivanja pristupa GPU-u (VFIO Passthrough), projekt virtio-nvgpu omogućuje dijeljeni pristup jednom GPU-u iz više virtualnih mašina, a za razliku od virtio-gpu (Venus, VirGL) radi preko prosljeđivanja ABI do NVIDIA upravljačkog programa, a ne na razini prevođenja grafičkih API-ja Vulkan i OpenGL. Nedostaci virtio-nvgpu uključuju nedostatak potpune izolacije na bazi IOMMU (gostujući sustavi rade preko host NVIDIA upravljačkog programa i ograničeni su samo na filtriranje ioctl poziva) i vezanost uz ABI NVIDIA upravljačkih programa (ABI se mijenja u svakoj verziji i zahtijeva prilagodbu virtio-nvgpu).

Mogućnosti virtio-nvgpu su dovoljno kvalitetne za renderiranje, kodiranje videa i izračune pomoću API-ja Vulkan, OpenGL, NVENC i CUDA. Kao glavno područje primjene spominje se stvaranje oblaka gaming usluga ili virtualnih radnih mjesta, u kojima se igra ili grafička aplikacija pokreće u virtualnoj mašini, u kojem se obavlja renderiranje, hardversko kodiranje rezultata uz pomoć NVENC i prijenos izlaza udaljenom korisniku u obliku komprimiranog video streama.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster