Virtio-nvgpu նախագիծը մշակում է Virtio սարք, որը հնարավորություն է տալիս մուտք գործել NVIDIA GPU-ներ KVM հիպերվիզորի ներքո աշխատող հյուր համակարգերից՝ նվազագույն արդյունավետության ազդեցությամբ։ Այն բաղկացած է հյուր համակարգում բեռնված միջուկի մոդուլից և հոսթի վրա աշխատող Virtio սարքից։ Միջուկի մոդուլի կոդը գրված է C լեզվով և լիցենզավորված է GPLv2 լիցենզիայով, մինչդեռ Virtio սարքի կոդը գրված է Rust լեզվով և լիցենզավորված է Apache 2.0 լիցենզիայով։
Մշակողների խոսքով՝ GPU-ին մուտք գործելիս կատարողականի կորուստը չի գերազանցում 2%-ը։ Բարձր կատարողականություն է ապահովվում ioctl կանչերը NVIDIA բնիկ դրայվերին վերահասցեավորելով և NVIDIA դրայվերի ABI մակարդակով աշխատելով՝ առանց API մակարդակով հարցումները թարգմանելու։ Հյուրի կողմից օգտագործվում են բնիկ գրադարաններ և օգտատիրոջ տարածքում աշխատող բարձր մակարդակի NVIDIA դրայվերներ։
Հյուր համակարգում բեռնվում է միջուկային մոդուլ։ Այն տրամադրում է /dev/nvidiactl, /dev/nvidia0…N և /dev/nvidia-uvm սարքի ֆայլերը և ioctl() և mmap() կանչերը վիրտուալ հերթի միջոցով ուղղորդում է հոսթ միջավայրի մշակիչին, որը դրանք փոխանցում է NVIDIA հոսթ դրայվերին։ Հոսթ համակարգի և վիրտուալ մեքենայի միջև համատեքստային փոփոխությունները կանխելու համար հրամանների բուֆերները քարտեզագրվում են (mmapped) հոսթ միջավայրի և GPU-ի կողմից հասանելի համօգտագործվող հիշողության մեջ։
Ի տարբերություն GPU մուտքի բացառիկ անցման (VFIO Passthrough), virtio-nvgpu նախագիծը մի քանի GPU-ներից համատեղ մուտք է ապահովում։ վիրտուալ մեքենա, և ի տարբերություն virtio-gpu-ի (Venus, VirGL), այն աշխատում է NVIDIA դրայվերին ABI փոխանցման միջոցով, այլ ոչ թե Vulkan և OpenGL գրաֆիկական API թարգմանության մակարդակով: virtio-nvgpu-ի թերություններից են IOMMU-ի վրա հիմնված լիարժեք մեկուսացման բացակայությունը (հյուր համակարգերը գործում են NVIDIA հոսթ դրայվերի միջոցով և սահմանափակվում են ioctl կանչերի ֆիլտրմամբ) և NVIDIA դրայվեր ABI-ից կախվածությունը (ABI-ն փոխվում է յուրաքանչյուր տարբերակի հետ, ինչը պահանջում է virtio-nvgpu-ի հարմարեցում):
virtio-nvgpu-ի հնարավորությունները բավարար են Vulkan, OpenGL, NVENC և CUDA API-ների միջոցով հաշվողական տեխնիկայի մշակման, տեսաերիզավորման և մշակման համար։ Հիմնական կիրառությունը, որը նշվում է, ամպային խաղային ծառայությունների կամ վիրտուալ աշխատասեղանների ստեղծումն է, որտեղ խաղը կամ գրաֆիկական ծրագիրը գործարկվում է։ վիրտուալ մեքենա, որը կատարում է արդյունքի ռենդերինգ, NVENC-ի միջոցով արդյունքի ապարատային կոդավորում և ելքային տվյալների փոխանցում հեռակա օգտատիրոջը՝ սեղմված տեսահոսքի տեսքով։
Source: opennet.ru
