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
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
Interface statisticsLinux 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
drivers/net/ethernet/intel/igb/igb_ethtool.cLinux 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)
Ethtool countersLinux 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
net/core/net-procfs.cLinux kernel /proc/net/softnet_stat tiene una línea por CPU, en hexadecimal; la 2.ª columna es dropped y la 3.ª, time_squeeze
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
mpstat(1) — Linux manual pagesysstat 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
net/ipv4/proc.cLinux kernel TcpRetransSegs que muestra nstat (RetransSegs del grupo Tcp)