Есть группа серверов доступа - Xeon 3Ghz, 2Gb RAM. В каждом из них по две сетевухи (одна смотрит в локальную сеть, вторая - на маршрутизатор). На серверах работает mpd4 (с cvs'а), ipfw (pipe, access lists), ipnat (на 2 реальный ip). Нагрузка между ними баллансируется с помощью DNS.Проблема заключается в следующем: при загрузке каждого сервера порядка 600 VPN сессий и 20-25 мегабит трафика каждого направления (in/out, суммарно порядка 50-ти мегабит в единицу времени) начинаются сильные тормоза у пользователей при работе в интернет.
На всех серверах FreeBSD 6.1 SMP (гипертрейдинг выключен), сетевухи поддерживают polling и недавно его включили - выпадение пингов до "ближнего" конца VPN туннеля вроде бы прекратилось, но тормоза в часы максимальной нагрузки у пользователей остаются.
Для примера на тех же машинах ранее работал linux с pptpd - свободно тянул 1200 сессий и около 60-70 мегабит суммарного трафика.
Может где-то надо что-то покрутить в плане оптимизации tcp/ip и/или NAT-а и взаимодествия с сетевухами?
Заранее спасибо за рекомендации!
PS: сейчас не самая сильная нагрузка на сервер, но всё же:
vmstat -i
interrupt total rate
irq1: atkbd0 393 0
irq17: em0 705954 3
irq18: atapci1 1199250 6
irq24: xl0 1025243 5
cpu0: timer 368421701 1998
cpu1: timer 368421437 1998
Total 739773978 4013ifconfig em0
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=4b<RXCSUM,TXCSUM,VLAN_MTU,POLLING>
inet 10.xx.xx.xx netmask 0xffffff00 broadcast 10.xx.xx.255
ether 00:0e:0c:3c:d3:c7
media: Ethernet 100baseTX <full-duplex>
status: activeifconfig xl0
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=49<RXCSUM,VLAN_MTU,POLLING>
inet xxx.xxx.xxx.xxx netmask 0xffffff00 broadcast xxx.xxx.xxx.255
inet xxx.xxx.xxx.xxx netmask 0xffffff00 broadcast xxx.xxx.xxx.255
ether 00:04:76:96:8e:9a
media: Ethernet autoselect (100baseTX <full-duplex>)
status: activepciconf -lv | grep em0
em0@pci4:3:0: class=0x020000 card=0x34668086 chip=0x10768086 rev=0x05 hdr=0x00pciconf -lv | grep xl0
xl0@pci3:3:0: class=0x020000 card=0x100010b7 chip=0x920010b7 rev=0x74 hdr=0x00sysctl -a|grep polling
kern.polling.burst: 23
kern.polling.burst_max: 150
kern.polling.each_burst: 5
kern.polling.idle_poll: 1
kern.polling.user_frac: 40
kern.polling.reg_frac: 20
kern.polling.short_ticks: 913
kern.polling.lost_polls: 21019680
kern.polling.pending_polls: 0
kern.polling.residual_burst: 0
kern.polling.handlers: 2
kern.polling.enable: 1
kern.polling.phase: 0
kern.polling.suspect: 14978
kern.polling.stalled: 2453
kern.polling.idlepoll_sleeping: 0last pid: 89576; load averages: 2.70, 2.48, 2.38 up 2+03:15:53 15:02:29
108 processes: 7 running, 85 sleeping, 16 waiting
CPU states: 15.8% user, 0.0% nice, 4.1% system, 30.0% interrupt, 50.1% idle
Mem: 41M Active, 1223M Inact, 382M Wired, 199M Buf, 356M Free
Swap: 4070M Total, 4070M Free# netstat -I em0 -w 1
input (em0) output
packets errs bytes packets errs bytes colls
4906 0 1793981 8734 0 2527064 0
4724 0 1929525 8469 0 2760098 0
4913 0 1801311 8545 0 2473639 0
4918 0 1838093 8808 0 2598038 0# netstat -I xl0 -w 1
input (xl0) output
packets errs bytes packets errs bytes colls
4313 0 2595427 3748 0 1577046 0
3789 0 2229250 3677 0 1512157 0
4191 0 2706277 3930 0 1477636 0
4364 0 2355995 3772 0 1494585 0
Навскидку - очевидно, выкинуть ipnat и поставить ng_nat, раз уж mpd =)
(посмотреть что-нибудь вроде этого: http://wiki.bsdportal.ru/doc:netgraph_ng_nat)зы. Вообще, нагрузка по кол-ву пакетов не сильно большая, странно, что 30% interrupts...
Какая материнская плата? + почему xl?Таки em сильно получше будет, ну или fxp уж, коли гигабита нету =)Да, и последнее - пересобрать под SMP не пробовали?
ззы. sysctl kern.clockrate - что будет?
>Навскидку - очевидно, выкинуть ipnat и поставить ng_nat, раз уж mpd =)
>
>(посмотреть что-нибудь вроде этого: http://wiki.bsdportal.ru/doc:netgraph_ng_nat)
>
>зы. Вообще, нагрузка по кол-ву пакетов не сильно большая, странно, что 30%
>interrupts...
>Какая материнская плата? + почему xl?Таки em сильно получше будет, ну или
>fxp уж, коли гигабита нету =)
>
>Да, и последнее - пересобрать под SMP не пробовали?
>ззы. sysctl kern.clockrate - что будет?Вот сейчас там 760 пользователей на mpd висит. Трафик через интерфейсы 25in/15out.
last pid: 55824; load averages: 2.07, 2.22, 2.20 up 0+10:52:59 22:40:00
79 processes: 7 running, 56 sleeping, 16 waiting
CPU states: 4.6% user, 0.0% nice, 7.6% system, 37.8% interrupt, 50.0% idle
Mem: 39M Active, 764M Inact, 287M Wired, 28K Cache, 199M Buf, 911M Free
Swap: 4070M Total, 4070M Freekern.clockrate: { hz = 2000, tick = 500, profhz = 1333, stathz = 266 }
сегодня увеличили с 1000 до 2000.
И заодно kern.polling.user_frac уменьшили с 40 до 25.
Мать интеловская под два ксеона. Точно модель не вспомню.
xl потому, что вторая интегрированная myk не умеет polling, поэтому для того чтобы поднять поллинг на обоих сетевухах, воткнули в сервера по pci 3com карточке.ng_nat попробуем завтра, спасибо. Пересобирать под SMP ещё не пробовали.
>>Навскидку - очевидно, выкинуть ipnat и поставить ng_nat, раз уж mpd =)
>>
>>(посмотреть что-нибудь вроде этого: http://wiki.bsdportal.ru/doc:netgraph_ng_nat)
>>
>>зы. Вообще, нагрузка по кол-ву пакетов не сильно большая, странно, что 30%
>>interrupts...
>>Какая материнская плата? + почему xl?Таки em сильно получше будет, ну или
>>fxp уж, коли гигабита нету =)
>>
>>Да, и последнее - пересобрать под SMP не пробовали?
>>ззы. sysctl kern.clockrate - что будет?
>
>Вот сейчас там 760 пользователей на mpd висит. Трафик через интерфейсы 25in/15out.>
>
>last pid: 55824; load averages: 2.07, 2.22, 2.20
> up 0+10:52:59 22:40:00
>79 processes: 7 running, 56 sleeping, 16 waiting
>CPU states: 4.6% user, 0.0% nice, 7.6% system, 37.8%
>interrupt, 50.0% idle
>Mem: 39M Active, 764M Inact, 287M Wired, 28K Cache, 199M Buf, 911M
>Free
>Swap: 4070M Total, 4070M Free
>
>kern.clockrate: { hz = 2000, tick = 500, profhz = 1333, stathz
>= 266 }
>сегодня увеличили с 1000 до 2000.
>И заодно kern.polling.user_frac уменьшили с 40 до 25.
>Мать интеловская под два ксеона. Точно модель не вспомню.
Но процессоров один, очевидно?>xl потому, что вторая интегрированная myk не умеет polling, поэтому для того
>чтобы поднять поллинг на обоих сетевухах, воткнули в сервера по pci
>3com карточке.
Логично...Я, конечно, не великий специалист во сравнении внутреннего устройства polling-а в xl VS fxp, но, повторюсь, что установка последней заместо xl может немного помочь>ng_nat попробуем завтра, спасибо. Пересобирать под SMP ещё не пробовали.
Хм, вообще, судя по последней цифре в load averages - оба раза она стабильно больше 2, процессор не справляется с нагрузкой - надо искать причину...Интересны иземенения после ng_nat. зы. на машине ничего больше серъезного нет?
>>>Навскидку - очевидно, выкинуть ipnat и поставить ng_nat, раз уж mpd =)
>>>
>>>(посмотреть что-нибудь вроде этого: http://wiki.bsdportal.ru/doc:netgraph_ng_nat)
>>>
>>>зы. Вообще, нагрузка по кол-ву пакетов не сильно большая, странно, что 30%
>>>interrupts...
>>>Какая материнская плата? + почему xl?Таки em сильно получше будет, ну или
>>>fxp уж, коли гигабита нету =)
>>>
>>>Да, и последнее - пересобрать под SMP не пробовали?
>>>ззы. sysctl kern.clockrate - что будет?
>>
>>Вот сейчас там 760 пользователей на mpd висит. Трафик через интерфейсы 25in/15out.
>
>>
>>
>>last pid: 55824; load averages: 2.07, 2.22, 2.20
>> up 0+10:52:59 22:40:00
>>79 processes: 7 running, 56 sleeping, 16 waiting
>>CPU states: 4.6% user, 0.0% nice, 7.6% system, 37.8%
>>interrupt, 50.0% idle
>>Mem: 39M Active, 764M Inact, 287M Wired, 28K Cache, 199M Buf, 911M
>>Free
>>Swap: 4070M Total, 4070M Free
>>
>>kern.clockrate: { hz = 2000, tick = 500, profhz = 1333, stathz
>>= 266 }
>>сегодня увеличили с 1000 до 2000.
>>И заодно kern.polling.user_frac уменьшили с 40 до 25.
>>Мать интеловская под два ксеона. Точно модель не вспомню.
>Но процессоров один, очевидно?
>
>>xl потому, что вторая интегрированная myk не умеет polling, поэтому для того
>>чтобы поднять поллинг на обоих сетевухах, воткнули в сервера по pci
>>3com карточке.
>Логично...Я, конечно, не великий специалист во сравнении внутреннего устройства polling-а в xl
>VS fxp, но, повторюсь, что установка последней заместо xl может немного
>помочь
>
>>ng_nat попробуем завтра, спасибо. Пересобирать под SMP ещё не пробовали.
>Хм, вообще, судя по последней цифре в load averages - оба раза
>она стабильно больше 2, процессор не справляется с нагрузкой - надо
>искать причину...Интересны иземенения после ng_nat. зы. на машине ничего больше серъезного
>нет?
Ничего серьёзного на машине больше нет (ну разве что netflow's собираются из ipfw).
Процессор да, один.
Мне тут подсказывают, что SMP умеет и GENERIC ядро, которое с незначительными добавлениями (polling, netgraph и.т.д.) мы используем.
Сейчас будем пробовать ng_nat.
>Ничего серьёзного на машине больше нет (ну разве что netflow's собираются из
>ipfw).
Эм, ну раз netflow, тогда еще посмотреть обязательно на ng_netflow, дабы не городить огород с ipfw =)>Процессор да, один.
>Мне тут подсказывают, что SMP умеет и GENERIC ядро, которое с незначительными
>добавлениями (polling, netgraph и.т.д.) мы используем.
Не забудьте только у GENERIC убрать makeoptions = -g (дебаг) из конфига....
А то знакомый собирал дефолтное SMP-ядро, а оно инклудит GENERIC, который именно с дебагом..>Сейчас будем пробовать ng_nat.
^up, + ng_netflow тогда =)
1) интересно, как это: нетфлов из ипфв? get_xyz?
2) насчёт fxp - поможет, но не сильно. mpd vpn к нему не привязан (пппое - другое дело).
3) ng_ipnat тоже врядли сильно поднимет
4) так понимаю, что мпд только для авторизации юзеров; тогда поставь любой vpn с привязкой куда_там. по-моему = самое то.
>1) интересно, как это: нетфлов из ипфв? get_xyz?
>2) насчёт fxp - поможет, но не сильно. mpd vpn к нему
>не привязан (пппое - другое дело).
>3) ng_ipnat тоже врядли сильно поднимет
>4) так понимаю, что мпд только для авторизации юзеров; тогда поставь любой
>vpn с привязкой куда_там. по-моему = самое то.Не совсем понял пункт 4. Можешь пояснить?
>>1) интересно, как это: нетфлов из ипфв? get_xyz?
>>2) насчёт fxp - поможет, но не сильно. mpd vpn к нему
>>не привязан (пппое - другое дело).
>>3) ng_ipnat тоже врядли сильно поднимет
>>4) так понимаю, что мпд только для авторизации юзеров; тогда поставь любой
>>vpn с привязкой куда_там. по-моему = самое то.
>
>Не совсем понял пункт 4. Можешь пояснить?
poptop http://www.opennet.me/base/net/vpd_freebsd.txt.html
авторизация хоть с текстовика
>>>1) интересно, как это: нетфлов из ипфв? get_xyz?
>>>2) насчёт fxp - поможет, но не сильно. mpd vpn к нему
>>>не привязан (пппое - другое дело).
>>>3) ng_ipnat тоже врядли сильно поднимет
>>>4) так понимаю, что мпд только для авторизации юзеров; тогда поставь любой
>>>vpn с привязкой куда_там. по-моему = самое то.
>>
>>Не совсем понял пункт 4. Можешь пояснить?
>
>
>poptop http://www.opennet.me/base/net/vpd_freebsd.txt.html
>авторизация хоть с текстовикаИмхо, оверхед был из-за разных действий в разных системах, хотя можно было юзать одну :)
Суть - netgraph умеет PPP, NAT + export netflow - а использовалась лишь первая часть...
(для NAT - ipnat, для export netflow - ipfw)
Отсюда идея - перевести всё на netgraph, для того и создан ибозы. ты считаешь, что poptop лучше mpd for freebsd?
Вообще, mpd - демон, работающий с netgraph-овскими узлами ng_ppp, умеет всё, что должен уметь порядочный ppp-демон :)ззы. какая разница на какой сетевой что висит - траффик идет через обе одинаковый, и интеррапты генерятся примерно одинаково(ну в смысле да, обе карты опрашиваются примерно одинаково, ибо поллинг)...Но xl - это попсовая штука за 200-300 руб, не чета intel-овской fxp, стоящей раза в 3-4 дороже. Дома у меня такие стоят, но в инете - fxp|em...Тогда самое простое решение - взять и сменить сетевую, хуже не будет точно, а цена при таких условиях - сущие копейки....