virtio-nvgpu — modulis piekļuves nodrošināšanai NVIDIA GPU no KVM virtuālajām mašīnām

Virtio-nvgpu projekts izstrādā virtio ierīci, kas nodrošina piekļuvi NVIDIA GPU no viesu sistēmām, kas darbojas KVM hipervizora ietvaros, ar minimālu ietekmi uz veiktspēju. Tā sastāv no kodola moduļa, kas ielādēts viesu sistēmā, un virtio ierīces, kas darbojas resursdatorā. Kodola moduļa kods ir rakstīts C valodā un licencēts saskaņā ar GPLv2, savukārt virtio ierīces kods ir rakstīts Rust valodā un licencēts saskaņā ar Apache 2.0 licenci.

Pēc izstrādātāju teiktā, veiktspējas zudums, piekļūstot GPU, nepārsniedz 2%. Augsta veiktspēja tiek panākta, novirzot ioctl izsaukumus uz vietējo NVIDIA draiveri un darbojoties NVIDIA draivera ABI līmenī, netulkojot pieprasījumus API līmenī. Viesu pusē tiek izmantotas vietējās bibliotēkas un augsta līmeņa NVIDIA draiveri, kas darbojas lietotāja telpā.

Viesu sistēmā tiek ielādēts kodola modulis. Tas nodrošina ierīču failus /dev/nvidiactl, /dev/nvidia0…N un /dev/nvidia-uvm un novirza ioctl() un mmap() izsaukumus caur virtqueue uz apstrādātāju resursdatora vidē, kas tos nodod tālāk NVIDIA resursdatora draiverim. Lai izvairītos no konteksta pārslēgšanas starp resursdatora sistēmu un virtuālo mašīnu, komandu buferi tiek kartēti (mmapped) koplietojamā atmiņā, kurai var piekļūt resursdatora vide un GPU.

Atšķirībā no ekskluzīvas GPU piekļuves caurlaides (VFIO Passthrough), virtio-nvgpu projekts nodrošina koplietotu piekļuvi vienam GPU no vairākiem virtuālās mašīnas, un atšķirībā no virtio-gpu (Venus, VirGL), tas darbojas, izmantojot ABI pārsūtīšanu uz NVIDIA draiveri, nevis Vulkan un OpenGL grafikas API tulkošanas līmenī. Virtio-nvgpu trūkumi ietver pilnīgas IOMMU balstītas izolācijas trūkumu (viessistēmas darbojas, izmantojot NVIDIA resursdatora draiveri, un tās ir ierobežotas ar ioctl izsaukumu filtrēšanu) un tā atkarību no NVIDIA draivera ABI (ABI mainās ar katru versiju, tāpēc ir nepieciešama virtio-nvgpu pielāgošana).

Virtio-nvgpu iespējas ir pietiekamas renderēšanai, video kodēšanai un skaitļošanai, izmantojot Vulkan, OpenGL, NVENC un CUDA API. Galvenais minētais pielietojums ir mākoņspēļu pakalpojumu vai virtuālo darbvirsmu izveide, kur darbojas spēle vai grafikas lietojumprogramma. virtuālā mašīna, kas veic renderēšanu, rezultāta aparatūras kodēšanu, izmantojot NVENC, un izejas pārraidi attālajam lietotājam saspiestas video straumes veidā.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster