Latência de DPC: quando quem engasga é um driver

Um driver dentro de uma interrupção roda acima de qualquer thread da máquina, então ele não aparece em gerenciador de tarefas nenhum nem em gráfico de tempo de quadro nenhum — o que isso custa, como medir com honestidade, qual arquivo é qual dispositivo, e a única solução que funciona.

Você já passou pela lista. Nada está rodando, as temperaturas estão boas, o disco é rápido, o jogo está num SSD, e a máquina continua dando solavancos. O Gerenciador de Tarefas mostra um sistema ocioso. O gráfico de tempo de quadro mostra o quadro atrasado, mas não diz nada sobre por que ele atrasou.

Existe uma causa que explica exatamente esse formato, e ela é invisível em todas as ferramentas que a maioria das pessoas abre, porque acontece por baixo delas.

Primeiro, a frase honesta. A solução para um driver que segura um núcleo é esse driver, do fabricante dele. A parte do w0a é a medição, o nome do arquivo e o reparo de valores que ferramentas antigas deixaram para trás. A única chave que ele oferecia por perto, direcionar as interrupções de um dispositivo para núcleos escolhidos, é só leitura desde 8 de outubro de 2026, porque nenhum A/B em jogo mostrou um quadro ganho com ela.

O que está acontecendo de verdade

Um dispositivo — uma placa de rede, uma controladora de disco, um chip de som, uma controladora USB — precisa da atenção do processador. Ele levanta uma interrupção, e o Windows roda na hora a rotina de serviço de interrupção do driver. Essa rotina roda acima de qualquer prioridade de thread que exista: não é "prioridade alta", é fora do agendador de threads por completo. Nada mais pode ser agendado naquele núcleo até ela retornar.

Como esse é um lugar caro para se estar, espera-se que os drivers façam o mínimo ali e adiem o resto para uma chamada adiada — um DPC —, que roda um instante depois, ainda à frente de qualquer thread naquele núcleo.

Enquanto uma das duas está executando, aquele núcleo não desenha nada e não lê entrada nenhuma. Se a sua thread de renderização estava nele, o seu quadro atrasa. Se o relatório do seu mouse estava na fila atrás dela, a sua entrada atrasa. E nenhum dos dois eventos aparece num gerenciador de tarefas, porque não existe processo a que atribuí-los.

Por que um milissegundo é muito aqui

É a conta que faz isso valer a perseguição:

Como medir, e as duas formas de a medição falhar

O Teste de Latência do w0a abre uma sessão de rastreamento no kernel e registra, durante doze segundos de movimento real do mouse, por quanto tempo cada driver segurou um núcleo. Ele precisa de direitos de administrador. Por que o teste pede doze segundos trata da duração; como ler o teste de latência trata das cores.

Dois resultados não são respostas, e os dois são relatados como tal em vez de serem arredondados para "limpo":

Há um terceiro caso, mais sutil: uma sessão que perdeu eventos pode ter deixado passar a pior execução inteira, então a página avisa que aquele número pode não ser o pior de verdade. É o mesmo princípio que a análise de engasgos aplica em todo lugar — uma regra que não pôde rodar conta como não verificada, nunca como limpa.

Os números, exatamente

NúmeroA regra
Duração do testeDoze segundos por padrão: tempo suficiente para pegar um driver que se comporta mal uma vez por segundo, e curto o bastante para você realmente continuar mexendo o mouse o tempo todo.
Dados suficientes do mouseDois segundos dos relatórios do próprio dispositivo, e nunca menos de 250 amostras; para um mouse de 1000 Hz, isso dá 2.000. Abaixo disso, o percentil 99 é a segunda ou terceira pior amostra, não uma estatística.
Veredito do driverA pior execução isolada de um driver é marcada como aviso a partir de 1 ms e como crítica a partir de 4 ms. Esses são os limites que esta área usa há duas décadas; são uma convenção, não uma medição que o w0a fez na sua máquina.
Uma medição completaOs números dos drivers só contam como completos quando o rastreamento de kernel rodou e a sessão dele não perdeu nenhum evento. Um contador que se recusa a responder é tratado como uma execução com perdas, não como uma limpa.
Piso do sistemaO percentil 99 do mouse, mais meio intervalo de atualização, mais a pior execução de driver — esta última só quando o rastreamento de kernel foi medido, porque somar zero por um kernel não medido imprimiria um número mais bonito justamente quando a ferramenta sabe menos. É um piso, nunca um total: a amostragem de entrada do próprio jogo, a fila de renderização dele, o trabalho da GPU e a resposta do painel ficam todos de fora. A latência de entrada que nenhum software corrige é o resto da cadeia.

Lendo a lista

Cada driver aparece com o nome do arquivo dele, a retenção isolada mais longa, a fatia que ocupou do tempo medido e quantas vezes rodou. Ordene pela retenção mais longa; é esse o número que te custa um quadro.

Duas leituras que as pessoas fazem errado:

Qual arquivo é qual, e o que fazer com cada um

O nome do arquivo é a pista inteira, e a família a que ele pertence decide qual é a solução:

FamíliaO que éO que ajuda de verdade
Rede sem fioO driver do adaptador Wi-FiO driver do próprio fabricante em vez do genérico que o Windows Update entrega. Um cabo remove a linha por completo.
Rede cabeadaPlaca-mãe ou placa de rede adicionalO driver do fabricante da placa-mãe. Desligar a moderação de interrupções não resolve esta linha: sem ela os pacotes deixam de ser agrupados, cada pacote recebido gera sua própria interrupção e o driver roda mais vezes, não menos. Por isso a página Conexão não mexe na moderação de interrupções em máquinas com menos de seis núcleos físicos — veja tweaks de rede.
ArmazenamentoA controladora no caminho até o seu discoEm NVMe, experimente o driver do próprio Windows e o do fabricante, e fique com aquele em que o teste de latência mostrar o valor mais baixo. Um driver de armazenamento de terceiros vale a pena remover.
USBControladora hostDrivers de chipset, e mudar o mouse para uma porta da placa-mãe em vez de atrás de um hub.
ÁudioO codec, e tudo o que foi empilhado em cima deleO driver do fabricante; se persistir, o driver de áudio genérico do Windows costuma baixar isso. Utilitários de RGB e de áudio rodam por esse caminho.
VídeoDriver de vídeoO site do próprio fabricante. Se começou depois de uma atualização, volte para a versão anterior.
Componentes do próprio WindowsTempo gasto em nome de algum outro driverNão há o que "atualizar" aqui — arrumar os drivers acima também baixa esta linha.
Gerenciamento de energiaO caminho que muda clocks e estados de repousoAumentar o estado mínimo do processador e reduzir a profundidade dos C-states no firmware encurtam isso, e os dois aumentam o consumo em repouso. Isso é uma troca, não uma correção.

Um driver de filtro merece uma linha própria aqui. Ferramentas de modelagem de tráfego e de roteamento de conexão passam cada pacote por um driver delas, e solavancos de rede de vários segundos são o efeito colateral mais conhecido delas; a análise de engasgos as nomeia quando as encontra. O mesmo vale para pacotes de macro e programas de iluminação que instalam um filtro no caminho do mouse e do teclado.

A solução, e as não-soluções

A solução é atualizar aquele driver específico, pelo fabricante do hardware. Não o sistema inteiro, não por um programa atualizador de drivers, e não reinstalando o Windows. A página nomeia o arquivo com precisão justamente para você conseguir descobrir de qual dispositivo ele é.

O que não resolve isto, e é recusado aqui exatamente por isso: sobrescritas de resolução do timer, valores de gerenciamento de memória do kernel (DisablePagingExecutive, LargeSystemCache) e as listas de registro que circulam sob a palavra "latência". Nenhum deles muda por quanto tempo um driver segura um núcleo, porque quem segura é o código do driver. Desligar dispositivos a esmo também não é diagnóstico — embora desligar um dispositivo como teste, com uma medição antes e outra depois, seja um experimento perfeitamente válido. O mesmo vale para os valores de dispositivo que circulam junto com essas listas: MSISupported troca o modo de interrupção de um dispositivo e, configurado errado, o resultado pode ser uma tela preta, então o w0a nunca o escreve, e o cartão de reparo de direcionamento de interrupções mais abaixo não mexe nele.

As duas configurações por perto em que o w0a mexe

Política de interrupção do dispositivo: só leitura, com um cartão de reparo

Onde o Windows a guarda: por dispositivo, em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device>\<instance>\Device Parameters\Interrupt Management\Affinity Policy. DevicePolicy (DWORD) escolhe como as interrupções do dispositivo são distribuídas; quando vale 4, "processadores especificados", AssignmentSetOverride é a máscara dos processadores que elas podem usar.

Padrão do Windows: nenhum dos dois valores presente. O Windows então calcula a distribuição sozinho, e a Microsoft recomenda a política padrão sempre que ela se aplica.

O que o w0a faz: ele lê esses valores e não os escreve. Desde 8 de outubro de 2026, o direcionamento que ele oferecia na página Teste de Latência não existe mais, por três motivos: nenhum A/B em jogo mostrou um quadro ganho com ele, a Microsoft recomenda a distribuição que o Windows calcula, e uma máscara errada é um dispositivo que não inicia.

Caminho de volta: se uma ferramenta fixou as interrupções de um dispositivo e algo quebrou — um mouse que cai, "Código 10" no Gerenciador de Dispositivos —, o cartão direcionamento de interrupções do dispositivo apaga os dois valores de todos os dispositivos PCI, incluindo o direcionamento deixado por versões antigas do w0a. Ele só pede reinício quando realmente removeu alguma coisa, e não mexe em MSISupported.

"Sob carga: sem controle de fluxo, moderação de interrupção e coalescência de segmentos" (página Conexão)

O que escreve: 0 na palavra-chave *FlowControl do adaptador de rede, em todo adaptador que a declara. *InterruptModeration, *RscIPv4 e *RscIPv6 só são escritos em máquinas com pelo menos seis núcleos físicos, e só em adaptadores que se sabe que rodam abaixo de 2,5 Gbit/s; nessas máquinas a caixa também desliga a coalescência de segmentos no nível da pilha de rede, a menos que ela já esteja desligada.

Por que a moderação fica ligada em máquinas menores: com a moderação e a coalescência ambas desligadas, cada pacote recebido vira a própria interrupção em vez de uma por intervalo de moderação, e a carga de chamadas adiadas cai no núcleo que recebe. Então desligar a moderação não é um jeito de encurtar a linha do driver de rede no Teste de Latência: pela descrição do próprio w0a, o que ela remove é a espera de dezenas a centenas de microssegundos que um pacote passa no adaptador até o temporizador do lote acabar, e o que ela acrescenta é uma interrupção por pacote. O efeito dela na lista de drivers não foi medido. Se o driver de rede é a sua linha, rode o teste com a caixa aplicada e sem ela.

O que a própria caixa promete: microssegundos, no ping sob carga. A mensagem dela diz que o ping médio não muda.

Quando vale: quando o adaptador reinicia; o w0a pede reinício sempre que escreveu alguma coisa.

Caminho de volta: o cartão offloads do adaptador de rede devolve os descarregamentos por hardware, a moderação de interrupções, o Energy Efficient Ethernet, a suspensão seletiva e os buffers de recepção aos padrões do próprio driver, como o driver os declara.

Confira você mesmo

Estes comandos só leem. No prompt de comando ou no PowerShell:

reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v DevicePolicy
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\PCI" /s /v AssignmentSetOverride

Uma resposta dizendo que a busca terminou sem nenhuma correspondência (no Windows em inglês, End of search: 0 match(es) found.) significa que nenhum dispositivo tem uma substituição: o padrão do Windows. Uma correspondência aparece listada sob a chave em que foi encontrada, e a parte PCI desse caminho identifica o dispositivo.

No PowerShell, para o adaptador de rede:

Get-NetAdapterAdvancedProperty -Name "*" -RegistryKeyword "*FlowControl","*InterruptModeration","*RscIPv4","*RscIPv6" -AllProperties

Isso lista a configuração atual de cada adaptador para as quatro palavras-chave que a caixa da página Conexão pode escrever. Um adaptador que não aparece para uma palavra-chave não a declara, e a caixa não escreve nada ali.

Depois, meça de novo

Mesmo método, mesmos doze segundos, mesma máquina. A página compara com a sua execução anterior e relata uma mudança abaixo de 5% como nenhuma mudança, não como melhoria, porque duas execuções numa máquina intocada já diferem em alguns por cento de qualquer jeito — a mão se move diferente a cada vez.

Se a linha do driver baixou e o engasgo não, você aprendeu algo de verdade: esta não era a sua causa, e por que os jogos engasgam no Windows 11 tem o resto da lista. Se o que você tem é uma taxa de quadros que cai e fica caída em vez de um solavanco, nunca foi isto — a lista é quedas repentinas de FPS.

Relacionados

Joga CS2? Quais opções de inicialização ainda fazem alguma coisa e onde estão de verdade os quadros no menu de vídeo: Como aumentar o FPS no CS2 e por que ele fica travando: um checklist medido

O w0a não muda nenhuma configuração do Windows até você pedir, e um tweak guarda o valor antigo antes de gravar um novo. Avise-me

Esta página ajudou?

O que faltou, ou o que não funcionou? Lemos cada uma dessas respostas.

Se esta página não resolveu, escreva para nós — diga qual artigo você leu, e nós vamos corrigi-lo.