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-18 06:54 (UTC)no subject
Date: 2014-11-18 07:01 (UTC)сделать
/sbin/ipfw nat config 8661 ip IP1
/sbin/ipfw nat config 8662 ip IP2
...
/sbin/ipfw nat config 866N ip IP_N
и пользователей по ним разнести, я правильно понял?
или это надо уходить от ipfw nat вообще?
no subject
Date: 2014-11-18 07:03 (UTC)no subject
Date: 2014-11-18 07:19 (UTC)в данный момент выставил в 0
создал 5 инстансов
ситуация не поменялась
# top -SH -n 100 | grep isr
12 root -72 - 0K 448K CPU4 4 60:48 92.97% intr{swi1: netisr 0}
12 root -72 - 0K 448K WAIT 6 0:00 0.00% intr{swi1: netisr 5}
12 root -72 - 0K 448K WAIT 5 0:00 0.00% intr{swi1: netisr 2}
12 root -72 - 0K 448K WAIT 2 0:00 0.00% intr{swi1: netisr 1}
12 root -72 - 0K 448K WAIT 7 0:00 0.00% intr{swi1: netisr 7}
12 root -72 - 0K 448K WAIT 7 0:00 0.00% intr{swi1: netisr 4}
12 root -72 - 0K 448K WAIT 1 0:00 0.00% intr{swi1: netisr 6}
:-(
no subject
Date: 2014-11-18 07:24 (UTC)Создать инстансы мало, нужно и входящий, и исходящий трафик аккуратно разруливать по ним, и приблизительно ровно.
no subject
Date: 2014-11-18 07:32 (UTC)таки остальные swi1: netisr остаются WAIT и не помогают....
no subject
Date: 2014-11-18 07:43 (UTC)И что будет, если tee временно отключить? Оно тоже может тормозить.
no subject
Date: 2014-11-18 09:56 (UTC)/sbin/ipfw add 2601 nat 8674 ip from any to IP1
/sbin/ipfw add 2602 nat 8675 ip from any to IP2
/sbin/ipfw add 2603 nat 8676 ip from any to IP3
/sbin/ipfw add 2604 nat 8677 ip from any to IP4
/sbin/ipfw add 2605 nat 8678 ip from any to IP5
IP_N - не афиширую :-)
/sbin/ipfw add 2623 nat 8674 ip from 192.168.243.0/24 to any
/sbin/ipfw add 2624 nat 8675 ip from 192.168.242.0/24 to any
/sbin/ipfw add 2625 nat 8676 ip from 192.168.241.0/24 to any
/sbin/ipfw add 2626 nat 8677 ip from 192.168.240.0/24 to any
/sbin/ipfw add 2627 nat 8678 ip from 192.168.239.0/24 to any
# sysctl -a | grep one_pa
net.inet.ip.fw.one_pass: 0
ngtee временно отключал с помощью skipto - перескакивал через правила ngtee - не помогло
no subject
Date: 2014-11-18 10:03 (UTC)no subject
Date: 2014-11-18 10:20 (UTC)/sbin/ipfw add 2601 nat 8674 ip from any to IP1 in
/sbin/ipfw add 2602 nat 8675 ip from any to IP2 in
/sbin/ipfw add 2603 nat 8676 ip from any to IP3 in
/sbin/ipfw add 2604 nat 8677 ip from any to IP4 in
/sbin/ipfw add 2605 nat 8678 ip from any to IP5 in
/sbin/ipfw add 2623 nat 8674 ip from 192.168.243.0/24 to any out
/sbin/ipfw add 2624 nat 8675 ip from 192.168.242.0/24 to any out
/sbin/ipfw add 2625 nat 8676 ip from 192.168.241.0/24 to any out
/sbin/ipfw add 2626 nat 8677 ip from 192.168.240.0/24 to any out
/sbin/ipfw add 2627 nat 8678 ip from 192.168.239.0/24 to any out
ничего не поменялось
нагрузка примерно та же
PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND
12 root -72 - 0K 448K CPU5 5 127:26 94.09% intr{swi1: netisr 0}
0 root -92 0 0K 176K CPU3 3 115:08 84.77% kernel{igb1 taskq}
0 root -92 0 0K 176K CPU2 2 78:25 65.48% kernel{igb0 taskq}
0 root -92 0 0K 176K CPU6 6 41:49 1.37% kernel{dummynet}
12 root -60 - 0K 448K WAIT 0 2:52 0.39% intr{swi4: clock}
# sysctl -a | grep net.isr
net.isr.numthreads: 8
net.isr.maxprot: 16
net.isr.defaultqlimit: 4096
net.isr.maxqlimit: 10240
net.isr.bindthreads: 1
net.isr.maxthreads: 8
net.isr.direct: 1
net.isr.direct_force: 0
net.isr.dispatch: hybrid
поставил net.isr.dispatch: hybrid - иначе
intr{swi1: netisr 0} под 100% и тормоза
no subject
Date: 2014-11-18 11:20 (UTC)no subject
Date: 2014-11-18 11:23 (UTC)irq256: igb0 118320192 8610
irq257: igb1 70242007 5111
no subject
Date: 2014-11-19 05:47 (UTC)Сервер IBM x3630 M4, 2xIntel Xeon E5 - итого 16ядер.
ESXi 5.5. В виртуальную машину переданы в управление 2 порта из 4-х портовой сетевой карты Intel Corporation 82576 Gigabit Network Connection - так она определяется в esxi.
В виртуальной машине два проца по 4 ядра. 6Гиг ОЗУ.
Может в esxi проблема? надо переходить на физический сервер?
Я уже мозг себе вынес.... Нагрузка не более 120 мегабит на всю локальную сеть, не более 80 мегабит из них на инет - смешные цифры по сравнению с теми, что фигурируют в частности в ваших статьях...
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)