Queda brusca da taxa de envio pelo controle de congestionamento Congestion control backoff
ID da causa sk-congestion · Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O TCP trata a perda como sinal de congestionamento e reduz a taxa de envio em 30–50%. Ele reage do mesmo jeito à perda no Wi-Fi.
Por quê Com muito a enviar, ocorre um pouco de perda no Wi-Fi ou na conexão → Efeito O TCP reduz muito a taxa de envio e se recupera devagar (o CUBIC, padrão no Linux e no Windows, reduz 30%) → Na tela Em lugares lotados, as atualizações atrasam: avanço rápido e input lag
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 o volume enviado (área de interesse, só as mudanças), dividir o envio para não mandar tudo de uma vez.
O que fazer (Equipe de infraestrutura)
Trocar para um controle de congestionamento como o BBR (tcp_congestion_control).
No gráfico
Dente de serra · Janela de congestionamento (cwnd) e taxa de envio por conexão
Onde olhar
Capturar várias vezes, com ss -ti, a conexão do jogador com atualizações atrasadas e ver a variação de cwnd e ssthresh e o nome do controle de congestionamento (cubic ou bbr), observando também se o Send-Q acumula
Confirma se
Depois de uma perda, o cwnd cai muito e sobe devagar, repetidamente, e enquanto está baixo o Send-Q acumula, coincidindo com o horário dos reports de avanço rápido e input lag
Descarta se
cwnd com folga, mas os dados atrasam: janela de quem recebe (“Janela zero (paralisação que parece retransmissão)”) ou envio no servidor
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
IP SysctlLinux kernel tcp_congestion_control escolhe o algoritmo de controle de congestionamento das conexões novas
ss(8) — Linux manual pageiproute2 cwnd, ssthresh e nome do algoritmo de controle de congestionamento no -i
net/ipv4/tcp_diag.c (Linux v6.12)Linux kernel Valores Recv-Q e Send-Q do ss: no socket em escuta, as conexões esperando o accept e o limite do backlog; no socket conectado, os bytes que o app ainda não leu e os bytes enviados ainda sem ACK