Ilya Evseev Posted December 16, 2009 Posted December 16, 2009 Имеется CoreQuad Q6600 (ядра 0,1,2,3). Прерывания от eth0 и eth1 через smp_affinity повешены на разные ядра. Заметил такой эффект: нагрузка при разнесении на 2 и 3 ядро существенно меньше, чем при разнесении на 1 и 3. Чем это вызвано? Вставить ник Quote
jab Posted December 16, 2009 Posted December 16, 2009 Линузятники прибивать треды к ядрам уже научились, но спеки на проц читать еще нет. :-))))) Вставить ник Quote
DemYaN Posted December 16, 2009 Posted December 16, 2009 (edited) Q6600 по сути два 2-ядерника в одной упаковки, соответственно производительность падает при обмене данными между разными ядрами разных процессоров ps линузятник ;) Edited December 16, 2009 by DemYaN Вставить ник Quote
Умник Posted December 16, 2009 Posted December 16, 2009 Ilya Evseev, потому что на Q6600 L2 кеш пошарен между парами ядер. Вставить ник Quote
Ilya Evseev Posted December 16, 2009 Author Posted December 16, 2009 Второй вопрос касается номеров прерываний. При загрузке они были 16 и 17, и были общими для ethX и usb. Сейчас у ethX номера прерываний стали 2300 и 2999. Это как-то сказывается на скорости их вызова? После перезагрузки номера не изменятся? Ядро меняет номера самостоятельно или это решает какой-то userland-процесс? Вставить ник Quote
nuclearcat Posted December 17, 2009 Posted December 17, 2009 cat /sys/class/net/eth0/device/irq Вставить ник Quote
Ilya Evseev Posted December 17, 2009 Author Posted December 17, 2009 (edited) Наверное, так: #!/bin/sh # # irq2smp -- distribute hardware interrupts from Ethernet devices by CPU cores. # # Should be called from /etc/rc.local. # ncpus=`grep -ciw ^processor /proc/cpuinfo` test "$ncpus" -gt 1 || exit 1 for n in `seq 0 31`; do f="/sys/class/net/eth$n/device/irq" test -r "$f" || continue irq=`cat $f` cpu=$[$ncpus - ($n % $ncpus) - 1] mask=$[2 ** $cpu] echo "Assign SMP affinity: eth$n, irq $irq, cpu $cpu, mask $mask" f="/proc/irq/$irq/smp_affinity" test -w "$f" || { echo "ERROR: $f not found, exit."; exit 1; } echo "$mask" > "$f" done Edited December 18, 2009 by Ilya Evseev Вставить ник Quote
a0d75 Posted December 23, 2009 Posted December 23, 2009 (edited) mask=`echo "obase=16; $[2 ** $cpu]" | bc` иначе будет неправильно работать на системах с более чем 4-мя CPU Edited December 23, 2009 by a0d75 Вставить ник 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.