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

Libro blanco del lag en juegos › L8 Sockets y protocolos

Slow start tras inactividad Slow start after idle

ID de la causa sk-slowstart · Responsable principal Infraestructura de servidores (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Si una conexión TCP pasa un rato inactiva, vuelve a reducir la ventana de congestión (lo que puede enviar de una vez), y cuando de repente tiene que enviar muchos datos, los envía en varias tandas.

Por qué Se envían muchos datos, por ejemplo al entrar en un pueblo, por una conexión que estaba inactiva → Efecto Como la ventana de congestión está reducida, el envío se reparte en varios viajes de ida y vuelta → En pantalla Justo después de entrar, los personajes y NPC de alrededor aparecen varios viajes de ida y vuelta más tarde (se nota más cuanto más lejos está el servidor)

Síntomas
Input lag, Entidades invisibles / fantasma
Factores
Latencia
A quién afecta
Solo yo
Cuándo
Al moverse o cambiar de zona, Tras un rato inactivo
Responsable
Responsable principal Infraestructura de servidores (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Reducir los datos que se envían al entrar en una zona (enviar primero lo imprescindible).
Tareas (Equipo de infraestructura)
Desactivar tcp_slow_start_after_idle (Linux, ajuste para todo el servidor).
Cifras de referencia
Si la conexión pasa inactiva más tiempo que el RTO, la ventana de congestión empieza a reducirse y, tras una inactividad larga, baja a unos 14 KB (10 paquetes). Entonces 100 KB ya no se pueden enviar de una vez y se reparten en 3 viajes de ida y vuelta.
En el gráfico
Alto solo en algunos · Tiempo de envío justo después de entrar (jugadores con RTT alto)
Dónde mirar
Valor de sysctl net.ipv4.tcp_slow_start_after_idle; al entrar en una zona tras un rato inactivo, si la cwnd (ventana de congestión) de esa conexión en ss -ti se ha reducido
Se confirma si
El ajuste está en 1 (predeterminado) y, al entrar tras un rato inactivo, la cwnd baja a unos 10 y el envío se reparte en varios viajes de ida y vuelta. Cuanto mayor es el RTT del jugador, más tarde aparecen las entidades, y con 0 el problema desaparece
Se descarta si
Si la cwnd se mantiene grande y aun así aparecen tarde, apunta al procesamiento de entrada del servidor (“Avalancha de spawns al entrar en una zona concurrida”)
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)

Fuentes

  1. IP Sysctl Linux kernel
    tcp_slow_start_after_idle activado por defecto; si la conexión pasa inactiva un RTO, reduce la ventana de congestión (método de RFC 2861)
  2. RFC 5681: TCP Congestion Control IETF
    Si no se han enviado datos durante más tiempo que el RTO, reducir la ventana de congestión a la ventana de reinicio min(IW, cwnd) o menos y aplicar slow start
  3. RFC 6928: Increasing TCP's Initial Window IETF
    Ventana inicial de 10 segmentos, máximo 14,600 bytes
  4. ss(8) — Linux manual page iproute2
    cwnd (ventana de congestión) y ssthresh (umbral de slow start) de -i

Ver también

Misma capa: L8 Sockets y protocolos

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

Ver la ficha interactiva con gráficos y simulaciones