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

Libro blanco del lag en juegos › L2 SO y dispositivo del cliente

Desbordamiento del búfer de recepción Socket receive buffer overflow

ID de la causa co-rcvbuf · Responsable principal Desarrollo de cliente (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Si el juego está ocupado y saca tarde los paquetes del socket (la interfaz de red para enviar y recibir que ofrece el SO), el búfer del SO se desborda.

Por qué Los frames se atrasan y el juego lee el socket tarde → Efecto El búfer de recepción del SO se llena: en UDP se descartan paquetes, y en TCP se reduce la ventana de recepción para que el emisor deje de enviar → En pantalla Teletransporte (UDP) o cámara rápida (TCP)

Síntomas
Teletransporte, Cámara rápida
Factores
Pérdida de paquetes, Detención
A quién afecta
Solo yo
Cuándo
Cuando se junta mucha gente
Responsable
Responsable principal Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Usar un hilo dedicado a la recepción, ajustar el tamaño del búfer (SO_RCVBUF).
Cifras de referencia
El búfer de recepción predeterminado es de decenas a cientos de KB según el SO y la configuración. Las actualizaciones en un sitio con mucha gente pueden llegar a cientos de KB por segundo.
En el gráfico
Sube con la carga · Descartes en el búfer de recepción UDP, tiempo de frame
Dónde mirar
Registrar Microsoft Winsock BSP\Dropped Datagrams (UDP descartados por falta de espacio en el búfer de recepción del socket) y UDPv4\Datagrams Received Errors del Monitor de rendimiento de Windows junto con el tiempo de frame; en el juego, contar los huecos en los números de secuencia de los paquetes recibidos
Se confirma si
Dropped Datagrams aumenta en sitios con mucha gente o justo después de un frame largo, y en ese mismo instante aparecen huecos en la secuencia del juego. A esa hora no hay pérdida en la conexión
Se descarta si
Si Dropped Datagrams no cambia y solo faltan números de secuencia, la pérdida está en la ruta
Se verifica con
En el entorno del jugador

Fuentes

  1. socket(7) — Linux manual page Linux man-pages
    SO_RCVBUF es el tamaño máximo del búfer de recepción del socket; el valor predeterminado lo fija rmem_default y el máximo, rmem_max (Android también usa el kernel de Linux)
  2. SOL_SOCKET Socket Options (Winsock2.h) Microsoft
    SO_RCVBUF en Windows: espacio de búfer que se reserva para recepción en cada socket
  3. RFC 9293: Transmission Control Protocol (TCP) IETF
    El campo de ventana de TCP indica cuántos bytes más puede recibir el receptor; si es 0, el emisor espera enviando solo sondas de ventana cero
  4. Low Latency Workloads Management and Operations Microsoft
    Dropped Datagrams y Dropped Datagrams/sec del conjunto de contadores Microsoft Winsock BSP: datagramas UDP descartados porque llegan más rápido de lo que la app los procesa o porque falta espacio en el búfer de recepción del socket
  5. Network-Related Performance Counters Microsoft
    Contadores UDPv4/UDPv6: Datagrams Received Errors y Microsoft Winsock BSP: Dropped Datagrams

Ver también

Misma capa: L2 SO y dispositivo del cliente

Causas de otras capas con el mismo síntoma (Teletransporte)

Ver la ficha interactiva con gráficos y simulaciones