Asco Posted March 2, 2010 Posted March 2, 2010 Имеем платформу: шасси Intel SR1520CLR; плата Intel S5000VCL; процессоры Intel Xeon 2xE5450; память 8Gb(4x2Gb). На плате сетевой контроллер HY82563EB. Из софта - amd64 FreeBSD 8.0-RELEASE + ipnat + bgpd больше ничего, pf - пустой. flowcontrol на какалисте отключен, патчкорды - заменены, счётчики со стороны коммутатора - ошибок0. em taskq по обеим сетевым картам догоняется до 100% и начинаются дикие дропы. Перекрутил всё что можно. Баг драйвера/чипа? Менять платформу или докупать "нормальные" сетевые карты x4 ? Есть соображения? #pciconf -lv | grep em -A4 em0@pci0:4:0:0: class=0x020000 card=0x34808086 chip=0x10968086 rev=0x01 hdr=0x00 vendor = 'Intel Corporation' device = 'Intel PRO/1000 EB (Intel PRO/1000 EB)' class = network subclass = ethernet em1@pci0:4:0:1: class=0x020000 card=0x34808086 chip=0x10968086 rev=0x01 hdr=0x00 vendor = 'Intel Corporation' device = 'Intel PRO/1000 EB (Intel PRO/1000 EB)' class = network subclass = ethernet # top -SHP 10 last pid: 2495; load averages: 1.98, 1.12, 0.97 up 0+01:04:43 14:06:34 115 processes: 12 running, 84 sleeping, 19 waiting CPU 0: 0.0% user, 0.0% nice, 0.0% system, 1.6% interrupt, 98.4% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 3: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 4: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 5: 0.0% user, 0.0% nice, 100% system, 0.0% interrupt, 0.0% idle CPU 6: 0.0% user, 0.0% nice, 100% system, 0.0% interrupt, 0.0% idle CPU 7: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle Mem: 194M Active, 17M Inact, 254M Wired, 1552K Cache, 59M Buf, 7420M Free Swap: 2048M Total, 2048M Free PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 171 ki31 0K 128K CPU3 3 64:04 100.00% {idle: cpu3} 11 root 171 ki31 0K 128K CPU7 7 64:03 100.00% {idle: cpu7} 11 root 171 ki31 0K 128K CPU2 2 64:02 100.00% {idle: cpu2} 11 root 171 ki31 0K 128K CPU4 4 64:01 100.00% {idle: cpu4} 11 root 171 ki31 0K 128K RUN 1 63:56 100.00% {idle: cpu1} 11 root 171 ki31 0K 128K CPU0 0 63:53 100.00% {idle: cpu0} 0 root -68 0 0K 128K CPU5 5 34:43 100.00% {em0 taskq} 0 root -68 0 0K 128K CPU6 6 35:04 99.22% {em1 taskq} 11 root 171 ki31 0K 128K RUN 5 29:21 0.00% {idle: cpu5} 11 root 171 ki31 0K 128K RUN 6 28:55 0.00% {idle: cpu6} #ipnat -s mapped in 56960398 out 46450124 added 2116713 expired 899802 no memory 0 bad nat 53680 inuse 153279 orphans 0 rules 11 wilds 2 hash efficiency 21.17% bucket usage 99.04% minimal length 0 maximal length 14 average length 4.723 TCP Entries per state 0 1 2 3 4 5 6 7 8 9 10 11 64 9142 638 169 6829 1502 1181 146 71 0 52942 2223 #netstat -w 1 input (Total) output packets errs bytes packets errs bytes colls 70877 0 52707660 69823 0 53552204 0 77741 0 59421254 77236 0 60390869 0 60818 0 42946734 60705 0 43700356 0 74790 0 55339974 75180 0 56223304 0 69843 0 51168760 69556 0 51922404 0 75589 0 54066274 75302 0 54760740 0 70394 0 49559422 70050 0 50185198 0 62569 0 42527506 61335 0 43054657 0 24572 240 12885944 25087 0 13099941 0 24470 195 13088474 24324 0 13251497 0 21694 449 12366204 21473 0 12498255 0 23362 179 13196550 22716 0 13299346 0 21030 225 11287284 20594 0 11475381 0 19974 783 10630106 19565 0 10684715 0 20530 159 10819506 20869 0 11005304 0 19882 6 10153908 19209 0 10257941 0 21820 268 11455458 22130 0 11560552 0 # Mar 2 14:10:46 artek kernel: em0: Adapter hardware address = 0xffffff80005dd530 Mar 2 14:10:46 artek kernel: em0: CTRL = 0x401c4241 RCTL = 0x8002 Mar 2 14:10:46 artek kernel: em0: Packet buffer = Tx=16k Rx=32k Mar 2 14:10:46 artek kernel: em0: Flow control watermarks high = 30720 low = 29220 Mar 2 14:10:46 artek kernel: em0: tx_int_delay = 600, tx_abs_int_delay = 1000 Mar 2 14:10:46 artek kernel: em0: rx_int_delay = 0, rx_abs_int_delay = 1000 Mar 2 14:10:46 artek kernel: em0: fifo workaround = 0, fifo_reset_count = 0 Mar 2 14:10:46 artek kernel: em0: hw tdh = 135, hw tdt = 135 Mar 2 14:10:46 artek kernel: em0: hw rdh = 334, hw rdt = 333 Mar 2 14:10:46 artek kernel: em0: Num Tx descriptors avail = 4096 Mar 2 14:10:46 artek kernel: em0: Tx Descriptors not avail1 = 0 Mar 2 14:10:46 artek kernel: em0: Tx Descriptors not avail2 = 0 Mar 2 14:10:46 artek kernel: em0: Std mbuf failed = 0 Mar 2 14:10:46 artek kernel: em0: Std mbuf cluster failed = 0 Mar 2 14:10:46 artek kernel: em0: Driver dropped packets = 0 Mar 2 14:10:46 artek kernel: em0: Driver tx dma failure in encap = 0 Mar 2 14:10:48 artek kernel: em1: Adapter hardware address = 0xffffff800061b530 Mar 2 14:10:48 artek kernel: em1: CTRL = 0x401c4241 RCTL = 0x8002 Mar 2 14:10:48 artek kernel: em1: Packet buffer = Tx=16k Rx=32k Mar 2 14:10:48 artek kernel: em1: Flow control watermarks high = 30720 low = 29220 Mar 2 14:10:48 artek kernel: em1: tx_int_delay = 600, tx_abs_int_delay = 1000 Mar 2 14:10:48 artek kernel: em1: rx_int_delay = 0, rx_abs_int_delay = 1000 Mar 2 14:10:48 artek kernel: em1: fifo workaround = 0, fifo_reset_count = 0 Mar 2 14:10:48 artek kernel: em1: hw tdh = 3017, hw tdt = 3017 Mar 2 14:10:48 artek kernel: em1: hw rdh = 3215, hw rdt = 3212 Mar 2 14:10:48 artek kernel: em1: Num Tx descriptors avail = 4096 Mar 2 14:10:48 artek kernel: em1: Tx Descriptors not avail1 = 0 Mar 2 14:10:48 artek kernel: em1: Tx Descriptors not avail2 = 0 Mar 2 14:10:48 artek kernel: em1: Std mbuf failed = 0 Mar 2 14:10:48 artek kernel: em1: Std mbuf cluster failed = 0 Mar 2 14:10:48 artek kernel: em1: Driver dropped packets = 0 Mar 2 14:10:48 artek kernel: em1: Driver tx dma failure in encap = 0 Mar 2 14:10:56 artek kernel: em0: Excessive collisions = 0 Mar 2 14:10:56 artek kernel: em0: Sequence errors = 0 Mar 2 14:10:56 artek kernel: em0: Defer count = 0 Mar 2 14:10:56 artek kernel: em0: Missed Packets = 11182 Mar 2 14:10:56 artek kernel: em0: Receive No Buffers = 180 Mar 2 14:10:56 artek kernel: em0: Receive Length Errors = 0 Mar 2 14:10:56 artek kernel: em0: Receive errors = 0 Mar 2 14:10:56 artek kernel: em0: Crc errors = 0 Mar 2 14:10:56 artek kernel: em0: Alignment errors = 0 Mar 2 14:10:56 artek kernel: em0: Collision/Carrier extension errors = 0 Mar 2 14:10:56 artek kernel: em0: RX overruns = 4 Mar 2 14:10:56 artek kernel: em0: watchdog timeouts = 0 Mar 2 14:10:56 artek kernel: em0: RX MSIX IRQ = 0 TX MSIX IRQ = 0 LINK MSIX IRQ = 0 Mar 2 14:10:56 artek kernel: em0: XON Rcvd = 0 Mar 2 14:10:56 artek kernel: em0: XON Xmtd = 0 Mar 2 14:10:56 artek kernel: em0: XOFF Rcvd = 0 Mar 2 14:10:56 artek kernel: em0: XOFF Xmtd = 0 Mar 2 14:10:56 artek kernel: em0: Good Packets Rcvd = 60371538 Mar 2 14:10:56 artek kernel: em0: Good Packets Xmtd = 48744229 Mar 2 14:10:56 artek kernel: em0: TSO Contexts Xmtd = 0 Mar 2 14:10:56 artek kernel: em0: TSO Contexts Failed = 0 Mar 2 14:10:58 artek kernel: em1: Excessive collisions = 0 Mar 2 14:10:58 artek kernel: em1: Sequence errors = 0 Mar 2 14:10:58 artek kernel: em1: Defer count = 0 Mar 2 14:10:58 artek kernel: em1: Missed Packets = 448453 Mar 2 14:10:58 artek kernel: em1: Receive No Buffers = 410975 Mar 2 14:10:58 artek kernel: em1: Receive Length Errors = 0 Mar 2 14:10:58 artek kernel: em1: Receive errors = 0 Mar 2 14:10:58 artek kernel: em1: Crc errors = 0 Mar 2 14:10:58 artek kernel: em1: Alignment errors = 0 Mar 2 14:10:58 artek kernel: em1: Collision/Carrier extension errors = 0 Mar 2 14:10:58 artek kernel: em1: RX overruns = 2089 Mar 2 14:10:58 artek kernel: em1: watchdog timeouts = 0 Mar 2 14:10:58 artek kernel: em1: RX MSIX IRQ = 0 TX MSIX IRQ = 0 LINK MSIX IRQ = 0 Mar 2 14:10:58 artek kernel: em1: XON Rcvd = 0 Mar 2 14:10:58 artek kernel: em1: XON Xmtd = 0 Mar 2 14:10:58 artek kernel: em1: XOFF Rcvd = 0 Mar 2 14:10:58 artek kernel: em1: XOFF Xmtd = 0 Mar 2 14:10:58 artek kernel: em1: Good Packets Rcvd = 48575954 Mar 2 14:10:58 artek kernel: em1: Good Packets Xmtd = 59456733 Mar 2 14:10:58 artek kernel: em1: TSO Contexts Xmtd = 0 Mar 2 14:10:58 artek kernel: em1: TSO Contexts Failed = 0 # cat /boot/loader.conf hw.em.rxd=4096 hw.em.txd=4096 kern.ipc.nmbclusters=32768 vm.kmem_size=2G vm.kmem_size_max=2G #cat /etc/sysctl.conf dev.em.0.rx_int_delay=600 dev.em.1.rx_int_delay=600 dev.em.0.tx_int_delay=600 dev.em.1.tx_int_delay=600 dev.em.0.rx_abs_int_delay=1000 dev.em.1.rx_abs_int_delay=1000 dev.em.0.tx_abs_int_delay=1000 dev.em.1.tx_abs_int_delay=1000 dev.em.0.rx_processing_limit=1000 dev.em.1.rx_processing_limit=1000 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.inet.ip.intr_queue_maxlen=4096 net.inet.tcp.sendspace=65535 net.inet.tcp.recvspace=65535 net.inet.tcp.rfc1323=1 # Вставить ник Quote
XeonVs Posted March 2, 2010 Posted March 2, 2010 после выполнения команды egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; done нагрузка меньше? Если да то можно поместить например в /etc/rc.local ipnat лучше заменить на ipfw nat (ng_nat) после перехода выставить: sysctl net.inet.ip.fastforwarding=1 Вставить ник Quote
Asco Posted March 2, 2010 Author Posted March 2, 2010 > после выполнения команды egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; done нагрузка меньше? Если да то можно поместить например в /etc/rc.local Одинаково. В sysctl значения выставляются и при перезагрузке. Не могу понять, 8 ядер не могут перелопатить 80-100kk пакетов? Ну не на 72ой же нат собирать... (; Вставить ник Quote
XeonVs Posted March 2, 2010 Posted March 2, 2010 > после выполнения команды egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; doneнагрузка меньше? Если да то можно поместить например в /etc/rc.local Одинаково. В sysctl значения выставляются и при перезагрузке. Не могу понять, 8 ядер не могут перелопатить 80-100kk пакетов? Ну не на 72ой же нат собирать... (; не выставляются они... по systat -vm 1 видно должно быть прерывания до и после. у меня на 8 ядер стоит 8 интерфейсов и все собраны через if_lagg нагрузка почти равномерная. # netstat -w1 input (Total) output packets errs bytes packets errs bytes colls 202242 0 123393653 196162 0 122590305 0 197818 0 119262534 192048 0 118497432 0 196336 0 119796293 190612 0 119041946 0 199774 0 121871242 194107 0 121127421 0 Вставить ник Quote
_longhorn_ Posted March 2, 2010 Posted March 2, 2010 Asco С чего Вы вдруг решили что все Ваши 8 ядер работают? Вы конечно не привели ни top ни systat, не сказали что у Вас в loader.conf и sysctl.conf, но здается мне, что у Вас работают только 2 ядра... Вставить ник Quote
Dyr Posted March 3, 2010 Posted March 3, 2010 Я не совсем пониаю, почему у вас при выставлении rx_int_delay на сетевухах в 600 истинное значение по sysctl аж...0. Не в этом ли проблема? И что у вас выдаст по sysctl -a |grep isr? Вставить ник Quote
Asco Posted March 3, 2010 Author Posted March 3, 2010 Может поможет: #systat -vm 1 1 users Load 0.83 0.84 0.70 3 мар 13:40 Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER Tot Share Tot Share Free in out in out Act 199312 6208 1631736 7868 7440480 count All 251184 6892 1075456k 12452 pages Proc: Interrupts r p d s w Csw Trp Sys Int Sof Flt cow 26763 total 55 6001 30 225 2760 189 25 25 zfod atkbd0 1 ozfod ata0 irq14 3.6%Sys 0.0%Intr 0.0%User 0.0%Nice 96.4%Idle %ozfod atapci1 20 | | | | | | | | | | | daefr 3001 cpu0: time == prcfr 1405 em0 irq256 5 dtbuf totfr 1353 em1 irq257 Namei Name-cache Dir-cache 100000 desvn react 3001 cpu1: time Calls hits % hits % 9620 numvn pdwak 3001 cpu3: time 8 8 100 1376 frevn pdpgs 3001 cpu2: time intrn 3000 cpu6: time Disks ad4 ad6 ar0 425040 wire 3000 cpu4: time KB/t 0.00 0.00 0.00 188296 act 3000 cpu7: time tps 0 0 0 21396 inact 3001 cpu5: time MB/s 0.00 0.00 0.00 208 cache %busy 0 0 0 7440272 free 326000 buf # vmstat -i interrupt total rate irq1: atkbd0 505 0 irq14: ata0 36 0 irq20: atapci1 75529 6 cpu0: timer 33541495 2997 irq256: em0 13155792 1175 irq257: em1 12177707 1088 cpu1: timer 33541192 2997 cpu3: timer 33540341 2997 cpu2: timer 33540341 2997 cpu6: timer 33540049 2997 cpu4: timer 33539777 2997 cpu7: timer 33540049 2997 cpu5: timer 33539767 2997 Total 293732580 26254 # sysctl net.isr.direct net.isr.direct: 1 # Вставить ник Quote
dsk Posted March 3, 2010 Posted March 3, 2010 Покажите свой файрвол. Сколько в нем правил? Вставить ник Quote
UTP Posted March 3, 2010 Posted March 3, 2010 (edited) Надоело #echo >> /boot/loader.conf net.isr.maxthreads=8 net.isr.direct=0 net.isr.direct_force=0 net.inet.ip.intr_queue_maxlen=1024 net.route.netisr_maxqlen=1024 hw.em.rxd=4096 hw.em.txd=4096 #reboot Обновиться до STABLE ipnat заменить лучьше на pf Edited March 3, 2010 by UTP Вставить ник Quote
Ivan_83 Posted March 3, 2010 Posted March 3, 2010 net.isr.bindthreads: Bind netisr threads to CPUs. Имеет смысл включать ? Вставить ник Quote
_longhorn_ Posted March 4, 2010 Posted March 4, 2010 Ivan_83 Я включал, результат ожидаемый, тоесть прибивало треды netisr и em taskq к ядрам. Вставить ник Quote
Dm1try Posted March 4, 2010 Posted March 4, 2010 (edited) net.isr.maxthreads=8 net.isr.direct=0 net.isr.direct_force=0 net.inet.ip.intr_queue_maxlen=1024 net.route.netisr_maxqlen=1024 hw.em.rxd=4096 hw.em.txd=4096 Надоело, это, простите, самый идиотский набор символов который я видел. Зачем, net.isr.maxthreads=8 при net.isr.direct=0 ?!? Для красоты? Зачем на многопроцессорных системах net.isr.direct=0, чтобы копить inet.ip.intr_queue_maxlen, что приведет к росту swi: net? Edited March 4, 2010 by Dm1try Вставить ник Quote
_longhorn_ Posted March 4, 2010 Posted March 4, 2010 Зачем, net.isr.maxthreads=8 при net.isr.direct=0 ?!? Для красоты? Ну если портов 2 а ядер 8 то прямая обработка пакетов не конает, а рост swi1:net не критичен, так как net.isr.maxthreads=8. В конечном итоге наконец-то заработают все ядра, а не только 2. Если надо net.isr.direct=1 то прийдется докупить em, или откатиться на 7 и яндексы, или купить igb. Вставить ник Quote
Dm1try Posted March 4, 2010 Posted March 4, 2010 Почему не будет работать прямая обработка пакетов, когда количество ядер больше числа сетевых? Вставить ник Quote
bsdelnik Posted March 4, 2010 Posted March 4, 2010 Потому что при прямой обработке будет задействовано 2 ядра. Остальные 6 будут спокойно курить бамбук. Подсистема netisr в 8 релизе была полностью переписана, и теперь она распределяется по net.isr.maxthreads ядрам. Теоретически, вся ядра будут задействованы. Вот только работает оно пока как-то невнятно, некоторые ядра гораздо больше грузит, а некоторые недогружает... Вставить ник Quote
_longhorn_ Posted March 4, 2010 Posted March 4, 2010 Все зависит от конкретного случая. Если комп в роли бордера или шейпера то картина будет одна, если PPPoE концентратор или PPtP сервер то совсем другая. Вставить ник Quote
Asco Posted March 4, 2010 Author Posted March 4, 2010 При: net.isr.maxthreads=8 net.isr.direct=0 10 минут нормальная производительность ~140-180kk, потом 2 процесса netisr в 100% как результат - задержки 50-100ms + производительность падает до ~25-40kk. По top'у видно что используется 2 ядра из 8ми. # top -SHP 12 last pid: 2339; load averages: 0.09, 0.11, 0.08 up 0+00:21:07 14:01:18 127 processes: 11 running, 92 sleeping, 24 waiting CPU 0: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 96.4% interrupt, 3.6% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 97.3% interrupt, 2.7% idle CPU 3: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 4: 0.9% user, 0.0% nice, 0.0% system, 0.0% interrupt, 99.1% idle CPU 5: 0.0% user, 0.0% nice, 3.6% system, 0.0% interrupt, 96.4% idle CPU 6: 0.0% user, 0.0% nice, 3.6% system, 0.0% interrupt, 96.4% idle CPU 7: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle Mem: 187M Active, 15M Inact, 223M Wired, 120K Cache, 18M Buf, 7461M Free Swap: 2048M Total, 2048M Free PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 171 ki31 0K 128K CPU0 0 19:52 100.00% {idle: cpu0} 12 root -44 - 0K 416K CPU1 1 10:07 100.00% {swi1: netisr 7} 12 root -44 - 0K 416K CPU2 2 10:05 100.00% {swi1: netisr 0} 11 root 171 ki31 0K 128K CPU7 7 20:28 99.76% {idle: cpu7} 11 root 171 ki31 0K 128K CPU3 3 20:27 99.76% {idle: cpu3} 11 root 171 ki31 0K 128K RUN 4 20:29 99.37% {idle: cpu4} 11 root 171 ki31 0K 128K CPU6 6 19:56 97.80% {idle: cpu6} 11 root 171 ki31 0K 128K CPU5 5 19:46 96.88% {idle: cpu5} 11 root 171 ki31 0K 128K RUN 2 10:33 1.71% {idle: cpu2} 11 root 171 ki31 0K 128K RUN 1 10:59 1.22% {idle: cpu1} 0 root -68 0 0K 128K - 5 0:45 0.00% {em0 taskq} 0 root -68 0 0K 128K - 6 0:38 0.00% {em1 taskq} Вставить ник Quote
bsdelnik Posted March 4, 2010 Posted March 4, 2010 Как уже говорилось выше, попробуйте заюзать pf nat. Вставить ник Quote
mikevlz Posted March 4, 2010 Posted March 4, 2010 Только не надо забывать, что PF с многопроцессорностью дружит плоховато. Вставить ник Quote
bsdelnik Posted March 4, 2010 Posted March 4, 2010 Ну, 30 килопакетов топикстартера я думаю, pf и на одном ядре снатит. Вставить ник Quote
UTP Posted March 4, 2010 Posted March 4, 2010 Пробуй обновиться до STABLE pf нат, или хоть чтото другое..только не то зло что у тебя P.S. У всех работает а у тебя нет, меняй прокладку (с) Вставить ник Quote
wawa Posted March 4, 2010 Posted March 4, 2010 или откатиться на 7 и яндексы. раз такое дело, мы выложили восьмую версию Вставить ник Quote
UTP Posted March 4, 2010 Posted March 4, 2010 раз такое дело, мы выложили восьмую версию Это радостная новость...будем тестить ;) Вставить ник Quote
_longhorn_ Posted March 5, 2010 Posted March 5, 2010 wawa Большое спасибо за труд и любезность поделиться с общественностью. Скажите, а стоит-ли ждать появления оптимизированного igb драйвера? Вставить ник Quote
Dyr Posted March 5, 2010 Posted March 5, 2010 Надо ли для восьмёрочных драйверов выключать ISR? Вставить ник 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.