Throttling de CPU en contenedores (cuota de CFS) Container CPU throttling (CFS quota)
ID de la causa so-cpu-quota · Responsable principal Infraestructura de servidores (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo)
Si un contenedor tiene un límite de CPU, en cuanto agota su cuota dentro del periodo fijado (normalmente 100 ms), se detiene a la fuerza el resto del periodo (throttling).
Por qué El contenedor del servidor del juego tiene un límite de CPU (limit) en Kubernetes u otro orquestador → Efecto Cuando se acumula el cálculo del tick, agota la cuota y queda detenido decenas de ms hasta el siguiente periodo → En pantalla La CPU media es baja, pero el tick tiene picos periódicos: tirones y cámara lenta
Cuando se junta mucha gente, De vez en cuando, al azar
Responsable
Responsable principal Infraestructura de servidores (Equipo de infraestructura) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Ajustar el número de hilos de trabajo al límite de CPU (que el runtime no cree tantos hilos como núcleos tiene el host completo).
Tareas (Equipo de infraestructura)
Dejar un límite de CPU holgado, o quitarlo y asignar núcleos dedicados, vigilar el número de veces con throttling (nr_throttled).
Cifras de referencia
En un servidor con un límite de 2 núcleos, si 8 hilos trabajan a la vez, agotan la cuota del periodo de 100 ms en 25 ms y quedan detenidos 75 ms.
En el gráfico
Sube con la carga · Veces con throttling (nr_throttled), tiempo de tick del servidor
Dónde mirar
Incremento de nr_throttled y throttled_usec (en cgroup v1, nr_throttled y throttled_time) en cpu.stat del cgroup del contenedor, junto al tiempo de tick del servidor
Se confirma si
El uso medio de CPU está por debajo del límite, pero nr_throttled y throttled_usec no dejan de subir y coinciden con los picos de tick
Se descarta si
Si nr_throttled no sube, no es esta causa. Si la que se retrasa es la propia máquina virtual: “CPU steal (máquinas virtuales)”
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)
Fuentes
CFS Bandwidth ControlLinux kernel Al agotar la cuota de cada periodo, los hilos se detienen hasta el siguiente (throttling); periodo predeterminado de 100 ms; estadística nr_throttled
Control Group v2Linux kernel cpu.max tiene el formato “$MAX $PERIOD” (cuota, periodo) y su valor predeterminado es “max 100000” (periodo de 100 ms)