Détection et récupération du délai d’expiration (TDR)
Cet article décrit la détection et la récupération du délai d’expiration (TDR) pour les développeurs de pilotes. Pour plus d’informations, consultez TDR dans Windows 8 et versions ultérieures.
Vue d’ensemble
L’un des problèmes de stabilité les plus courants dans les graphiques se produit lorsqu’un ordinateur semble « se bloquer » ou être complètement « figé » lorsqu’il traite en fait une commande ou une opération de l’utilisateur final. De nombreux utilisateurs attendent quelques secondes, puis décident de redémarrer l’ordinateur. L’apparence figée de l’ordinateur se produit fréquemment parce que le GPU est occupé à traiter des opérations graphiques intensives, généralement pendant le jeu, et ne met donc pas à jour l’écran d’affichage. Les tdrs permettent au système d’exploitation de détecter que l’interface utilisateur n’est pas réactive.
La figure suivante montre le processus TDR.
Le système d’exploitation tente de détecter les situations dans lesquelles les ordinateurs semblent être « figés ». Le système d’exploitation tente ensuite de récupérer dynamiquement des situations figées afin que les ordinateurs de bureau soient à nouveau réactifs, ce qui atténue la situation où les utilisateurs finaux redémarrent inutilement leurs systèmes.
Par défaut, si le système d’exploitation détecte que cinq (5) gpu se bloquent (0x117) et que les récupérations suivantes se produisent dans un délai d’une (1) minute, le système d’exploitation vérifie les bogues de l’ordinateur sur le blocage gpu suivant (sixième ou plus). Pour plus d’informations, consultez TdrLimitCount et TdrLimitTime.
Notez que les délais d’attente du moteur (0x141) ne contribuent pas au nombre de blocages GPU, bien que le système d’exploitation puisse promouvoir un délai d’expiration du moteur en un blocage GPU si le délai d’attente du moteur échoue. Pour les délais d’expiration du moteur (0x141), le nombre maximal est inférieur à celui des délais d’expiration de l’adaptateur (0x117). Le processus de réinitialisation du moteur bloque l’accès gpu pour le processus qui provoque de tels délais d’expiration, et les journaux système 0x142 d’indiquer ce fait. De cette façon, le processus défectueux ne case activée pas de bogues du système.
Détection du délai d’expiration dans WDDM
Le planificateur GPU, qui fait partie du sous-système du noyau graphique DirectX (Dxgkrnl.sys), détecte que le GPU prend plus de temps que le temps autorisé pour exécuter une tâche particulière. Le planificateur GPU tente ensuite de préempter cette tâche particulière. L’opération de préempte a un délai d’attente, qui est le délai d’attente réel. Le délai d’expiration par défaut dans Windows Vista et les systèmes d’exploitation ultérieurs est de 2 secondes. Si le GPU ne peut pas terminer ou préempter la tâche en cours pendant la période de délai d’expiration TDR, le système d’exploitation diagnostique que le GPU est figé.
Pour empêcher la détection du délai d’expiration, les fournisseurs de matériel doivent s’assurer que les opérations graphiques (c’est-à-dire l’achèvement de la mémoire tampon DMA) ne prennent pas plus de 2 secondes dans les scénarios de l’utilisateur final tels que la productivité et le jeu.
Préparation de la récupération
Le planificateur GPU appelle la fonction DxgkDdiResetFromTimeout du pilote miniport d’affichage pour informer le pilote que le système d’exploitation a détecté un délai d’expiration. Le pilote doit ensuite se réinitialiser et réinitialiser le GPU. En outre, le pilote doit cesser d’accéder à la mémoire et ne doit pas accéder au matériel. Le système d’exploitation et le pilote collectent du matériel et d’autres informations d’état qui peuvent être utiles pour le diagnostic post-récupération.
Pour plus d’informations, consultez TDR dans Windows 8 et versions ultérieures.
Récupération du bureau
Le système d’exploitation réinitialise l’état approprié de la pile graphique. Le gestionnaire de mémoire vidéo, qui fait également partie de Dxgkrnl.sys, vide toutes les allocations de la mémoire vidéo. Le pilote miniport d’affichage réinitialise l’état matériel du GPU. La pile graphique effectue les actions finales et restaure le bureau à l’état réactif.
Le seul artefact visible de la détection de blocage à la récupération est un scintillement d’écran. Ce scintillement se produit lorsque le système d’exploitation réinitialise certaines parties de la pile graphique, ce qui entraîne un redessinage de l’écran. Le pilote miniport d’affichage peut éliminer ce redessinage lorsqu’il est conforme à WDDM 1.2 et versions ultérieures (voir Fournir des transitions d’état transparentes dans WDDM 1.2 et versions ultérieures).
Lorsque le système d’exploitation récupère correctement le bureau, il effectue les actions suivantes :
- Affiche un message d’information à l’utilisateur final indiquant « Le pilote d’affichage a cessé de répondre et a récupéré ».
- Journalise le message précédent dans l’application observateur d'événements et collecte des informations de diagnostic sous la forme d’un rapport de débogage. Si l’utilisateur final a choisi de fournir des commentaires, le système d’exploitation retourne ce rapport de débogage à Microsoft via le mécanisme d’analyse des incidents en ligne (OCA).
Certaines applications DirectX héritées peuvent simplement afficher le noir à la fin de cette récupération, ce qui nécessite que l’utilisateur final redémarre ces applications. Les applications bien écrites DirectX 9Ex et DirectX 10 et versions ultérieures qui gèrent la technologie Device Remove continuent de fonctionner correctement. Une application doit libérer, puis recréer son appareil Microsoft Direct3D et tous les objets de l’appareil.
Synchronisation de threads et TDR
Pour plus d’informations, consultez Synchronisation de threads et TDR .
Test et débogage du TDR
Pour plus d’informations, consultez Test et débogage du TDR .