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

Guia do Lag em Jogos › L2 SO e dispositivo do cliente

Estouro do buffer de recepção Socket receive buffer overflow

ID da causa co-rcvbuf · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)

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

Se o jogo está ocupado e demora para tirar os pacotes do socket (a interface de envio e recepção de rede oferecida pelo SO), o buffer do SO estoura.

Por quê Os frames atrasam e o jogo lê o socket tarde → Efeito O buffer de recepção do SO enche: o UDP descarta pacotes, e o TCP reduz a janela de recepção para parar o envio → Na tela Teleporte (UDP) ou avanço rápido (TCP)

Sintomas
Teleporte, Avanço rápido
Fatores
Perda de pacotes, Paralisação
Quem é afetado
Só eu
Quando
Quando junta muita gente
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Usar uma thread dedicada à recepção, ajustar o tamanho do buffer (SO_RCVBUF).
Números de referência
O buffer de recepção padrão tem de dezenas a centenas de KB, conforme o SO e a configuração. Em lugares cheios, as atualizações podem chegar a centenas de KB por segundo.
No gráfico
Sobe com a carga · Descartes no buffer de recepção UDP, frame time
Onde olhar
Registrar no Monitor de Desempenho do Windows Microsoft Winsock BSP\Dropped Datagrams (datagramas UDP descartados por falta de espaço no buffer de recepção do socket) e UDPv4\Datagrams Received Errors junto com o frame time, e contar no jogo as lacunas na sequência dos pacotes recebidos
Confirma se
Em lugares cheios ou logo após frames longos, Dropped Datagrams aumenta e, no mesmo momento, surgem lacunas na sequência do jogo. No mesmo horário, não há perda do lado da conexão
Descarta se
Dropped Datagrams estável, mas com números faltando na sequência: perda no caminho
Como verificar
Verificação no ambiente do jogador

Fontes

  1. socket(7) — Linux manual page Linux man-pages
    SO_RCVBUF é o tamanho máximo do buffer de recepção do socket; o padrão vem de rmem_default e o máximo de rmem_max (o Android também usa kernel Linux)
  2. SOL_SOCKET Socket Options (Winsock2.h) Microsoft
    SO_RCVBUF no Windows: espaço de buffer reservado para recepção em cada socket
  3. RFC 9293: Transmission Control Protocol (TCP) IETF
    O campo de janela do TCP é o número de bytes que o receptor ainda pode receber; se for 0, o emissor só envia zero window probes e espera
  4. Low Latency Workloads Management and Operations Microsoft
    Dropped Datagrams e Dropped Datagrams/sec do conjunto de contadores Microsoft Winsock BSP: datagramas UDP descartados porque chegaram mais rápido do que o app processa ou porque faltou espaço no buffer do socket de recepção
  5. Network-Related Performance Counters Microsoft
    UDPv4 e UDPv6: Datagrams Received Errors; Microsoft Winsock BSP: contador Dropped Datagrams

Veja também

Mesma camada: L2 SO e dispositivo do cliente

Mesmo sintoma (Teleporte) em outras camadas

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