Virtualizzazione della GPU, come funziona e per cosa viene utilizzata

Una delle limitazioni delle schede grafiche per desktop e laptop è l'impossibilità di eseguire più sistemi operativi contemporaneamente o macchine virtuali. Questa differenziazione che hanno alcune GPU si chiama virtualizzazione e in questo articolo spiegheremo cos'è e quali cambiamenti richiede nell'hardware.

Prima dell'arrivo del personal computer, le persone lavoravano in terminali collegati a un mini-computer centrale, che era incaricato di svolgere tutti i compiti. Con l'avvento del cloud computing che esegue vari sistemi operativi nelle macchine virtuali, la virtualizzazione non è necessaria solo sulle CPU, ma anche sulle GPU.

Virtualizzazione GPU

Perché è necessaria la virtualizzazione sulle GPU?

La virtualizzazione è la capacità dell'hardware di creare più versioni di se stesso in modo che possa essere utilizzato da più macchine virtuali. Ad esempio una parte di un file CPU che è stato virtualizzato sarà visto da un sistema operativo in esecuzione in una macchina virtuale, mentre altre macchine virtuali vedranno altre parti della CPU come una CPU singola e distinta. In quel caso abbiamo virtualizzato la CPU, poiché abbiamo creato una versione virtuale di ogni sistema operativo in esecuzione sul sistema.

Nel caso delle GPU, gli elenchi di comandi per la grafica e il calcolo sono scritti in alcune parti della memoria in particolare e in generale le GPU che montiamo nei nostri PC sono progettate per funzionare in un unico sistema operativo senza alcuna macchina virtuale in mezzo. .

Questo non è il caso delle schede grafiche per data center, dove di solito sono in esecuzione diverse istanze, macchine virtuali, di un sistema operativo ed è necessario che GPU. È in questo caso che è necessaria la virtualizzazione nelle GPU

Virtualizzazione dal lato GPU

GPU AMD Vega

Le GPU necessitano anche di modifiche a livello hardware per supportare la virtualizzazione. Per questo motivo, le schede grafiche con questa capacità vengono solitamente vendute solo a mercati lontani dai PC desktop e quindi hanno un prezzo molto più alto rispetto alle GPU desktop. Oggi puoi utilizzare la potenza di una GPU nel cloud per accelerare determinati lavori scientifici, eseguire il rendering di una scena in remoto per un film o una serie e così via.

SR-IOV

SR-IOV

Ogni periferica PCI Express ha un indirizzo di memoria univoco sulla mappa di memoria di ogni PC. Ciò significa che se utilizziamo un ambiente virtualizzato non possiamo accedere molte volte all'hardware connesso a queste porte come le schede grafiche. Di solito le macchine virtuali che eseguiamo su PC desktop non hanno la possibilità di utilizzare la scheda grafica, che sarà accessibile solo al sistema operativo guest.

La soluzione a questo è SR-IOV, che virtualizza la porta PCI Express e consente a più macchine virtuali di accedere simultaneamente a questi indirizzi di memoria. Nel PC, la comunicazione periferica avviene tramite chiamate a determinati indirizzi di memoria. Sebbene oggi queste chiamate non corrispondano a indirizzi di memoria fisica, ma virtuali, la regola inviolabile è che il contenuto di un indirizzo di memoria non può essere manipolato da due client contemporaneamente, poiché allora ci sono conflitti riguardo al contenuto dei dati.

L'SR-IOV per funzionare necessita di un controller di rete integrato nel dispositivo PCI Express, nel caso in cui si abbia a che fare con la scheda grafica, che riceve le richieste dalle diverse macchine virtuali che necessitano di accedere alle sue risorse.

Modifiche alle unità DMA per la virtualizzazione GPU

Canali DMA

Il primo cambiamento si verifica nelle unità DMA, queste unità di solito vengono in coppia nelle GPU che utilizziamo nei PC e danno accesso al RAM del sistema, da non confondere con la VRAM, attraverso un canale alternativo. Ad ogni frame la GPU dovrà accedere per leggere l'elenco delle schermate in una parte della RAM o dovrà copiare i dati dalla RAM alla VRAM nel caso in cui necessiti di quei dati in un secondo momento. Questo utilizza un'unità DMA in ciascuna direzione. Nel caso di GPU con virtualizzazione? Utilizzano più unità DMA in parallelo o un'unità DMA con più canali di accesso simultanei .

L'utilizzo dei diversi canali da parte delle GPU virtuali è gestito dal controller di rete integrato, che si occupa di gestire le richieste alla RAM, sia fisicamente che ad altra periferica anch'essa collegata alla porta PCI Express. Quindi, se le diverse GPU virtuali devono accedere, ad esempio, a un file SSD disk, lo fanno tramite le unità DMA.

Modifiche al processore dei comandi della GPU

Processori Comandi Tipos

La seconda modifica è nel processore dei comandi. Tutte le GPU per il calcolo senza grafica al centro sono abituate a lavorare in più contesti contemporaneamente, questo perché sono liste di comandi molto piccole che si risolvono in poco tempo, d'altra parte se parliamo di grafica la cosa cambia completamente, poiché di solito viene utilizzato un unico elenco di comandi.

E le GPU non virtualizzate che utilizzano più display? Non è la stessa cosa che utilizzare più sistemi operativi nelle macchine virtuali, poiché la lista delle schermate in questi casi proviene da un unico sistema operativo che indica alla GPU l'uscita video attraverso la quale ogni immagine deve essere trasmessa.

Pertanto, è necessario implementare uno speciale processore di comando grafico, che funziona in combinazione con le unità DMA e il controller di rete integrato per funzionare non come una GPU, ma come diverse GPU diverse e virtuali.

Le risorse della GPU sono distribuite nella virtualizzazione

Tutte le schede grafiche contemporanee sono solitamente divise in diversi blocchi all'interno di altri blocchi, ad esempio se prendiamo GA102 dal file NVIDIA RTX 3080 o 3090 vedremo che inizialmente è composto da più GPC, all'interno dei quali sono presenti diversi TPC e in ogni TPC abbiamo 2 SM.

A seconda di come la distribuzione delle risorse è stata proposta dal produttore, possiamo trovare una distribuzione in cui ogni macchina virtuale corrisponde ad un GPC, quindi nel caso del GA102 si parlerebbe di una virtualizzazione della GPU in 7 differenti. Sebbene sia possibile farlo anche a livello di TPC, in quel caso si possono creare fino a 36 macchine virtuali, ma come si capisce la potenza per ognuna sarebbe molto diversa.

Nelle GPU ciò che viene assegnato in NVIDIA è un GPC completo o cosa in AMD è noto come Shader Engine, poiché ciascuna di queste parti ha tutti i componenti necessari per funzionare da sola come una GPU. Nei casi in cui la GPU virtualizzata non viene utilizzata per il rendering ma per l'elaborazione, la distribuzione è a livello di TPC o il suo equivalente in AMD RDNA, il WGP.