virtio-nvgpu — moduł umożliwiający dostęp do GPU NVIDIA z maszyn wirtualnych KVM

Projekt virtio-nvgpu rozwija urządzenie virtio, które umożliwia dostęp do GPU NVIDIA z systemów gościnnych uruchamianych pod kontrolą hipernadzoru KVM, z minimalnymi stratami wydajności. W skład projektu wchodzi moduł jądra ładowany w systemie gościnnym oraz urządzenie virtio uruchamiane po stronie hosta. Kod modułu jądra napisany jest w języku C i rozpowszechniany na licencji GPLv2, a kod urządzenia virtio napisany jest w języku Rust i rozpowszechniany na licencji Apache 2.0.

Według szacunków deweloperów straty wydajności przy dostępie do GPU nie przekraczają 2%. Wysoka wydajność osiągana jest dzięki przekierowaniu wywołań ioctl do natywnego sterownika NVIDIA i pracy na poziomie ABI sterownika NVIDIA, bez translacji żądań na poziomie API. Po stronie systemu gościnnego stosowane są standardowe biblioteki i wysoko poziomowe sterowniki NVIDIA działające w przestrzeni użytkownika.

W systemie gościnnym ładowany jest moduł jądra, który udostępnia pliki urządzeń /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm i przekazuje wywołania ioctl() oraz mmap() przez virtqueue do obsługującego je modułu w środowisku hosta, który przekazuje je do sterownika NVIDIA na hoście. Aby uniknąć przełączeń kontekstu między systemem hosta a maszyną wirtualną, bufor komend jest odzwierciedlany (mmap) w pamięci wspólnej dostępnej dla środowiska hosta i GPU.

W przeciwieństwie do ekskluzywnego przekazywania dostępu do GPU (VFIO Passthrough), projekt virtio-nvgpu zapewnia współdzielony dostęp do jednego GPU z wielu systemów gościnnych, a w przeciwieństwie do virtio-gpu (Venus, VirGL) działa poprzez przekazywanie ABI do sterownika NVIDIA, a nie na poziomie translacji API graficznych Vulkan i OpenGL. maszyn wirtualnych, a w przeciwieństwie do virtio-gpu (Venus, VirGL) działa poprzez przekazywanie ABI do sterownika NVIDIA, a nie na poziomie translacji API graficznych Vulkan i OpenGL. Wady virtio-nvgpu obejmują brak pełnej izolacji opartej na IOMMU (systemy gościnne działają poprzez sterownik NVIDIA hosta i są ograniczone jedynie do filtrowania wywołań ioctl) oraz związanie z ABI sterowników NVIDIA (ABI zmienia się w każdej wersji i wymaga dostosowania virtio-nvgpu).

Możliwości virtio-nvgpu są wystarczające do renderowania, kodowania wideo oraz obliczeń za pomocą API Vulkan, OpenGL, NVENC i CUDA. Głównym obszarem zastosowania jest tworzenie chmurowych usług gamingowych lub wirtualnych stanowisk roboczych, w których gra lub aplikacja graficzna jest uruchamiana w maszynie wirtualnej, w której następuje renderowanie, sprzętowe kodowanie wyników za pomocą NVENC i przesyłanie wyjścia do zdalnego użytkownika w postaci skompresowanego strumienia wideo.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster