Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve como o Windows Display Driver Model (WDDM) suporta deteção de tempo limite e recuperação (TDR). Ele fornece uma visão geral do processo TDR, explica como a deteção de tempo limite funciona no WDDM e descreve as etapas tomadas para recuperar de um tempo limite.
O público deste artigo são desenvolvedores de drivers para gráficos e exibição.
Para obter mais informações sobre TDR no WDDM, consulte os seguintes artigos:
- Alterações no TDR no Windows 8 e versões posteriores
- Sincronização de threads e TDR
- Testando e depurando TDR
Visão geral
TDR é um recurso no Windows que deteta quando a placa gráfica leva mais tempo do que o esperado para concluir uma operação. Em seguida, redefine a placa gráfica para evitar que todo o sistema pare de responder.
Um dos problemas de estabilidade mais comuns em gráficos ocorre quando um computador parece "travar" ou estar completamente "congelado" enquanto está realmente processando um comando ou operação do usuário final. Muitos usuários esperam alguns segundos e, em seguida, decidem reiniciar o computador. A aparência congelada do computador ocorre frequentemente porque a GPU está ocupada processando operações gráficas intensivas, normalmente durante o jogo, e, portanto, não atualiza a tela de exibição. Os TDRs permitem que o sistema operacional detete que a interface do usuário não está respondendo.
A figura a seguir mostra o processo TDR.
O SO tenta detetar situações em que os computadores parecem estar "congelados". O sistema operacional então tenta se recuperar dinamicamente das situações congeladas para que os desktops sejam responsivos novamente, aliviando a situação em que os usuários finais reinicializam desnecessariamente seus sistemas.
Por padrão, o sistema operacional verifica o computador no sexto (ou mais) travamento da GPU quando deteta que cinco (5) ou mais falhas da GPU (0x117) e recuperações posteriores ocorrem dentro de um (1) minuto. Para obter mais informações, consulte TdrLimitCount e TdrLimitTime.
A título de observação, os timeouts do motor (0x141) não contribuem para a contagem de travamentos da GPU, embora o sistema operativo possa tratar um timeout do motor como um travamento de GPU se o timeout do motor não for bem-sucedido. Para tempos limite do motor (0x141), o número máximo é um a menos do que para tempos limite do adaptador (0x117). O processo de redefinição do mecanismo bloqueia o acesso da GPU para o processo responsável por esses time-outs, e o sistema regista 0x142 para indicar esse fato. Desta forma, o processo de mau funcionamento não verifica bugs do sistema.
Deteção de tempo limite no WDDM
O agendador de GPU, que faz parte do subsistema do kernel de gráficos DirectX (Dxgkrnl.sys), deteta quando a GPU leva mais do que a quantidade de tempo permitida para executar uma determinada tarefa. Em seguida, o agendador da GPU tenta interromper temporariamente essa tarefa específica. A operação de pré-empção tem um tempo limite de "espera", que é o tempo limite TDR real. O período de tempo limite padrão no Windows é de dois segundos. Se a GPU não puder concluir ou antecipar a tarefa atual dentro do período de tempo limite do TDR, o SO diagnosticará que a GPU está congelada.
Para evitar que a deteção de tempo limite ocorra, os fornecedores de hardware devem garantir que as operações gráficas (ou seja, a conclusão do buffer DMA) não levem mais de dois segundos em cenários de usuário final, como produtividade e jogabilidade.
Preparação para a recuperação
O agendador da GPU chama a função DxgkDdiResetFromTimeout do driver de miniporta de vídeo para informar ao driver que o sistema operacional detetou um tempo limite. O driver deve então reinicializar-se e redefinir a GPU. Além disso, o driver deve parar de acessar a memória e não deve acessar o hardware. O SO e o driver coletam informações de hardware e outras informações de estado que podem ser úteis para o diagnóstico pós-recuperação.
Para obter mais informações, consulte TDR no Windows 8 e posterior.
Recuperação do ambiente de trabalho
O SO redefine o estado apropriado da pilha de gráficos. O gerenciador de memória de vídeo, que também faz parte do Dxgkrnl.sys, limpa todas as alocações da memória de vídeo. O driver de miniporta de vídeo redefine o estado de hardware da GPU. A pilha de gráficos executa as ações finais e restaura a área de trabalho para o estado responsivo.
O único artefato visível desde a deteção de travamento até a recuperação é uma cintilação de tela. Essa cintilação resulta quando o sistema operacional redefine algumas partes da pilha de gráficos, o que causa um redesenho de tela. O driver de miniporta de exibição pode eliminar esse redesenho quando ele estiver em conformidade com o WDDM 1.2 e posterior (consulte Fornecendo transições de estado perfeitas no WDDM 1.2 e posterior).
Quando o sistema operacional recupera com êxito a área de trabalho, ele conclui as seguintes ações:
- Exibe uma mensagem informativa para o usuário final, dizendo "O driver de vídeo parou de responder e se recuperou".
- Regista a mensagem anterior na aplicação Visualizador de Eventos e colecta informações de diagnóstico sob a forma de um relatório de depuração. Se o utilizador final optar por fornecer comentários, o SO devolve este relatório de depuração à Microsoft através do mecanismo Online Crash Analysis (OCA).
Alguns aplicativos DirectX herdados podem apenas renderizar preto no final dessa recuperação, o que exige que o usuário final reinicie esses aplicativos. Aplicações bem escritas em DirectX 9Ex e DirectX 10 ou posteriores que lidam com a tecnologia de remoção de dispositivos continuam a funcionar corretamente. Um aplicativo deve liberar e, em seguida, recriar seu dispositivo Microsoft Direct3D e todos os objetos do dispositivo.
Sincronização de threads e TDR
Consulte Sincronização de threads e TDR para obter detalhes.
Testando e depurando TDR
Para obter mais informações, consulte Testando e depurando TDR.