Detección y recuperación de tiempo de espera (TDR)
En este artículo se describe la detección y recuperación del tiempo de espera (TDR) para los desarrolladores de controladores. Para obtener más información, consulte TDR en Windows 8 y versiones posteriores.
Información general
Uno de los problemas de estabilidad más comunes en los gráficos se produce cuando un equipo parece "colgar" o estar completamente "congelado" cuando realmente está procesando un comando o una operación del usuario final. Muchos usuarios esperan unos segundos y, a continuación, deciden reiniciar el equipo. La apariencia inmovilizada del equipo se produce con frecuencia porque la GPU está ocupada procesando operaciones gráficas intensivas, normalmente durante el juego y, por lo tanto, no actualiza la pantalla de pantalla. Las TDR permiten al sistema operativo detectar que la interfaz de usuario no responde.
En la ilustración siguiente se muestra el proceso de TDR.
El sistema operativo intenta detectar situaciones en las que los equipos parecen estar "inmovilizados". A continuación, el sistema operativo intenta recuperarse dinámicamente de las situaciones inmovilizadas para que los escritorios vuelvan a responder, lo que alivia la situación en la que los usuarios finales reinician innecesariamente sus sistemas.
De forma predeterminada, si el sistema operativo detecta que cinco (5) o más GPU se bloquean (0x117) y las recuperaciones posteriores se producen en un minuto (1), el sistema operativo comprueba el error del equipo en el siguiente (sexto o más) bloqueo de GPU. Para obtener más información, vea TdrLimitCount y TdrLimitTime.
Como nota lateral, los tiempos de espera del motor (0x141) no contribuyen al recuento de bloqueos de GPU, aunque el sistema operativo podría promover un tiempo de espera del motor a un bloqueo de GPU si el tiempo de espera del motor no es correcto. En el caso de los tiempos de espera del motor (0x141), el número máximo es uno menor que para los tiempos de espera del adaptador (0x117). El proceso de restablecimiento del motor bloquea el acceso a GPU para el proceso que provoca estos tiempos de espera y los registros del sistema 0x142 indicar ese hecho. De este modo, el proceso de funcionamiento incorrecto no comprueba el sistema.
Detección de tiempo de espera en WDDM
El programador de GPU, que forma parte del subsistema del kernel de gráficos de DirectX (Dxgkrnl.sys), detecta que la GPU tarda más del tiempo permitido en ejecutar una tarea determinada. A continuación, el programador de GPU intenta reemplazar esta tarea en particular. La operación de adelantamiento tiene un tiempo de espera de "espera", que es el tiempo de espera de TDR real. El período de tiempo de espera predeterminado en Windows Vista y los sistemas operativos posteriores es de 2 segundos. Si la GPU no puede completar o reemplazar la tarea actual dentro del período de tiempo de espera de TDR, el sistema operativo diagnostica que la GPU está inmovilizada.
Para evitar que se produzca la detección de tiempo de espera, los proveedores de hardware deben asegurarse de que las operaciones de gráficos (es decir, la finalización del búfer DMA) no tarden más de 2 segundos en escenarios de usuario final, como la productividad y el juego.
Preparación para la recuperación
El programador de GPU llama a la función DxgkDdiResetFromTimeout del controlador de miniporte de pantalla para informar al controlador de que el sistema operativo detectó un tiempo de espera. A continuación, el controlador debe reinicializarse y restablecer la GPU. Además, el controlador debe dejar de acceder a la memoria y no debe tener acceso al hardware. El sistema operativo y el controlador recopilan hardware y otra información de estado que puede ser útil para el diagnóstico posterior a la recuperación.
Para obtener más información, consulte TDR en Windows 8 y versiones posteriores.
Recuperación de escritorio
El sistema operativo restablece el estado adecuado de la pila de gráficos. El administrador de memoria de vídeo, que también forma parte de Dxgkrnl.sys, purga todas las asignaciones de la memoria de vídeo. El controlador de minipuerto de pantalla restablece el estado de hardware de la GPU. La pila de gráficos realiza las acciones finales y restaura el escritorio al estado dinámico.
El único artefacto visible de la detección de bloqueos en la recuperación es un parpadeo de pantalla. Este parpadeo se produce cuando el sistema operativo restablece algunas partes de la pila de gráficos, lo que hace que una pantalla se vuelva a dibujar. El controlador de minipuerto de pantalla puede eliminar este nuevo dibujo cuando cumple con WDDM 1.2 y versiones posteriores (consulte Proporcionar transiciones de estado sin problemas en WDDM 1.2 y versiones posteriores).
Cuando el sistema operativo recupera correctamente el escritorio, completa las siguientes acciones:
- Muestra un mensaje informativo al usuario final, que indica "El controlador de pantalla ha dejado de responder y se ha recuperado".
- Registra el mensaje anterior en la aplicación Visor de eventos y recopila información de diagnóstico en forma de informe de depuración. Si el usuario final optó por proporcionar comentarios, el sistema operativo devuelve este informe de depuración a Microsoft a través del mecanismo de análisis de bloqueos en línea (OCA).
Algunas aplicaciones de DirectX heredadas podrían representarse en negro al final de esta recuperación, lo que requiere que el usuario final reinicie estas aplicaciones. Las aplicaciones DirectX 9Ex y DirectX 10 y posteriores escritas que controlan la tecnología Device Remove siguen funcionando correctamente. Una aplicación debe liberarse y volver a crear su dispositivo Microsoft Direct3D y todos los objetos del dispositivo.
Sincronización de subprocesos y TDR
Consulte Sincronización de subprocesos y TDR para obtener más información.
Prueba y depuración de TDR
Consulte Pruebas y depuración de TDR para obtener más información.