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

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

Explosão de broadcast Broadcast fan-out (N×N)

ID da causa sp-broadcast · 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 →

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.

Por quê A mudança de um jogador é enviada a todos que podem vê-lo → Efeito Com 1.000 jogadores vendo uns aos outros, são 1 milhão de atualizações por tick → Na tela A fila de envio e a largura de banda saturam: atraso e perda (input lag, avanço rápido, teleporte)

Sintomas
Input lag, Teleporte, Avanço rápido
Fatores
Latência, Perda de pacotes
Quem é afetado
Local ou canal específico, Servidor inteiro
Quando
Quando junta muita gente
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 a frequência de atualização conforme a distância e a importância (inimigos próximos a cada tick, jogadores distantes algumas vezes por segundo), limitar o volume enviado a cada jogador e preencher primeiro o que é mais importante, juntar várias atualizações num pacote, limitar o número de jogadores exibidos.
O que fazer (Equipe de infraestrutura)
Comparar a largura de banda de envio e os pacotes por segundo de cada servidor com os limites de rede da NIC e da instância e alertar, conferir a folga antes de eventos grandes.
Números de referência
1.000 jogadores × 1.000 jogadores × 20 ticks = 20 milhões por segundo. A 40 bytes cada, são cerca de 6,4 Gbps no servidor inteiro e cerca de 6,4 Mbps por jogador que recebe. Limitando a 150 jogadores visíveis, cai para cerca de 1 Gbps no total e cerca de 1 Mbps por jogador.
No gráfico
Sobe com a carga · Pacotes e bytes enviados pelo servidor, jogadores reunidos num só lugar
Onde olhar
txpck/s e txkB/s do sar -n DEV 1 (pacotes e KB enviados por segundo pela NIC do servidor) junto com o gráfico de jogadores. Em instâncias de nuvem, os contadores de limite excedido do ethtool -S (no ENA da AWS, bw_out_allowance_exceeded e pps_allowance_exceeded)
Confirma se
Quando o número de jogadores reunidos aumenta, os pacotes e bytes enviados crescem mais rápido que o número de jogadores (quase ao quadrado), e a partir do momento em que batem no limite os contadores de limite excedido ou os descartes no envio sobem
Descarta se
Volume enviado estável, mas o tempo de tick sobe: cálculo de visibilidade ou lógica do jogo
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Casos reais
CCP Games 2014: EVE Online: sobrecarga do servidor na grande batalha de frotas em HED-GP

Fontes

  1. HED-GP Technical Retrospective: What a HED-ache CCP Games
    O envio O(n²), em que n jogadores precisam ver a ação de n jogadores, é o fator limitante inevitável das grandes batalhas de frotas
  2. Actor Priority in Unreal Engine Epic Games
    Quando a largura de banda da conexão satura, cada ator recebe uma prioridade (distância, linha de visão, tempo desde o último envio) e a banda é distribuída a partir dos mais importantes
  3. Detailed Actor Replication Flow in Unreal Engine Epic Games
    NetUpdateFrequency define a frequência de atualização de cada ator; o envio segue a ordem de prioridade e, quando a conexão satura, o restante fica para o próximo tick
  4. sar(1) — Linux manual page sysstat
    rxpck/s e txpck/s (pacotes recebidos e enviados por segundo) e rxkB/s e txkB/s (KB recebidos e enviados por segundo) do sar -n DEV
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    bw_out_allowance_exceeded (limite de largura de banda de envio excedido) e pps_allowance_exceeded (limite de PPS excedido): número de pacotes enfileirados ou descartados

Veja também

Mesma camada: L9 Processo do jogo no servidor

Mesmo sintoma (Input lag) em outras camadas

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