我有FreeBSD路由器:
#uname 9.1-STABLE FreeBSD 9.1-STABLE #0: Fri Jan 18 16:20:47 YEKT 2013
这是一个function强大的计算机,拥有大量的内存
#top -S last pid: 45076; load averages: 1.54, 1.46, 1.29 up 0+21:13:28 19:23:46 84 processes: 2 running, 81 sleeping, 1 waiting CPU: 3.1% user, 0.0% nice, 32.1% system, 5.3% interrupt, 59.5% idle Mem: 390M Active, 1441M Inact, 785M Wired, 799M Buf, 5008M Free Swap: 8192M Total, 8192M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 11 root 4 155 ki31 0K 64K RUN 3 71.4H 254.83% idle 13 root 4 -16 - 0K 64K sleep 0 101:52 103.03% ng_queue 0 root 14 -92 0 0K 224K - 2 229:44 16.55% kernel 12 root 17 -84 - 0K 272K WAIT 0 213:32 15.67% intr 40228 root 1 22 0 51060K 25084K select 0 20:27 1.66% snmpd 15052 root 1 52 0 104M 22204K select 2 4:36 0.98% mpd5 19 root 1 16 - 0K 16K syncer 1 0:48 0.20% syncer
它的任务是:通过ng_nat的NAT和通过mpd5的PPPoE服务器。
stream量通过 – 约300Mbit / s,峰值约40kpps。 创buildPppoe会话 – 最多350次
ng_nat由脚本configuration:
/usr/sbin/ngctl -f- <<-EOF mkpeer ipfw: nat %s out name ipfw:%s %s connect ipfw: %s: %s in msg %s: setaliasaddr 1.1.%s
有20个这样的ng_nat节点,约150个客户端。
有时,通过nat的交通停止。 发生这种情况时,vmstat会报告很多FAIL计数
vmstat -z | grep -i netgraph ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP NetGraph items: 72, 10266, 1, 376,39178965, 0, 0 NetGraph data items: 72, 10266, 9, 10257,2327948820,2131611,4033
我曾试过增加
net.graph.maxdata=10240 net.graph.maxalloc=10240
但是这不起作用。
这是一个新的问题(1-2周)。 configuration一直运行良好大约5个月,没有任何configuration变化导致问题的出现。
在过去的几个星期里,我们的stream量略有增加(从270到300兆比特),而更多的会话(300-> 350)。
请帮助我,如何find并解决我的问题?
Upd:有关网卡的信息:
# pciconf -lv | grep -B3 network em0@pci0:0:25:0: class=0x020000 card=0x35788086 chip=0x15028086 rev=0x05 hdr=0x00 vendor = 'Intel Corporation' device = '82579LM Gigabit Network Connection' class = network -- em1@pci0:2:0:0: class=0x020000 card=0x35788086 chip=0x10d38086 rev=0x00 hdr=0x00 vendor = 'Intel Corporation' device = '82574L Gigabit Network Connection' class = network
UPD:有2个“顶级”输出https://gist.github.com/korjavin/9190181
当我swith net.isr.dispatch混合。 在这之后,我有大量的mpd进程(不知道为什么)和一个CPU到100%的中断,并且在10分钟的工作之后,由于大包丢失而重新启动。
UPD:再次发生在重新启动之前和之后有“顶部”输出https://gist.github.com/korjavin/9254734
在ng_queue过程中看起来像问题,这对CPU来说吃的太多了。 自从我的第一篇文章,有更多的会议和交通。 约400 pppoe和450Mbit / s
我试图将/boot/loader.conf中的net.link.ifqmaxlen碰到10240.因为我不喜欢它,所以em(4)(和igp,英特尔10g卡)驱动程序(或者至less你的82574L)不会平衡非IPstream量(你的PPPoE),所以一切都进入一个ng_queue。
我不明白为什么你的一个接口(em0)使用一个IRQ,而另一个(em1)使用单独的IRQ作为tx,rx和链接。 在MSI-X的插槽中是否都有NIC卡?
你可能比我能做得更多(我不知道俄罗斯,Google翻译也没有多大帮助):
http://forum.nag.ru/forum/index.php?s=c4da62052515736f45c73b932216af33&showtopic=82322&st=0
这个来自FreeBSD论坛的主题有一些build议
Network Performance Tuning上的FreeBSD wiki解释了一些关于ng_nat中的单线程和一些解决方法
有些人报告说在内核(和mpd)上禁用了IPv6,但是我没有看到任何真正的共识。
编辑: 我忘了添加这个 ,似乎有其他几个相关的调整参数,我认为dummynet相关的看起来很有希望。
让我知道发生了什么,这是一个有趣的问题…
解决scheme是:
deny ip from any to any dst-port 6881 out
所以,这是关于NAT和州计数和洪stream