Есть группа серверов доступа - 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 4013
ifconfig 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: active
ifconfig 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: active
pciconf -lv | grep em0
em0@pci4:3:0: class=0x020000 card=0x34668086 chip=0x10768086 rev=0x05 hdr=0x00
pciconf -lv | grep xl0
xl0@pci3:3:0: class=0x020000 card=0x100010b7 chip=0x920010b7 rev=0x74 hdr=0x00
sysctl -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: 0
last 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