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

Guia do Lag em Jogos › Causas-raiz da retransmissão TCP

Estouro de fila no gargalo (perda por congestionamento) Tail drop at a congested bottleneck

ID da causa rt-queue-drop · Responsável principal Infraestrutura de rede (Equipe de infraestrutura) · Também envolvidos Externo (Externo), Desenvolvimento do cliente (Equipe de desenvolvimento)

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

Quando enche a fila do ponto mais estreito do caminho (o roteador, a interconexão entre operadoras, o link do data center), os pacotes que chegam são descartados.

Por quê Vídeo, downloads e o tráfego de outros usuários lotam o gargalo → Efeito Enquanto a fila está cheia, os pacotes que chegam são descartados um atrás do outro (tail drop). Os que escapam também esperam no fim da fila cheia → Na tela Vários pacotes somem de uma vez: um travamento longo e depois avanço rápido, com mais frequência à noite

Sintomas
Travamento, Avanço rápido, Rubber banding
Fatores
Perda de pacotes, Latência
Quem é afetado
Mesma casa, Região ou operadora específica, Servidor inteiro
Quando
Horário de pico à noite, Quando junta muita gente
Responsável
Responsável principal Infraestrutura de rede (Equipe de infraestrutura) · Também envolvidos Externo (Externo), Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Mostrar o estado da rede na tela quando as perdas se concentram ou o ping dispara (avisando que pode haver uma transferência grande na mesma conexão).
O que fazer (Equipe de infraestrutura)
Manter folga nos links do data center, verificar os contadores de descarte de fila (output drops) dos nossos links e portas de switch, desviar por outro link ou peering quando o trecho da operadora estiver congestionado.
O que fazer (Externo)
Orientar os jogadores a usar SQM no roteador (fq_codel, CAKE) e ECN (para reduzir a taxa antes de a fila estourar), pedir à operadora que amplie a capacidade do gargalo.
Números de referência
No momento em que a fila estoura, boa parte dos pacotes que chegam durante dezenas de ms some de uma vez. Como é fácil perder vários seguidos e perder também os reenvios, muitas vezes a recuperação só vem com o RTO.
No gráfico
Alto só em certos horários · Taxa de retransmissão, RTT (ping)
Onde olhar
Taxa de retransmissão do servidor (incremento de TcpRetransSegs ÷ TcpOutSegs, rodando o nstat a cada 1 minuto) e RTT por conexão, separados por região, operadora e horário, junto com os descartes de saída (ifOutDiscards) dos nossos links e portas de switch. Rodar mtr até a região afetada no horário de pico e em um horário tranquilo e comparar
Confirma se
A taxa de retransmissão só sobe no pico da noite, e o RTT sobe antes da perda (a fila enchendo). No mtr, só no horário de pico a perda e a latência aumentam juntas de um trecho em diante até o destino
Descarta se
O RTT não sobe antes da perda: “Descarte do excedente pelo policer”. Perda parecida o tempo todo, sem relação com o horário: “Erros físicos” ou “Mudança de rota ou caminho ECMP com defeito”
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Casos reais
Riot Games 2015: Desvios no tráfego do League of Legends e o Riot Direct

Fontes

  1. RFC 7567: IETF Recommendations Regarding Active Queue Management IETF
    Explicação de que o tail drop mantém a fila cheia por muito tempo, o que aumenta a latência e concentra as perdas, e recomendação de AQM
  2. RFC 8290: The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm IETF
    fq_codel: filas por fluxo e AQM mantêm a fila curta e reduzem o bufferbloat
  3. RFC 3168: The Addition of Explicit Congestion Notification (ECN) to IP IETF
    ECN: sinaliza o congestionamento com uma marcação no cabeçalho IP, sem descartar o pacote
  4. Smart Queue Management Bufferbloat.net
    SQM: combina escalonamento por fluxo, gerenciamento do tamanho da fila (AQM) e shaping
  5. Cake Bufferbloat.net
    CAKE: SQM para roteadores que junta um shaper e um gerenciamento de fila da família fq_codel
  6. net/ipv4/proc.c Linux kernel
    TcpRetransSegs e TcpOutSegs no nstat (RetransSegs e OutSegs da seção Tcp)
  7. nstat(8) — Linux manual page iproute2
    Por padrão, o nstat mostra o incremento desde a execução anterior
  8. RFC 2863: The Interfaces Group MIB IETF
    ifOutDiscards: número de pacotes que, mesmo sem erro, foram descartados sem ser transmitidos, por motivos como liberar espaço no buffer
  9. An Internet-Wide Analysis of Traffic Policing Google
    Diferença: no estouro de fila, o tempo de espera e o RTT sobem antes da perda; o policing descarta o excedente sem aumento do RTT (SIGCOMM 2016)

Veja também

Mesma camada: Causas-raiz da retransmissão TCP

Mesmo sintoma (Travamento) em outras camadas

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