Condividi tramite


Modello IoMmu

Questa pagina descrive il modello IoMmu introdotto in WDDM 2.0. Vedere Isolamento GPU basato su IOMMU e mapping di DMA di IOMMU per gli aggiornamenti IOMMU più recenti.

Panoramica

Un'unità IOMMU (Input-Output Memory Management Unit) è un componente MMU che connette un bus di I/O con supporto DMA alla memoria di sistema. Esegue il mapping degli indirizzi virtuali visibili dal dispositivo agli indirizzi fisici, rendendoli utili per la virtualizzazione.

Nel modello WDDM 2.0 IoMmu ogni processo ha un singolo spazio indirizzi virtuale, ovvero:

  • Condiviso tra CPU e GPU.
  • Gestito dal gestore della memoria del sistema operativo.

Per accedere alla memoria, la GPU invia una richiesta di dati a un IOMMU conforme. La richiesta include un indirizzo virtuale condiviso e un identificatore dello spazio di indirizzi del processo (PASID). L'IOMMU esegue la conversione degli indirizzi usando la tabella di pagine condivise. Questa azione è illustrata nel diagramma seguente.

Diagramma che mostra la conversione dello spazio di indirizzi del processo IOMMU in WDDM 2.0.

Il driver di visualizzazione in modalità kernel (KMD) esprime il supporto per il modello IoMmu impostando i limiti DXGK_VIDMMCAPS::IoMmuSupported. Quando questo flag è impostato, il gestore di memoria video (VidMm) registra automaticamente qualsiasi processo usando la GPU con IOMMU e ottiene un PASID per lo spazio indirizzi del processo. Il PASID viene passato al driver durante la creazione del dispositivo.

VidMm esegue il mapping delle allocazioni primarie nel segmento di apertura prima di essere visualizzato, assicurando che il controller di visualizzazione abbia accesso fisico a queste allocazioni.

Nel modello IoMmu il driver di visualizzazione in modalità utente (UMD) continua ad allocare memoria video per la GPU usando il servizio Allocate di VidMm. Questo processo consente al UMD di:

  • Seguire il modello di residenza.
  • Supportare il modello di condivisione delle risorse DirectX.
  • Assicurarsi che le superfici primarie siano visibili al kernel e siano mappate all'apertura prima di essere visualizzate.

Il UMD gestisce interamente il primo livello di conversione (indirizzo della risorsa riquadro all'indirizzoCPU/GPU condiviso) in modalità utente.