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

Guia do Lag em Jogos › Design de sincronização

Lockstep esperando o jogador mais lento Lockstep waits for the slowest peer

ID da causa sy-lockstep · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)

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

Em uma arquitetura em que todos calculam juntos o mesmo turno, se o input de um jogador atrasa, todos esperam.

Por quê A cada turno, o cálculo só acontece quando chegam os inputs de todos os jogadores → Efeito O input de um jogador chega tarde por jitter ou perda de pacotes → Na tela Todos engasgam ao mesmo tempo e, nos casos graves, aparece a janela “Aguardando jogador”

Sintomas
Travamento, Engasgos, Input lag
Fatores
Jitter, Perda de pacotes, Paralisação
Quem é afetado
Local ou canal específico
Quando
Aleatoriamente, de vez em quando
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Servidor: ajustar o atraso de input automaticamente de acordo com o ping, separar por um momento só quem está atrasado para que os outros sigam sem esperar. Cliente: aplicar o atraso de input definido; em P2P sem servidor intermediário, o cliente host também cuida do ajuste do atraso de input e do tratamento de quem atrasa.
Números de referência
Se o atraso de input for menor que “tempo para o input chegar ao outro jogador + jitter”, as paradas ficam frequentes. O tempo para chegar é metade do ping em conexão direta, e cerca de metade da soma do ping dos dois quando passa por um servidor intermediário.
No gráfico
Picos aleatórios · Tempo de espera por turno, atraso de chegada dos inputs por jogador
Onde olhar
Registrar a cada turno o horário de chegada do input de cada jogador e o tempo em que o turno ficou parado esperando, e ver de quem era o input esperado nos turnos parados. Com servidor intermediário, também dá para ver pelo intervalo de chegada dos pacotes de input de cada jogador em uma captura de pacotes no servidor
Confirma se
Em todo turno parado, o input da mesma pessoa chegou depois do atraso de input, e nesse momento o jitter ou a perda de pacotes dessa pessoa dá pico
Descarta se
Todos os inputs chegaram a tempo e mesmo assim para: problema no tempo de cálculo do PC mais lento ou no processamento do servidor. Sem paradas, mas com resultados diferentes nas duas telas: divergência no resultado do cálculo (desync), então verificar “Divergência no cálculo de caminho na sincronização de comandos”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo

Fontes

  1. Deterministic Lockstep Gaffer On Games
    O cálculo do frame n só acontece quando chegam todos os inputs, então, se algum atrasa, todos esperam. Com um buffer de atraso de reprodução pequeno para absorver o jitter, há engasgos
  2. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    Agenda os comandos para executar dois turnos depois e ajusta a duração do turno ao computador mais lento e ao ping (Speed Control)
  3. A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
    Define o atraso de input (incoming delay) igual à latência “A→servidor + servidor→B” para que todos apliquem o input no mesmo instante

Veja também

Mesma camada: Design de sincronização

Mesmo sintoma (Travamento) em outras camadas

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