objectif
Limiter la migration d’IRQ et rapprocher traitement IRQ et queues NIC.
code minimal
# lister les IRQ liées à l'interface (ex: eth0)
grep eth0 /proc/interrupts
# pinner une IRQ (ex: 75) sur CPU 2 (mask 0x4)
echo 4 | sudo tee /proc/irq/75/smp_affinity
utilisation
# script rapide pour pinner séquentiellement les IRQ d'une NIC
NIC=eth0; cpus=(1 2 3 4); i=0
for irq in $(grep "$NIC" /proc/interrupts | awk '{print $1}' | tr -d ':'); do
cpu=${cpus[i % ${#cpus[@]}]}
mask=$((1<<cpu))
printf "%x
" "$mask" | sudo tee /proc/irq/$irq/smp_affinity >/dev/null
i=$((i+1))
done
variante(s) utile(s)
# désactiver irqbalance si vous gérez à la main
sudo systemctl stop irqbalance
notes
- vérifiez l’effet via
/proc/interruptset perf/netstat. - attention aux systèmes NUMA: regroupez IRQ et CPU par nœud.