Partilhar via


0x116 de Verificação de Bugs: VIDEO_TDR_FAILURE

O bug VIDEO_TDR_FAILURE marcar tem um valor de 0x00000116. Esse bug marcar indica que uma tentativa de redefinir o driver de exibição e se recuperar de um tempo limite falhou.

Importante

Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul ao usar o computador, consulte Solucionar erros de tela azul.

parâmetros VIDEO_TDR_FAILURE

Parâmetro Descrição
1 O ponteiro para o contexto de recuperação de TDR interno, se disponível.
2 Um ponteiro para o módulo de driver de dispositivo responsável (por exemplo, a marca de proprietário).
3 O código de erro da última operação com falha, se disponível.
4 Dados dependentes de contexto interno, se disponíveis.

Causa

Um problema comum de estabilidade em elementos gráficos ocorre quando o sistema aparece completamente congelado ou travado durante o processamento de um comando ou operação do usuário final. Normalmente, a GPU está ocupada processando operações gráficas intensivas, normalmente durante o jogo. Nenhuma atualização de tela ocorre e os usuários assumem que seu sistema está congelado. Os usuários geralmente esperam alguns segundos e reinicializam o sistema pressionando o botão de energia. O Windows tenta detectar essas situações problemáticas de travamento e recuperar dinamicamente uma área de trabalho responsiva.

Esse processo de detecção e recuperação é conhecido como TDR (Detecção e Recuperação de Tempo Limite). O tempo limite padrão é de 2 segundos. No processo de TDR para placas de vídeo, o agendador de GPU do sistema operacional chama a função DxgkDdiResetFromTimeout do driver de miniporta de exibição para reinicializar o driver e redefinir a GPU.

Durante esse processo, o sistema operacional informa ao driver para não acessar o hardware ou a memória e dá a ele um curto período de tempo para que os threads em execução sejam concluídos no momento. Se os threads não forem concluídos dentro do tempo limite, o bug do sistema verificará com 0x116 VIDEO_TDR_FAILURE. Para obter mais informações, consulte Sincronização de threads e TDR.

O sistema também poderá marcar bugs com VIDEO_TDR_FAILURE se vários eventos TDR ocorrerem em um curto período de tempo. O valor padrão é mais de cinco TDRs em um minuto.

Se o processo de recuperação for bem-sucedido, uma mensagem será exibida, indicando que o "Driver de exibição parou de responder e se recuperou".

Para obter mais informações, consulte TDR (detecção e recuperação de tempo limite),chaves do registro TDR e alterações de TDR em Windows 8 e posteriores.

Resolução

A GPU está levando mais tempo do que o permitido para exibir elementos gráficos no monitor. Esse comportamento pode ocorrer por uma ou mais das seguintes razões:

  • Talvez seja necessário instalar as atualizações mais recentes para o driver de vídeo, para que ele dê suporte adequado ao processo de TDR.
  • Problemas de hardware que afetam a capacidade dos cartão de vídeo de operar corretamente, incluindo:
    • Componentes com relógio excessivo, como a placa-mãe
    • Configurações e compatibilidade de componente incorretas (especialmente configuração e intervalos de memória)
    • Resfriamento insuficiente do sistema
    • Energia insuficiente do sistema
    • Partes defeituosas (módulos de memória, placas-mãe etc.)
  • Efeitos visuais ou muitos programas em execução em segundo plano podem estar atrasando o computador, portanto, o vídeo cartão não pode responder conforme necessário.

A extensão de depuração !analyze exibe informações sobre o bug marcar e pode ser útil para determinar a causa raiz.

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.

...

O nome do módulo com falha também é mostrado.

MODULE_NAME: nvlddmkm

IMAGE_NAME:  nvlddmkm.sys

Você pode usar o comando lm (Listar Módulos Carregados) para exibir informações sobre o driver com falha, incluindo o carimbo de data/hora.

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

O parâmetro 1 contém um ponteiro para o TDR_RECOVERY_CONTEXT. Conforme mostrado na saída !analyze, se você tiver símbolos para o código associado, poderá usar o dt comando para exibir esses dados.

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) 

O parâmetro 2 contém um ponteiro para o módulo de driver de dispositivo responsável (por exemplo, a marca de proprietário).

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

Talvez você queira examinar o rastreamento de pilha usando o comando k, kb, kc, kd, kp, kP, kv (Display Stack Backtrace).

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]

Você também pode definir um ponto de interrupção no código que leva a esse código de parada e tentar um único passo adiante no código com falha, se puder reproduzir consistentemente o código de parada.

Para obter mais informações, consulte Analisar arquivos de despejo de memória usando o WinDbg.

Se você não estiver equipado para usar o depurador do Windows para trabalhar nesse problema, poderá usar algumas técnicas básicas de solução de problemas.

  • Verifique a Visualizador de Eventos de Logon do Sistema em busca de outras mensagens de erro que possam ajudar a identificar o dispositivo ou driver que está causando esse bug marcar.

  • Se um driver for identificado na mensagem de verificação de bug, desative o driver ou verifique com o fabricante as atualizações de driver.

  • Verifique se todos os softwares relacionados a gráficos, como DirectX e OpenGL, estão atualizados e se todos os aplicativos com uso intensivo de gráficos (como jogos) são totalmente corrigidos.

  • Confirme se qualquer novo hardware instalado é compatível com a versão instalada do Windows. Por exemplo, você pode obter informações sobre o hardware necessário em Especificações do Windows 10.

  • Execute a ferramenta Diagnóstico de Memória do Windows para testar a memória. Na caixa de pesquisa do painel de controle, insira Memória e selecione Diagnosticar problemas de memória do computador. Depois que o teste for executado, use o Visualizador de eventos para exibir os resultados no log do sistema. Procure a entrada MemoryDiagnostics-Results para exibir os resultados.

  • Você pode tentar executar o diagnóstico de hardware fornecido pelo fabricante do sistema.

  • Usar o modo de segurança

    Considere usar o Modo de Segurança para ajudar a isolar esse problema. O uso do Modo de Segurança carrega apenas os drivers mínimos necessários e os serviços do sistema durante a inicialização do Windows.

    1. Para entrar no Modo de Segurança, acesse Atualização e Segurança em Configurações.
    2. Selecione Recuperação>Inicialização avançada para inicializar no modo de manutenção.
    3. No menu resultante, escolha Solucionar> problemas dereinício dasconfigurações de inicialização de opções>avançadas>.
    4. Depois que o Windows for reiniciado na tela Configurações de Inicialização , selecione a opção 4, 5 ou 6 para inicializar no Modo de Segurança.

    O Modo de Segurança pode estar disponível pressionando uma tecla de função na inicialização, por exemplo, F8. Consulte as informações do fabricante para obter opções de inicialização específicas.

Para obter informações gerais de solução de problemas, consulte Dados da Tela Azul.

Comentários

Para obter informações sobre os requisitos que os dispositivos de hardware devem atender ao implementar o TDR, consulte a documentação do Windows Hardware Lab Kit . Por exemplo, TDR2 – Elementos gráficos de teste de dispositivo padrão de dois dispositivos.

Confira também

Referência de código de verificação de bugs