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

Guia do Lag em Jogos › L11 Disco

Lazy loading no servidor Lazy loading on the server

ID da causa dk-lazy-load · 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 servidor lê do disco os dados de uma dungeon ou de um mapa só quando alguém pede pela primeira vez, todos ficam parados durante aquele tick.

Por quê Alguém entra pela primeira vez em uma dungeon ou área → Efeito O servidor lê os dados do disco na thread do jogo → Na tela Um breve travamento para todos naquele servidor

Sintomas
Travamento
Fatores
Paralisação
Quem é afetado
Local ou canal específico, Servidor inteiro
Quando
Em movimento ou ao trocar de mapa
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)
Carregar tudo antecipadamente na inicialização do servidor, carregamento assíncrono.
O que fazer (Equipe de infraestrutura)
Em servidores recém-criados a partir de snapshot, aquecer o disco antes de colocá-los em produção (ler todos os blocos uma vez) ou usar o recurso de restauração rápida de snapshot.
No gráfico
Picos aleatórios · Tempo de tick do servidor, leituras de disco
Onde olhar
Cruzar o horário da parada com os registros de primeira entrada em dungeons e áreas no log do servidor do jogo e, nesse instante, ver as leituras de disco do servidor do jogo (kB_rd/s no pidstat -d) e as chamadas read e open demoradas com perf trace --duration. Em servidor na nuvem recém-criado, comparar o VolumeAvgReadLatency do EBS com o de um servidor antigo
Confirma se
Para só no momento da primeira entrada e não para quando alguém entra no mesmo lugar pela segunda vez. Durante a parada, a thread do jogo está esperando leitura de arquivo
Descarta se
Para do mesmo jeito em áreas já carregadas: outra causa, como estouro do tick ou GC
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
Na nuvem, um servidor recém-criado a partir de snapshot (cópia do disco) busca no storage remoto cada bloco lido pela primeira vez e fica bem mais lento que o normal. Se a primeira entrada só demora muito nos servidores que o autoscaling acabou de subir, suspeite disso.

Fontes

  1. Initialize Amazon EBS volumes AWS
    Volumes criados a partir de snapshot têm latência maior e desempenho menor enquanto os blocos são buscados do S3; inicializar antes lendo todos os blocos com dd ou fio
  2. Amazon EBS fast snapshot restore AWS
    A restauração rápida de snapshot entrega volumes já inicializados desde a criação, eliminando a latência do primeiro acesso
  3. pidstat(1) — Linux manual page sysstat
    -d: kB_rd/s por processo (volume lido do disco por segundo)
  4. perf-trace(1) — Linux manual page perf
    Mostra só as chamadas de sistema que levaram mais que os ms indicados em --duration
  5. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeAvgReadLatency: latência média de leitura em 1 minuto (instâncias Nitro)

Veja também

Mesma camada: L11 Disco

Mesmo sintoma (Travamento) em outras camadas

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