Guia do Lag em Jogos › Buscar por sintoma
Avanço rápido: 36 causas e quem resolve
Também chamado de: tudo de uma vez, jogo acelerado, ações processadas juntas
Abrir no catálogo de sintomas ilustrado →
A tela, que estava parada, volta a andar, e todos os movimentos, golpes e danos atrasados passam depressa, de uma vez só.
Monstros e jogadores se movem como num vídeo acelerado, e os números de dano e os efeitos aparecem todos juntos.
Os pacotes ficaram acumulados em algum ponto e foram liberados de uma vez. Os casos típicos são a espera por retransmissão TCP, o servidor recuperando o atraso e o cliente com o processamento atrasado.
Causas deste sintoma
L1 Processo do jogo no cliente
- Gargalo no processamento de pacotes na thread principal: Se o cliente processa só uma quantidade fixa de pacotes recebidos por frame, os pacotes que chegam em massa vão sendo empurrados para os frames seguintes. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Espiral de recuperação do timestep fixo: Depois de uma parada, o jogo tenta fazer de uma vez os cálculos atrasados e, por causa desse cálculo, atrasa de novo. (Desenvolvimento do cliente (Equipe de desenvolvimento))
L2 SO e dispositivo do cliente
- Processos em segundo plano ocupando a CPU: Quando a varredura do antivírus, o Windows Update, um programa de transmissão ao vivo ou um vídeo no navegador ocupam os núcleos, a thread do jogo fica esperando, sem receber tempo de CPU. (Externo (Externo))
- Estouro do buffer de recepção: Se o jogo está ocupado e demora para tirar os pacotes do socket (a interface de envio e recepção de rede oferecida pelo SO), o buffer do SO estoura. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Outros apps do mesmo dispositivo consumindo largura de banda: Quando sincronização com a nuvem, downloads grandes ou patches de jogos rodam no mesmo PC, os pacotes do jogo esperam na fila. (Externo (Externo))
- Limitação de processamento com a janela minimizada ou inativa: Quando você olha outra janela ou minimiza o jogo, o jogo e o Windows passam a rodá-lo mais devagar para economizar energia. Ao voltar, os pacotes acumulados chegam de uma vez, ou a conexão já caiu. (Desenvolvimento do cliente (Equipe de desenvolvimento))
L3 Rede doméstica
- Bufferbloat (fila do roteador): Quando alguém da família sobe um vídeo ou baixa um arquivo grande, a fila do roteador acumula centenas de ms de pacotes, e os pacotes do jogo esperam atrás deles. (Externo (Externo))
L6 Placa de rede do servidor
- Manutenção do host na nuvem e live migration: Quando o provedor de nuvem faz manutenção em um servidor físico (host), ele move as VMs para outro host (live migration) ou as pausa por um momento. Nesse tempo o servidor inteiro para, e se a pausa for longa as conexões caem. (Infraestrutura de servidores (Equipe de infraestrutura))
L7 SO do servidor (kernel)
- Buffer de socket do kernel insuficiente: Com buffers de envio e recepção pequenos, quando chega um burst de tráfego, os pacotes recebidos por UDP são descartados e o envio TCP fica bloqueado por falta de espaço no buffer. (Infraestrutura de servidores (Equipe de infraestrutura))
- Salto do relógio do sistema (step do NTP): Quando o relógio do servidor é ajustado alguns segundos para frente ou para trás de uma vez, os timers que dependem do relógio do sistema disparam todos juntos ou ficam parados. (Desenvolvimento do servidor (Equipe de desenvolvimento))
L8 Sockets e protocolos
- HOL blocking no TCP: Para manter a ordem, o TCP não entrega ao jogo os pacotes que chegaram depois enquanto não receber de novo o pacote perdido. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Configuração de retransmissão do UDP confiável: Se as regras de retransmissão implementadas sobre o UDP forem conservadoras demais, a recuperação demora. Se forem agressivas demais, congestionam ainda mais a conexão. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Queda brusca da taxa de envio pelo controle de congestionamento: O TCP trata a perda como sinal de congestionamento e reduz a taxa de envio em 30–50%. Ele reage do mesmo jeito à perda no Wi-Fi. (Infraestrutura de servidores (Equipe de infraestrutura))
L9 Processo do jogo no servidor
- Explosão de broadcast: Se o movimento de cada jogador é enviado a todos que o veem, o número de atualizações a enviar cresce com o quadrado do número de jogadores reunidos. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Combate concentrado em um só alvo (world boss): Quando centenas de jogadores atacam o mesmo boss ao mesmo tempo, o cálculo daquele boss se concentra num só ponto, e as informações de cada golpe vão para todos que estão vendo. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Avalanche de spawns ao entrar em área lotada: Quando o jogador se teletransporta para uma cidade lotada, o servidor precisa enviar de uma vez a aparência, o equipamento e o estado das centenas de jogadores que acabaram de entrar no campo de visão. (Desenvolvimento do servidor (Equipe de desenvolvimento))
L10 Memória
- Pausa stop-the-world do GC no servidor: Para coletar o lixo, um servidor em Java ou C# interrompe todas as threads (stop-the-world), e o servidor inteiro fica parado enquanto isso dura. (Desenvolvimento do servidor (Equipe de desenvolvimento))
Design de sincronização
- Eventos reproduzidos ao chegar, sem timestamp: Se o cliente reproduz os eventos do servidor assim que chegam, sem o horário em que aconteceram, o jitter da rede passa direto para o ritmo das animações e efeitos, que fica irregular. (Desenvolvimento do cliente (Equipe de desenvolvimento))
Problemas que só afetam alguns
- Jogador com lag em avanço rápido na tela dos outros: Para quem tem conexão ruim, os inputs chegam ao servidor irregulares e agrupados. Se o servidor aplica a cada tick o que recebeu, na tela dos outros esse personagem engasga e depois anda vários passos de uma vez. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Avanço rápido em servidor que processa tudo ao chegar: Em um servidor que processa e avisa assim que cada pacote chega, as ações agrupadas de um jogador com lag são executadas imediatamente, uma atrás da outra. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Autoridade do monstro em um cliente com lag: Alguns jogos, para reduzir a carga do servidor, entregam o cálculo do movimento dos monstros ao cliente de um jogador próximo. Se a conexão dessa pessoa é ruim, o monstro se move de um jeito estranho na tela de todos. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Limitação de processamento da janela em segundo plano: Em um cliente que está em janela em segundo plano, o jogo, a engine e o SO reduzem frames e processamento. Os pacotes recebidos não são processados a tempo e acumulam ou estouram o buffer. (Desenvolvimento do cliente (Equipe de desenvolvimento))
Causas-raiz da retransmissão TCP
- Perda no trecho sem fio: O Wi-Fi e a rede móvel tentam retransmitir algumas vezes no trecho sem fio e, se ainda assim não conseguem, descartam o pacote. O TCP só reenvia o pacote descartado bem mais tarde. (Externo (Externo))
- Estouro de fila no gargalo (perda por congestionamento): Quando enche a fila do ponto mais estreito do caminho (o roteador, a interconexão entre operadoras, o link do data center), os pacotes que chegam são descartados. (Infraestrutura de rede (Equipe de infraestrutura))
- Estouro de buffers rasos por bursts de envio: Quando o servidor manda de uma vez, a cada tick, as atualizações de milhares de jogadores, o buffer pequeno do switch ou o limite instantâneo da nuvem estoura em menos de 1 ms, e parte dos pacotes é descartada. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Descarte do excedente pelo policer: Planos de operadora, limites de instâncias na nuvem e equipamentos de proteção contra DDoS podem descartar na hora, sem colocar na fila, os pacotes que passam da taxa definida. (Infraestrutura de rede (Equipe de infraestrutura))
- Erros físicos (cabo, transceptor óptico ou conector com defeito): Cabos danificados, conectores ópticos sujos e transceptores ópticos no fim da vida útil geram erros de bit, e os equipamentos descartam silenciosamente os pacotes corrompidos. (Infraestrutura de rede (Equipe de infraestrutura))
- Incompatibilidade de duplex: Quando um lado usa autonegociação e o outro tem velocidade e duplex fixos, um dos lados passa a operar em half-duplex e perde pacotes por colisão sempre que a carga aumenta. (Infraestrutura de rede (Equipe de infraestrutura))
- Descarte de pacotes no servidor receptor: O pacote chega ao servidor, mas é descartado porque o ring buffer da NIC (o buffer que guarda por um momento os pacotes que chegam) estourou ou porque o núcleo que faz o processamento de recepção no kernel está saturado. (Infraestrutura de servidores (Equipe de infraestrutura))
- Sobrecarga de equipamento intermediário (firewall, IPS, proteção contra DDoS): Firewalls, sistemas de prevenção de intrusão (IPS) e equipamentos de proteção contra DDoS inspecionam um por um os pacotes que passam. Quando a carga passa da capacidade de inspeção, eles descartam os pacotes que não conseguem processar. (Infraestrutura de rede (Equipe de infraestrutura))
- Mudança de rota ou caminho ECMP com defeito: Pacotes somem durante os segundos em que a rota na internet muda, ou nas conexões que caíram em um caminho com defeito entre vários caminhos ECMP. (Infraestrutura de rede (Equipe de infraestrutura))
- Retransmissão espúria por pico de latência: O pacote só chegou muito atrasado por um instante, sem se perder. Mesmo assim, se o atraso passa do RTO, quem envia considera o pacote perdido e retransmite. (Externo (Externo))
- Configuração de RTO inadequada para o ambiente: Com o RTO mínimo baixo demais, qualquer pequeno atraso gera retransmissões espúrias; já o padrão (200 ms) é longo demais para um jogo, e cada perda deixa a conexão parada por muito tempo. (Infraestrutura de servidores (Equipe de infraestrutura))
- Recuperação lenta em thin streams: Quando o jogo manda pacotes pequenos e espaçados, o RTO chega antes de se juntarem os “3 pacotes seguintes”. Com a mesma perda, a conexão fica parada por muito mais tempo do que em uma transferência grande. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Remoção de opções TCP por equipamento intermediário: Quando alguns firewalls ou equipamentos de aceleração apagam ou alteram opções do TCP, a conexão fica lenta: ao perder vários pacotes, ela recupera só um por ida e volta, ou a janela (quanto dá para enviar de uma vez) fica pequena. (Infraestrutura de rede (Equipe de infraestrutura))
- Janela zero (paralisação que parece retransmissão): Quando o programa que recebe não lê o socket a tempo e o buffer enche, quem envia para de transmitir e manda só zero window probes. A causa não está na rede. (Desenvolvimento do cliente (Equipe de desenvolvimento))
Ver o catálogo de sintomas ilustrado