classic Опубликовано 30 марта, 2010 (изменено) · Жалоба Добрый день всем. Суть проблемы - при увеличении количества проходящих через маршрутизатор пакетов (до 35K pps, 120 Mbps и на входе и на выходе) имею ~ 500 input errors/sec на внешнем интерфейсе, клиенты немного начинают жаловаться. Ошибки: Пакеты: Трафик: Недавно прочитал статью на Nag.ru про NAT,Shaping,Netflow на больших сетях и посему хотел бы получить вашего совета, если кто сталкивался, помойму тема схожая. Схема Есть сервер HP Proliant DL360 G4, с установленной FreeBSD 8.0 RELEASE amd64, в сервере 2 встроенных интерфейса (bge, Broadcom BCM5704, NC7782), ядро пересобрано с: + cpu HAMMER - options INET6 + options SMP + options IPFIREWALL + options IPFIREWALL_VERBOSE + options IPFIREWALL_FORWARD + options IPFIREWALL_DEFAULT_TO_ACCEPT + options IPFIREWALL_NAT + options LIBALIAS + options TCPDEBUG + options IPSTEALTH + options DEVICE_POLLING + options HZ=2000 + options DUMMYNET - ненужный мне FireWire - ненужный мне USB - ненужные мне сетевки В /etc/sysctl.conf: net.inet.ip.forwarding=1 net.inet.ip.fastforwarding=1 net.inet.ip.fw.one_pass=1 net.inet.ip.dummynet.io_fast=1 net.inet.ip.dummynet.expire=0 net.inet.ip.dummynet.hash_size=16384 На bge0 с рядом стоящей Cisco ME3400 подана гигабитная медная шворка, порт на коммутаторе в режиме access, наливаем внешний канал. На bge1 с той же Cisco ME3400 подана вторая гигабитная медная шворка, порт в режиме trunk, принимаем VLAN'ы абонентов (сейчас 305 шт). Работаем пока по схеме VLAN на абонента, /30 на абонента - иногда статический внешний IP иногда серый IP. Не оптимально, но пока хватает, ждем Juniper ERX. NAT делаем через ipfw nat: ${ipfw} add 100 nat 123 ip from 192.168.0.0/16 to any out xmit bge0 ${ipfw} add 110 nat 123 ip frmo any to <A.B.C.D> in recv bge0 ${ipfw} nat 123 config ip <A.B.C.D> log same_ports , где A.B.C.D - внешний IP маршрутизатора на bge0. Ограничение скорости (симметричные тарифы 1M / 2M / 5M / 10M) делаем через dummynet 4 строчками на каждого абонента вида: ${ipfw} add 2000 pipe 10 ip from any to any in recv vlan150 ${ipfw} add 2001 pipe 11 ip from any to any out xmit vlan150 ${ipfw} pipe 10 config bw 2Mbit/s ${ipfw} pipe 11 config bw 2Mbit/s , где vlan150 - очередной абонентский vlan Хотел бы узнать, кто сколько в схожей ситуации по оборудованию и ОС смог выжать Unicast Kpackets/sec и Mbps? Если есть какие-либо существенные советы по оптимизации - тоже буду признателен (грешу на встроенные сетевки Broadcom, может Intel ??) Вопрос возник по причине намечающегося увеличения нагрузки (+200 мбит с другого L2 сегмента), в идеале хотелось бы оценить где предел моей текущей конфигурации. Изменено 30 марта, 2010 пользователем classic Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bsdelnik Опубликовано 30 марта, 2010 (изменено) · Жалоба еще нужен вывод top -SHP в момент дропов, ipfw show как минимум, сколько и каких процов в системе. ps. 300 мегабит и 60 килопаетов в одну сторону тачка с роутингом, шейпингом, натом и нетфлоу должна делать Изменено 30 марта, 2010 пользователем bsdelnik Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lucky SB Опубликовано 30 марта, 2010 · Жалоба Хорошая у вас железка. С поллингом, более, чем 1200 строчками в фаерволле и натом она умудряется выдавать более 20кппс. За что же вы ее так жестоко ? Начните с оптимизации фаерволла - или раскладывается в пайпы через таблицы, или вообще на ng_car поменяйте. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
XeonVs Опубликовано 30 марта, 2010 · Жалоба в loader.conf можно добавить hw.bge.rxd=512 hw.bge.rx_coal_desc=64 hw.bge.tx_coal_desc=128 hw.bge.allow_asf=1 hw.bge.rx_int_delay=100 hw.bge.tx_int_delay=500 исспользовать пулинг смысла на 8.0 никакого, лучше с net.isr потоками играться грамотно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bsdelnik Опубликовано 30 марта, 2010 · Жалоба в loader.conf можно добавитьhw.bge.rxd=512 hw.bge.rx_coal_desc=64 hw.bge.tx_coal_desc=128 hw.bge.allow_asf=1 hw.bge.rx_int_delay=100 hw.bge.tx_int_delay=500 Только если дрова пропатчить... исспользовать пулинг смысла на 8.0 никакого, лучше с net.isr потоками играться грамотно.С этим согласен, это в данном случае обязательно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
XeonVs Опубликовано 30 марта, 2010 (изменено) · Жалоба в loader.conf можно добавитьhw.bge.rxd=512 hw.bge.rx_coal_desc=64 hw.bge.tx_coal_desc=128 hw.bge.allow_asf=1 hw.bge.rx_int_delay=100 hw.bge.tx_int_delay=500 Только если дрова пропатчить... Хм! в 8рке разве крутилки отломали? Изменено 30 марта, 2010 пользователем XeonVs Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bsdelnik Опубликовано 30 марта, 2010 · Жалоба Хм! в 8рке разве крутилки отломали? Их никогда и не было в ядре. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
XeonVs Опубликовано 30 марта, 2010 (изменено) · Жалоба Хм! в 8рке разве крутилки отломали?Их никогда и не было в ядре. Ага, ваша правда. Память подводит, да и продакшн никто не трогает лишний раз. По быстрому переделал патчик под 8.0\9.0 может и пригодится кому. --- if_bge.c.org 2010-03-30 21:08:20.000000000 +0400 +++ if_bge.c 2010-03-30 21:10:07.000000000 +0400 @@ -483,8 +483,18 @@ DRIVER_MODULE(miibus, bge, miibus_driver, miibus_devclass, 0, 0); static int bge_allow_asf = 1; +static int bge_rxd = BGE_SSLOTS; +static int bge_rx_coal_ticks = 150; +static int bge_tx_coal_ticks = 150; +static int bge_rx_max_coal_bds = 10; +static int bge_tx_max_coal_bds = 10; TUNABLE_INT("hw.bge.allow_asf", &bge_allow_asf); +TUNABLE_INT("hw.bge.rxd", &bge_rxd); +TUNABLE_INT("hw.bge.rx_int_delay", &bge_rx_coal_ticks); +TUNABLE_INT("hw.bge.tx_int_delay", &bge_tx_coal_ticks); +TUNABLE_INT("hw.bge.rx_coal_desc", &bge_rx_max_coal_bds); +TUNABLE_INT("hw.bge.tx_coal_desc", &bge_tx_max_coal_bds); SYSCTL_NODE(_hw, OID_AUTO, bge, CTLFLAG_RD, 0, "BGE driver parameters"); SYSCTL_INT(_hw_bge, OID_AUTO, allow_asf, CTLFLAG_RD, &bge_allow_asf, 0, @@ -1027,7 +1037,7 @@ bzero(sc->bge_ldata.bge_rx_std_ring, BGE_STD_RX_RING_SZ); sc->bge_std = 0; - for (i = 0; i < BGE_SSLOTS; i++) { + for (i = 0; i < bge_rxd; i++) { if ((error = bge_newbuf_std(sc, i)) != 0) return (error); BGE_INC(sc->bge_std, BGE_STD_RX_RING_CNT); @@ -2787,10 +2797,10 @@ /* Set default tuneable values. */ sc->bge_stat_ticks = BGE_TICKS_PER_SEC; - sc->bge_rx_coal_ticks = 150; - sc->bge_tx_coal_ticks = 150; - sc->bge_rx_max_coal_bds = 10; - sc->bge_tx_max_coal_bds = 10; + sc->bge_rx_coal_ticks = bge_rx_coal_ticks; + sc->bge_tx_coal_ticks = bge_tx_coal_ticks; + sc->bge_rx_max_coal_bds = bge_rx_max_coal_bds; + sc->bge_tx_max_coal_bds = bge_tx_max_coal_bds; /* Set up ifnet structure */ ifp = sc->bge_ifp = if_alloc(IFT_ETHER); Изменено 30 марта, 2010 пользователем XeonVs Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
classic Опубликовано 30 марта, 2010 · Жалоба По поводу сколько и каких процессоров в системе: 2 x Intel Xeon CPU 3.8 GHz одноядерных Сделал, как и советовали, отключил поллинг, включил net.isr.direct (из тех соображений что ядер 2 шт <= сетевок 2 шт): ifconfig bge0 -polling ifconfig bge1 -polling sysctl net.isr.direct=1 "Играться грамотно" с net.isr потоками не получилось, т.к. net.isr.maxthreads и net.isr.numthreads - readonly. После этих действий получил на выходе забавную картину в top -SHP (ранее такого небыло): load averages: 0.00, 0.01, 0.10 99 processes: 4 running, 75 sleeping, 20 waiting CPU 0: 0.0% user, 0.0% nice, 0.0% system, 41.2% interrupt, 58.8% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 12.1% interrupt, 87.9% idle Mem: 25M Active, 55M Inact, 286M Wired, 320K Cache, 316M Buf, 2603M Free Swap: 4495M Total, 4495M Free PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 171 ki31 0K 32K RUN 1 476:47 83.06% {idle: cpu1} 11 root 171 ki31 0K 32K CPU0 0 409:41 63.38% {idle: cpu0} 12 root -68 - 0K 336K CPU0 0 11:26 20.02% {irq26: bge1} 12 root -68 - 0K 336K WAIT 0 7:29 13.09% {irq25: bge0} 26085 root 48 0 26648K 7640K select 0 19:03 3.56% snmpd 12 root -44 - 0K 336K WAIT 1 198:01 1.90% {swi1: netisr 0} 0 root -68 0 0K 112K - 1 29:53 0.00% {dummynet} 12 root -32 - 0K 336K WAIT 1 2:53 0.00% {swi4: clock} Тобиж, насколько я понимаю, обработка прерываний легла на плечи CPU. Это дало отличный результат, т.к теперь при обработке 210 Mbps bge0 <-> bge1 имею 90 Kpackets / sec и 1.5 input errors / sec. Пробовал патчить /usr/src/sys/dev/bge/if_bge.c как вы и посоветовали, номера строк у меня в оригинальном файле не совпадают.... Вручную нашел и заменил строки, пересобрал ядро, появились "крутилки" hw.bge, пока полёт нормальный. Но меня беспокоит в этой связи вопрос - у меня 8.0-RELEASE, есть ли смысл обновиться до STABLE, возможно я получу исправление ошибок в if_bge ? В целом меня ситуация текущая уже куда более устраивает. По поводу ipfw - там 560 правил на текущий момент, сначала NAT, далее как я уже и писал в 1 посте - на каждого клиента подобные конструкции ну и pipe's: 01090 6055544 1836552801 pipe 19 ip from any to any in recv vlan76 01091 10299079 11122224438 pipe 20 ip from any to any out xmit vlan76 Я бы и рад создать отдельно pipe на каждый тариф (1M/2M/5M/10M), а потом создать table для маппинга абонента к определнному pipe согласно тарифного плана, но беда в том что во всей документации по теме ipfw tablearg примеры приводяться для ipfw table <IP_подсеть> <Номер_PIPE>, в то время как у меня VLAN per user и соответственно мне куда лучше сопоставить абонентский VLAN с pipe. Можно конечно сделать такую таблицу из IP подсетей на каждом VLAN и все же перейти на tablearg, но даст ли это увеличение производительности? Может все же можно увязать tablearg к абонентскому vlan без IP подсетей ? Да и dummynet в top -SHP практически не создает нагрузку, насколько я понимаю. P.S. Забегая наперед, нашел много нареканий на Broadcom'овские встроенные сетевки. Сам их тестил iperf без NAT и абонентской нагрузки, на свободном канале - получил 420 Mbps. Думаю что уперся в их предел. Есть ресурс для покупки под текущий проект чего-то лучше чем Broadcom, например Intel 1000 серии, но версий этих сетевок в продаже много, мне пока удавалось потестить лишь GT Desktop Edition - не обрадовали тесты. Есть ли шанс пропустить больше трафика (мои надежды получить до 800 Mbps) если купить Intel 1000 Server Edition GT/MT или что-то более? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dsk Опубликовано 30 марта, 2010 · Жалоба GT/MT это все не то. Нужно смотреть в сторону PT - pci express. Но по видимому тогда придется менять еще и тазик. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
XeonVs Опубликовано 31 марта, 2010 · Жалоба в лоадер: net.isr.maxthreads=2 net.isr.numthreads=2 пулинг из ядра вообще вынести. и смотреть как будет лучше, с net.isr.direct=0 или =1 покупать действительно имеет смысл только PT\ET Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 31 марта, 2010 · Жалоба до STABLE таки надо обновляться - там в if_bge много исправлений , правда тама Luigi Rizzo на ipfw/dummynet издевается... Зато возможно кое что из новинок даж и заработает Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lucky SB Опубликовано 31 марта, 2010 · Жалоба Можно конечно сделать такую таблицу из IP подсетей на каждом VLAN и все же перейти на tablearg, но даст ли это увеличение производительности? Может все же можно увязать tablearg к абонентскому vlan без IP подсетей ? Да и dummynet в top -SHP практически не создает нагрузку, насколько я понимаю.ng_car можно прибить к каждому интерфейсу.А в твоей конструкции проблема не в шейпере, а в том, что КАЖДЫЙ пакет в среднем проходит через 300 правил ipfw, на что требуется процессор и время ;) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
make.kernel Опубликовано 31 марта, 2010 · Жалоба Нат не очень хорошо масштабируется, у меня при двух сотнях кппс нагрузка начала расти экспоненциально. Наплодил кучу натов серая /24 в 1 белый - нагрузка на ядра, которые прерывания от сетевух обрабатывают упала с 70 до 15%, трафик в наты раскладывается таблицей. До этого процентов 5 выиграл на cpuset - 8 ядер и 6 интерфейсов - каждому прерыванию rx свое ядро, остальной хлам на 2 оставшихся. isr.direct=1, fastforwarding=1. Карточки интеловые ЕТ, драйвера 1.4.8 с интела. При net.isr.maxthreads > 1 у меня почему-то один поток грузился намного больше остальных, кроме количества потоков и isr.direct есть еще крутилочки? А то негуглится как-то этот вопрос. Ну и да, на stable как-то грустно сейчас, каждый день пересобирать приходится, из-за ipfw, неудачное время. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
classic Опубликовано 31 марта, 2010 · Жалоба Да, читал тему насчет ifconfig ipfw0, ну там быстро решение нашлось. Таки думаю взять себе Intel Gigabit ET Dual Port и PCI-E сервер. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 31 марта, 2010 · Жалоба ...Таки думаю взять себе Intel Gigabit ET Dual Port и PCI-E сервер. угу - только в силу бурной деятельности інтела над драйверами в последнее время там тож не все так просто.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
classic Опубликовано 31 марта, 2010 · Жалоба угу - только в силу бурной деятельности інтела над драйверами в последнее время там тож не все так просто.. Я так понимаю ET будет igb ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kapa Опубликовано 31 марта, 2010 · Жалоба угу - только в силу бурной деятельности інтела над драйверами в последнее время там тож не все так просто.. Я так понимаю ET будет igb ? да Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 31 марта, 2010 · Жалоба кста в head уже igb revision 1.9.3: - Following the ixgbe code, use a new approach in what was called 'get_buf', the routine now has been made independent of rxeof, it now does the update to the engine TDT register, this design allows temporary mbuf resources to become non-critical, not requiring a packet to be discarded, instead it just returns and does not increment the tail pointer. - With the above change it was also unnecessary to keep 'spare' maps around, since we do not have the discard issue. - Performance tweaks and improvements to the code also. MFC in a week Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
make.kernel Опубликовано 31 марта, 2010 · Жалоба Я когда и з 7.2 бсдшный драйвер пробовал как с бубном не плясал а скорость через рутер не поднималась выше 200 мбит, на интеловом драйвере через тазик гиг летает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Laa Опубликовано 2 апреля, 2010 · Жалоба до STABLE таки надо обновляться - там в if_bge много исправлений , правда тама Luigi Rizzo на ipfw/dummynet издевается... Зато возможно кое что из новинок даж и заработаетУ меня такой же сервер и к сожалению с bge были проблемы. Поэтому приготовь заранее svn (subversion) для отката назад sys/dev/bge, если что. Ну и не включай в ядро options FLOWTABLE. У меня пока такая нагрузка: netstat -w1 -h -I bge0 input (bge0) output packets errs idrops bytes packets errs bytes colls 34K 0 0 29M 32K 0 21M 0 32K 0 0 27M 31K 0 21M 0 31K 0 0 27M 29K 0 20M 0 30K 8 0 27M 29K 0 18M 0 30K 0 0 25M 29K 0 18M 0 30K 0 0 26M 30K 0 20M 0 31K 0 0 27M 30K 0 19M 0 30K 0 0 25M 29K 0 20M 0 29K 0 0 24M 28K 0 19M 0 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
voron Опубликовано 3 апреля, 2010 · Жалоба При net.isr.maxthreads > 1 у меня почему-то один поток грузился намного больше остальных может был забыл net.isr.direct_force ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
X-RaY™ Опубликовано 11 апреля, 2010 (изменено) · Жалоба После темы Bras для 6-7 тысяч рррое понял что руки у меня на редкость из *опы, прошу помочь с pppoe bras на freebsd. Дано: несколько комплектов intel S3420GPLC + xeon X3450, сетевые встроенные em(Intel 82574L and 82578DM) , FreeBSD 8 amd64, mpd5 и ng_car . Хочется получить: стаблильную pppoe терминацию и шейп, нат не нужен. Подскажите по sysctl, loader.conf и ядру, у кого такая же связка софта на пппое стабильно и быстро работает. За последние пол года там столько всего поменялось, поломалось и починилось, что я боюсь советы и тюны даже 2х месячной давности могут навредить(к тому что все темы тут прочел не раз, при сборке прошлых серваков и на гуглил не мало, но там в 95% советы по тюнингу то под вэб сервер, то под файловый и зфс). Заранее спасибо за любые ответы,советы хочется верить что не циской едины для pppoe bras. Изменено 11 апреля, 2010 пользователем X-RaY™ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
andriko Опубликовано 12 апреля, 2010 · Жалоба хм, а что без тюнинга получается? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 12 апреля, 2010 · Жалоба И здесь народ тюнинг Сысоева под веб сервер во всю выдаёт за свой/панацею от всех бед. Людей которые что то сами тюнят со смыслом тут человек 5 наберётся, под фрю. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...