virtio-nvgpu — modulo per fornire accesso alla GPU NVIDIA dalle macchine virtuali KVM

Il progetto virtio-nvgpu sviluppa un dispositivo virtio che consente di accedere alla GPU NVIDIA da sistemi guest eseguiti sotto hypervisor KVM, con una perdita di prestazioni minima. Comprende un modulo del kernel, caricato nel sistema guest, e un dispositivo virtio, eseguito sul lato dell'ambiente host. Il codice del modulo del kernel è scritto in linguaggio C ed è distribuito sotto licenza GPLv2, mentre il codice del dispositivo virtio è scritto in Rust e distribuito sotto licenza Apache 2.0.

Secondo le stime degli sviluppatori, la perdita di prestazioni nell'accesso alla GPU non supera il 2%. L'alta velocità di funzionamento è ottenuta grazie al reindirizzamento delle chiamate ioctl al driver NVIDIA nativo e all'operatività a livello ABI del driver NVIDIA, senza tradurre le richieste a livello API. Sul lato del sistema guest vengono utilizzate librerie standard e driver NVIDIA di alto livello che operano nello spazio utente.

Nel sistema guest viene caricato un modulo del kernel che fornisce i file dispositivi /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm e inoltra le chiamate ioctl() e mmap() tramite virtqueue a un gestore sul lato dell'ambiente host, il quale le trasmette al driver NVIDIA dell'host. Per eliminare i passaggi di contesto tra il sistema host e la macchina virtuale, i buffer dei comandi vengono riflessi (mmap) nella memoria condivisa, accessibile all'ambiente host e alla GPU.

A differenza dell'accesso esclusivo alla GPU (VFIO Passthrough), il progetto virtio-nvgpu fornisce accesso condiviso a una singola GPU da più sistemi guest. macchine virtuali, e, a differenza di virtio-gpu (Venus, VirGL), opera tramite la passerella ABI al driver NVIDIA, e non a livello della traduzione delle API grafiche Vulkan e OpenGL. Gli svantaggi di virtio-nvgpu sono l'assenza di un'adeguata isolamento basato su IOMMU (i sistemi guest operano tramite il driver host NVIDIA e sono limitati solo dalla filtrazione delle chiamate ioctl) e il vincolo all'ABI dei driver NVIDIA (l'ABI cambia in ogni versione e richiede l'adattamento di virtio-nvgpu).

Le capacità di virtio-nvgpu sono sufficienti per il rendering, la codifica video e i calcoli utilizzando le API Vulkan, OpenGL, NVENC e CUDA. Viene menzionato principalmente l'uso per la creazione di servizi di gioco cloud o posti di lavoro virtuali, in cui un gioco o un'applicazione grafica viene eseguita in macchina virtuale, in cui si svolge il rendering, la codifica hardware del risultato tramite NVENC e la trasmissione dell'output a un utente remoto sotto forma di flusso video compresso.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster