O seu contador diz 160. O jogo dá um solavanco mesmo assim — uma fração de segundo em que a imagem para, a sua mira vai parar num lugar onde você não a colocou, e depois está tudo bem de novo. O contador nunca se mexeu, e é por isso que nada do que você faz para elevá-lo ajuda.
Essa distância é o assunto inteiro desta página. Engasgo é um quadro que chegou atrasado, não uma taxa de quadros baixa. Um contador de quadros tira a média ao longo de um segundo, então um quadro que levou 90 ms some dentro dos 159 quadros curtos ao lado dele. O número que descreve o que você sentiu é o tempo de quadro, e um engasgo é um quadro muito mais lento que os vizinhos.
Primeiro, a frase honesta. Duas das dez causas abaixo correspondem a uma única caixa no w0a: o valor do agendador na causa 8 e o gravador de jogo em segundo plano na causa 9. As duas caixas só colocam uma configuração onde ela deve estar, e numa máquina que ninguém ajustou a primeira não encontra nada para mudar. Se o engasgo que você sente era uma delas, só uma captura de antes e depois pode dizer.
Primeiro, descubra qual dos três problemas você tem
Eles recebem a mesma palavra e não têm quase nada em comum.
- Solavancos. A linha de base está boa e de vez em quando acontece alguma coisa longa. Isto é esta página.
- Uma linha de base ruim. Nada é dramático, mas o jogo nunca parece suave. Isso é um problema de percentil: FPS médio alto, mas 1% lows ruins.
- Uma queda. A taxa de quadros cai e fica caída por segundos ou minutos. Causas completamente diferentes: quedas repentinas de FPS nos jogos.
Tenha um registro antes de mudar qualquer coisa
Adivinhar é o que faz isso levar semanas. Uma captura do jogo que você realmente joga, no lugar em que ele realmente engasga, transforma "o que será que é" em "o que aconteceu naquele pico" — e é o "antes" contra o qual toda mudança posterior é julgada. Como ler o benchmark explica como.
As causas, uma por uma
1. Um driver segurando um núcleo do processador
Enquanto um driver está dentro de uma interrupção ou de uma chamada adiada, aquele núcleo roda acima de qualquer prioridade de thread que exista: ele não desenha nada e não lê entrada nenhuma até o driver soltar. É uma causa que passa despercebida com facilidade: não aparece em gráfico de tempo de quadro nenhum nem em gerenciador de tarefas nenhum.
Como saber: meça. A seção de kernel de como ler o teste de latência lista cada driver que segurou um núcleo, pela retenção mais longa, com o nome do arquivo. Passando de cerca de 1 ms, um driver está deslocando relatórios de entrada; de 4 ms para cima, a máquina não consegue manter um tempo de quadro estável por mais que você mude outras coisas.
O que fazer: atualize aquele driver específico pelo fabricante do hardware — não o sistema inteiro, o arquivo nomeado. Drivers de rede, de armazenamento e de áudio estão entre os drivers que podem fazer isso.
2. Shaders sendo compilados
Efeito novo, área nova, arma nova, e o jogo tem de compilar um shader antes de conseguir desenhá-lo. A compilação acontece na CPU enquanto o quadro espera.
Como saber: é pior nos primeiros minutos de uma sessão ou de um mapa, vai sumindo conforme você joga, e volta depois de uma atualização de driver ou de jogo. Se o seu engasgo não vai sumindo, não é isto — engasgos de compilação de shaders é a versão longa.
O que fazer: jogue até passar, e não faça benchmark dentro dessa janela; você estaria medindo o compilador.
3. O disco de onde o jogo faz streaming
Um jogo que puxa assets conforme você se move engasga quando a leitura está lenta, e o quadro que espera por esses dados é o atrasado.
Como saber: os solavancos coincidem com a entrada numa área nova, e os intervalos longos de quadro caem na mesma janela que a atividade de disco. Confira o óbvio: o jogo está num disco mecânico, o disco está quase cheio, a pasta do jogo está dentro de uma pasta sincronizada com a nuvem que envia cada gravação, o arquivo de paginação está num disco que gira. Um SSD para um jogo que faz streaming não é um tweak, é a resposta.
4. Pressão de memória
Quando a RAM enche, o Windows move páginas para o disco, e as páginas voltando são sentidas como solavancos. O caso menos óbvio é o limite de commit: conforme a memória total que o Windows pode entregar vai acabando, o gerenciador de memória tira páginas de programas que ainda estão rodando, e o jogo sente esses cortes como congelamentos de menos de um segundo. Os dois melhoram no instante em que você fecha um navegador com quarenta abas.
5. Outra coisa rodando
O worker do Windows Update, uma tarefa de manutenção, uma varredura de malware agendada, uma exportação de vídeo que você esqueceu. Esse trabalho não para quando um jogo começa; ele entra na fila do mesmo núcleo que a thread de renderização, então aparece como picos de tempo de quadro e não como uma média mais baixa. Esperar passar é uma solução legítima.
Como saber: uma captura do benchmark guarda os intervalos de frame mais longos junto com os acessos ao disco e os hard faults que caíram na mesma janela. Se eram processos de manutenção ou do antivírus do Windows, o cartão de intervalos longos conta esses intervalos e nomeia os processos. Isso é o que coincidiu, não a prova de que esse trabalho atrasou o frame: o antivírus lê tudo o que qualquer programa abre.
6. Calor e limites de energia
Quando um chip bate no teto de temperatura ou de energia, o clock é puxado para baixo e empurrado de volta para cima repetidamente, e tempos de quadro ondulados são o que isso parece por dentro. Quem toma essa decisão é o firmware, sozinho, sem perguntar ao Windows. Começa depois de um tempo em vez de imediatamente, e acompanha o quanto o ambiente está quente.
7. A tela
Um monitor rodando abaixo da taxa de atualização que ele suporta põe um piso no seu ritmo de quadros que o hardware não exige. Confira a taxa de verdade em vez de supor; ela está errada num número surpreendente de máquinas depois de uma instalação nova ou de uma troca de cabo.
8. Um valor do agendador deixado para trás por uma ferramenta antiga
O Win32PrioritySeparation decide por quanto tempo uma thread fica com o processador e quanto tempo a mais o aplicativo em primeiro plano recebe. Valores com quantums longos ou fixos, ou com uma fatia do primeiro plano abaixo de 3:1, mudam como o processador é dividido entre o jogo e todo o resto; não foi medido o que isso faz com o tempo de quadro. O cartão Padrões de memória e sistema da página Fix devolve o padrão do Windows.
9. Overlays e a camada de captura
Os overlays desenham dentro do próprio quadro do jogo, e um gravador em segundo plano codifica cada quadro para que os últimos minutos possam ser salvos. Feche um de cada vez e teste, em vez de fechar todos de uma vez.
10. A partida, não a máquina
Um jogo online pode dar solavancos para todo mundo do servidor ao mesmo tempo. Se o conteúdo para um jogador só, na mesma máquina, sai limpo e o registro de tempo de quadro mostra o jogo apresentando normalmente, essa é uma resposta genuinamente útil: não é o seu PC.
As duas causas para as quais o w0a tem uma caixa
Causa 8: "Manter a prioridade de primeiro plano no valor certo (Win32PrioritySeparation)" (página Otimizações)
Um valor DWORD: Win32PrioritySeparation em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl.
A referência da Microsoft para ele é uma página arquivada escrita para o Windows 2000; ela descreve seis bits lidos em três pares, escritos como AABBCC:
| Par | Decide | Valores |
|---|---|---|
| AA (os dois bits mais altos) | Por quanto tempo uma thread pode rodar de cada vez | 01 mais longo, 10 mais curto, 00 ou 11 o padrão da própria edição (mais curto numa edição de estação de trabalho) |
| BB (os dois do meio) | Se essa duração varia | 01 variável, 10 fixa, 00 ou 11 o padrão da edição (variável numa edição de estação de trabalho) |
| CC (os dois mais baixos) | Quanto tempo a mais o programa em primeiro plano recebe | 00 igual (e fixo), 01 2:1, 10 ou 11 3:1. Só é usado quando o par do meio significa variável. |
- Padrão do Windows:
0x2(binário 000010). Numa edição de estação de trabalho, isso significa quantums mais curtos e variáveis, com o programa em primeiro plano recebendo três vezes o tempo do segundo plano. A mesma referência dá0x26(100110: mais curto, variável, 3:1) para a opção de desempenho que favorece os programas, e0x18(011000: mais longo, fixo, igual) para a que favorece os serviços em segundo plano. - O que a caixa faz: primeiro ela lê o valor. Um valor que já dá ao primeiro plano a fatia de 3:1, sem quantums mais longos e sem quantums fixos, fica exatamente como está, e a caixa avisa isso. Só um valor que falha em uma dessas três condições é reescrito, para
0x26. No padrão do próprio Windows a caixa não escreve nada: numa edição cliente,0x2já agenda do jeito que0x26pede. - Quando vale: depois de reiniciar. O kernel transforma esse valor na sua tabela de agendamento durante a inicialização, então mudá-lo no registro não muda nada no agendador que já está rodando, e a caixa pede reinício quando escreve.
- Caminho de volta: o cartão padrões de memória e sistema escreve
2de volta e pede reinício. Ele restaura outros padrões de memória e do agendador ao mesmo tempo.
Causa 9: "Desativar o Xbox Game DVR" (página Otimizações)
| Valor | O que a caixa escreve | Padrão do Windows (o que o cartão de reparo restaura) |
|---|---|---|
HKCU\System\GameConfigStore, GameDVR_Enabled | 0 | 1 |
HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR, AllowGameDVR | 0 | ausente |
HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR, AppCaptureEnabled | 0 | 1 |
HKCU\Software\Microsoft\GameBar, ShowStartupPanel | 0 | ausente |
HKCU\Software\Microsoft\GameBar, UseNexusForGameBarEnabled | 0, exceto num Ryzen X3D com dois CCDs | ausente |
Todos são DWORD. Num processador X3D com dois CCDs, a caixa deixa o último valor em paz: o pipeline de gravação continua desligado, mas a parte do Game Bar que o driver da AMD escuta segue rodando. Isso é uma precaução, não uma causa comprovada, e a mensagem da caixa diz qual caminho ela seguiu. Ryzen X3D, Game Bar e core parking explica por que essa parte importa nesses chips.
- Quando vale: o w0a não pede reinício para esta caixa.
- Do que você abre mão: da gravação do Game Bar. Se o Win+G parar de abrir ou você quiser a gravação de volta, o cartão Game Bar / captura de jogo liga o Game Bar e o Game DVR de novo com os padrões do Windows.
- O que a análise de engasgos diz: ela anota, como informação, quando
GameDVR_EnabledouAppCaptureEnabledainda está ligado; os dois valem 1 numa instalação limpa, então isso é o padrão, não um defeito. Ela também lê um terceiro valor,HistoricalCaptureEnabled(gravação em segundo plano), mas só para escolher a redação; a caixa não escreve esse valor.
Confira você mesmo
Estes comandos só leem:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation
reg query "HKCU\System\GameConfigStore" /v GameDVR_Enabled
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR" /v AllowGameDVR
reg query "HKCU\Software\Microsoft\GameBar"
Como ler as respostas:
- Os valores são impressos em hexadecimal:
Win32PrioritySeparation REG_DWORD 0x26significa0x26. 0x2é o padrão do Windows e0x26é a opção da referência que favorece os programas; numa edição cliente, os dois agendam do mesmo jeito.0x18é a opção que favorece os serviços em segundo plano: quantums mais longos e fixos e nenhuma fatia para o primeiro plano, que é exatamente o assunto da causa 8. Para qualquer outro valor, escreva-o com seis dígitos binários e leia a tabela acima.- Para o Game DVR,
0x0significa desligado (a caixa) e0x1significa ligado (o padrão do Windows). - Se a consulta de
AllowGameDVRterminar com um erro em vez de uma linha, o valor de política não existe, o que é o padrão do Windows.
O que a análise faz com tudo isso
O que a análise de engasgos procura roda essas verificações contra o que o Windows e os seus drivers já registraram, e marca cada achado como comprovado, provável, candidato ou não verificado. Duas coisas que vale saber: uma análise que sempre acha dez problemas está te vendendo as soluções, e uma verificação que não pôde rodar é contada em vez de ser tratada calada como limpa.
Depois mude uma coisa e capture a mesma cena de novo. Cinco mudanças e uma medição não te dizem nada sobre qual delas importou, e tudo o que não moveu um número deve ser desfeito.
Coisas que não são a causa
Tudo isto circula sem fim como solução para engasgos, e o w0a se recusa a escrever cada um desses valores, por motivos documentados:
DisablePagingExecutive,LargeSystemCacheeDisablePageCombiningmudam o gerenciador de memória do kernel;NtfsMemoryUsagemuda o pool do driver NTFS;IoPageLockLimiteSecondLevelDataCachetambém são suposições do kernel. Valores de nível de kernel são uma regra do produto: nunca são escritos.GlobalTimerResolutionRequestsfica emSession Manager\kernel, uma chave que o produto recusa por inteiro.MSISupportedtroca o modo de interrupção de um dispositivo; configurado errado, o resultado pode ser uma tela preta.FeatureSettingsOverrideeFeatureSettingsOverrideMaskdesligam as mitigações de Spectre e Meltdown.OverlayTestModeeDisableOverlaysdesligam a sobreposição multiplano (MPO). Numa máquina real com Windows 11 25H2, eles congelaram o CS2 por completo e de forma repetível.TdrDelayeTdrDdiDelayalongam o watchdog do driver gráfico, o que só faz cada travamento durar mais;TdrLeveldesliga a recuperação.
Numa máquina que não está com falta de memória, um limpador de memória não muda nada mensurável.
Relacionados
- Quedas repentinas de FPS nos jogos: como descobrir a causa
- Engasgos de compilação de shaders: por que os primeiros minutos são os piores
- Como ler o teste de latência
- O que a análise de engasgos procura
- FPS médio alto, mas 1% lows ruins
- Latência de DPC: quando quem engasga é um driver
- Desfazer o que o w0a alterou
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
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.