SokolovS Опубликовано 19 сентября, 2010 (изменено) · Жалоба Сделал для себя, решил выложить. Позволяет указать вручную прерывания каких девайсов каким процессором должны обрабатываться. Конфигурация статическая. Процессоры нумеруются с нуля. Используется 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 Изменено 19 сентября, 2010 пользователем SokolovS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Умник Опубликовано 19 сентября, 2010 · Жалоба Уже есть такая штука: http://laas.mine.nu/jens/eth-affinity-1.2.3.tar.gz Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 19 сентября, 2010 (изменено) · Жалоба Уже есть такая штука: http://laas.mine.nu/jens/eth-affinity-1.2.3.tar.gz Видел уже, она немного не то делает. Она из /proc/interrupts выдергивает только eth устройства и закрепляет прерывания за определенными процами. Другие уйтройства походу распределяются по какой то своей логике. У меня конфигурация задается статически. Ну и она походу не корректно работает с устройствами eth если там несколько очередей.Я бы ее использовал если бы мне подошло. Изменено 19 сентября, 2010 пользователем SokolovS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...