Libro blanco del lag en juegos › Buscar por síntoma
Cámara rápida: 36 causas y sus responsables
También se dice: todo pasa de golpe, avance rápido, se pone al día de una vez
Abrir en la guía de síntomas interactiva →
Cuando la pantalla detenida vuelve a moverse, los movimientos, golpes y daños acumulados pasan todos juntos a toda velocidad.
Monstruos y jugadores se mueven como en avance rápido, y los números de daño y los efectos aparecen todos a la vez.
En algún punto se acumularon paquetes y se liberaron de golpe. Los casos típicos son la espera por una retransmisión TCP, el servidor recuperando el retraso y el cliente atrasado en su procesamiento.
Causas de este síntoma
L1 Proceso del juego en el cliente
L2 SO y dispositivo del cliente
- Procesos en segundo plano que ocupan la CPU: Cuando un análisis del antivirus, Windows Update, un software de streaming o un video en el navegador ocupan los núcleos, el hilo del juego espera sin recibir CPU. (Externo (Externo))
- Desbordamiento del búfer de recepción: 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. (Desarrollo de cliente (Equipo de desarrollo))
- Otras apps del dispositivo que ocupan el ancho de banda: Si en la misma computadora hay una sincronización en la nube, una descarga grande o el parche de un juego, los paquetes del juego esperan en la cola. (Externo (Externo))
- Procesamiento limitado con la ventana minimizada o sin foco: Si miras otra ventana o minimizas el juego, el juego y Windows lo ralentizan para ahorrar energía. Al volver, los paquetes atrasados llegan de golpe o la conexión ya se cortó. (Desarrollo de cliente (Equipo de desarrollo))
L3 Red doméstica
- Bufferbloat (cola del router): Cuando alguien de la familia sube un video o descarga un archivo grande, se acumulan en la cola del router cientos de ms de paquetes, y los paquetes del juego también esperan detrás. (Externo (Externo))
L6 Tarjeta de red del servidor
- Mantenimiento del host en la nube y migración en vivo: Cuando el proveedor de nube hace mantenimiento de un servidor físico (host), mueve las máquinas virtuales a otro host (migración en vivo) o las pausa un momento. Mientras tanto, todo el servidor se detiene y, si la pausa es larga, las conexiones se cortan. (Infraestructura de servidores (Equipo de infraestructura))
L7 SO del servidor (kernel)
- Búferes de socket del kernel insuficientes: Si los búferes de envío y recepción son pequeños, cuando llega una ráfaga de tráfico se descartan paquetes recibidos por UDP y los envíos por TCP se bloquean porque no queda espacio en el búfer. (Infraestructura de servidores (Equipo de infraestructura))
- Salto del reloj del sistema (step de NTP): Si el reloj del servidor se adelanta o se atrasa varios segundos de golpe, los temporizadores que dependen del reloj del sistema se disparan todos a la vez o se detienen. (Desarrollo de servidor (Equipo de desarrollo))
L8 Sockets y protocolos
- Bloqueo HOL en TCP: Para mantener el orden, TCP no entrega al juego los paquetes que llegaron después de uno perdido hasta que vuelve a recibir ese paquete. (Desarrollo de servidor (Equipo de desarrollo))
- Configuración de retransmisión del UDP confiable: Si las reglas de retransmisión implementadas sobre UDP son demasiado conservadoras, la recuperación es lenta; si son demasiado agresivas, congestionan todavía más la conexión. (Desarrollo de servidor (Equipo de desarrollo))
- Caída brusca del ritmo de envío por el control de congestión: TCP interpreta la pérdida como señal de congestión y reduce la velocidad de envío entre un 30 y un 50%. Reacciona igual ante la pérdida en el Wi-Fi. (Infraestructura de servidores (Equipo de infraestructura))
L9 Proceso del juego en el servidor
- Explosión de broadcast: Si el movimiento de un jugador se envía a todos los que lo ven, las actualizaciones que hay que enviar crecen con el cuadrado del número de jugadores reunidos. (Desarrollo de servidor (Equipo de desarrollo))
- Combate concentrado en un solo objetivo (world boss): Cuando cientos de jugadores golpean a la vez a un mismo jefe, el cálculo de ese único jefe se concentra en un punto y la información de cada golpe se envía a todos los que lo ven. (Desarrollo de servidor (Equipo de desarrollo))
- Avalancha de spawns al entrar en una zona concurrida: Al teletransportarse a un pueblo lleno de gente, el servidor tiene que enviar de golpe la apariencia, el equipamiento y el estado de los cientos de jugadores que ahora son visibles. (Desarrollo de servidor (Equipo de desarrollo))
L10 Memoria
- Pausa stop-the-world del GC en el servidor: Un servidor en Java o C# detiene todos sus hilos para recolectar la basura (stop-the-world), y mientras tanto todo el servidor queda detenido. (Desarrollo de servidor (Equipo de desarrollo))
Diseño del netcode
- Reproducción al llegar, sin marcas de tiempo: Si los eventos del servidor no llevan la hora en que ocurrieron y se reproducen en cuanto llegan, el timing de las animaciones sigue tal cual el jitter de la red. (Desarrollo de cliente (Equipo de desarrollo))
Problemas que solo afectan a algunos
- Un jugador con lag se mueve a ráfagas en la pantalla de los demás: Los inputs de alguien con mala conexión llegan al servidor de forma irregular y a ráfagas. Si el servidor aplica en cada tick lo que haya recibido, los demás ven a ese personaje detenerse un instante y luego avanzar varios pasos de golpe. (Desarrollo de servidor (Equipo de desarrollo))
- Cámara rápida en servidores que procesan cada paquete al llegar: En un servidor que procesa y anuncia cada paquete en cuanto llega, las acciones acumuladas de un jugador con lag se ejecutan una tras otra al instante. (Desarrollo de servidor (Equipo de desarrollo))
- Un cliente lento controla al monstruo: Para reducir la carga del servidor, algunos juegos delegan el cálculo del movimiento de un monstruo en el cliente de un jugador cercano. Si la conexión de ese jugador es mala, el monstruo se mueve raro en las pantallas de todos. (Desarrollo de servidor (Equipo de desarrollo))
- Procesamiento limitado de las ventanas en segundo plano: Cuando la ventana del cliente está en segundo plano, el juego, el motor y el SO reducen sus frames y su procesamiento. Los paquetes recibidos no se procesan a tiempo y se acumulan o desbordan. (Desarrollo de cliente (Equipo de desarrollo))
Causas raíz de la retransmisión TCP
- Pérdida en el tramo inalámbrico: El Wi-Fi y las redes móviles reintentan varias veces la transmisión en el tramo inalámbrico y, si aun así no lo consiguen, descartan el paquete. TCP vuelve a enviar ese paquete bastante después. (Externo (Externo))
- Desbordamiento de la cola en el cuello de botella (pérdida por congestión): Cuando se llena la cola del punto más estrecho, como el router, la interconexión entre ISP o el enlace del centro de datos, los paquetes que llegan se descartan. (Infraestructura de red (Equipo de infraestructura))
- Ráfagas de envío que desbordan búferes poco profundos: Si el servidor envía de golpe en cada tick las actualizaciones de miles de jugadores, el pequeño búfer de un switch o el límite instantáneo de la nube se desborda en menos de 1 ms y parte de los paquetes se descarta. (Desarrollo de servidor (Equipo de desarrollo))
- Descarte del exceso por un policer: Los planes de los ISP, los límites de las instancias en la nube y los dispositivos de protección DDoS a veces descartan al instante, sin encolarlos, los paquetes que superan una velocidad fijada. (Infraestructura de red (Equipo de infraestructura))
- Errores físicos (cables, transceptores ópticos o conectores defectuosos): Los cables dañados, los conectores ópticos sucios y los transceptores ópticos al final de su vida útil producen errores de bit, y los dispositivos descartan en silencio los paquetes corruptos. (Infraestructura de red (Equipo de infraestructura))
- Desajuste de dúplex: Si un extremo usa autonegociación y el otro tiene la velocidad y el dúplex fijos, un lado acaba funcionando en half-duplex (semidúplex) y pierde paquetes por colisiones cada vez que hay carga. (Infraestructura de red (Equipo de infraestructura))
- Descarte de paquetes en el host del servidor receptor: Los paquetes llegan al servidor, pero se descartan porque se desborda el búfer circular de la NIC (el búfer donde se guardan un momento los paquetes que llegan) o porque se satura el núcleo que procesa la recepción en el kernel. (Infraestructura de servidores (Equipo de infraestructura))
- Límite de procesamiento superado en dispositivos intermedios (firewall, IPS, protección DDoS): Los firewalls, los sistemas de prevención de intrusiones (IPS) y los dispositivos de protección DDoS inspeccionan uno a uno los paquetes que pasan. En cuanto se supera su capacidad de inspección, descartan los paquetes que no alcanzan a procesar. (Infraestructura de red (Equipo de infraestructura))
- Cambio de ruta o ruta ECMP defectuosa: Se pierden paquetes durante los segundos en que cambia una ruta de internet, o en las conexiones asignadas a una ruta defectuosa entre varias rutas ECMP. (Infraestructura de red (Equipo de infraestructura))
- Retransmisiones espurias por picos de latencia: El paquete no se pierde; solo llega muy tarde por un momento. Pero si ese retraso supera el RTO, el emisor lo da por perdido y lo retransmite. (Externo (Externo))
- RTO mal ajustado al entorno: Si se baja demasiado el RTO mínimo, cualquier pequeño retraso provoca retransmisiones espurias; y el valor predeterminado (200 ms) es demasiado largo para un juego, así que cada pérdida detiene la conexión mucho tiempo. (Infraestructura de servidores (Equipo de infraestructura))
- Recuperación lenta en thin streams: Cuando se envían paquetes pequeños y espaciados, como en un juego, el RTO llega antes de que se junten los “3 paquetes posteriores”. Ante la misma pérdida, la conexión se detiene mucho más tiempo que en una transferencia grande. (Desarrollo de servidor (Equipo de desarrollo))
- Eliminación de opciones TCP en dispositivos intermedios: Si algunos firewalls o aceleradores eliminan o modifican las opciones TCP, cuando se pierden varios paquetes solo se recupera uno por cada ida y vuelta, o la ventana (lo que se puede enviar de una vez) se reduce, y todo va más lento. (Infraestructura de red (Equipo de infraestructura))
- Ventana cero (una detención que parece retransmisión): Cuando el programa receptor no lee el socket a tiempo y el búfer se llena, el emisor deja de enviar y solo manda sondas de ventana cero. El problema no está en la red. (Desarrollo de cliente (Equipo de desarrollo))
Ver la guía de síntomas interactiva