GpuMmu-modell
Den här artikeln beskriver GpuMmu modell, som introducerades i Windows 10 (WDDM 2.0).
I GpuMmu-modellen har GPU en egen minneshanteringsenhet (MMU) som översätter virtuella GPU-adresser per process till fysiska adresser.
Varje process har separata virtuella processor- och GPU-adressutrymmen som använder distinkta sidtabeller. Videominneshanteraren (VidMm) hanterar det virtuella GPU-adressutrymmet för alla processer. VidMm ansvarar också för allokering, tillväxt, uppdatering, att säkerställa närvaro och frigöring av sidtabeller. Maskinvaruformatet för de sidtabeller som används av GPU MMU är okänt för VidMm- och abstraheras via enhetsdrivrutinsgränssnitt (DDIs). Abstraktionen stöder en översättning på flera nivåer, inklusive en sidtabell med fast storlek och en storleksanpassad rotsidetabell.
Även om VidMm ansvarar för att hantera det virtuella GPU-adressutrymmet och dess underliggande sidtabeller, tilldelar VidMm inte automatiskt virtuella GPU-adresser till allokeringar. Det här ansvaret ligger på användarlägesdrivrutinen (UMD).
VidMm erbjuder två huvudsakliga tjänster till UMD:
Minnesallokering och deallokering. UMD kan allokera videominne via den befintliga Allokera återanrop och frigöra det minnet via den befintliga Frigör återanrop. Allokera returnerar en hanterare till en VidMm--allokering för UMD. En GPU-motor kan köras på det här handtaget. En sådan allokering avser specifikt fysiskt videominne, som en GPU-motor kan komma åt och bearbeta via en allokeringslista.
Hantering av virtuellt adressutrymme för GPU. För motorer som körs i det virtuella läget måste en virtuell GPU-adress uttryckligen tilldelas till en allokering innan den kan nås virtuellt. För detta ändamål erbjuder VidMm UMD-tjänsterna för att reservera eller kostnadsfria virtuella GPU-adresser och mappa specifika allokeringsintervall till den virtuella GPU-adressrymden i en process. Dessa tjänster är flexibla och ger UMD finkornig kontroll över ett process-GPU-virtuellt adressutrymme. UMD kan välja att antingen tilldela en specifik virtuell GPU-adress till en allokering eller låta VidMm- automatiskt välja en tillgänglig adress, eventuellt ange några minsta och högsta begränsningar för virtuella GPU-adresser. En enskild allokering kan ha flera associerade GPU-adressmappningar och tjänster tillhandahålls till UMD för att implementera -panelresurskontraktet.
På samma sätt kan UMD i en konfiguration av länkat visningskort uttryckligen mappa virtuella GPU-adresser till specifika allokeringsinstanser. För varje mappning kan UMD välja om mappningen ska vara till sig själv eller till en specifik peer-GPU. I den här modellen är de virtuella processor- och GPU-adresserna som tilldelats till en allokering oberoende. En UMD kan bestämma sig för att behålla dem på samma sätt i båda adressutrymmena eller hålla dem oberoende.
Virtuella GPU-adresser hanteras logiskt med en fast 4 KB-sidkornighet via DDI-gränssnittet. Virtuella GPU-adresser kan referera till allokeringar som finns i ett minnessegment eller systemminne. Systemminnet hanteras med 4 KB fysisk kornighet medan minnessegment hanteras på antingen 4 KB eller 64 KB efter förarens val. Alla VidMm- allokeringar justeras och storleksanpassas till en multipel av sidstorleken som väljs av drivrutinen.
Åtkomst till ett ogiltigt intervall med virtuella GPU-adresser resulterar i en åtkomstöverträdelse och avslutning av kontexten och/eller enheten som orsakade åtkomstfelet. För att återställa från ett sådant fel initierar VidMm en omstart som eskaleras till en adapterbaserad timeoutidentifiering återställning (TDR) om det misslyckas.
Modellen GpuMmu illustreras i följande diagram: