virtio-nvgpu — un modul pentru accesul la GPU NVIDIA din mașinile virtuale KVM

Proiectul virtio-nvgpu dezvolta un dispozitiv virtio care permite accesul la GPU NVIDIA din sistemele guest rulandu-se pe hypervisorul KVM, cu pierderi minime de performanță. Componentele includ un modul de kernel, care se încarcă în sistemul guest și un dispozitiv virtio care rulează în mediul de host. Codul modulului kernel este scris în C și distribuit sub licența GPLv2, iar codul dispozitivului virtio este scris în Rust și distribuit sub licența Apache 2.0.

Potrivit estimărilor dezvoltatorilor, pierderile de performanță la accesarea GPU-ului nu depășesc 2%. Viteza ridicată este obținută prin redirecționarea apelurilor ioctl către driverul nativ NVIDIA și funcționarea la nivel ABI al driverului NVIDIA, fără a traduce apelurile la nivel API. În sistemul guest sunt folosite biblioteci standard și drivere de înalt nivel NVIDIA care funcționează în spațiul utilizatorului.

În sistemul guest, se încarcă un modul de kernel care furnizează fișierele dispozitivelor /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm și redirecționează apelurile ioctl() și mmap() prin virtqueue către un handler în mediul de host, care le transmite driverului NVIDIA de pe host. Pentru a elimina comutările de context între sistemul gazdă și masina virtuală, buferii de comenzi sunt reflectați (mmap) în memorie comună, accesibilă mediului de host și GPU.

Spre deosebire de redirecționarea exclusivă a accesului la GPU (VFIO Passthrough), proiectul virtio-nvgpu oferă acces comun la un singur GPU din mai multe mașini virtuale, și spre deosebire de virtio-gpu (Venus, VirGL), funcționează prin redirecționarea ABI către driverul NVIDIA, nu la nivelul traductiei API-urilor grafice Vulkan și OpenGL. Dezavantajele virtio-nvgpu includ lipsa unei izolări complete bazate pe IOMMU (sistemele guest funcționează prin driverul host NVIDIA și sunt limitate doar la filtrarea apelurilor ioctl) și dependența de ABI-urile driverelor NVIDIA (ABI se schimbă cu fiecare versiune și necesită adaptarea virtio-nvgpu).

Capacitățile virtio-nvgpu sunt suficiente pentru redare, codare video și calcule folosind API-urile Vulkan, OpenGL, NVENC și CUDA. Ca principal domeniu de aplicare se menționează crearea de servicii de jocuri în cloud sau locuri de muncă virtuale, unde jocul sau aplicația grafică este lansată în mașina virtuală, în care se realizează redarea, codificarea hardware a rezultatului utilizând NVENC și transmiterea ieșirii către utilizatorul de la distanță sub formă de flux video comprimat.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster