한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L9 Processo do jogo no servidor

Estouro do tick Tick overrun

ID da causa sp-tick-overrun · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura)

Abrir o card interativo, com figuras e simulações →

Quando o trabalho de um tick passa do orçamento, o intervalo entre ticks do servidor se alonga, e a área inteira fica lenta ou com engasgos.

Por quê O trabalho de um tick (ex.: 50 ms) passa do orçamento → Efeito O estado do jogo, que deveria ser calculado 20 vezes por segundo, é calculado só 8 → Na tela Câmera lenta na área inteira (ou engasgos, conforme o design do servidor), skills demorando a responder

Sintomas
Câmera lenta, Input lag, Engasgos
Fatores
Paralisação
Quem é afetado
Local ou canal específico, Servidor inteiro
Quando
Quando junta muita gente, Horário de pico à noite
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura)
O que fazer (Equipe de desenvolvimento)
Reduzir os cálculos pesados, dividir o tick entre várias threads, distribuir os jogadores entre canais, registrar o tempo de tick como métrica.
O que fazer (Equipe de infraestrutura)
Incluir o tempo de tick e o uso de CPU por núcleo no monitoramento e nos alertas, avaliar CPUs ou instâncias com bom desempenho por núcleo (clock alto).
Números de referência
O orçamento é de 50 ms num servidor de 20 ticks, 33 ms com 30 ticks e 16,7 ms com 60 ticks. Para aguentar picos repentinos, é mais seguro deixar folga e usar normalmente só cerca de metade do orçamento.
No gráfico
Sobe com a carga · Tempo de tick do servidor, jogadores por zona ou canal, CPU da thread do jogo
Onde olhar
Tempo de processamento do tick (p99) e número de estouros registrados pelo servidor, no mesmo gráfico do número de jogadores por zona ou canal. Sem métrica de tick, uso de CPU da thread do jogo com pidstat -t 1
Confirma se
Quando lota, o tempo de tick passa do orçamento (50 ms a 20 ticks), e enquanto isso a thread do jogo fica perto de 100% de CPU
Descarta se
Ticks estouram com pouca CPU na thread do jogo: aponta para espera (pausa do GC, locks, chamadas síncronas). Latência alta na fila de execução no bcc runqlat: a thread não está recebendo tempo de CPU, então aponta para falta de CPU ou excesso de threads
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
Como o tick atrasado aparece depende do design do servidor. Num servidor que avança o estado do jogo um tempo fixo por tick (ex.: 50 ms), o próprio tempo do jogo fica mais lento e tudo entra em câmera lenta. Num servidor que avança de uma vez o tempo que realmente passou, a velocidade do jogo se mantém, mas os pacotes ficam espaçados e os movimentos ficam grandes, o que aparece como engasgos e teleporte. Nos dois casos, a resposta aos comandos atrasa. Se uma única thread do jogo cuida do servidor inteiro, o servidor inteiro fica lento; se há uma thread por área, só aquela área. Alguns jogos, como o EVE Online, desaceleram de propósito o tempo do jogo em até 10 vezes nas batalhas grandes (Time Dilation) para o cálculo conseguir acompanhar.
Casos reais
CCP Games 2014: EVE Online: sobrecarga do servidor na grande batalha de frotas em HED-GP

Fontes

  1. VALORANT's 128-Tick Servers Riot Games
    Um servidor de 128 ticks precisa terminar cada frame em 7,8125 ms; o tempo de frame do servidor é medido por subsistema e o orçamento é dividido entre eles
  2. HED-GP Technical Retrospective: What a HED-ache CCP Games
    Sob sobrecarga, o EVE Online desacelera o tempo do jogo com o Time Dilation, com piso de 10% (10 vezes mais lento); normalmente a CPU dos nós fica abaixo de 80%
  3. Handling variation in time Unity
    Quando a simulação de passo fixo atrasa, os passos de recuperação rodam em sequência, e o tempo acima do limite é descartado, então o tempo do jogo corre mais devagar que o real
  4. pidstat(1) — Linux manual page sysstat
    -t mostra também as estatísticas por thread do processo (uso de CPU etc.)
  5. Demonstrations of runqlat, the Linux eBPF/bcc version IO Visor
    Mostra em histograma a latência da fila de execução do escalonador (quanto tempo uma tarefa esperou para receber CPU)

Veja também

Mesma camada: L9 Processo do jogo no servidor

Mesmo sintoma (Câmera lenta) em outras camadas

Ver o card interativo, com figuras e simulações