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

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

Sobrecarga de zona em thread única (hotspot) Single-threaded hot zone

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

Numa arquitetura em que cada área fica com uma thread, quando todo mundo se junta num lugar, só aquele núcleo vai a 100%.

Por quê Uma única thread cuida de uma área (canal) → Efeito Quando todo mundo se junta num lugar, só aquele núcleo satura, e os outros ficam com folga → Na tela Só aquela área tem lag, as outras estão normais

Sintomas
Câmera lenta, Input lag
Fatores
Paralisação
Quem é afetado
Local ou canal específico
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)
Distribuir entre canais, paralelizar dentro da área, limitar o número de jogadores.
O que fazer (Equipe de infraestrutura)
Incluir o uso de CPU por núcleo no monitoramento e nos alertas (na média do servidor inteiro, a saturação de um núcleo some).
Números de referência
Num servidor de 16 núcleos, mesmo com um núcleo em 100%, o uso total de CPU aparece como cerca de 6%. Só olhando o uso por núcleo dá para achar.
No gráfico
Sobe com a carga · Uso de CPU por núcleo, CPU por thread
Onde olhar
Uso por núcleo com mpstat -P ALL 1 e CPU por thread do processo do jogo com pidstat -t 1, comparando com o número de jogadores da zona que a thread mais ocupada atende
Confirma se
A CPU total do servidor está baixa, mas uma única thread (um único núcleo) fica perto de 100%, e nesse momento a zona dessa thread está lotada
Descarta se
Vários núcleos altos por igual: sobrecarga do servidor inteiro. Só o %soft (processamento de recepção) de um núcleo alto: aponta para interrupções da NIC concentradas em um só núcleo
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
As outras áreas só ficam normais quando cada área roda o seu tick separadamente. Se as threads das várias áreas esperam umas pelas outras a cada tick para avançar juntas ao próximo, a área mais ocupada atrasa o tick do servidor inteiro.
Casos reais
CCP Games 2014: EVE Online: sobrecarga do servidor na grande batalha de frotas em HED-GP

Fontes

  1. Time Dilation – How’s That Going? CCP Games
    O Time Dilation do EVE Online age por nó, então até sistemas solares distantes que estão no mesmo nó ficam lentos; batalhas grandes rodam em nós reforçados com apenas 4 sistemas solares
  2. mpstat(1) — Linux manual page sysstat
    Mostra separadamente o uso por processador e a média geral (-P ALL); %soft é a proporção de tempo gasto tratando interrupções de software
  3. pidstat(1) — Linux manual page sysstat
    -t mostra também as estatísticas por thread do processo (uso de CPU etc.)

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