Comprobación de errores 0x116: VIDEO_TDR_FAILURE
La comprobación de errores VIDEO_TDR_FAILURE tiene un valor de 0x00000116. Esta comprobación de errores indica que se ha producido un error al intentar restablecer el controlador de pantalla y recuperarse de un tiempo de espera.
Importante
Este artículo va dirigido a programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.
Parámetros de VIDEO_TDR_FAILURE
Parámetro | Descripción |
---|---|
1 | El puntero al contexto de recuperación de TDR interno, si está disponible. |
2 | Un puntero al módulo de controlador de dispositivo responsable (por ejemplo, la etiqueta de propietario) |
3 | Código de error de la última operación con error, si está disponible. |
4 | Los datos dependientes del contexto interno, si están disponibles. |
Causa
Un problema común de estabilidad en los gráficos ocurre cuando el sistema parece estar completamente congelado o bloqueado mientras procesa un comando u operación del usuario final. Normalmente, la GPU está ocupada procesando operaciones gráficas intensivas, normalmente durante el juego. No se producen actualizaciones de pantalla y los usuarios asumen que su sistema esté congelado. Los usuarios suelen esperar unos segundos y luego reinician el sistema presionando el botón de encendido. Windows intenta detectar estas situaciones problemáticas de bloqueo y recuperar de forma dinámica un escritorio con capacidad de respuesta.
Este proceso de detección y recuperación se conoce como detección y recuperación de tiempo de espera (TDR). El tiempo de espera predeterminado es de 2 segundos. En el proceso TDR para tarjetas de vídeo, el programador de GPU del sistema operativo llama a la función DxgkDdiResetFromTimeout del controlador de minipuerto de pantalla para reinicializar el controlador y restablecer la GPU.
Durante este proceso, el sistema operativo indica al controlador que no acceda al hardware o la memoria y le da un breve tiempo para que se completen los subprocesos que se están ejecutando actualmente. Si los subprocesos no se completan dentro del tiempo de espera, el sistema realiza la comprobación de errores 0x116 VIDEO_TDR_FAILURE. Para obtener más información, consulte Sincronización de subprocesos y TDR.
El sistema también puede realizar la comprobación de errores VIDEO_TDR_FAILURE si se producen varios eventos de TDR en un breve período de tiempo. La cantidad predeterminada es más de cinco TDR en un minuto.
Si el proceso de recuperación se realiza correctamente, se mostrará un mensaje indicando que "el controlador de pantalla dejó de responder y se recuperó".
Para obtener más información, consulte Detección y recuperación de tiempo de espera (TDR), Claves del Registro de TDR y Cambios de TDR en Windows 8 y versiones posteriores.
Solución
La GPU está tardando más tiempo del permitido en mostrar gráficos en el monitor. Este comportamiento puede producirse por uno o varios de los siguientes motivos:
- Es posible que necesite instalar las últimas actualizaciones para el controlador de pantalla, para que admita adecuadamente el proceso TDR.
- Problemas de hardware que afectan a la capacidad de la tarjeta de vídeo para funcionar correctamente, entre los que se incluyen:
- Componentes con la frecuencia aumentada, como la placa base
- Compatibilidad y configuración de componentes incorrectas (especialmente configuración de memoria y tiempos)
- Refrigeración insuficiente del sistema
- Energía insuficiente del sistema
- Piezas defectuosas (módulos de memoria, placas base, etc.)
- Los efectos visuales o demasiados programas ejecutándose en segundo plano pueden ralentizar su equipo y hacer que la tarjeta de vídeo no pueda responder como es necesario.
La extensión de depuración !analyze indica información sobre la comprobación de errores y puede resultar útil para determinar la causa principal.
1: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
VIDEO_TDR_FAILURE (116)
Attempt to reset the display driver and recover from timeout failed.
Arguments:
Arg1: ffffe000c2c404c0, Optional pointer to internal TDR recovery context (TDR_RECOVERY_CONTEXT).
Arg2: fffff8016470c14c, The pointer into responsible device driver module (e.g. owner tag).
Arg3: ffffffffc000009a, Optional error code (NTSTATUS) of the last failed operation.
Arg4: 0000000000000004, Optional internal context dependent data.
...
También se muestra el nombre del módulo con errores.
MODULE_NAME: nvlddmkm
IMAGE_NAME: nvlddmkm.sys
Puede usar el comando lm (Enumerar módulos cargados) para mostrar información sobre el controlador con errores, incluida la marca de tiempo.
1: kd> lmvm nvlddmkm
Browse full module list
start end module name
fffff801`63ec0000 fffff801`649a7000 nvlddmkm T (no symbols)
Loaded symbol image file: nvlddmkm.sys
Image path: \SystemRoot\system32\DRIVERS\nvlddmkm.sys
Image name: nvlddmkm.sys
Browse all global symbols functions data
Timestamp: Wed Jul 8 15:43:44 2015 (559DA7A0)
CheckSum: 00AA7491
ImageSize: 00AE7000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
El parámetro 1 contiene un puntero al TDR_RECOVERY_CONTEXT. Como se muestra en la salida !analyze, si tiene símbolos para el código asociado, puede usar el comando dt
para mostrar estos datos.
1: kd> dt dxgkrnl!_TDR_RECOVERY_CONTEXT ffffe000c2c404c0
+0x000 Signature : 0x52445476
+0x008 pState : 0xffffe000`c2b12a40 ??
+0x010 TimeoutReason : 9 ( TdrEngineTimeoutPromotedToAdapterReset )
+0x018 Tick : _ULARGE_INTEGER 0xb2
+0x020 pAdapter : 0xffffe000`c2a89010 DXGADAPTER
+0x028 pVidSchContext : (null)
+0x030 GPUTimeoutData : _TDR_RECOVERY_GPU_DATA
+0x048 CrtcTimeoutData : _TDR_RECOVERY_CONTEXT::<unnamed-type-CrtcTimeoutData>
+0x050 pProcessName : (null)
+0x058 DbgOwnerTag : 0xfffff801`6470c14c
+0x060 PrivateDbgInfo : _TDR_DEBUG_REPORT_PRIVATE_INFO
+0xb00 pDbgReport : 0xffffe000`c2c3f750 _WD_DEBUG_REPORT
+0xb08 pDbgBuffer : 0xffffc000`bd000000 Void
+0xb10 DbgBufferSize : 0x37515
+0xb18 pDumpBufferHelper : (null)
+0xb20 pDbgInfoExtension : 0xffffc000`ba7e47a0 _DXGKARG_COLLECTDBGINFO_EXT
+0xb28 pDbgBufferUpdatePrivateInfo : 0xffffc000`bd000140 Void
+0xb30 ReferenceCount : 0n1
+0xb38 pResetCompletedEvent : (null)
El parámetro 2 contiene un puntero al módulo de controlador de dispositivo responsable (por ejemplo, la etiqueta de propietario)
1: kd> ub fffff8016470c14c
nvlddmkm+0x84c132:
fffff801`6470c132 cc int 3
fffff801`6470c133 cc int 3
fffff801`6470c134 48ff254d2deaff jmp qword ptr [nvlddmkm+0x6eee88 (fffff801`645aee88)]
fffff801`6470c13b cc int 3
fffff801`6470c13c 48ff252d2eeaff jmp qword ptr [nvlddmkm+0x6eef70 (fffff801`645aef70)]
fffff801`6470c143 cc int 3
fffff801`6470c144 48ff257d2deaff jmp qword ptr [nvlddmkm+0x6eeec8 (fffff801`645aeec8)]
fffff801`6470c14b cc int 3
Es posible que desee examinar el seguimiento de la pila mediante el comando k, kb, kc, kd, kp, kP, kv (Mostrar seguimiento de pila).
1: kd> k
# Child-SP RetAddr Call Site
00 ffffd001`7d53d918 fffff801`61ba2b4c nt!KeBugCheckEx [d:\th\minkernel\ntos\ke\amd64\procstat.asm @ 122]
01 ffffd001`7d53d920 fffff801`61b8da0e dxgkrnl!TdrBugcheckOnTimeout+0xec [d:\th\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 2731]
02 ffffd001`7d53d960 fffff801`61b8dd7f dxgkrnl!ADAPTER_RENDER::Reset+0x15e [d:\th\windows\core\dxkernel\dxgkrnl\core\adapter.cxx @ 19443]
03 ffffd001`7d53d990 fffff801`61ba2385 dxgkrnl!DXGADAPTER::Reset+0x177 [d:\th\windows\core\dxkernel\dxgkrnl\core\adapter.cxx @ 19316]
04 ffffd001`7d53d9e0 fffff801`63c5fba7 dxgkrnl!TdrResetFromTimeout+0x15 [d:\th\windows\core\dxkernel\dxgkrnl\core\dxgtdr.cxx @ 2554]
05 ffffd001`7d53da10 fffff801`63c47e5d dxgmms1!VidSchiRecoverFromTDR+0x11b [d:\th\windows\core\dxkernel\dxgkrnl\dxgmms1\vidsch\vidscher.cxx @ 1055]
06 ffffd001`7d53dbc0 fffff801`aa55c698 dxgmms1!VidSchiWorkerThread+0x8d [d:\th\windows\core\dxkernel\dxgkrnl\dxgmms1\vidsch\vidschi.cxx @ 426]
07 ffffd001`7d53dc00 fffff801`aa5c9306 nt!PspSystemThreadStartup+0x58 [d:\th\minkernel\ntos\ps\psexec.c @ 6845]
08 ffffd001`7d53dc60 00000000`00000000 nt!KxStartSystemThread+0x16 [d:\th\minkernel\ntos\ke\amd64\threadbg.asm @ 80]
También puede establecer un punto de interrupción en el código que conduce a este código de detención e intentar avanzar un paso hasta el código de error, si puede reproducir de forma coherente el código de detención.
Para obtener más información, consulte Análisis de archivos de volcado de memoria mediante WinDbg.
Si no está equipado para usar el depurador de Windows para trabajar con este problema, puede usar algunas técnicas básicas de solución de problemas.
Compruebe el registro del sistema en el Visor de eventos para ver si hay otros mensajes de error adicionales que puedan ayudar a identificar el dispositivo o controlador que está causando este error.
Si se identifica un controlador en el mensaje de verificación de errores, deshabilítelo o consulte al fabricante para obtener actualizaciones del controlador.
Compruebe que estén actualizados todos los software relacionados con gráficos, como DirectX y OpenGL, y que todas las aplicaciones de uso intensivo de gráficos (como juegos) estén totalmente revisadas.
Confirme que todo el hardware nuevo que se instale sea compatible con la versión instalada de Windows. Por ejemplo, puede obtener información sobre el hardware necesario en Cómo buscar las especificaciones del equipo y los requisitos del sistema para Windows 10.
Ejecute la herramienta de diagnóstico de memoria de Windows para probar la memoria. En el cuadro de búsqueda del panel de control, escriba Memoria y, a continuación, seleccione Diagnosticar los problemas de memoria del equipo. Una vez ejecutada la prueba, use el Visor de eventos para ver los resultados en el registro del sistema. Busque la entrada Resultados de MemoryDiagnostics para ver los resultados.
Puede intentar ejecutar los diagnósticos del hardware proporcionados por el fabricante del sistema.
Uso del modo seguro
Considere la posibilidad de usar el modo seguro para ayudar a aislar este problema. El uso del modo seguro carga solo los controladores y servicios del sistema mínimos necesarios durante el inicio de Windows.
- Para acceder al modo seguro, vaya a Actualizar y seguridad en Configuración.
- Seleccione Recuperación>Inicio avanzado para arrancar en modo de mantenimiento.
- En el menú resultante, seleccione Solucionar problemas>Opciones avanzadas>Configuración de inicio>Reiniciar.
- Después de que Windows se reinicie en la pantalla Configuración de inicio, seleccione la opción 4, 5 o 6 para arrancar en modo seguro.
El modo seguro puede estar disponible presionando una tecla de función en el arranque, por ejemplo F8. Consulte la información del fabricante para obtener opciones de inicio específicas.
Para obtener información sobre la solución de problemas generales, consulte Análisis de los datos de la comprobación de errores de la pantalla azul.
Comentarios
Para obtener información sobre los requisitos que los dispositivos de hardware deben cumplir al implementar TDR, consulte la documentación del Windows Hardware Lab Kit. Por ejemplo, TDR2 - Gráficos de prueba estándar de dos dispositivos.
Consulte también
Bug Check Code Reference (Referencia de código de comprobación de errores)