Modèle IoMmu

Cette page décrit le modèle IoMmu introduit dans WDDM 2.0. Pour plus d’informations sur les mises à jour d’IOMMU, consultez Isolation GPU basée sur IOMMU et remapping IOMMU DMA .

Vue d’ensemble

Une unité de gestion de la mémoire Input-Output (IOMMU) est un composant MMU qui connecte un bus d’E/S compatible DMA à la mémoire système. Il mappe les adresses virtuelles visibles par l’appareil à des adresses physiques, ce qui le rend utile dans la virtualisation.

Dans le modèle IoMmu WDDM 2.0, chaque processus a un espace d’adressage virtuel unique qui est partagé entre le processeur et le GPU et qui est géré par le gestionnaire de mémoire du système d’exploitation.

Pour accéder à la mémoire, le GPU envoie une demande de données à un IOMMU conforme. La demande inclut une adresse virtuelle partagée et un identificateur d’espace d’adressage de processus (PASID). L’IOMMU effectue la traduction d’adresses à l’aide de la table de page partagée. Ce concept est illustré dans le diagramme suivant.

Diagramme montrant la traduction de l’espace d’adressage du processus IOMMU dans WDDM 2.0.

Le pilote en mode noyau exprime la prise en charge du modèle IoMmu en définissant les majuscules DXGK_VIDMMCAPS ::IoMmuSupported . Lorsque ces indicateurs sont définis, le gestionnaire de mémoire vidéo inscrit automatiquement n’importe quel processus à l’aide du GPU avec l’IOMMU et obtient un PASID pour cet espace d’adressage de processus. Le PASID est passé au pilote lors de la création de l’appareil.

Les allocations principales sont mappées par le gestionnaire de mémoire vidéo dans le segment d’ouverture avant d’être affichées, ce qui garantit que le contrôleur d’affichage dispose d’un accès physique à ces allocations.

Dans le modèle IoMmu, le pilote en mode utilisateur continue d’allouer de la mémoire vidéo pour le GPU à l’aide du service Allocate du gestionnaire de mémoire vidéo. Cela permet au pilote en mode utilisateur de :

  • Suivez le modèle de résidence.
  • Prise en charge du modèle de partage de ressources Microsoft DirectX.
  • Assurez-vous que les surfaces primaires sont visibles par le noyau et qu’elles sont mappées à l’ouverture avant d’être affichées.

Le premier niveau de traduction (adresse de ressource de vignette en adresse de processeur/GPU partagé) est entièrement géré en mode utilisateur par le pilote en mode utilisateur.