ID da causa sk-slowstart · Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
Depois de um tempo ocioso, o TCP volta a reduzir a janela de congestionamento (quanto dá para enviar de uma vez) e, quando de repente precisa enviar muitos dados, divide o envio em várias rodadas.
Por quê Uma conexão que estava ociosa envia muitos dados de uma vez, como ao entrar numa cidade → Efeito Com a janela de congestionamento reduzida, o envio é dividido em várias idas e voltas → Na tela Logo após a entrada, personagens e NPCs ao redor aparecem com atraso de algumas idas e voltas (mais visível em servidores distantes)
Em movimento ou ao trocar de mapa, Depois de ficar parado
Responsável
Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Reduzir os dados de entrada (enviar primeiro o que for indispensável).
O que fazer (Equipe de infraestrutura)
Desligar o tcp_slow_start_after_idle (Linux, configuração do servidor inteiro).
Números de referência
Depois de ficar ocioso por mais tempo que o RTO, a janela de congestionamento começa a encolher e, após um longo período ocioso, cai para cerca de 14 KB (10 pacotes). Aí 100 KB não saem de uma vez e são enviados em 3 idas e voltas.
No gráfico
Alto só em alguns · Tempo de envio logo após a entrada (jogadores com RTT alto)
Onde olhar
Conferir o valor de sysctl net.ipv4.tcp_slow_start_after_idle e ver no ss -ti, no momento em que o jogador entra numa área depois de ficar ocioso, se o cwnd (janela de congestionamento) daquela conexão diminuiu
Confirma se
A configuração está em 1 (padrão) e, no momento da entrada após inatividade, o cwnd cai para cerca de 10 e o envio se divide em várias idas e voltas. Quanto maior o RTT do jogador, maior o atraso para os personagens aparecerem, e o problema some ao mudar para 0
Descarta se
cwnd continua grande, mas os personagens aparecem com atraso: processamento de entrada no servidor (“Avalanche de spawns ao entrar em área lotada”)
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Fontes
IP SysctlLinux kernel tcp_slow_start_after_idle vem ligado por padrão; se a conexão ficar ociosa por um RTO, a janela de congestionamento é reduzida (método do RFC 2861)
RFC 5681: TCP Congestion ControlIETF Se nenhum dado foi enviado por mais tempo que o RTO, a janela de congestionamento cai para no máximo a janela de reinício min(IW, cwnd) e volta o slow start