Bindthreads
2012-02-24 18:50Выяснилось, что при использовании многоядерных маршрутизаторов под FreeBSD 8 и новее и при использовании loader tunnable net.isr.bindthreads=0 потоки NETISR в некоторых случаях таки могут оказаться привязанными к определенным ядрам CPU из-за ошибки в ядре.
Проверить привязку можно командой:
procstat -at | awk '/swi1: netisr/ {print $5, $6; system("cpuset -g -t " $2);}'
Она должна вывести что-то вроде этого:
netisr 0 tid 100012 mask: 0, 1, 2, 3 netisr 3 tid 100111 mask: 0, 1, 2, 3 netisr 2 tid 100112 mask: 0, 1, 2, 3 netisr 1 tid 100113 mask: 0, 1, 2, 3
То есть, в каждой маске должны быть перечислены все процессорные ядра. В некоторых случаях они там будут не все и тогда будут проблемы с неравномерной загрузкой ядер работой. Исправить проблему с NETISR без перезагрузки можно командой:
procstat -at | awk '/swi1: netisr/ {print $2}' | xargs -n 1 cpuset -l all -t
Тут есть патч к ядру, исправляющий работу net.isr.bindthreads=0. В CURRENT также было внесено исправление для общей проблемы, оно тоже ложится на FreeBSD 8.
no subject
Date: 2014-11-19 07:08 (UTC)no subject
Date: 2014-11-27 04:14 (UTC)100.00% intr{swi1: netisr 1}
21.88% intr{swi1: netisr 6}
20.26% intr{swi1: netisr 4}
19.38% intr{swi1: netisr 2}
11.38% kernel{em1 taskq}
10.16% intr{swi1: netisr 7}
8.98% intr{swi1: netisr 5}
6.40% intr{swi1: netisr 0}
это при net.inet.ip.fastforwarding=0
если же net.inet.ip.fastforwarding=1, то
вырастает нагрузка на
kernel{em0 taskq}
kernel{em1 taskq}
почти до 100% - появляются потери
как можно выяснить чем занят netisr 1?
потому как игры с инстансами картину не меняют - распределил как мог...
или это нормально, когда один из netisr работает на 100%?
no subject
Date: 2014-11-27 06:59 (UTC)12 root -68 - 0K 592K WAIT 1 129.8H 11.57% intr{irq267: igb1:que} 12 root -68 - 0K 592K WAIT 3 108.0H 8.89% intr{irq259: em1:rx 0} 12 root -68 - 0K 592K WAIT 0 135.6H 8.69% intr{irq262: igb0:que} 12 root -68 - 0K 592K WAIT 2 110.4H 7.08% intr{irq256: em0:rx 0}То есть, трафик принимается несколькими прерываниями и обрабатывается полностью в контексте прерываний, а не в ISR. А прерывания уже легко привязать к разным ядрам.
А тут нет распределения нагрузки через прерывания, отсюда неравномерность.
no subject
Date: 2014-11-27 11:52 (UTC)no subject
Date: 2015-01-12 06:04 (UTC)Вроде все работает, однако высокая нагрузка осталась....
last pid: 10807; load averages: 6.98, 6.15, 5.89 up 0+22:00:07 12:01:52
168 processes: 12 running, 112 sleeping, 1 zombie, 43 waiting
CPU 0: 0.0% user, 0.0% nice, 0.8% system, 51.4% interrupt, 47.8% idle
CPU 1: 0.4% user, 0.0% nice, 5.9% system, 57.3% interrupt, 36.5% idle
CPU 2: 0.0% user, 0.0% nice, 4.7% system, 58.8% interrupt, 36.5% idle
CPU 3: 0.0% user, 0.0% nice, 6.3% system, 49.8% interrupt, 43.9% idle
CPU 4: 0.0% user, 0.0% nice, 6.7% system, 50.2% interrupt, 43.1% idle
CPU 5: 0.4% user, 0.0% nice, 3.9% system, 56.1% interrupt, 39.6% idle
CPU 6: 0.0% user, 0.0% nice, 6.3% system, 45.9% interrupt, 47.8% idle
CPU 7: 0.0% user, 0.0% nice, 5.9% system, 49.4% interrupt, 44.7% idle
Mem: 63M Active, 277M Inact, 644M Wired, 614M Buf, 4950M Free
Swap: 1024M Total, 1024M Free
PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND
12 root -72 - 0K 720K WAIT 5 239:51 32.57% intr{swi1: netisr 0}
12 root -92 - 0K 720K WAIT 2 112:02 26.66% intr{irq267: igb1:que}
12 root -92 - 0K 720K RUN 1 66:30 23.97% intr{irq266: igb1:que}
12 root -92 - 0K 720K WAIT 5 72:35 23.58% intr{irq270: igb1:que}
12 root -92 - 0K 720K CPU7 7 69:29 18.65% intr{irq272: igb1:que}
12 root -92 - 0K 720K CPU4 4 84:33 17.29% intr{irq269: igb1:que}
12 root -92 - 0K 720K CPU3 3 54:00 16.26% intr{irq259: igb0:que}
12 root -72 - 0K 720K WAIT 5 76:42 16.16% intr{swi1: netisr 4}
12 root -92 - 0K 720K WAIT 0 85:08 15.48% intr{irq256: igb0:que}
12 root -92 - 0K 720K CPU4 4 69:38 15.19% intr{irq260: igb0:que}
12 root -92 - 0K 720K WAIT 0 92:05 14.36% intr{irq265: igb1:que}
12 root -72 - 0K 720K CPU0 0 60:35 14.36% intr{swi1: netisr 5}
12 root -92 - 0K 720K WAIT 2 85:02 13.67% intr{irq258: igb0:que}
12 root -72 - 0K 720K WAIT 3 62:51 13.48% intr{swi1: netisr 1}
12 root -92 - 0K 720K WAIT 6 88:31 12.89% intr{irq271: igb1:que}
12 root -92 - 0K 720K WAIT 3 131:43 12.70% intr{irq268: igb1:que}
12 root -92 - 0K 720K CPU1 1 51:17 12.26% intr{irq257: igb0:que}
12 root -72 - 0K 720K WAIT 4 69:07 11.08% intr{swi1: netisr 2}
12 root -72 - 0K 720K WAIT 3 64:55 10.89% intr{swi1: netisr 3}
12 root -92 - 0K 720K WAIT 7 69:32 10.16% intr{irq263: igb0:que}
12 root -72 - 0K 720K WAIT 1 72:51 8.98% intr{swi1: netisr 6}
12 root -92 - 0K 720K WAIT 6 62:06 8.40% intr{irq262: igb0:que}
12 root -92 - 0K 720K WAIT 5 51:56 7.76% intr{irq261: igb0:que}
0 root -92 0 0K 400K CPU4 4 248:17 7.08% kernel{dummynet}
12 root -72 - 0K 720K WAIT 3 61:59 6.98% intr{swi1: netisr 7}
потерь пока не наблюдаю.....
стоит копать куда-нибудь или это нормальная нагрузка?
no subject
Date: 2015-01-12 07:41 (UTC)