GPU-virtualisering, hvordan det fungerer og hva det brukes til

En av begrensningene som grafikkort på stasjonære og bærbare datamaskiner har, er manglende evne til å kjøre flere operativsystemer samtidig eller virtuelle maskiner. Denne differensieringen som noen GPUer har kalles virtualisering, og i denne artikkelen skal vi forklare hva det er og hvilke endringer det krever i maskinvaren.

Før PC-en kom, jobbet folk i terminaler som var koblet til en sentral mini-datamaskin, som hadde ansvaret for å utføre alle oppgavene. Med fremveksten av cloud computing som kjører forskjellige operativsystemer i virtuelle maskiner, er virtualisering ikke bare nødvendig på CPUer, men også på GPUer.

GPU-virtualisering

Hvorfor er virtualisering nødvendig på GPUer?

Virtualisering er maskinvarens evne til å lage flere versjoner av seg selv slik at den kan brukes av flere virtuelle maskiner. For eksempel en del av en prosessor som har blitt virtualisert vil bli sett av et operativsystem som kjører i en virtuell maskin, mens andre virtuelle maskiner vil se andre deler av CPUen som en enkelt og tydelig CPU. I så fall har vi virtualisert CPU, ettersom vi har opprettet en virtuell versjon av hvert operativsystem som kjører på systemet.

Når det gjelder GPUer, er kommandolistene for grafikk og databehandling skrevet i visse deler av minnet spesielt, og generelt er GPUene som vi monterer på PCene våre designet for å fungere i et enkelt operativsystem uten noen virtuell maskin i mellom. .

Dette er ikke tilfelle med grafikkort for datasentre, der flere forskjellige forekomster, virtuelle maskiner, av et operativsystem vanligvis kjører, og det er nødvendig for hver klient å få tilgang til GPU. Det er i dette tilfellet virtualisering i GPUer er nødvendig

Virtualisering fra GPU-siden

AMD Vega GPU

GPUer trenger også endringer på maskinvarenivå for å støtte virtualisering. På grunn av dette selges grafikkort med denne kapasiteten vanligvis bare til markeder langt borte fra stasjonære PC-er, og har derfor en mye høyere pris enn stasjonære GPU-er. I dag kan du leie kraften til en GPU i skyen for å akselerere visse vitenskapelige arbeider, gjengi en scene eksternt for en film eller en serie, og så videre.

SR-IOV

SR-IOV

Hver PCI Express-periferiutstyr har en unik minneadresse på hver PCs minnekart. Hva betyr at hvis vi bruker et virtualisert miljø, kan vi ikke få tilgang til maskinvaren som er koblet til disse portene, for eksempel grafikkort mange ganger. Vanligvis har de virtuelle maskinene vi kjører på stasjonære PC-er ikke muligheten til å bruke grafikkortet, som bare vil være tilgjengelig for gjesteoperativsystemet.

Løsningen på dette er SR-IOV, som virtualiserer PCI Express-porten og lar flere virtuelle maskiner få tilgang til disse minneadressene samtidig. På PC-en gjøres perifer kommunikasjon gjennom samtaler til bestemte minneadresser. Selv om disse samtalene i dag ikke samsvarer med fysiske minneadresser, men virtuelle, er den ukrenkelige regelen at innholdet i en minneadresse ikke kan manipuleres av to klienter samtidig, siden det er konflikter om innholdet i dataene.

SR-IOV for å fungere trenger en nettverkskontroller integrert i PCI Express-enheten, i tilfelle vi har å gjøre med grafikkortet, som mottar forespørsler fra de forskjellige virtuelle maskinene som trenger tilgang til ressursene.

Endringer i DMA-stasjoner for GPU-virtualisering

Canales DMA

Den første endringen skjer i DMA-enhetene, disse enhetene kommer vanligvis parvis i GPU-ene som vi bruker på PC-er og gir tilgang til RAM av systemet, for ikke å forveksle med VRAM, gjennom en alternativ kanal. Ved hver ramme vil GPU ha tilgang til å lese skjermlisten i en del av RAM-kortet, eller den må kopiere dataene fra RAM-en til VRAM i tilfelle den trenger dataene senere. Dette bruker en DMA-enhet i hver retning. For GPU-er med virtualisering? De bruker flere DMA-enheter parallelt eller en DMA-enhet med flere samtidige tilgangskanaler .

Bruken av de forskjellige kanalene av de virtuelle GPUene styres av den integrerte nettverkskontrolleren, som er ansvarlig for å administrere forespørsler til RAM, enten fysisk eller til en annen periferiutstyr som også er koblet til PCI Express-porten. Så hvis de forskjellige virtuelle GPU-ene må ha tilgang, for eksempel en SSD disk, gjør de det gjennom DMA-enhetene.

GPU-kommandoprosessor endres

Procesadores Comandos Tipos

Den andre endringen er i kommandoprosessoren. Alle GPUer for databehandling uten grafikk i midten er vant til å jobbe i flere sammenhenger samtidig, dette er fordi de er veldig små kommandolister som løses på kort tid, på den annen side hvis vi snakker om grafikk den tingen det endres fullstendig, siden det vanligvis brukes en enkelt liste med kommandoer.

Hva med ikke-virtualiserte GPUer som bruker flere skjermer? Det er ikke det samme som å bruke flere operativsystemer i virtuelle maskiner, siden skjermlisten i disse tilfellene kommer fra et enkelt operativsystem som indikerer GPU-en videoutgangen som hvert bilde må overføres gjennom.

Derfor er det nødvendig å implementere en spesiell grafikkommandoprosessor, som fungerer sammen med DMA-enhetene og den integrerte nettverkskontrolleren for å fungere ikke som en GPU, men som flere forskjellige og virtuelle.

GPU-ressurser distribueres i virtualisering

Alle moderne grafikkort er vanligvis delt inn i flere blokker innen andre blokker, for eksempel hvis vi tar GA102 fra NVIDIA RTX 3080 eller 3090 vil vi se at den i utgangspunktet er sammensatt av flere GPC-er, der det er flere TPC-er, og i hver TPC har vi 2 SM.

Avhengig av hvordan fordelingen av ressurser har blitt foreslått av produsenten, kan vi finne en distribusjon der hver virtuell maskin tilsvarer en GPC, så i tilfelle GA102 vil vi snakke om en virtualisering av GPU i 7 forskjellige. Selv om det også ville være mulig å gjøre det på TPC-nivå, kan i så fall opptil 36 virtuelle maskiner opprettes, men som vi forstår, vil kraften for hver og en være veldig annerledes.

I GPU-ene er det som er tildelt i NVIDIA en komplett GPC eller hva i AMD er kjent som Shader Engine, siden hver av disse delene har alle nødvendige komponenter for å fungere som en GPU alene. I tilfeller der den virtualiserte GPU ikke brukes til gjengivelse, men til databehandling, er distribusjonen på TPC-nivå eller tilsvarende i AMD RDNA, WGP.