免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xfsoul

[FreeBSD] 精通polling参数调优的进来帮帮忙吧 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
发表于 2006-05-26 10:30 |显示全部楼层
原帖由 雨丝风片 于 2006-5-26 09:24 发表


请教一下,这个分拆体现在哪儿?

扩大mbuf尺寸,不考虑是否真能提高性能,至少可以尽量避免系统使用mbuf链或者cluster。另外,楼主两个网卡mtu一致,而且是二层转发,似乎也涉及不到ip fragmentation的问题 ...


这个分拆,是不恰当的,我的本意是分拣。写完后,没有仔细审看,表示歉意。

在协议栈实现中,会根据包的大小,申请不同的mbuf。而且在我的印象中,从网卡上来的包使用不到cluster,或者说承担转发时,是不使用cluster的,只有从会话层下来的时候,由于数据包很大,需要拆成适宜大小并组成cluster。所以我以往的经验,做网关类,不必调整cluster的数量,mbuf的数量倒是很重要,如果有大队列,还要调整内核可使用的内存空间大小。

所以你即便将mbuf调得很大,协议栈还是要判断一下,再去申请。系统缺省已经有2k的了,足够应付链路上的包了,那你说提高最小的mbuf有必要吗?只会浪费内存。

论坛徽章:
0
发表于 2006-05-26 11:41 |显示全部楼层
原帖由 mirnshi 于 2006-5-26 10:30 发表
在协议栈实现中,会根据包的大小,申请不同的mbuf。而且在我的印象中,从网卡上来的包使用不到cluster,或者说承担转发时,是不使用cluster的,只有从会话层下来的时候,由于数据包很大,需要拆成适宜大小并组成cluster。所以我以往的经验,做网关类,不必调整cluster的数量,mbuf的数量倒是很重要,如果有大队列,还要调整内核可使用的内存空间大小。

所以你即便将mbuf调得很大,协议栈还是要判断一下,再去申请。系统缺省已经有2k的了,足够应付链路上的包了,那你说提高最小的mbuf有必要吗?只会浪费内存。 ...


“从网卡上来的包使用不到cluster”,那m_devget()函数中的此段代码何解?


  1.                         if (totlen + off >= MINCLSIZE) {
  2.                                 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
  3.                                 len = MCLBYTES;
  4.                         } else {
  5.                                 m = m_gethdr(M_DONTWAIT, MT_DATA);
  6.                                 len = MHLEN;
复制代码


“所以你即便将mbuf调得很大,协议栈还是要判断一下,再去申请。”,修改mbuf的大小,就是要影响协议栈的上述“判断”过程。

上面是和你讨论“拆分”的事情,现在回到楼主的测试,修改mbuf的大小只是尝试上述不同的分配策略是否会对此造成影响,这主要是流程性的影响。如你所说,可供mbuf使用的内存数量确实也是一个关键,我们可以在测试过程中关注内存的使用情况,看看这方面是否有瓶颈。

论坛徽章:
0
发表于 2006-05-26 11:53 |显示全部楼层
内存占用到不大。应该是性能拷贝的性能消耗太大。

论坛徽章:
0
发表于 2006-05-26 12:46 |显示全部楼层
netisr_pollmore函数中的       
kern_load = (kern_load * hz) / 10000;这句有问题.
应该错了.
他的错误的算法将导致hz在默认100时性能...
kern.polling.dbg.pollkern: 1            这是网络软中断所占比率为1%
kern.polling.dbg.kernpoll_burst: 150   以至于poll_burst不断增加到顶.
kern.polling.dbg.on_cpu1: 0
kern.polling.dbg.net_load: 0
kern.polling.dbg.poll_invoke: 344070598
kern.polling.dbg.poll_suspect: 744461
kern.polling.dbg.pollmore_coun: 719577
kern.polling.dbg.poll_coun: 744461
下个帖有说明,是我的想法有问题.

[ 本帖最后由 xie_minix 于 2006-5-26 13:47 编辑 ]

论坛徽章:
0
发表于 2006-05-26 13:26 |显示全部楼层
xie_minix兄、版主兄还有其他几位兄弟,大家一起努力啊。
如果能把FreeBSD polling的一些缺陷修正,也算是对FreeBSD的不小贡献了。

论坛徽章:
0
发表于 2006-05-26 13:46 |显示全部楼层
不对,还是我错了,向大家解释一下:
if (kern_load > (100 - user_frac)) {
这句的原本意思是:
求软件中断在整个1秒时间所占百分比是否大于减去其他所占用时间.
大于就说明时间够了.poll_burst--;
小于则poll_burst++只要加后不大于最大值.
poll_burst的值很重要,要不然就不能体现出整个算法的合理性.
我们在来看看kern_load = (kern_load * hz) / 10000;这句
是为了求得网络软中断所占1秒中的比率.10000这个常量有点
很难懂.kern_load之前得到的是软件中断所使用的毫秒.
那么kern_load*hz代表每秒钟软中断大概是占了多少毫秒,
这样推算的话,10000应该是1000000/100,即先除以1百万毫秒(1秒)
得到百分比,再乘以100取出百分数.
哎这个10000也不写个说明.

[ 本帖最后由 xie_minix 于 2006-5-26 13:48 编辑 ]

论坛徽章:
0
发表于 2006-05-26 14:07 |显示全部楼层
原帖由 xie_minix 于 2006-5-26 13:46 发表
不对,还是我错了,向大家解释一下:
if (kern_load > (100 - user_frac)) {
这句的原本意思是:
求软件中断在整个1秒时间所占百分比是否大于减去其他所占用时间.
大于就说明时间够了.poll_burst--;
小于则p ...


原来如此!看来此公编程风格有待改进。
对于polling的算法还不熟,结合你的文章,继续阅读代码。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
发表于 2006-05-26 14:08 |显示全部楼层
原帖由 雨丝风片 于 2006-5-26 11:41 发表

...


回答问题前,需要仔细看代码了,许久不弄,就是生疏了。
我看了看以前调优的一些记录,的确和cluster相关的,可以通过调高nmbcluster参数,提高系统处理网络效率
这个参数需要在启动时,设置,一旦内核启动了,就不能更改了。在/boot/loader.rc中设置
警告:这个值不能过大,否则系统会因没有足够的内存分配而启动不起来

[ 本帖最后由 mirnshi 于 2006-5-26 14:10 编辑 ]

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
发表于 2006-05-26 14:16 |显示全部楼层
FreeBSD在网络处理上,我一直认为是非常强的,我曾在志强2.4,内存1G,4.11,接收900MB,CPU还能空余5-9%,但是发包就不行了,只能达到3、400MB。这是为了测试极限值,所有的包都是收到就丢弃。所以能达到极限。

论坛徽章:
0
发表于 2006-05-26 14:34 |显示全部楼层

回复 79楼 mirnshi 的帖子

我在PD 820和AMD Opteron平台,linux网桥透明转发。当包>512时候,双向千兆线速转发,轻松愉快!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP