Por que as teclas parecem responder com atraso nos jogos

O atraso entre o switch fechar e o jogo reagir é feito de seis etapas, e só duas delas são software. Quais dá para encurtar, quais não dá, e como diferenciar as duas coisas na sua própria máquina.

A maior parte do atraso entre o seu dedo e o jogo está no teclado, não no Windows. Uma tecla pressionada atravessa seis etapas antes de um pixel mudar, e o software consegue encurtar exatamente duas delas. Se você veio aqui atrás de um valor de registro que elimina o atraso do teclado, a resposta honesta é que esse valor não existe — mas três das seis etapas têm defeitos reais e verificáveis, e esses valem vinte minutos.

Esta página divide o caminho, diz de quem é cada pedaço, e fala com todas as letras quais partes estão fora do seu alcance.

O caminho que uma tecla realmente percorre

EtapaDe quem éO software consegue encurtar?
1. O switch fecha; o controlador do teclado varre a matriz dele e faz o debounce do contatoFirmware do tecladoNão
2. O teclado disponibiliza um relatório no endpoint de interrupção USB dele, no intervalo que o firmware pediuFirmware do tecladoNão
3. O controlador do host recolhe o relatório; kbdhid.sys e kbdclass.sys o passam para cimaWindows + driver de chipsetSó removendo um driver que esteja travando
4. O relatório atravessa qualquer driver de filtro ou hook de baixo nível instalado no caminho de entradaSuíte do teclado, camada de macro, overlaySim
5. O jogo lê a entrada — na maioria das engines, uma vez por frameO jogoIndiretamente, aumentando a taxa de quadros
6. O frame é renderizado, apresentado, varrido e acesoGPU, Windows, monitorEm parte — veja a latência de entrada que nenhum software corrige

Etapa 1 — a parte em que ninguém consegue tocar

Um teclado não manda um sinal no instante em que o switch fecha. O controlador dele varre a matriz de teclas em laço, e quando enxerga um contato ele espera o repique (bounce) passar antes de considerar a tecla pressionada. Essa espera é uma constante de firmware. Ela não é exposta ao Windows, nenhum driver consegue lê-la, e nenhum valor de registro em lugar nenhum da sua máquina a altera.

É por isso que dois teclados no mesmo PC podem dar sensações diferentes com todas as outras variáveis idênticas, e é por isso que "atraso de teclado" é, tantas vezes, uma resposta de hardware fantasiada de software.

Etapa 2 — o intervalo de polling é definido pelo teclado, por escrito

Dispositivos USB de entrada enviam por um endpoint de interrupção, e o descritor desse endpoint carrega um campo chamado bInterval que declara com que frequência o host deve perguntar. A referência da própria Microsoft para essa estrutura não deixa margem: "This value reflects the device's configuration in firmware. Drivers cannot change it."

A mesma página dá a conversão. Num dispositivo full-speed, bInterval igual a 1 significa um período de polling de um frame de 1 milissegundo — os 1000 Hz que os teclados anunciam. Num dispositivo high-speed o período é contado em microframes, oito por milissegundo, pela fórmula Period = 2 ** (bInterval - 1).

Duas coisas decorrem disso, e são as frases mais úteis desta página:

Alguns teclados vêm de fábrica num modo de compatibilidade (normalmente rotulado "boot protocol", ou amarrado a uma chave de 6-key rollover) que também baixa a taxa de relatório. Confira o manual do próprio teclado ou o programa de configuração dele antes de concluir que o lento é o Windows.

As duas configurações que as pessoas mudam e que não fazem isso

As duas aparecem em toda lista de "como corrigir o atraso do teclado". Nenhuma delas encurta o caminho entre o toque e o jogo, e a gente prefere dizer isso a te vender um placebo.

Atraso e taxa de repetição de tecla. KeyboardDelay e KeyboardSpeed, em HKCU\Control Panel\Keyboard, mandam no que acontece quando você segura uma tecla: quanto tempo até o caractere começar a repetir, e com que velocidade ele repete depois disso. O primeiro toque não é afetado em nada. O w0a consegue reduzir esse atraso ao passo mais curto, e a descrição do próprio produto diz o que isso te dá — um console, um chat e um menu mais rápidos, não um tiro mais rápido. Se alguma ferramenta anterior deixou esses valores esquisitos, o cartão taxa e atraso de repetição de tecla devolve os padrões do Windows.

Tamanho da fila de dados do teclado. KeyboardDataQueueSize define quantos relatórios o driver de classe consegue segurar se a thread que os consome travar por um instante. Uma fila maior significa menos relatórios perdidos durante um travamento. Ela não faz nenhum relatório chegar mais cedo, e o produto diz isso na própria interface, não numa nota de rodapé. Filas de entrada explica o que é esse valor e como devolvê-lo.

Se alguma página por aí te disser que aumentar o tamanho de uma fila reduz a latência de entrada, você já sabe o suficiente para não acreditar. Uma fila é um amortecedor contra perda, não um atalho.

Etapa 4 — a única etapa que é genuinamente sua

É aqui que mora o atraso de teclado real e mensurável numa máquina normal, e é a etapa que quase ninguém confere.

Tudo que quer ver as suas teclas antes do jogo se instala no caminho de entrada: suítes de fabricante de teclado com motor de macro, serviços de iluminação por tecla que reagem à digitação, overlays de transmissão e de chat, gravadores de tela, utilitários de remapeamento, ferramentas de acessibilidade. Cada um é um salto, e um salto ocupado ou travado segura o caminho inteiro.

O Windows tem um tempo limite exatamente para esse caso. Quando um hook de baixo nível não responde em LowLevelHooksTimeout milissegundos, o Windows pula esse hook e segue adiante; o Windows 10 1709 e posteriores usam no máximo 1000 ms, por maior que seja o valor. Quanto tempo o Windows espera quando o valor não está definido não é documentado, e a gente não mediu. A página Tweaks do Regedit do w0a tem uma entrada que ajusta essa espera para 1000 ms gravando LowLevelHooksTimeout em HKCU\Control Panel\Desktop.

Leia isso com honestidade: limitar o tempo limite não deixa um hook saudável mais rápido. Ele encurta o congelamento quando um hook já deu errado. Isso vale a pena ter, e não é uma redução de latência.

O que fazer de fato, nesta ordem:

  1. Feche por completo o programa do próprio teclado — não minimize para a bandeja. Saia dele, e então jogue uma partida.
  2. Feche os overlays um de cada vez: o overlay da plataforma de jogos, o do chat de voz, o programa de gravação, o overlay do fabricante da placa de vídeo.
  3. Se a sensação mudar, você achou a sua resposta, e aí decide qual recurso vale qual atraso.
  4. Se nada mudar, pare de procurar aqui. Vá para a etapa 3.

Etapa 3 — um driver segurando o núcleo de que o teclado precisa

Um relatório de teclado chega como uma interrupção. Se algum driver sem relação nenhuma estiver ocupando aquele núcleo do processador dentro de uma interrupção ou de uma chamada adiada, a sua tecla espera — e espera acima de qualquer prioridade de thread do sistema, então isso não aparece em nenhum gráfico de tempo de quadro nem em nenhum gerenciador de tarefas.

Isso é mensurável, e é a única parte do caminho em que dá para colocar um número na sua própria máquina:

  1. Abra o Teste de Latência no w0a.
  2. Aperte iniciar e continue mexendo o mouse pelos 12 segundos inteiros — o mouse é o tráfego que o teste usa para amostrar o caminho de entrada.
  3. Leia o número de Interrupção de driver mais longa e a lista de drivers embaixo dele, que é ordenada pela retenção mais longa e diz o nome do arquivo.
  4. Qualquer coisa em 1 ms ou acima está deslocando relatórios. Qualquer coisa em 4 ms ou acima é o que se resolve antes de qualquer outra coisa.

A primeira solução a tentar para um driver que segura um núcleo é atualizar aquele driver específico, pelo fabricante do hardware. Como ler o teste de latência explica as cores e, mais útil ainda, o que o número deixa de fora de propósito.

Etapa 5 — o jogo lê a entrada no ritmo dele

Na maioria das engines o jogo amostra a entrada uma vez por frame. Um jogo rodando a 60 FPS olha para o seu teclado a cada 16,7 ms; a 240 FPS, a cada 4,2 ms. Isso é aritmética, não medição, e nenhuma engine publica o timing exato de entrada dela — então trate como o mecanismo, e não como um número por jogo.

A consequência prática é que aumentar uma taxa de quadros baixa encurta a espera nesta etapa, e que a 40 FPS não é o teclado que te limita. Se a sua taxa de quadros é instável em vez de baixa, o que a análise de engasgos procura é a página certa para isso.

O que sobra, e o que fazer a respeito

A página Fix: um cartão de reparo por coisa que pode ser alterada, cada um restaurando o padrão do Windows.
A página Fix: um cartão de reparo por coisa que pode ser alterada, cada um restaurando o padrão do Windows.

Uma lista curta e reversível. Todos estes itens podem ser desfeitos, e os passos abaixo que apontam para um cartão da página Fix gravam o padrão do Windows de volta, seja qual for a ferramenta que fez a alteração.

  1. Ligue o teclado numa porta da própria máquina, não num hub de monitor, num hub sem alimentação ou num KVM. Cada um deles é mais um controlador entre o dispositivo e o host.
  2. Confira o que a porta está fazendo de verdade. A página Portas USB do w0a lista cada dispositivo com o intervalo de polling que o firmware dele pediu ao lado da taxa de relatório medida a partir de entrada real. Um dispositivo que pede 1 ms e entrega bem menos é um problema de link ou de driver, não um problema de teclado.
  3. Desfaça tweaks de entrada antigos. Mouse, teclado e touchpad e filas de entrada restauram os padrões do Windows se alguma ferramenta mais velha os alterou.
  4. Impeça o gerenciamento de energia USB de colocar a porta para dormir, se o seu teclado fica lento no primeiro toque depois de uma pausa. Configurações de energia das portas USB é esse cartão.
  5. Meça, depois decida. Faça o Teste de Latência antes e depois de cada mudança. Uma mudança que você não consegue enxergar numa medição é uma mudança que você deveria desfazer.

O que o software não consegue fazer aqui

O que ele consegue é tirar do caminho um hook travado, expor um driver que está segurando um núcleo, e impedir que uma porta durma. Numa máquina saudável isso soma menos do que as pessoas esperam; numa máquina doente é a diferença inteira. Medir é como você descobre qual das duas você tem.

Relacionados

Das cerca de doze etapas entre um clique e um pixel que muda, três são do software; o resto é do firmware, da tela e do jogo: Como diminuir o input lag no PC: o que o software encurta e o que não

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.