Ir al contenido

irqbalance - Ajuste de distribución de interrupciones

irqbalance - Ajuste de distribución de interrupciones

irqbalance es un daemon que distribuye interrupciones de hardware (IRQs) entre núcleos de CPU. Por defecto Linux puede enrutar la mayoría de interrupciones de una NIC o controlador de almacenamiento ocupado a CPU 0, haciendo ese núcleo un cuello de botella mientras otros están inactivos. irqbalance monitorea carga de interrupción y rebalancea afinidad de IRQ para extender el trabajo. Contrariamente, para cargas de trabajo críticas de latencia con CPUs fijadas manualmente, a menudo deliberadamente deshabilitado para que no pueda mover interrupciones a núcleos aislados.

Instalación

PlataformaComando
Debian/Ubuntusudo apt install irqbalance
Fedora/RHELsudo dnf install irqbalance
Arch Linuxsudo pacman -S irqbalance
Serviciosudo systemctl enable --now irqbalance
Verificarirqbalance --version

Inspeccionar interrupciones primero

ComandoMuestra
cat /proc/interruptsConteos de interrupción por CPU por dispositivo
watch -n1 'cat /proc/interrupts'Crecimiento en vivo (localiza el núcleo caliente)
mpstat -I SUM -P ALL 1Interrupciones por CPU por segundo
cat /proc/irq/<N>/smp_affinityMáscara de afinidad para una IRQ
cat /proc/irq/<N>/smp_affinity_listMismo, como lista de CPU
# ¿Un CPU está absorbiendo todas las interrupciones de NIC?
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"

Ejecutar el daemon

ComandoDescripción
sudo systemctl status irqbalanceVerifica que esté ejecutándose
sudo irqbalance --foregroundEjecuta en primer plano (depuración)
sudo irqbalance --oneshotBalancea una vez, luego sale
sudo irqbalance --debugDecisiones detalladas

Opciones clave / Ambiente

ConfiguraciónEfecto
IRQBALANCE_BANNED_CPUS=<mask>Nunca asignes IRQs a estos CPUs
--banirq=NExcluye una IRQ específica del balanceo
--policyscript=PATHScript que decide política por IRQ
--interval=SECONDSIntervalo de rebalanceo
`—hintpolicy=exactsubset
--powerthresh=NUmbral de consolidación de ahorro de energía

La configuración usualmente vive en /etc/default/irqbalance o /etc/sysconfig/irqbalance.

# Mantén IRQs fuera de núcleos aislados 8-15 (máscara para CPUs 8..15)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance

Afinidad de IRQ manual (cuando deshabilitas el daemon)

# Fija IRQ 42 a CPU 2 (máscara de bits 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity

# O por lista de CPU
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
EnfoqueUsar
irqbalance ejecutándoseServidores generales, carga variable
irqbalance deshabilitado + fijación manualCarga baja de latencia, NUMA-fijada, cargas de trabajo RT
CPUs prohibidosHíbrido: balancea, pero protege núcleos aislados

Patrón crítico de latencia

# Configuración típica de baja latencia: detén el balanceador, fija IRQs de NIC cerca del nodo NUMA de la app
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# luego establece smp_affinity para las IRQs de NIC a núcleos en el mismo nodo NUMA

Empareja con numactl para que la memoria de la aplicación y el manejo de interrupciones vivan en el mismo nodo NUMA — el manejo de interrupción entre nodos es una fuente de latencia oculta clásica.

Verificar el cambio

VerificaciónComando
Dispersión de interrupciónmpstat -I SUM -P ALL 1
Carga de softirqtop%si por CPU
Rendimiento de redsar -n DEV 1
Conteos por IRQwatch 'cat /proc/interrupts'

El éxito se parece a conteos de interrupción creciendo uniformemente entre núcleos previstos (o concentrados en exactamente los núcleos que elegiste).

irqbalance vs ajuste relacionado

HerramientaRol
irqbalanceDistribuye IRQs entre CPUs
numactlVincula proceso CPU/memoria a nodos NUMA
cpupowerControl de frecuencia/estado-ocioso
tunedPerfiles a nivel de sistema (puede gestionar irqbalance)
RPS/RFSDireccionamiento de paquete en el lado del software

Recursos