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

Libro blanco del lag en juegos › Causas raíz de la retransmisión TCP

Descarte de paquetes en el host del servidor receptor Receiver host drops (ring, softirq, CPU)

ID de la causa rt-host-drop · Responsable principal Infraestructura de servidores (Equipo de infraestructura)

Abrir la ficha interactiva con gráficos y simulaciones →

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.

Por qué Pico de conexiones, interrupciones concentradas en un solo núcleo, CPU steal en la máquina virtual o sobrecarga del switch virtual → Efecto Descarte en el búfer circular (rx_missed_errors, etc.; el nombre cambia según el driver) o en la cola de recepción del kernel (softnet dropped) → En pantalla Cuando se junta mucha gente, los inputs tardan en hacer efecto en todo el servidor a la vez y hay tirones

Síntomas
Input lag, Congelamiento, Cámara rápida, Teletransporte
Factores
Pérdida de paquetes, Detención
A quién afecta
Todo el servidor
Cuándo
Cuando se junta mucha gente
Responsable
Responsable principal Infraestructura de servidores (Equipo de infraestructura)
Tareas (Equipo de infraestructura)
Añadir al monitoreo los contadores de descartes como rx_missed_errors de ethtool -S y dropped de /proc/net/softnet_stat, ampliar el búfer circular (ethtool -G), repartir RSS y las interrupciones entre varios núcleos, separar los núcleos del hilo del juego de los que procesan la recepción, asegurar margen de CPU y, en máquinas virtuales, revisar el CPU steal y la carga del switch virtual.
Cifras de referencia
Los paquetes que el servidor descarta al recibirlos los reenvía el cliente. Por eso apenas aparecen en las métricas de retransmisión del servidor, y se ven antes en contadores de descartes como rx_missed_errors de ethtool -S (el nombre cambia según el driver) y en dropped de /proc/net/softnet_stat.
En el gráfico
Topa con el límite · Uso de softirq por núcleo, contadores de descartes de la NIC
Dónde mirar
Contadores de descartes de ethtool -S (rx_missed_errors, etc.; en mlx5, rx_out_of_buffer y rx_discards_phy), missed de ip -s -s link, 2.ª columna (dropped) y 3.ª columna (time_squeeze) de /proc/net/softnet_stat, y %soft por núcleo (procesamiento de interrupciones de software) con mpstat -P ALL. En máquinas virtuales, también %steal
Se confirma si
A la hora en que se junta la gente suben los contadores de descartes o el softnet dropped, y el %soft del núcleo que procesa la recepción se queda cerca del 100% sin poder subir más. Los inputs se retrasan a la vez en todas las conexiones de ese servidor
Se descarta si
Si los contadores de descartes del servidor no cambian y las retransmisiones se concentran en conexiones de una región o un ISP, es pérdida en la ruta. Cuando se pierden en la ruta paquetes enviados por el servidor, sube TcpRetransSegs en el nstat del servidor y estos contadores no cambian
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)

Fuentes

  1. Interface statistics Linux kernel
    rx_missed_errors: paquetes que el host no pudo recibir por falta de búfer (en /proc/net/dev se suman a drop); se ve con ip -s -s link
  2. drivers/net/ethernet/intel/igb/igb_ethtool.c Linux kernel
    Los nombres de los contadores de ethtool -S los define el driver (p. ej., rx_missed_errors y rx_no_buffer_count en igb)
  3. Ethtool counters Linux kernel
    rx_out_of_buffer (sin búfer en la cola de recepción) y rx_discards_phy (descartes por falta de búfer en el puerto) del driver mlx5
  4. net/core/net-procfs.c Linux kernel
    /proc/net/softnet_stat tiene una línea por CPU, en hexadecimal; la 2.ª columna es dropped y la 3.ª, time_squeeze
  5. Documentation for /proc/sys/net/ Linux kernel
    netdev_max_backlog: límite de la cola de recepción donde se acumulan los paquetes cuando llegan más rápido de lo que el kernel los procesa
  6. Scaling in the Linux Networking Stack Linux kernel
    RSS: la NIC reparte los paquetes entre varias colas de recepción para procesarlos en varias CPU
  7. ethtool(8) — Linux manual page ethtool
    -G (--set-ring) cambia el tamaño del búfer circular
  8. proc_stat(5) — Linux manual page Linux man-pages
    steal de /proc/stat: tiempo de CPU que, en un entorno virtualizado, usó otro SO
  9. mpstat(1) — Linux manual page sysstat
    Uso por núcleo con mpstat -P ALL; %soft es el tiempo de procesamiento de interrupciones de software, y %steal, el tiempo de espera mientras el hipervisor atendía otra CPU virtual
  10. net/ipv4/proc.c Linux kernel
    TcpRetransSegs que muestra nstat (RetransSegs del grupo Tcp)

Ver también

Misma capa: Causas raíz de la retransmisión TCP

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

Ver la ficha interactiva con gráficos y simulaciones