Virtualizzazione GPU - GPU virtualization
La virtualizzazione della GPU si riferisce alle tecnologie che consentono l'uso di una GPU per accelerare la grafica o le applicazioni GPGPU in esecuzione su una macchina virtuale . La virtualizzazione GPU è utilizzata in varie applicazioni come la virtualizzazione desktop , il cloud gaming e la scienza computazionale (es. simulazioni idrodinamiche ).
Le implementazioni della virtualizzazione della GPU generalmente implicano una o più delle seguenti tecniche: emulazione del dispositivo, API remota, pass-through fisso e pass-through mediato. Ogni tecnica presenta compromessi diversi per quanto riguarda il rapporto di consolidamento tra macchina virtuale e GPU , accelerazione grafica , fedeltà di rendering e supporto delle funzionalità , portabilità su hardware diverso, isolamento tra macchine virtuali e supporto per sospensione/ripresa e migrazione live .
API remota
Nel remoting API o nell'inoltro API, le chiamate alle API grafiche dalle applicazioni guest vengono inoltrate all'host tramite chiamata di procedura remota e l'host esegue quindi comandi grafici da più guest utilizzando la GPU dell'host come un singolo utente. Può essere considerata una forma di paravirtualizzazione se combinata con l'emulazione del dispositivo. Questa tecnica consente di condividere le risorse della GPU tra più guest e l'host quando la GPU non supporta la virtualizzazione assistita da hardware. È concettualmente semplice da implementare, ma presenta diversi svantaggi:
- Nella pura API remoting, c'è poco isolamento tra le macchine virtuali quando si accede alle API grafiche; l'isolamento può essere migliorato usando la paravirtualizzazione
- Le prestazioni vanno dall'86% fino al 12% delle prestazioni native in applicazioni che emettono un numero elevato di chiamate di disegno per frame
- È necessario inoltrare un numero elevato di punti di ingresso API e l'implementazione parziale dei punti di ingresso potrebbe diminuire la fedeltà
- Le applicazioni sui computer guest potrebbero essere limitate a poche API disponibili
Gli hypervisor di solito utilizzano la memoria condivisa tra guest e host per massimizzare le prestazioni e ridurre al minimo la latenza. Utilizzando invece un'interfaccia di rete (un approccio comune nel rendering distribuito ), il software di terze parti può aggiungere il supporto per API specifiche (es. RCUDA per CUDA ) o aggiungere il supporto per API tipiche (es. VMGL per OpenGL ) quando non è supportato da il pacchetto software dell'hypervisor, sebbene il ritardo della rete e l' overhead di serializzazione possano superare i vantaggi.
| Tecnologia | Direct3D | OpenGL | Vulcano | ApriCL |
|---|---|---|---|---|
|
VMware Virtual Shared Graphics Acceleration (vSGA) |
11 | 4.1 | sì | No |
|
Parallels Desktop per Mac Accelerazione 3D |
11 | 3.3 |
No | No |
|
Hyper-V RemoteFX vGPU |
11 | 4.4 | No | 1.1 |
|
Driver 3D di VirtualBox Guest Additions |
8/9 |
2.1 |
No | No |
|
QEMU / KVM con Virgil 3D |
No | 4.3 | pianificato | No |
Passante fisso
In pass-through fisso o pass-through GPU (un caso speciale di pass-through PCI ), una GPU è accessibile direttamente da una singola macchina virtuale in modo esclusivo e permanente. Questa tecnica raggiunge il 96-100% delle prestazioni native e dell'alta fedeltà, ma l'accelerazione fornita dalla GPU non può essere condivisa tra più macchine virtuali. In quanto tale, ha il rapporto di consolidamento più basso e il costo più elevato, poiché ogni macchina virtuale con accelerazione grafica richiede una GPU fisica aggiuntiva.
Le seguenti tecnologie software implementano il pass-through fisso:
- VMware Virtual Dedicated Graphics Acceleration (vDGA)
- Parallels Workstation Extreme
- Assegnazione di dispositivi discreti (DDA) Hyper-V
- Pass-through GPU Citrix XenServer
- Xen e QEMU / KVM con Intel GVT-d
VirtualBox ha rimosso il supporto per il pass-through PCI nella versione 6.1.0.
QEMU / KVM
Per alcuni modelli di GPU, i driver della scheda video Nvidia e AMD tentano di rilevare l'accesso alla GPU da parte di una macchina virtuale e disabilitano alcune o tutte le funzionalità della GPU. NVIDIA ha recentemente modificato le regole di virtualizzazione per le GPU consumer disabilitando il controllo nel driver GeForce Game Ready 465.xx e versioni successive.
Per NVIDIA, varie architetture di GPU consumer desktop e laptop possono essere passate in vari modi. Per le schede grafiche desktop, il passthrough può essere eseguito tramite KVM utilizzando la configurazione BIOS legacy o UEFI tramite SeaBIOS e OVMF, rispettivamente.
NVIDIA
Desktop
Per i desktop, è possibile passare la maggior parte delle schede grafiche, anche se per le schede grafiche con architettura Pascal o precedenti, il VBIOS della scheda grafica deve essere passato nella macchina virtuale se la GPU viene utilizzata per avviare l'host.
computer portatili
Per i laptop, il driver NVIDIA verifica la presenza di una batteria tramite ACPI e, senza batteria, verrà restituito un errore. Per evitare ciò, è necessario un accpitable creato da testo convertito in Base64 per falsificare una batteria e ignorare il controllo.
Pascal e prima
Per le schede grafiche per laptop Pascal e precedenti, il passthrough varia notevolmente in base alla configurazione della scheda grafica. Per i laptop che non dispongono di NVIDIA Optimus, come le varianti MXM, il passthrough può essere ottenuto con i metodi tradizionali. Per i laptop con NVIDIA Optimus acceso e il rendering tramite il framebuffer grafico integrato della CPU anziché il proprio, il passthrough è più complicato, richiede un display o un servizio di rendering remoto, l'uso di Intel GVT-g, nonché l'integrazione del VBIOS nella configurazione di avvio a causa della presenza di VBIOS nel BIOS di sistema del laptop rispetto alla GPU stessa. Per i laptop che dispongono di una GPU con NVIDIA Optimus e di un framebuffer dedicato, le configurazioni possono variare. Se NVIDIA Optimus può essere disattivato, il passthrough è possibile con i mezzi tradizionali. Tuttavia, se Optimus è l'unica configurazione, è molto probabile che il VBIOS sia presente nel BIOS di sistema del laptop, richiedendo gli stessi passaggi del rendering del laptop solo sul framebuffer grafico integrato, ma è anche possibile un monitor esterno.
Passaggio mediato
Nel pass-through del dispositivo mediato o nella virtualizzazione completa della GPU, l'hardware della GPU fornisce contesti con intervalli di memoria virtuale per ogni guest tramite IOMMU e l'hypervisor invia comandi grafici dai guest direttamente alla GPU. Questa tecnica è una forma di virtualizzazione assistita da hardware e raggiunge prestazioni quasi native e alta fedeltà. Se l'hardware espone i contesti come dispositivi logici completi, i guest possono utilizzare qualsiasi API. In caso contrario, API e driver devono gestire la complessità aggiuntiva dei contesti GPU. Come svantaggio, potrebbe esserci poco isolamento tra le macchine virtuali quando si accede alle risorse della GPU.
Le seguenti tecnologie software e hardware implementano il pass-through mediato:
- Accelerazione grafica VMware Virtual Shared Pass-through con Nvidia vGPU o AMD MxGPU
- Citrix XenServer GPU condivisa con Nvidia vGPU, AMD MxGPU o Intel GVT-g
- Xen e KVM con Intel GVT-g
- Thincast Workstation - Funzionalità 3D virtuale (Direct X 12 e API 3D Vulkan)
Sebbene la comunicazione remota API sia generalmente disponibile per le GPU attuali e precedenti, il pass-through mediato richiede il supporto hardware disponibile solo su dispositivi specifici.
| Venditore | Tecnologia | Famiglie di schede grafiche dedicate | Famiglie di GPU integrate | ||
|---|---|---|---|---|---|
| server | Professionale | Consumatore | |||
| Nvidia | vGPU | GRIGLIA , Tesla | Quadro | No | - |
| AMD | MxGPU | FirePro Server , Radeon Instinct | Radeon Pro | No | No |
| Intel | GVT-g | - | - | - | Broadwell e più recente |
Emulazione del dispositivo
Le architetture GPU sono molto complesse e cambiano rapidamente e i loro dettagli interni sono spesso tenuti segreti. In genere non è possibile virtualizzare completamente le nuove generazioni di GPU, ma solo le generazioni più vecchie e più semplici. Ad esempio, PCem , un emulatore specializzato dell'architettura PC IBM , può emulare un dispositivo grafico S3 ViRGE /DX, che supporta Direct3D 3, e un 3dfx Voodoo2 , che supporta Glide , tra gli altri.
Quando si utilizza un adattatore per display virtuale VGA o SVGA , il guest potrebbe non disporre dell'accelerazione grafica 3D, fornendo solo funzionalità minime per consentire l'accesso alla macchina tramite un terminale grafico. Il dispositivo emulato può esporre solo le modalità grafiche 2D di base agli ospiti. Il gestore della macchina virtuale può anche fornire implementazioni API comuni utilizzando il rendering del software per abilitare le applicazioni grafiche 3D sul guest, anche se a velocità che possono essere inferiori al 3% delle prestazioni native con accelerazione hardware. Le seguenti tecnologie software implementano le API grafiche utilizzando il rendering software:
- Renderizzatore software VMware SVGA 3D
- Controller grafico VirtualBox VMSVGA
- Acceleratore software Citrix XenServer OpenGL
- Piattaforma di rasterizzazione avanzata di Windows
- Renderizzatore software OpenGL core
- Rendering del software Mesa