Projekti virtio-nvgpu zhvillon një pajisje virtio, e cila lejon qasje në GPU-në NVIDIA nga sistemet mysafir që funksionojnë nën menaxhuesin KVM, me humbje minimale në performancë. Ai përfshin një modul bërthamor, i ngarkuar në sistemin mysafir dhe një pajisje virtio, e cila ekzekutohet në anën e mjedisit host. Kodi i modulit bërthamor është shkruar në gjuhën C dhe shpërndahet sipas licencës GPLv2, ndërsa kodi i pajisjes virtio është shkruar në Rust dhe shpërndahet sipas licencës Apache 2.0.
Sipas vlerësimeve të zhvilluesve, humbja e performancës gjatë qasjes në GPU nuk kalon 2%. Shpejtësia e lartë arrihet falë ridrejtimit të thirrjeve ioctl në drejtuesin vendas NVIDIA dhe punës në nivelin ABI të drejtuesit NVIDIA, pa përkthimin e kërkesave në nivelin API. Në anën e sistemit mysafir përdoren biblioteka standarde dhe drejtues të lartë NVIDIA, që funksionojnë në hapësirën e përdoruesit.
NĂ« sistemin mysafir ngarkohet njĂ« modul bĂ«rthamor, i cili siguron skedarĂ«t e pajisjeve /dev/nvidiactl, /dev/nvidia0âŠN, /dev/nvidia-uvm dhe kalon thirrjet ioctl() dhe mmap() pĂ«rmes virtqueue nĂ« trajtuesin nĂ« anĂ«n e mjedisit host, i cili i dĂ«rgon ato nĂ« drejtuesin hĂ«st tĂ« NVIDIA. PĂ«r tĂ« eliminuar kalimet e kontekstit midis sistemit host dhe makinĂ«s virtuale, buferat e komandave reflektohen (mmap) nĂ« memorjen e pĂ«rbashkĂ«t, tĂ« aksesueshme pĂ«r mjedisin host dhe GPU.
Në dallim nga kalimi ekskluziv i qasjes në GPU (VFIO Passthrough), projekti virtio-nvgpu siguron qasje të përbashkët në një GPU nga disa makinat virtuale, dhe në krahasim me virtio-gpu (Venus, VirGL) funksionon përmes kalimit ABI në drejtuesin NVIDIA, e jo në nivelin e përkthimit të API grafike Vulkan dhe OpenGL. Disavantazhet e virtio-nvgpu janë mungesa e izolimit të plotë mbi bazën e IOMMU (sistemet mysafir punojnë përmes drejtuesit host të NVIDIA dhe kufizohen vetëm në filtrimin e thirrjeve ioctl) dhe varësia nga ABI e drejtuesve NVIDIA (ABI ndryshon me çdo version dhe kërkon adaptimin e virtio-nvgpu).
Kapacitetet e virtio-nvgpu janë të mjaftueshme për renderimin, kodimin e videove dhe llogaritjet duke përdorur API-në Vulkan, OpenGL, NVENC dhe CUDA. Si një fushë kryesore përdorimi përmendet krijimi i shërbimeve të lojërave në cloud ose vendeve të punës virtuale, në të cilat loja ose aplikacioni grafik ekzekutohet në makinën virtuale, në të cilën realizohet renderimi, kodimi harduerik i rezultatit me ndihmën e NVENC dhe dërgimi i daljes për përdoruesin e largët në formën e një stream-i të compressuar të videot.
Burimi: opennet.ru
