Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Questo articolo descrive il modello GpuMmu , introdotto in Windows 10 (WDDM 2.0).
Nel modello GpuMmu la GPU ha una propria unità di gestione della memoria (MMU) che converte gli indirizzi virtuali GPU per processo in indirizzi fisici.
Ogni processo ha spazi di indirizzi virtuali DI CPU e GPU separati che usano tabelle di pagine distinte. La gestione della memoria video (VidMm) gestisce lo spazio indirizzi virtuale GPU di tutti i processi. VidMm è anche responsabile dell'allocazione, dell'espansione, dell'aggiornamento, della gestione della residenzialità e della liberazione delle tabelle delle pagine. Il formato hardware delle tabelle di pagine usate dalla GPU MMU è sconosciuto a VidMm ed è astratto tramite le interfacce del driver di dispositivo (DDIs). L'astrazione supporta una conversione a più livelli, tra cui una tabella di pagine a dimensione fissa e una tabella di pagina radice ridimensionabile.
Anche se VidMm è responsabile della gestione dello spazio indirizzi virtuale GPU e delle relative tabelle di pagine sottostanti, VidMm non assegna automaticamente indirizzi virtuali GPU alle allocazioni. Questa responsabilità rientra nel driver in modalità utente (UMD).
VidMm offre due servizi principali per la messaggistica unificata:
Allocazione di memoria e deallocazione. L'UMD può allocare memoria video tramite il callback Allocate esistente e liberare tale memoria tramite il callback deallocate esistente. La funzione Allocate restituisce un handle a un'allocazione VidMm all'UMD. Un motore GPU può operare su questo handle. Tale allocazione si riferisce in modo specifico alla memoria video fisica, a cui un motore GPU può accedere ed elaborare tramite un elenco di allocazioni.
Gestione dello spazio degli indirizzi virtuali GPU. Per i motori in esecuzione in modalità virtuale, è necessario assegnare in modo esplicito un indirizzo virtuale GPU a un'allocazione prima di poter accedere virtualmente. A questo scopo VidMm offre ai servizi UMD di riservare o liberare indirizzi virtuali GPU e di eseguire il mapping di intervalli di allocazione specifici nello spazio di indirizzi virtuali GPU di un processo. Questi servizi sono flessibili e consentono all'UMD di esercitare un controllo granulare su uno spazio di indirizzi virtuali di processo della GPU. Il UMD può decidere di assegnare un indirizzo virtuale GPU specifico a un'allocazione oppure lasciare che VidMm ne scegli uno disponibile, eventualmente specificando alcuni vincoli di indirizzi virtuali min e max GPU. Una singola allocazione può avere più mapping di indirizzi virtuali GPU associati e i servizi vengono forniti al UMD per implementare il Tile Resource contract.
Analogamente, in una configurazione con adattatore video collegato, l'UMD può eseguire il mapping esplicito degli indirizzi virtuali della GPU a istanze di allocazione specifiche. Per ogni mappatura, UMD può scegliere se la mappatura deve essere a sé stesso o a una GPU pari specifica. In questo modello gli indirizzi virtuali CPU e GPU assegnati a un'allocazione sono indipendenti. Un UMD può decidere di mantenerli uguali in entrambi gli spazi di indirizzo o di mantenerli indipendenti.
Gli indirizzi virtuali GPU vengono gestiti logicamente a una granularità di pagina fissa di 4 KB tramite l'interfaccia DDI. Gli indirizzi virtuali GPU possono fare riferimento alle allocazioni residenti in un segmento di memoria o in una memoria di sistema. La memoria di sistema viene gestita con granularità fisica di 4 KB mentre i segmenti di memoria vengono gestiti a 4 KB o 64 KB a scelta del driver. Tutte le allocazioni VidMm sono allineate e ridimensionate in modo che siano multiple delle dimensioni della pagina scelte dal driver.
L'accesso a un intervallo di indirizzi virtuali GPU non valido comporta una violazione di accesso e la chiusura del contesto e/o del dispositivo che ha causato l'errore di accesso. Per eseguire il ripristino da un errore di questo tipo, VidMm avvia una reimpostazione del motore che viene alzata di livello a un recupero TDR (Adapter Wide Timeout Detection) in caso di esito negativo.
Il modello GpuMmu è illustrato nel diagramma seguente: