Compartir a través de


Mejoras de depuración de TDR

En este artículo se describen las mejoras de depuración de TDR (detección de tiempo de espera y recuperación) disponibles a partir de Windows 11, versión 24H2 (WDDM 3.2). Los desarrolladores de controladores gráficos deben estar familiarizados con la detección y recuperación del tiempo de espera de GPU en Windows, tal como se describe en Detección y recuperación del tiempo de espera y TDR en Windows 8 y versiones posteriores.

Cambios de DDI

DxgkddiCollectDbgInfo2

Para ayudar al análisis de TDR, el sistema operativo llamó históricamente la devolución de llamada dxgkddiCollectDbgInfo del controlador en modo kernel para permitir que el controlador escriba su propia carga en el informe de TDR que el sistema carga desde la máquina del cliente.

DxgkddiCollectDbgInfo2 se agrega como extensión de depuración de TDR. Este callback permite al sistema operativo pasar información más detallada a KMD sobre la causa principal del TDR. A continuación, el KMD puede guardar el estado pertinente para la parte de la GPU responsable del TDR.

DxgkddiCollectDbgInfo2 es un superconjunto para dxgkddiCollectDbgInfo existente.

  • No es necesario un controlador WDDM 3.2 para implementar DxgkddiCollectDbgInfo2, en cuyo caso el sistema operativo llama a DxgkddiCollectDbgInfo.

  • Si KMD implementa DxgkddiCollectDbgInfo2, el sistema operativo lo invoca en lugar de DxgkddiCollectDbgInfo en todos los casos.

La estructura DRIVER_INITIALIZATION_DATA se extiende para incluir un puntero a DxgkddiCollectDbgInfo2.

DXGKARG_COLLECTDBGINFO2

El sistema operativo pasa la estructura de DXGKARG_COLLECTDBGINFO2 agregada a DxgkddiCollectDbgInfo2.

El diseño de DXGKARG_COLLECTDBGINFO2 es compatible con versiones anteriores con la estructura de datos DXGKARG_COLLECTDBGINFO existente para permitir que la implementación DxgkDdiCollectDbgInfo2 reutilice las funciones auxiliares DxgkDdiCollectDbgInfo existentes cuando sea necesario. Por este motivo, el Reason, pBuffer, BufferSizey campos pExtension tienen la misma semántica.

Los siguientes campos están en DXGKARG_COLLECTDBGINFO2, pero no en DXGKARG_COLLECTDBGINFO.

Para algunos tipos de TDR, el sistema operativo proporciona información adicional en el búfer TdrPayload de TdrPayloadSize bytes. Puede ser NULL y se espera que el controlador controle este caso sin bloqueo.

Cuando la carga no es NULL, se puede convertir en una estructura que corresponda al tipo TDR. El sistema operativo podría aumentar estas estructuras de una manera compatible con versiones anteriores, agregando nuevos campos al final. El controlador debe comprobar TdrPayloadSize antes de acceder a los campos TdrPayload para asegurarse de que el sistema operativo implementa la versión de carga deseada o posterior.

La memoria a la que apunta TdrPayload solo es válida durante la llamada a DxgkddiCollectDbgInfo2. El controlador no debe almacenar un puntero para TdrPayload pasado el final de llamada DxgkddiCollectDbgInfo2.

A partir de WDDM 3.2, se agregan las siguientes estructuras de datos de carga útil como posibles cargas útiles para que TdrPayload apunte a ellas.