Dela via


IoMmu-modell

På den här sidan beskrivs IoMmu-modellen som introducerades i WDDM 2.0. För nyare IOMMU-uppdateringar, se IOMMU-baserad GPU-isolering och IOMMU DMA-omläggning.

Översikt

En Input-Output Minneshanteringsenhet (IOMMU) är en maskinvarukomponent som ansluter en DMA-kompatibel I/O-buss till systemminnet. Den mappar enhets synliga virtuella adresser till fysiska adresser, vilket gör det användbart i virtualisering.

I IoMmu-modellen WDDM 2.0 har varje process ett enda virtuellt adressutrymme som är:

  • Delas mellan CPU och GPU.
  • Hanteras av operativsystemets minneshanterare.

För att få åtkomst till minnet skickar GPU:n en databegäran till en kompatibel IOMMU. Begäran innehåller en delad virtuell adress och en PASID (Process Address Space Identifier ). IOMMU utför adressöversättningen med hjälp av den delade sidtabellen. Den här åtgärden visas i följande diagram.

Diagram som visar IOMMU-processens adressutrymmesöversättning i WDDM 2.0.

KMD (kernel-mode display driver) uttrycker stöd för IoMmu-modellen genom att ställa in DXGK_VIDMMCAPS::IoMmuSupported caps. När den här flaggan har angetts registrerar videominneshanteraren (VidMm) automatiskt alla processer med hjälp av GPU:n med IOMMU och hämtar ett PASID för det processadressutrymmet. PASID skickas till drivrutinen när enheten skapas.

VidMm mappar primära allokeringar till bländarsegmentet innan de visas, vilket säkerställer att kontrollanten har fysisk åtkomst till dessa allokeringar.

I IoMmu-modellen fortsätter användarlägesvisningsdrivrutinen (UMD) att allokera videominne för GPU:n med hjälp av VidMms Allokeringstjänst . Med den här processen kan UMD:

  • Följ residensmodellen.
  • Stöd för DirectX-resursdelningsmodellen.
  • Kontrollera att primära ytor är synliga för kärnan och mappas till bländområde innan de visas.

UMD hanterar helt den första översättningsnivån (panelresursadress till delad CPU/GPU-adress) i användarläge.