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

Guia do Lag em Jogos › L8 Sockets e protocolos

Slow start após inatividade Slow start after idle

ID da causa sk-slowstart · Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

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)

Sintomas
Input lag, Invisível / entidade fantasma
Fatores
Latência
Quem é afetado
Só eu
Quando
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

  1. IP Sysctl Linux 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)
  2. RFC 5681: TCP Congestion Control IETF
    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
  3. RFC 6928: Increasing TCP's Initial Window IETF
    Janela inicial de 10 segmentos, até 14.600 bytes
  4. ss(8) — Linux manual page iproute2
    cwnd (janela de congestionamento) e ssthresh (limiar do slow start) do -i

Veja também

Mesma camada: L8 Sockets e protocolos

Mesmo sintoma (Input lag) em outras camadas

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