SokolovS Posted September 19, 2010 Posted September 19, 2010 (edited) Сделал для себя, решил выложить. Позволяет указать вручную прерывания каких девайсов каким процессором должны обрабатываться. Конфигурация статическая. Процессоры нумеруются с нуля. Используется bash. /usr/local/bin/irqconf: #!/bin/bash # # Script for config SMP IRQ # Config /etc/irq.conf # IRQCONF example: # IRQCONF="eth0=0,1 eth1=2,3" # # Change work dir cd `dirname $0`; # Check config if [ ! -r /etc/irq.conf -a "$1" = "" ]; then echo "Config file or arguments not found!"; exit 1; fi # Include config if [ "$1" != "" ]; then IRQCONF=$1 else . /etc/irq.conf fi # Check var if [ "$IRQCONF" = "" ]; then echo "Config is empty, nothing to do!"; exit 0; fi # CPU nums ncpus=`grep -ciw ^processor /proc/cpuinfo`; maxcpu_no=$[$ncpus - 1]; # Handle config for cvar in $IRQCONF; do dev=${cvar%%=*}; cpus=${cvar#*=}; irq=`cat /proc/interrupts | grep $dev | awk '{print $1}' | sed s/\://g`; if [ "$irq" = "" ]; then echo "Warn: IRQ number for dev='$dev' not found. Ignore!"; continue; fi # Set new delimiter OLD_IFS=$IFS IFS=","; # For all dev CPUs mask=0; for cpu in $cpus; do if [ $cpu -gt $maxcpu_no ]; then echo "Warn: CPU index '$cpu' greater than max cpu index '$maxcpu_no'. Ignore!"; continue; fi cpu_mask=$[2 ** $cpu]; mask=$[$mask | $cpu_mask]; done if [ $mask -gt 0 ]; then hex_mask=`printf %x $mask`; f="/proc/irq/$irq/smp_affinity"; echo "$hex_mask" >"$f"; res=$?; echo -n "Dev '$dev (irq=$irq)' assign smp affinity to CPUs '$cpus (0x$hex_mask)': "; [ "$res" = "0" ] && echo "OK" || echo "FAIL!"; fi # Set default delimiter IFS=$OLDIFS done exit 0; /etc/irq.conf # Параметры конфигурации. # Название устройства из /proc/interrupts или часть названия # Номер процессора начинается с 0 IRQCONF="eth0-TxRx=0 eth1-TxRx=1 ide0=2 ahci=2 eth2=2 timer=3" В качестве имени может использоваться паттерн для grep, например timer$=3. Через запятую можно указать несколько процов, например timer=0,1 irqconf.tar.gz Edited September 19, 2010 by SokolovS Вставить ник Quote
Умник Posted September 19, 2010 Posted September 19, 2010 Уже есть такая штука: http://laas.mine.nu/jens/eth-affinity-1.2.3.tar.gz Вставить ник Quote
SokolovS Posted September 19, 2010 Author Posted September 19, 2010 (edited) Уже есть такая штука: http://laas.mine.nu/jens/eth-affinity-1.2.3.tar.gz Видел уже, она немного не то делает. Она из /proc/interrupts выдергивает только eth устройства и закрепляет прерывания за определенными процами. Другие уйтройства походу распределяются по какой то своей логике. У меня конфигурация задается статически. Ну и она походу не корректно работает с устройствами eth если там несколько очередей.Я бы ее использовал если бы мне подошло. Edited September 19, 2010 by SokolovS Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.