IoMmu-Modell
Auf dieser Seite wird das in WDDM 2.0 eingeführte IoMmu-Modell beschrieben. Siehe IOMMU-basierte GPU-Isolation und IOMMU DMA Remapping für aktuellere IOMMU-Updates.
Übersicht
Eine Speicherverwaltungseinheit (Input-Output Memory Management Unit, IOMMU) ist eine Hardwarekomponente, die einen DMA-fähigen E/A-Bus mit dem Systemspeicher verbindet. Sie ordnet Geräte sichtbare virtuelle Adressen physischen Adressen zu, wodurch sie bei der Virtualisierung nützlich sind.
Im WDDM 2.0 IoMmu-Modell verfügt jeder Prozess über einen einzelnen virtuellen Adressraum:
- Gemeinsam genutzt zwischen CPU und GPU.
- Vom Betriebssystemspeicher-Manager verwaltet.
Um auf den Arbeitsspeicher zuzugreifen, sendet die GPU eine Datenanforderung an eine kompatible IOMMU. Die Anforderung enthält eine freigegebene virtuelle Adresse und einen Prozessadressraumbezeichner (PASID). Die IOMMU führt die Adressübersetzung mithilfe der freigegebenen Seitentabelle aus. Diese Aktion ist in der folgenden Abbildung dargestellt.
Der Kernelmodusanzeigetreiber (KERNEL-Mode Display Driver, KMD) drückt die Unterstützung für das IoMmu-Modell aus, indem die DXGK_VIDMMCAPS::IoMmuSupported-Caps festgelegt werden. Wenn dieses Kennzeichen festgelegt ist, registriert der Videospeicher-Manager (VidMm) automatisch jeden Prozess mithilfe der GPU mit der IOMMU und ruft eine PASID für diesen Prozessadressraum ab. Die PASID wird während der Geräteerstellung an den Treiber übergeben.
VidMm ordnet primäre Zuordnungen vor der Anzeige in das Blendensegment zu, um sicherzustellen, dass der Anzeigecontroller physischen Zugriff auf diese Zuordnungen hat.
Im IoMmu-Modell weist der Benutzermodusanzeigetreiber (UMD) weiterhin Videospeicher für die GPU mit dem Zuweisungsdienst von VidMm zu. Dieser Vorgang ermöglicht der UMD Folgendes:
- Folgen Sie dem Residency-Modell.
- Unterstützung des DirectX-Ressourcenfreigabemodells.
- Stellen Sie sicher, dass primäre Oberflächen für den Kernel sichtbar sind und vor der Anzeige in Blende zugeordnet sind.
Die UMD verwaltet die erste Ebene der Übersetzung (Kachelressourcenadresse zu freigegebener CPU/GPU-Adresse) im Benutzermodus.