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

Libro blanco del lag en juegos › L9 Proceso del juego en el servidor

Explosión de broadcast Broadcast fan-out (N×N)

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

Abrir la ficha interactiva con gráficos y simulaciones →

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.

Por qué Los cambios de un jugador se envían a todos los que pueden verlo → Efecto Si 1,000 jugadores se ven entre sí, hay 1 millón de actualizaciones por tick → En pantalla La cola de envío y el ancho de banda se saturan: latencia y pérdida (input lag, cámara rápida, teletransporte)

Síntomas
Input lag, Teletransporte, Cámara rápida
Factores
Latencia, Pérdida de paquetes
A quién afecta
Una zona o un canal, Todo el servidor
Cuándo
Cuando se junta mucha gente
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Infraestructura de servidores (Equipo de infraestructura)
Tareas (Equipo de desarrollo)
Bajar la frecuencia de actualización según la distancia y la importancia (los enemigos cercanos en cada tick, los jugadores lejanos unas pocas veces por segundo), poner un tope a lo que se envía a cada jugador y llenarlo empezando por lo importante, agrupar varias actualizaciones en un paquete, poner un tope a los jugadores mostrados.
Tareas (Equipo de infraestructura)
Comparar el ancho de banda de envío y los paquetes por segundo de cada servidor con los límites de red de la NIC y de la instancia y alertar, comprobar que hay margen antes de los eventos masivos.
Cifras de referencia
1,000 jugadores × 1,000 jugadores × 20 ticks = 20 millones por segundo. Con 40 bytes cada una, unos 6.4 Gbps para todo el servidor y unos 6.4 Mbps por cada jugador que recibe. Si se limita a 150 el número de jugadores visibles, en total queda en 1 Gbps aproximadamente, y alrededor de 1 Mbps por jugador.
En el gráfico
Sube con la carga · Paquetes y bytes enviados por el servidor, jugadores reunidos en un mismo lugar
Dónde mirar
txpck/s y txkB/s (paquetes y KB enviados por segundo por la NIC del servidor) de sar -n DEV 1 junto al gráfico de jugadores. En instancias de nube, los contadores de límite superado de ethtool -S (en ENA de AWS, bw_out_allowance_exceeded y pps_allowance_exceeded)
Se confirma si
Al aumentar los jugadores reunidos, los paquetes y bytes enviados crecen más rápido que los jugadores (casi al cuadrado), y desde que tocan el límite suben los contadores de límite superado o los descartes de envío
Se descarta si
Si el volumen enviado no cambia y solo crece el tiempo de tick, apunta al cálculo de visibilidad o a la lógica del juego
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Casos reales
CCP Games 2014: Sobrecarga del servidor en la gran batalla de flotas de HED-GP en EVE Online

Fuentes

  1. HED-GP Technical Retrospective: What a HED-ache CCP Games
    El envío O(n²), en el que n jugadores deben ver lo que hace cada uno de los n, es el límite inevitable de las grandes batallas de flotas
  2. Actor Priority in Unreal Engine Epic Games
    Cuando se satura el ancho de banda de la conexión, se asigna una prioridad a cada actor (distancia, línea de visión, tiempo desde el último envío) y se reparte el ancho de banda empezando por lo importante
  3. Detailed Actor Replication Flow in Unreal Engine Epic Games
    NetUpdateFrequency fija la frecuencia de actualización de cada actor; se envía por orden de prioridad y, si la conexión se satura, el resto se aplaza al siguiente tick
  4. sar(1) — Linux manual page sysstat
    rxpck/s y txpck/s (paquetes recibidos y enviados por segundo) y rxkB/s y txkB/s (KB recibidos y enviados por segundo) de sar -n DEV
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    Paquetes encolados o descartados por bw_out_allowance_exceeded (límite de ancho de banda de envío superado) y pps_allowance_exceeded (límite de PPS superado)

Ver también

Misma capa: L9 Proceso del juego en el servidor

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

Ver la ficha interactiva con gráficos y simulaciones