Zum Inhalt springen

irqbalance – Interrupt Distribution Tuning Cheatsheet

irqbalance – Interrupt Distribution Tuning Cheatsheet

irqbalance ist ein Daemon, der Hardware-Interrupts (IRQs) über CPU Cores verteilt. Standardmäßig kann Linux die meisten Interrupts von einem überlasteten NIC oder Storage-Controller zu CPU 0 leiten, was diesen Core zum Bottleneck macht, während andere Idle sind. irqbalance überwacht Interrupt-Last und rebalanciert IRQ-Affinität, um die Arbeit zu verteilen. Umgekehrt ist es für Latenz-kritische Workloads mit Hand-gepinnten CPUs oft absichtlich deaktiviert, so dass es Interrupts nicht auf isolierte Cores verschieben kann.

Installation

PlattformBefehl
Debian/Ubuntusudo apt install irqbalance
Fedora/RHELsudo dnf install irqbalance
Arch Linuxsudo pacman -S irqbalance
Servicesudo systemctl enable --now irqbalance
Überprüfenirqbalance --version

Zuerst Interrupts inspizieren

BefehlZeigt
cat /proc/interruptsPer-CPU Interrupt Zählungen nach Gerät
watch -n1 'cat /proc/interrupts'Live Wachstum (erkennen Sie den Hot Core)
mpstat -I SUM -P ALL 1Interrupts pro CPU pro Sekunde
cat /proc/irq/<N>/smp_affinityAffinität-Maske für einen IRQ
cat /proc/irq/<N>/smp_affinity_listGleich, als CPU-Liste
# Absorbiert ein CPU alle NIC Interrupts?
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"

Den Daemon laufen

BefehlBeschreibung
sudo systemctl status irqbalanceÜberprüfen Sie es läuft
sudo irqbalance --foregroundLaufen Sie im Vordergrund (Debugging)
sudo irqbalance --oneshotBalancieren Sie einmal, dann exit
sudo irqbalance --debugAusführliche Entscheidungen

Wichtige Optionen / Environment

EinstellungEffekt
IRQBALANCE_BANNED_CPUS=<mask>Weisen Sie nie IRQs zu diesen CPUs zu
--banirq=NSchließen Sie einen spezifischen IRQ von Balancing aus
--policyscript=PATHScript, das Pro-IRQ Policy entscheidet
--interval=SECONDSRebalance Intervall
`—hintpolicy=exactsubset
--powerthresh=NPower-Save Konsolidierungs-Schwellwert

Konfiguration lebt normalerweise in /etc/default/irqbalance oder /etc/sysconfig/irqbalance.

# Behalten Sie IRQs weg von isolierten Cores 8-15 (Maske für CPUs 8..15)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance

Manuelle IRQ Affinität (wenn Sie den Daemon deaktivieren)

# Pin IRQ 42 zu CPU 2 (Bitmask 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity

# Oder nach CPU Liste
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
AnsatzVerwenden
irqbalance läuftAllgemeine Server, variable Last
irqbalance deaktiviert + Manuelle PinningLow-Latency, NUMA-gepinnt, RT Workloads
Banned CPUsHybrid: Balancieren, aber schützen Sie isolierte Cores

Latenz-Kritisches Pattern

# Typische Low-Latency Setup: Stop der Balancer, Pin NIC IRQs nahe der App's NUMA Node
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# dann setzen Sie smp_affinity für die NIC's IRQs zu Cores auf der gleichen NUMA Node

Paaren Sie mit numactl so dass die App’s Speicher und das Interrupt-Handling auf dem gleichen NUMA Node leben – Cross-Node Interrupt-Handling ist eine klassische verborgene Latenz-Quelle.

Überprüfen Sie die Änderung

CheckBefehl
Interrupt Ausbreitungmpstat -I SUM -P ALL 1
Softirq Lasttop%si pro CPU
Netzwerk-Durchsatzsar -n DEV 1
Per-IRQ Zählungenwatch 'cat /proc/interrupts'

Der Erfolg sieht aus wie Interrupt-Zählungen wachsen gleichmäßig über beabsichtigte Cores (oder konzentriert auf genau die Cores, die Sie wählten).

irqbalance vs verwandte Tuning

ToolRolle
irqbalanceVerteilen Sie IRQs über CPUs
numactlBinden Sie Process CPU/Memory an NUMA Nodes
cpupowerFrequency/Idle-State Kontrolle
tunedGanz-System Profile (kann irqbalance verwalten)
RPS/RFSSoftware-seitiges Packet Steering

Ressourcen