denis_vid Posted September 29, 2010 · Report post Всем привет. Есть сервер Dell PowerEdge 2950 который заюзан в качестве софтшейпера. 2xCoreQuad 4Gb Ram 2 Broadcom Nextreme-II интегрированных сетевых адаптера. OC Freebsd 7.3 Юзается ipfw+dummynet конкретно роутинг шейпинг и все, ната нет. Изначально использовались броадкомовские карточки и все было вроде отлично. Загрузка проца до 40 кП/с была не более 20 % на каждое ядро. Выше 40 тыщ пакетов полезли ошибки на интерфейсах. Причину наши довольно быстро - драйвер карточки юзал маленький объем буфера FIFO и пакеты которые не помещались в буфер дропались. Аппаратно насколько я понял объем буфера максимум 64к. Поиски в нете что изменить в сырцах драйвера для увеличения объема буфера ни к чему не привели, самостоятельное копание сырцов тоже. Т.к. шейпер к тому времени был в бою проблему следовало решать очень быстро и решили ее заменой карточек на Intel PRO 1000 Server Adapter PT. Поначалу родной драйвер из дистрибутива 7.3 в boot/loader hw.em.rxd="4096" hw.em.txd="4096". Ошибки на интерфейсах пропали но сильно возросла загрузка CPU на два ядра которые юзали карточки. При нагрузке 45-50 кП/с загрузка одного ядра достигала 100 % и конечно ошибки и рост пингов. Ладно подумал я) Ставим яндекс дрова. Поставил сделал rx_kthreads на оба адаптера 4 cpuset-ом вручную раскидал процессы которые жрут ресурсы по незагруженным ядрам. На какое то время это дало эффект от 40 до 60 % нагрузки на ядро но ненадолго. Сейчас 60-70 кП/с и загрузка уже до 85 % Привожу top -S в момент минимальной загрузки (утро) PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 14 root 1 171 ki31 0K 16K RUN 4 1551.2 65.92% idle: cpu4 12 root 1 171 ki31 0K 16K CPU6 6 1468.4 56.05% idle: cpu6 21 root 1 -44 - 0K 16K CPU1 4 804.5H 55.42% swi1: net 13 root 1 171 ki31 0K 16K CPU5 5 1460.3 54.98% idle: cpu5 15 root 1 171 ki31 0K 16K CPU3 3 1424.1 51.12% idle: cpu3 16 root 1 171 ki31 0K 16K CPU2 2 1441.2 50.63% idle: cpu2 18 root 1 171 ki31 0K 16K RUN 0 1350.2 46.78% idle: cpu0 17 root 1 171 ki31 0K 16K RUN 1 1269.2 45.75% idle: cpu1 11 root 1 171 ki31 0K 16K RUN 7 1356.4 44.82% idle: cpu7 25065 root 1 43 - 0K 16K WAIT 5 390.5H 39.31% em1_rx_kthread_5 25062 root 1 43 - 0K 16K CPU5 5 364.1H 33.01% em1_rx_kthread_2 25064 root 1 43 - 0K 16K WAIT 6 365.0H 32.62% em1_rx_kthread_4 38 root 1 43 - 0K 16K CPU3 3 390.8H 30.71% em1_rx_kthread_1 37 root 1 43 - 0K 16K WAIT 2 390.1H 29.44% em1_rx_kthread_0 25066 root 1 43 - 0K 16K CPU7 7 358.7H 29.15% em1_rx_kthread_6 33 root 1 43 - 0K 16K CPU4 6 221.8H 22.85% em0_rx_kthread_1 25055 root 1 43 - 0K 16K WAIT 6 205.8H 22.80% em0_rx_kthread_3 25059 root 1 43 - 0K 16K CPU4 0 205.8H 21.97% em0_rx_kthread_7 25054 root 1 43 - 0K 16K WAIT 4 187.4H 14.60% em0_rx_kthread_2 25056 root 1 43 - 0K 16K RUN 7 171.3H 13.23% em0_rx_kthread_4 32 root 1 43 - 0K 16K RUN 1 177.5H 11.72% em0_rx_kthread_0 52 root 1 -68 - 0K 16K - 4 115.6H 1.86% dummynet netstat -w1 root@shaper /etc]# netstat -w1 -i em1 input (Total) output packets errs bytes packets errs bytes colls 40471 0 29560399 39532 0 28508500 0 40707 0 30027397 39491 0 28915777 0 40355 0 29530118 39818 0 28644178 0 40497 0 29498298 38859 0 28463746 0 39904 0 29017020 39240 0 28109825 0 39634 0 29242710 38137 0 28269260 0 39632 0 29360569 38870 0 28425377 0 39634 0 29248165 38657 0 28358764 0 39066 0 28846025 37757 0 27718854 0 40535 0 29338532 39809 0 28321484 0 40295 0 29972966 38744 0 28734627 0 40061 0 29864550 39395 0 29029408 0 39186 0 28731032 37881 0 27757541 0 39048 0 28732234 38049 0 27831635 0 38674 0 28328730 37867 0 27374103 0 38488 0 28235643 37148 0 27241196 0 htop 1 [|||||||||||||||||||||||||||||||||||||||| 42.1%] Tasks: 46 total, 1 running 2 [|||||||||||||||||||||||||||||||||||||||||| 44.8%] Load average: 3.42 3.71 3.50 3 [|||||||||||||||||||||||||||||||||||||||| 43.0%] Uptime: 83 days, 15:30:16 4 [||||||||||||||||||||||||||||||||||||| 39.6%] 5 [|||||||||||||||||||||||||||| 29.1%] 6 [|||||||||||||||||||||||||||||||||||||||| 42.2%] 7 [||||||||||||||||||||||||||||||||||||||| 41.3%] 8 [|||||||||||||||||||||||||||||||||||||||||||||| 48.6%] Mem[||||||||||||||| 581/4080MB] Swp[ 0/4096MB] Как видно выше dummynet сам ресурсы не ест а едят swi1: net и rx_kthread -rxcsum -tso ничего не дало sysctl security.bsd.see_other_uids=0 security.bsd.see_other_gids=0 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.inet.icmp.icmplim=10 net.inet.ip.random_id=1 net.inet.ip.forwarding=1 net.inet.ip.fw.one_pass=1 net.inet.ip.redirect=0 net.inet.tcp.sendspace=1048576 net.inet.tcp.recvspace=1048576 net.inet.tcp.msl=15000 kern.ipc.maxsockets=204800 kern.ipc.maxsockbuf=16777216 net.inet.tcp.syncookies=1 kern.ipc.nmbclusters=262144 kern.ipc.somaxconn=24096 net.inet.ip.intr_queue_maxlen=1024 net.inet.tcp.mssdflt=1460 net.inet.tcp.slowstart_flightsize=54 net.inet.ip.fastforwarding=1 net.inet.ip.dummynet.io_fast=1 net.isr.direct=0 net.inet.ip.dummynet.hash_size=1024 net.local.stream.recvspace=65535 net.local.stream.sendspace=65535 net.inet.udp.maxdgram=57344 net.inet.tcp.inflight.enable=0 #net.inet.tcp.hostcache.expire=1 net.inet.tcp.fast_finwait2_recycle=1 net.inet.ip.dummynet.max_chain_len=32 # net.inet.icmp.maskrepl=0 net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 net.inet.icmp.bmcastecho=0 dev.em.0.rx_int_delay=750 dev.em.0.tx_int_delay=750 dev.em.0.rx_abs_int_delay=1500 dev.em.0.tx_abs_int_delay=1500 dev.em.1.rx_int_delay=750 dev.em.1.tx_int_delay=750 dev.em.1.rx_abs_int_delay=1500 dev.em.1.tx_abs_int_delay=1500 dev.em.0.rx_kthreads=4 dev.em.1.rx_kthreads=4 если выключить фастфорвардинг и включить net.isr.direct загрузка возрастает еще на 10 % на ядро а dummynet есть примерно 60% ресрсов проца по топу. net.inet.ip.fw.enable: 1 -> 0 и сразу нагрузка падает CPU: 0.5% user, 0.0% nice, 11.8% system, 0.0% interrupt, 87.7% idle Mem: 106M Active, 803M Inact, 582M Wired, 24K Cache, 418M Buf, 2454M Free Swap: 4096M Total, 4096M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 14 root 1 171 ki31 0K 16K CPU4 4 1551.3 79.98% idle: cpu4 13 root 1 171 ki31 0K 16K RUN 5 1460.4 75.44% idle: cpu5 12 root 1 171 ki31 0K 16K RUN 6 1468.5 74.90% idle: cpu6 15 root 1 171 ki31 0K 16K CPU3 3 1424.2 72.75% idle: cpu3 16 root 1 171 ki31 0K 16K CPU2 2 1441.3 72.22% idle: cpu2 11 root 1 171 ki31 0K 16K RUN 7 1356.5 67.48% idle: cpu7 17 root 1 171 ki31 0K 16K CPU1 1 1269.3 66.60% idle: cpu1 18 root 1 171 ki31 0K 16K CPU0 0 1350.3 65.33% idle: cpu0 21 root 1 -44 - 0K 16K WAIT 0 804.6H 25.54% swi1: net 25065 root 1 43 - 0K 16K CPU1 1 390.6H 20.17% em1_rx_kthread_5 25064 root 1 43 - 0K 16K WAIT 6 365.1H 17.33% em1_rx_kthread_4 25062 root 1 43 - 0K 16K RUN 5 364.1H 17.04% em1_rx_kthread_2 25066 root 1 43 - 0K 16K WAIT 7 358.8H 16.70% em1_rx_kthread_6 38 root 1 43 - 0K 16K WAIT 3 390.9H 16.26% em1_rx_kthread_1 37 root 1 43 - 0K 16K WAIT 2 390.1H 15.09% em1_rx_kthread_0 25059 root 1 43 - 0K 16K WAIT 0 205.8H 14.55% em0_rx_kthread_7 33 root 1 43 - 0K 16K WAIT 2 221.8H 14.31% em0_rx_kthread_1 25055 root 1 43 - 0K 16K WAIT 0 205.8H 13.62% em0_rx_kthread_3 25054 root 1 43 - 0K 16K WAIT 4 187.4H 9.18% em0_rx_kthread_2 25056 root 1 43 - 0K 16K WAIT 7 171.4H 8.40% em0_rx_kthread_4 32 root 1 43 - 0K 16K WAIT 1 177.6H 7.96% em0_rx_kthread_0 83922 root 1 96 0 7276K 2044K select 2 26:02 2.49% htop 52 root 1 -68 - 0K 16K - 3 115.6H 0.68% dummynet 1 [||||||||||||||||||| 19.7%] Tasks: 46 total, 1 running 2 [|||||||||| 10.3%] Load average: 1.97 3.11 3.32 3 [|||||||| 8.4%] Uptime: 83 days, 15:39:25 4 [||||||||| 8.9%] 5 [|||||||| 8.4%] 6 [|||||||||| 10.2%] 7 [|||||| 6.5%] 8 [||||||||| 9.6%] Mem[||||||||||||||| 582/4080MB] Swp[ 0/4096MB] Вот теперь я сижу с этой вроде неслабой железкой с хорошими карточками и ломаю голову почему они не справляется с такой небольшой для них нагрузкой Прошу помощи у людей знающих. Share this post Link to post Share on other sites
Sanchezz Posted September 29, 2010 · Report post покажи ifconfig такой же сервак сегодня запустил. только на <Broadcom NetXtreme Gigabit Ethernet Controller, ASIC rev. 0x000105> Share this post Link to post Share on other sites
denis_vid Posted September 29, 2010 (edited) · Report post [root@shaper /etc]# ifconfig em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=198<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4> ether 00:15:17:cc:de:6a inet x.x.x.x netmask 0xfffffffc broadcast x.x.x.x media: Ethernet autoselect (1000baseTX <full-duplex>) status: active em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=198<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4> ether 00:15:17:cc:de:77 inet x.x.x.x netmask 0xfffffffc broadcast x.x.x.x media: Ethernet autoselect (1000baseTX <full-duplex>) status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 Edited September 29, 2010 by denis_vid Share this post Link to post Share on other sites
Sanchezz Posted September 29, 2010 (edited) · Report post ipfw может приседает хорошо. попробуй оптимизировать его м.б. поллинг нужен? Edited September 29, 2010 by Sanchezz Share this post Link to post Share on other sites
denis_vid Posted September 29, 2010 (edited) · Report post ipfw может приседает хорошо.попробуй оптимизировать его м.б. поллинг нужен? Пробовал поллинг kern.hz=2000 Загрузка снижается незначительноИспользую отложенные прерывания по sysctl это видно что по идее должно приводить к сравнимому с поллингом эффекту И насколько я понял в случае с em с яндекс драйвером поллинг не советуют использовать рекомендуют int_delay Забыл добавить правила ipfw статические по два на каждого клиента входящий и исходящий Правил сейчас net.inet.ip.fw.static_count: 2865 Мне странно что rx_kthread.потребляют столько CPU и что с броадкомовскими карточками загрузка была в разы ниже Edited September 29, 2010 by denis_vid Share this post Link to post Share on other sites
sid1333 Posted September 29, 2010 · Report post Правил сейчасnet.inet.ip.fw.static_count: 2865 Попробуйте уменьшить количество правил хотя бы до сотни! Раскидать правила по таблицам. Поищите по форумам - множество примеров есть. Share this post Link to post Share on other sites
Sanchezz Posted September 30, 2010 · Report post еще лучше юзать таблицы для смежных правл Share this post Link to post Share on other sites
denis_vid Posted September 30, 2010 · Report post Попробую, отпишусь я задумывался про таблицы но наткнулся на мнение что нагрузку вряд ли снизят потому что в итоге таблицы все равно разворачиваются в правила и пакет в итоге проходит через тоже количество правил что и без таблиц Share this post Link to post Share on other sites
XeonVs Posted September 30, 2010 · Report post Попробую, отпишусь я задумывался про таблицы но наткнулся на мнение что нагрузку вряд ли снизят потому что в итоге таблицы все равно разворачиваются в правила и пакет в итоге проходит через тоже количество правил что и без таблицтак надо маны смотреть, а не мнения читать. Вот у человека по сути те же проблемы http://forum.nag.ru/forum/index.php?showtopic=60605пакет пройдет столько правил сколько нужно, skipto, tablearg тут лучшие друзья. Share this post Link to post Share on other sites
Ilya Evseev Posted October 1, 2010 · Report post Параметры sysctl dev.em приведены из вывода команды /sbin/sysctl или из файла /etc/sysctl.conf? Если из sysctl.conf, то они могли просто не загрузиться, здесь этот баг драйвера em обсуждался неоднократно. У нас ipfw стал сворачиваться в трубочку на P4+FreeBSD 5.5 даже при небольшом трафике, когда простыня правил выросла до 2000. Перешли на таблицы сначала для ACL, затем для шейперов - всё стало летать. Share this post Link to post Share on other sites
denis_vid Posted October 1, 2010 (edited) · Report post Параметры sysctl dev.em приведены из вывода команды /sbin/sysctl или из файла /etc/sysctl.conf?Если из sysctl.conf, то они могли просто не загрузиться, здесь этот баг драйвера em обсуждался неоднократно. У нас ipfw стал сворачиваться в трубочку на P4+FreeBSD 5.5 даже при небольшом трафике, когда простыня правил выросла до 2000. Перешли на таблицы сначала для ACL, затем для шейперов - всё стало летать. Это из /etc/sysctl.conf но в /sbin/sysctl dev.em вывод что параметры применены. Остальное все в sysctl по умолчанию.Спасибо всем за ответы, ясно в каком направление двигаться Всвязи с этим прошу кому не лень подсказать т.к. не хочется эксперементировать на рабочей машине Как правильно настроить таблицы если сейчас конфиг типа? pipe 13000 config bw 3Mbit/s queue 60 mask dst-ip 0xffffffff pipe 23000 config bw 3Mbit/s queue 60 mask src-ip 0xffffffff правила для клиентов ipfw add 600 pipe 13000 ip from any to x.x.x.x out ipfw add 601 pipe 23000 ip from x.x.x.x to any in Edited October 1, 2010 by denis_vid Share this post Link to post Share on other sites
XeonVs Posted October 1, 2010 · Report post Всвязи с этим прошу кому не лень подсказать т.к. не хочется эксперементировать на рабочей машине Как правильно настроить таблицы если сейчас конфиг типа? pipe 13000 config bw 3Mbit/s queue 60 mask dst-ip 0xffffffff pipe 23000 config bw 3Mbit/s queue 60 mask src-ip 0xffffffff правила для клиентов ipfw add 600 pipe 13000 ip from any to x.x.x.x out ipfw add 601 pipe 23000 ip from x.x.x.x to any in похо же ссылку http://forum.nag.ru/forum/index.php?showtopic=60605 так и не посмотрел.Там рабочий пример дан. Share this post Link to post Share on other sites
denis_vid Posted October 1, 2010 · Report post Там рабочий пример дан. Спасибо! Как то автоматически цитаты пропускал Share this post Link to post Share on other sites
Ilya Evseev Posted October 1, 2010 · Report post Как правильно настроить таблицы если сейчас конфиг типа? pipe 13000 config bw 3Mbit/s queue 60 mask dst-ip 0xffffffff pipe 23000 config bw 3Mbit/s queue 60 mask src-ip 0xffffffff правила для клиентов ipfw add 600 pipe 13000 ip from any to x.x.x.x out ipfw add 601 pipe 23000 ip from x.x.x.x to any in Готовый генератор - http://forum.nag.ru/forum/index.php?showtopic=54379 Share this post Link to post Share on other sites