Автоматическая балансировка прерываний для сетевых карт в Linux

Взято тут: https://wiki.mikbill.pro/billing/howto/ether_irq_balance_linux

Зачем: если в сервере много сетевых карт, то можно разнести обработку IRQ по разных ядрам CPU.

Скрипт старый, в новых ОС может понадобится изменить eth на что-нибудь вроде ens*

#!/bin/bash
 
ncpus=`grep -ciw ^processor /proc/cpuinfo`
test "$ncpus" -gt 1 || exit 1
 
n=0
for irq in `cat /proc/interrupts | grep eth | awk '{print $1}' | sed s/\://g`
do
    f="/proc/irq/$irq/smp_affinity"
    test -r "$f" || continue
    cpu=$[$ncpus - ($n % $ncpus) - 1]
    if [ $cpu -ge 0 ]
            then
                mask=`printf %x $[2 ** $cpu]`
                echo "Assign SMP affinity: eth$n, irq $irq, cpu $cpu, mask 0x$mask"
                echo "$mask" > "$f"
                let n+=1
    fi
done

Если нормально работает - можно добавить в автозагрузку.

  • ubuntu/ether_irq_balance_linux.txt
  • Последнее изменение: 2024/01/15 21:25
  • fireball