Projekts virtio-nvgpu attīsta virtio ierīci, kas ļauj piekļūt NVIDIA GPU no viesu sistēmām, kas darbojas ar KVM hipervizoru, ar minimālu veiktspējas zudumu. Tas ietver kodola moduli, kas tiek ielādēts viesu sistēmā, un virtio ierīci, kas darbojas saimniekvidē. Kodola modulis ir uzrakstīts C valodā un izplatīts saskaņā ar GPLv2 licences nosacījumiem, bet virtio ierīces kods ir uzrakstīts Rust un izplatīts saskaņā ar Apache 2.0 licenci.
Saskaņā ar izstrādātāju novērtējumu veiktspējas zudums piekļūstot GPU nepārsniedz 2%. Augsta darba ātruma sasniegšana tiek panākta, novirzot ioctl zvanu uz NVIDIA oriģinālo draiveri un strādājot uz NVIDIA draivera ABI līmeņa, bez pieprasījumu tulkošanas API līmenī. Viesu sistēmā tiek izmantotas standarta bibliotēkas un augsta līmeņa NVIDIA draiveri, kas darbojas lietotāja vietā.
Viesu sistēmā tiek ielādēts kodola modulis, kas nodrošina ierīču failus /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm un pārsūta ioctl() un mmap() pieprasījumus caur virtqueue uz apstrādātāju saimniekvidē, kas tos nodod saimniekdraiverim NVIDIA. Lai izvairītos no konteksta maiņām starp saimniek sistēmu un virtuālo mašīnu, komandu buferi tiek atspoguļoti (mmap) kopējā atmiņā, kas pieejama saimniekvidē un GPU.
Atšķirībā no ekskluzīvā piekļuves caur GPU (VFIO Passthrough) projekts virtio-nvgpu nodrošina koplietotu piekļuvi vienam GPU no vairākām virtuālo mašīnu, un atšķirībā no virtio-gpu (Venus, VirGL) tas darbojas caur ABI pārsūtīšanu uz NVIDIA draiveri, nevis uz Vulkan un OpenGL grafisko API līmeņa tulkošanas. Virtio-nvgpu mīnusi ir pilnīgas izolācijas trūkums, pamatojoties uz IOMMU (viesu sistēmas darbojas caur saimniekdraiveri NVIDIA un ir ierobežotas tikai ar ioctl pieprasījumu filtrēšanu), un saistība ar NVIDIA draiveru ABI (ABI mainās katrā versijā un prasa virtio-nvgpu pielāgošanu).
Virtio-nvgpu iespējas ir pietiekamas renderēšanai, video kodēšanai un aprēķiniem, izmantojot API Vulkan, OpenGL, NVENC un CUDA. Galvenās pielietošanas jomas ietver mākoņu spēļu pakalpojumu vai virtuālo darba vietu izveidi, kur spēle vai grafiskā programma tiek palaista. virtuālā mašīnā, kur tiek veikts renderēšana, aparatūras kodēšana ar NVENC un rezultāta nodošana attālinātam lietotājam saspiešanas videostrūmē.
Avots: opennet.lv
