tartila Опубликовано 28 июня, 2010 · Жалоба Имеется машина процессорок Intel® Core2 Quad CPU Q9550 @ 2.83GHz, карточка Intel PT DualPort выполняет функции BGP. Софт стоит Quagga, еще есть pf, но он натит всего 1 маленькую сетку на 10-15 компов (офис). Через машину валит трафик ~ 400 MBit симметрично / 150-170 kpps через обе сетевухи или ~ 80 kpps полезного трафа. netstat не показывает error`ов или еще чего либо плохого, но смущает нагрузка всего на два ядра. Ядро OS - GENERIC, не пересобирал. Вот вывод top -SP (не в моменты пиковой нагрузки): last pid: 23560; load averages: 0.64, 0.60, 0.58 up 3+04:01:19 10:47:20 110 processes: 5 running, 81 sleeping, 24 waiting CPU 0: 0.0% user, 0.0% nice, 30.0% system, 0.0% interrupt, 70.0% idle CPU 1: 0.0% user, 0.0% nice, 0.4% system, 0.0% interrupt, 99.6% 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, 34.5% system, 0.0% interrupt, 65.5% idle Mem: 321M Active, 215M Inact, 300M Wired, 32K Cache, 112M Buf, 2116M Free Swap: 10G Total, 10G Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 4 171 ki31 0K 32K CPU0 0 251.3H 341.50% idle 0 root 11 -68 0 0K 80K - 2 30.5H 36.82% kernel 467 root 1 44 - 0K 8K pftm 2 32:18 0.05% pfpurge 12 root 24 -44 - 0K 192K WAIT 0 20.3H 0.00% intr 1205 root 1 44 0 159M 157M select 2 30:18 0.00% bgpd 13 root 1 44 - 0K 8K - 0 10:16 0.00% yarrow 3848 root 1 44 0 87200K 83048K select 1 4:33 0.00% snmpd 16 root 1 44 - 0K 8K syncer 0 4:14 0.00% syncer 1239 root 1 44 0 4864K 2424K select 2 1:04 0.00% ntpd 1203 root 1 44 0 85036K 83244K select 3 0:54 0.00% zebra 4 root 1 -8 - 0K 8K - 0 0:12 0.00% g_down 3 root 1 -8 - 0K 8K - 0 0:12 0.00% g_up 2 root 1 -8 - 0K 8K - 0 0:12 0.00% g_event # sysctl net.isr net.isr.numthreads: 4 net.isr.defaultqlimit: 256 net.isr.maxqlimit: 10240 net.isr.bindthreads: 0 net.isr.maxthreads: 4 net.isr.direct: 1 net.isr.direct_force: 1 Сразу оговорюсь, что в системе есть еще 2 сетевухи em, причем одна встроенная и без своего interrupt`а? vmstat -i interrupt total rate irq14: ata0 126946 0 cpu0: timer 832215140 3039 irq256: em0 1738258113 6348 irq257: em1 1978255903 7225 irq259: em3 4134692 15 cpu1: timer 832215622 3039 cpu3: timer 833700449 3045 cpu2: timer 833700898 3045 Total 7052607763 25759 С net.isr.direct=0 игрался, начинаются interrupt`ы на CPU1 и CPU2, вместо system на CPU0 и CPU3 при net.isr.direct=1. Соответственно вопрос, не ужели нельзя никак забалансировать system на все CPU? # cat /boot/loader.conf net.isr.maxthreads=4 net.inet.ip.intr_queue_maxlen=1024 net.route.netisr_maxqlen=1024 hw.em.rxd=4096 hw.em.txd=4096 net.isr.direct=1 net.isr.direct_arp=1 net.inet.ip.fastforwarding=0 net.inet.flowtable.enable=0 kern.hz=3000 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jab Опубликовано 28 июня, 2010 · Жалоба нельзя Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 28 июня, 2010 · Жалоба нельзя Вопрос с "подковыкой" :). Почему тогда net.isr.maxthreads дал эффект на аналогичной машине, только выполняющей роль бриджа, а не роутера? Неужели FreeBSD в этом плане хуже Linux, у которого irqbalance легко справится с этой задачей? :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 28 июня, 2010 · Жалоба Система в целом нагружена на 15%, чего опасаетесь? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jab Опубликовано 28 июня, 2010 · Жалоба Вопрос с "подковыкой" :). Почему тогда net.isr.maxthreads дал эффект на аналогичной машине, только выполняющей роль бриджа, а не роутера? Неужели FreeBSD в этом плане хуже Linux, у которого irqbalance легко справится с этой задачей? :) С такой прокладкой на линухе будет то же самое. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 28 июня, 2010 · Жалоба Вопрос с "подковыкой" :). Почему тогда net.isr.maxthreads дал эффект на аналогичной машине, только выполняющей роль бриджа, а не роутера? Неужели FreeBSD в этом плане хуже Linux, у которого irqbalance легко справится с этой задачей? :) С такой прокладкой на линухе будет то же самое. Хорошо, перефразирую свой вопрос. Где допущена ошибка и как исправить? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jab Опубликовано 28 июня, 2010 · Жалоба Хорошо, перефразирую свой вопрос. Где допущена ошибка и как исправить? без top -SPH и sysctl -a трудно сказать, но подозреваю что нагрузку дает pf, он не параллелится в принципе. То, что Вы натите там только мелкую сетку, не означает, что туда не попадает весь трафик, кроме того, возможно там включен default stateful behavior, scrub in all, не прописаны лимиты и таймауты, etc. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 28 июня, 2010 · Жалоба Хорошо, перефразирую свой вопрос. Где допущена ошибка и как исправить? без top -SPH и sysctl -a трудно сказать, но подозреваю что нагрузку дает pf, он не параллелится в принципе. То, что Вы натите там только мелкую сетку, не означает, что туда не попадает весь трафик, кроме того, возможно там включен default stateful behavior, scrub in all, не прописаны лимиты и таймауты, etc. # top -SPH last pid: 24610; load averages: 1.05, 0.97, 0.92 up 3+10:27:35 17:13:36 110 processes: 6 running, 80 sleeping, 24 waiting CPU 0: 0.0% user, 0.0% nice, 48.5% system, 0.0% interrupt, 51.5% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 0.4% interrupt, 99.6% idle CPU 2: 0.0% user, 0.0% nice, 2.3% system, 0.0% interrupt, 97.7% idle CPU 3: 0.0% user, 0.0% nice, 42.3% system, 0.0% interrupt, 57.7% idle Mem: 321M Active, 215M Inact, 300M Wired, 32K Cache, 112M Buf, 2116M Free Swap: 10G Total, 10G Free PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 171 ki31 0K 32K RUN 2 71.5H 100.00% {idle: cpu2} 11 root 171 ki31 0K 32K CPU1 1 71.7H 96.58% {idle: cpu1} 11 root 171 ki31 0K 32K CPU0 0 64.5H 55.91% {idle: cpu0} 11 root 171 ki31 0K 32K CPU3 3 64.5H 54.05% {idle: cpu3} 0 root -68 0 0K 80K CPU0 0 17.5H 44.43% {em1 taskq} 0 root -68 0 0K 80K - 3 17.7H 21.73% {em0 taskq} 467 root 44 - 0K 8K pftm 2 35:15 0.24% pfpurge 12 root -44 - 0K 192K WAIT 2 615:30 0.00% {swi1: netisr 3} 12 root -44 - 0K 192K WAIT 2 594:43 0.00% {swi1: netisr 2} 1205 root 44 0 159M 157M select 1 32:56 0.00% bgpd 13 root 44 - 0K 8K - 2 11:09 0.00% yarrow 3848 root 44 0 87200K 83304K select 2 5:05 0.00% snmpd 16 root 44 - 0K 8K syncer 2 4:44 0.00% syncer sysctl -a великоват для публикации тут, могу выборочно кинуть нужное. Честно говоря, идея в принципе рациональная, что в pf попадает весь трафик и, видимо от него придется отказаться. Вопрос на засыпку, если я остановлю его на боевой машине (/etc/rc.d/pf stop) - не приведет ли это к зависанию и действительно ли будет выключен функционал pf ? (чтобы протестить нагрузку) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jab Опубликовано 28 июня, 2010 · Жалоба man pfctl Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
make.kernel Опубликовано 28 июня, 2010 · Жалоба Сначала попробуйте > cat /boot/loader.conf | grep _int_ hw.em.tx_int_delay=128 hw.em.rx_int_delay=128 hw.em.tx_abs_int_delay=512 hw.em.rx_abs_int_delay=512 Цифры по вкусу под нагрузку. net.inet.ip.fastforwarding=0Не знал, что sysctl можно в loader.conf пихать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 28 июня, 2010 · Жалоба Вопрос на засыпку, если я остановлю его на боевой машине (/etc/rc.d/pf stop) - не приведет ли это к зависанию и действительно ли будет выключен функционал pf ? (чтобы протестить нагрузку)Должно порвать все TCP коннекты, и ссш придётся переконекчивать.Чтобы наверняка - соберите ядро без него и не загружайте модулем. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 1 июля, 2010 · Жалоба Должно порвать все TCP коннекты, и ссш придётся переконекчивать. С чего бы это? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 2 июля, 2010 · Жалоба У меня всегда рвало, как минимум когда я PF перезапускал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 5 июля, 2010 · Жалоба Короче, сегодня произошел незапланированный рестарт, но зато я не грузанул pf. Нагрузка средняя и балансировка по прежнему отсутствует как класс :) Никак главное не пойму, почему tasq на em1 только большой, хотя em0 и em1 участвуют в прогоне трафа, а на em2 и em3 сейчас резерв (с небольшой подгрузкой ~ 10 Mbit) и обменник на em3 ~ на 40-50 Mbit в пике. Что я делаю не так? (хочу разбалансировать нагрузку по 4 ядрам) # kldstat Id Refs Address Size Name 1 1 0xc0400000 b6dfe0 kernel # vmstat -i interrupt total rate irq14: ata0 46406 11 irq16: uhci0 1 0 cpu0: timer 12513486 3041 irq256: em0 31277230 7602 irq257: em1 32008290 7780 irq258: em2 10821474 2630 irq259: em3 6918408 1681 cpu1: timer 12513321 3041 cpu3: timer 12483561 3034 cpu2: timer 12483551 3034 Total 131065728 31858 # netstat -w 1 input (Total) output packets errs bytes packets errs bytes colls 101958 0 69477501 101967 0 71940276 0 104938 0 71648209 104935 0 74010089 0 99603 0 67878764 99605 0 70201522 0 100486 0 69700114 100479 0 71838516 0 101432 0 68868766 101433 0 71125097 0 99741 0 66871816 99724 0 69186505 0 102380 0 68773855 102394 0 71016161 0 100447 0 67317957 100451 0 69527149 0 # top -SPH last pid: 1646; load averages: 0.46, 0.60, 0.57 up 0+01:10:40 00:22:12 109 processes: 5 running, 80 sleeping, 24 waiting CPU 0: 0.0% user, 0.0% nice, 19.6% system, 0.0% interrupt, 80.4% idle CPU 1: 0.0% user, 0.0% nice, 2.7% system, 0.0% interrupt, 97.3% idle CPU 2: 0.0% user, 0.0% nice, 2.7% system, 0.0% interrupt, 97.3% idle CPU 3: 0.0% user, 0.0% nice, 23.1% system, 0.0% interrupt, 76.9% idle Mem: 300M Active, 8120K Inact, 122M Wired, 112K Cache, 12M Buf, 2522M Free Swap: 10G Total, 10G Free PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 171 ki31 0K 32K CPU2 2 66:40 100.00% {idle: cpu2} 11 root 171 ki31 0K 32K CPU1 1 66:19 94.78% {idle: cpu1} 11 root 171 ki31 0K 32K CPU0 0 54:22 82.57% {idle: cpu0} 11 root 171 ki31 0K 32K RUN 3 51:32 75.15% {idle: cpu3} 0 root -68 0 0K 80K - 0 15:03 22.56% {em1 taskq} 0 root -68 0 0K 80K - 3 17:49 2.34% {em0 taskq} 0 root -68 0 0K 80K - 1 1:35 0.83% {em2 taskq} 12 root -44 - 0K 192K WAIT 2 1:59 0.00% {swi1: netisr 3} 12 root -44 - 0K 192K WAIT 0 1:35 0.00% {swi1: netisr 2} 0 root -68 0 0K 80K - 2 0:53 0.00% {em3 taskq} 1210 root 44 0 143M 142M select 1 0:51 0.00% bgpd 12 root -44 - 0K 192K WAIT 0 0:14 0.00% {swi1: netisr 1} 1244 root 44 0 4864K 2384K select 3 0:10 0.00% ntpd Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 6 июля, 2010 · Жалоба em1 - input, em0 - output ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 6 июля, 2010 · Жалоба em1 - input, em0 - output ? em1 - out ; em0 - in Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 6 июля, 2010 (изменено) · Жалоба em1 - out ; em0 - in 0 root -68 0 0K 80K - 0 15:03 22.56% {em1 taskq}0 root -68 0 0K 80K - 3 17:49 2.34% {em0 taskq} то оно без фаервола так рисует? sysctl dev.em.1.debug=1 sysctl dev.em.1.stats=1 и читать /var/log/messages Изменено 6 июля, 2010 пользователем andriko Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 6 июля, 2010 · Жалоба em1 - out ; em0 - in 0 root -68 0 0K 80K - 0 15:03 22.56% {em1 taskq}0 root -68 0 0K 80K - 3 17:49 2.34% {em0 taskq} то оно без фаервола так рисует? sysctl dev.em.1.debug=1 sysctl dev.em.1.stats=1 и читать /var/log/messages # sysctl dev.em.1.debug=1 em1: Adapter hardware address = 0xc6783424 em1: CTRL = 0xc0241 RCTL = 0x8002 em1: Packet buffer = Tx=16k Rx=32k em1: Flow control watermarks high = 30720 low = 29220 em1: tx_int_delay = 66, tx_abs_int_delay = 66 em1: rx_int_delay = 0, rx_abs_int_delay = 66 em1: fifo workaround = 0, fifo_reset_count = 0 em1: hw tdh = 2234, hw tdt = 2234 em1: hw rdh = 2438, hw rdt = 2437 em1: Num Tx descriptors avail = 4096 em1: Tx Descriptors not avail1 = 0 em1: Tx Descriptors not avail2 = 0 em1: Std mbuf failed = 0 em1: Std mbuf cluster failed = 0 em1: Driver dropped packets = 0 em1: Driver tx dma failure in encap = 0 # sysctl dev.em.1.stats=1 em1: Excessive collisions = 0 em1: Sequence errors = 0 em1: Defer count = 0 em1: Missed Packets = 184 em1: Receive No Buffers = 86 em1: Receive Length Errors = 0 em1: Receive errors = 0 em1: Crc errors = 0 em1: Alignment errors = 0 em1: Collision/Carrier extension errors = 0 em1: RX overruns = 1 em1: watchdog timeouts = 0 em1: RX MSIX IRQ = 0 TX MSIX IRQ = 0 LINK MSIX IRQ = 0 em1: XON Rcvd = 0 em1: XON Xmtd = 0 em1: XOFF Rcvd = 0 em1: XOFF Xmtd = 0 em1: Good Packets Rcvd = 1774732194 em1: Good Packets Xmtd = 2229337079 em1: TSO Contexts Xmtd = 21 em1: TSO Contexts Failed = 0 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 6 июля, 2010 · Жалоба dev.em.1.*_*_delay не крутились, можно поиграться а так, все нормально, разве что, разобраться, какой именно трафик, насилует em1. хотя, при таком ппс+мегабит, у меня примерно такая ж нагрузка. А что баллансировать собираетесь? Есть em1, у него одно irq, вот оно и обрабатываеться одним процессором, ну, можете для гарантии прибить его к одному процу cpuset-ом. Можно поставить двайвера от яндекса и получить несколько irq на одну карточку. Картика помяняется, в остальном - на любителя. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 6 июля, 2010 · Жалоба dev.em.1.*_*_delay не крутились, можно поиграться а так, все нормально, разве что, разобраться, какой именно трафик, насилует em1. хотя, при таком ппс+мегабит, у меня примерно такая ж нагрузка. А что баллансировать собираетесь? Есть em1, у него одно irq, вот оно и обрабатываеться одним процессором, ну, можете для гарантии прибить его к одному процу cpuset-ом. Можно поставить двайвера от яндекса и получить несколько irq на одну карточку. Картика помяняется, в остальном - на любителя. На сколько я понимаю, в Linux irqbalance с легкостью бы разнес весь трафик по 4 ядрам. К тому же рядом есть полностью аналогичная машина, только ее задача из em0 и em1 сделать бридж, так там после net.isr.numthreads=4 нагрузка в действительности легла на все 4 ядра. # top -SPH last pid: 95661; load averages: 0.73, 0.66, 0.59 up 13+16:25:25 18:44:14 136 processes: 5 running, 108 sleeping, 23 waiting CPU 0: 1.9% user, 0.0% nice, 3.4% system, 0.0% interrupt, 94.8% idle CPU 1: 4.1% user, 0.0% nice, 18.4% system, 0.4% interrupt, 77.1% idle CPU 2: 1.1% user, 0.0% nice, 33.1% system, 0.0% interrupt, 65.8% idle CPU 3: 0.0% user, 0.0% nice, 18.0% system, 0.0% interrupt, 82.0% idle Mem: 65M Active, 295M Inact, 202M Wired, 48K Cache, 112M Buf, 2693M Free Swap: 4096M Total, 4096M Free PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 171 ki31 0K 32K RUN 0 285.2H 93.07% {idle: cpu0} 11 root 171 ki31 0K 32K CPU3 3 261.6H 80.86% {idle: cpu3} 11 root 171 ki31 0K 32K CPU2 2 247.0H 78.56% {idle: cpu2} 11 root 171 ki31 0K 32K RUN 1 280.9H 65.67% {idle: cpu1} 6127 root 44 -15 7908K 6736K select 0 50.5H 3.76% {ipcad} 0 root -68 0 0K 72K - 2 80.9H 0.00% {em0 taskq} 0 root -68 0 0K 72K - 3 64.0H 0.00% {em1 taskq} 0 root -68 0 0K 72K - 1 31.0H 0.00% {dummynet} 12 root -32 - 0K 184K WAIT 0 121:51 0.00% {swi4: clock} 12 root -28 - 0K 184K WAIT 0 41:46 0.00% {swi5: +} 818 root 44 0 29172K 26176K select 0 31:16 0.00% snmpd 6127 root 44 -15 7908K 6736K nanslp 1 25:15 0.00% {ipcad} 17 root 44 - 0K 8K syncer 2 21:38 0.00% syncer При этом никакой дополнительной пересборки не было, разьве что убран pf и жестко вкомпилен ipfw. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 7 июля, 2010 · Жалоба подозреваю драйвер линух пишет какойто доголнительный еггог, типа "Е657854: плиз сич фак анд гугле" :) у Вас трафик и так разнесен, если внимательно смотреть, {em1 taskq} прыгает по разным ядрам, просто оно одно, вот оно и загружено. Топ во фре рисует "плоскую" картинку, в отличии от cat /proc/interrupts в линихе Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
tartila Опубликовано 7 июля, 2010 · Жалоба подозреваю драйвер линух пишет какойто доголнительный еггог, типа "Е657854: плиз сич фак анд гугле" :)у Вас трафик и так разнесен, если внимательно смотреть, {em1 taskq} прыгает по разным ядрам, просто оно одно, вот оно и загружено. Топ во фре рисует "плоскую" картинку, в отличии от cat /proc/interrupts в линихе Тогда почему загружены только CPU0 и CPU3 в отличии от предыдущей картинки, где равномерно заргужены все ядра? Может быть попробовать увеличить net.isr.maxthreads? (то есть сделать их кол-во большим, чем кол-во ядер) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...