Enquanto o servidor físico (hypervisor) cede por um momento o tempo de CPU da máquina virtual a outra máquina virtual (CPU steal), o servidor do jogo fica parado.
Por quê Outra máquina virtual no mesmo host usa muita CPU → Efeito Nossa máquina virtual fica sem rodar por períodos de alguns a dezenas de ms → Na tela Picos inexplicáveis no tempo de tick: engasgos e travamento
Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Externo (Externo)
O que fazer (Equipe de infraestrutura)
Monitorar a métrica de steal (st no top e no vmstat), usar núcleos ou hosts dedicados, evitar instâncias burstable (que ficam lentas quando os créditos de CPU acabam), parar e iniciar de novo as instâncias com steal alto persistente para movê-las para outro host.
O que fazer (Externo)
Reportar ao provedor de nuvem os hosts com steal alto persistente.
No gráfico
Picos aleatórios · %steal, tempo de tick do servidor
Onde olhar
%steal do mpstat -P ALL 1 no mesmo eixo de tempo do tempo de tick do servidor
Confirma se
O %steal sobe junto nos momentos em que o tick dá pico, e cai depois de parar e iniciar de novo a instância para movê-la para outro host
Descarta se
%steal perto de 0, mas o tick dá picos: causa dentro do servidor do jogo (“Pausa stop-the-world do GC no servidor”, “Contenção de lock”). Em contêiner: “Throttling de CPU em contêiner (cota do CFS)”
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Fontes
proc_stat(5) — Linux manual pageLinux man-pages steal: tempo perdido, em ambiente virtualizado, enquanto outros sistemas operacionais rodavam
Standard mode for burstable performance instancesAWS Instâncias burstable gastam créditos para passar do desempenho de referência; quando os créditos acabam, o uso de CPU cai para o nível de referência
mpstat(1) — Linux manual pagesysstat %steal: proporção do tempo em que esta CPU virtual teve de esperar enquanto o hypervisor rodava outras CPUs virtuais