Virtualizarea GPU, cum funcționează și pentru ce se folosește

Una dintre limitările pe care le au plăcile grafice pentru desktop și laptop este incapacitatea de a rula mai multe sisteme de operare în același timp sau mașini virtuale. Această diferențiere pe care o au unele GPU-uri se numește virtualizare și în acest articol vom explica ce este și ce modificări necesită în hardware.

Înainte de sosirea computerului personal, oamenii lucrau în terminale conectate la un mini-computer central, care se ocupa de îndeplinirea tuturor sarcinilor. Odată cu apariția cloud computingului care rulează diferite sisteme de operare în mașinile virtuale, virtualizarea nu este necesară doar pe procesoare, ci și pe GPU-uri.

Virtualizare GPU

De ce este necesară virtualizarea pe GPU-uri?

Virtualizarea este capacitatea hardware-ului de a crea mai multe versiuni ale sale, astfel încât să poată fi folosită de mai multe mașini virtuale. De exemplu, o parte a unui Procesor care a fost virtualizat va fi văzut de un sistem de operare care rulează într-o mașină virtuală, în timp ce alte mașini virtuale vor vedea alte părți ale procesorului ca un procesor unic și distinct. În acest caz, am virtualizat CPU-ul, deoarece am creat o versiune virtuală a fiecărui sistem de operare care rulează pe sistem.

În cazul GPU-urilor, listele de comenzi pentru grafică și calcul sunt scrise în anumite părți ale memoriei, în special și, în general, GPU-urile pe care le montăm în computerele noastre sunt proiectate să funcționeze într-un singur sistem de operare, fără nici o mașină virtuală între ele. .

Acest lucru nu este cazul cu plăcile grafice pentru centrele de date, unde mai multe instanțe diferite, mașini virtuale ale unui sistem de operare rulează de obicei și este necesar ca fiecare client să acceseze GPU. În acest caz, este necesară virtualizarea în GPU-uri

Virtualizare din partea GPU

GPU AMD Vega

GPU-urile au nevoie, de asemenea, de modificări la nivel hardware pentru a sprijini virtualizarea. Din această cauză, plăcile grafice cu această capacitate sunt de obicei vândute numai pe piețe departe de computerele desktop și, prin urmare, au un preț mult mai mare decât GPU-urile desktop. Astăzi puteți angaja puterea unui GPU în cloud pentru a accelera anumite lucrări științifice, pentru a reda o scenă de la distanță pentru un film sau o serie etc.

SR-IOV

SR-IOV

Fiecare periferic PCI Express are o adresă de memorie unică pe harta de memorie a fiecărui computer. Ce înseamnă că, dacă folosim un mediu virtualizat, nu putem accesa de multe ori hardware-ul conectat la aceste porturi, cum ar fi plăcile grafice. De obicei, mașinile virtuale pe care le rulăm pe computerele desktop nu au capacitatea de a utiliza placa grafică, care va fi accesibilă doar sistemului de operare invitat.

Soluția la aceasta este SR-IOV, care virtualizează portul PCI Express și permite mai multor mașini virtuale să acceseze aceste adrese de memorie simultan. În computer, comunicarea periferică se face prin apeluri către anumite adrese de memorie. Deși astăzi aceste apeluri nu corespund adreselor de memorie fizică, ci celor virtuale, regula inviolabilă este că conținutul unei adrese de memorie nu poate fi manipulat de doi clienți în același timp, de atunci există conflicte cu privire la conținutul datelor.

SR-IOV pentru a funcționa are nevoie de un controler de rețea integrat în dispozitivul PCI Express, în cazul în care avem de-a face cu placa grafică, care primește solicitările de la diferitele mașini virtuale care au nevoie de acces la resursele sale.

Modificări ale unităților DMA pentru virtualizarea GPU

Canales DMA

Prima modificare are loc în unitățile DMA, aceste unități apar de obicei în perechi în GPU-urile pe care le folosim în PC-uri și oferă acces la RAM a sistemului, care nu trebuie confundat cu VRAM, printr-un canal alternativ. La fiecare cadru, GPU va trebui să acceseze pentru a citi lista ecranului într-o parte a memoriei RAM sau va trebui să copieze datele din RAM în VRAM în cazul în care are nevoie de aceste date mai târziu. Aceasta utilizează o unitate DMA în fiecare direcție. În cazul GPU-urilor cu virtualizare? Folosesc mai multe unități DMA în paralel sau o unitate DMA cu mai multe canale de acces simultane .

Utilizarea diferitelor canale de către GPU-urile virtuale este gestionată de controlerul de rețea integrat, care este responsabil pentru gestionarea solicitărilor către RAM, fie fizic, fie către un alt periferic conectat, de asemenea, la portul PCI Express. Deci, dacă diferitele GPU virtuale trebuie să acceseze, de exemplu, un SSD disc, o fac prin unitățile DMA.

Modificările procesorului de comandă GPU

Procesadores Comandos Tipos

A doua modificare este în procesorul de comenzi. Toate GPU-urile pentru calcul fără grafică la mijloc sunt obișnuite să lucreze în mai multe contexte în același timp, deoarece acestea sunt liste de comenzi foarte mici care se rezolvă într-un timp scurt, pe de altă parte dacă vorbim despre grafică se modifică complet, deoarece se folosește de obicei o singură listă de comenzi.

Dar GPU-urile nevirtualizate care utilizează mai multe afișaje? Nu este același lucru cu utilizarea mai multor sisteme de operare în mașinile virtuale, deoarece lista ecranelor în aceste cazuri provine dintr-un singur sistem de operare care indică către GPU ieșirea video prin care trebuie transmisă fiecare imagine.

Prin urmare, este necesar să implementați un procesor special de comandă grafică, care funcționează împreună cu unitățile DMA și controlerul de rețea integrat pentru a funcționa nu ca un singur GPU, ci ca mai multe diferite și virtuale.

Resursele GPU sunt distribuite în virtualizare

Toate plăcile grafice contemporane sunt de obicei împărțite în mai multe blocuri din alte blocuri, de exemplu dacă luăm GA102 din NVIDIA RTX 3080 sau 3090 vom vedea că este compus inițial din mai multe GPC-uri, în cadrul cărora există mai multe TPC-uri și în fiecare TPC avem 2 SM.

În funcție de modul în care distribuția resurselor a fost propusă de producător, putem găsi o distribuție în care fiecare mașină virtuală corespunde unui GPC, deci în cazul GA102 am vorbi despre o virtualizare a GPU în 7 diferite. Deși ar fi posibil să se facă și la nivelul TPC, în acest caz pot fi create până la 36 de mașini virtuale, dar după cum înțelegem, puterea fiecăruia ar fi foarte diferită.

În GPU-uri, ceea ce este atribuit în NVIDIA este un GPC complet sau ce în AMD este cunoscut sub numele de Shader Engine, deoarece fiecare dintre aceste părți are toate componentele necesare pentru a funcționa ca GPU de la sine. În cazurile în care GPU virtualizat nu este utilizat pentru redare, ci pentru calcul, atunci distribuția este la nivelul TPC sau echivalentul său în AMD RDNA, WGP.