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)
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
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
Initialize Amazon EBS volumesAWS 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
Amazon EBS fast snapshot restoreAWS A restauração rápida de snapshot entrega volumes já inicializados desde a criação, eliminando a latência do primeiro acesso