Modèle GpuMmu
Cet article décrit le modèle GpuMmu, qui a été introduit dans Windows 10 (WDDM 2.0).
Dans le modèle GpuMmu, le GPU a sa propre unité de gestion de mémoire (MMU) qui traduit les adresses virtuelles GPU par processus en adresses physiques.
Chaque processus a des espaces d’adressage virtuels PROCESSEUR et GPU distincts qui utilisent des tables de pages distinctes. Le gestionnaire de mémoire vidéo (VidMm) gère l’espace d’adressage virtuel GPU de tous les processus. VidMm est également responsable de l’allocation, de la croissance, de la mise à jour, de l’assurance de la résidence et de la libération de tables de pages. Le format matériel des tables de pages utilisées par le GPU MMU n’est pas connu de VidMm et est abstrait par le biais d’interfaces de pilote de périphérique (DDI). L’abstraction prend en charge une traduction au niveau multiniveau, y compris une table de pages de taille fixe et une table de pages racine redimensionnable.
Bien que VidMm soit responsable de la gestion de l’espace d’adressage virtuel GPU et de ses tables de pages sous-jacentes, VidMm n’affecte pas automatiquement des adresses virtuelles GPU aux allocations. Cette responsabilité incombe au pilote en mode utilisateur (UMD).
VidMm offre deux services principaux à l’UMD :
Allocation et désallocation de mémoire. L’UMD peut allouer de la mémoire vidéo par le biais du rappel existant Allouer et libérer cette mémoire via le rappel existant Désallouer. Allouer retourne un handle à une allocation VidMm à l’UMD. Un moteur GPU peut fonctionner sur ce handle. Une telle allocation fait référence spécifiquement à la mémoire vidéo physique, qu’un moteur GPU peut accéder et traiter via une liste d’allocations.
Gestion de l’espace d’adressage virtuel GPU. Pour les moteurs s’exécutant en mode virtuel, une adresse virtuelle GPU doit être explicitement affectée à une allocation avant d’être accessible virtuellement. À cet effet, VidMm offre les services UMD pour réserver ou libérer des adresses virtuelles GPU et mapper des plages d’allocation spécifiques dans l’espace d’adressage virtuel GPU d’un processus. Ces services sont flexibles et permettent à l’UMD un contrôle très précis sur l’espace d’adressage virtuel du GPU du processus. L’UMD peut décider d’affecter une adresse virtuelle GPU spécifique à une allocation, ou laisser VidMm choisir automatiquement une adresse virtuelle disponible, éventuellement en spécifiant quelques contraintes d’adresse virtuelle GPU minimales et maximales. Une allocation unique peut avoir plusieurs mappages d’adresses virtuelles GPU associés et les services sont fournis à l’UMD pour implémenter le contrat de ressource de vignette.
De même, dans une configuration d’adaptateur d’affichage liée, l’UMD peut mapper explicitement des adresses virtuelles GPU à des instances d’allocation spécifiques. Pour chaque mappage, UMD peut choisir si le mappage doit être vers lui-même ou vers un GPU homologue spécifique. Dans ce modèle, les adresses virtuelles PROCESSEUR et GPU affectées à une allocation sont indépendantes. Un UMD peut décider de les conserver identiques dans les deux espaces d’adressage ou de les garder indépendants.
Les adresses virtuelles GPU sont gérées logiquement à une granularité de page de 4 Ko fixe via l’interface DDI. Les adresses virtuelles GPU peuvent référencer des allocations qui résident dans un segment de mémoire ou une mémoire système. La mémoire système est gérée à une granularité physique de 4 Ko, tandis que les segments de mémoire sont gérés à 4 Ko ou 64 Ko au choix du pilote. Toutes les allocations VidMm sont alignées et dimensionnées pour être un multiple de la taille de page choisie par le pilote.
L’accès à une plage d’adresses virtuelles GPU non valide entraîne une violation d’accès et une terminaison du contexte et/ou de l’appareil qui a provoqué l’erreur d’accès. Pour rétablir la situation, VidMm lance une réinitialisation du moteur qui, en cas d’échec, passe à un rétablissement de la détection du délai d’attente (TDR) à l’échelle de l’adaptateur.
Le modèle GpuMmu est illustré dans le diagramme suivant :