免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 独孤九贱
打印 上一主题 下一主题

在多核系统上网络数据转发实验和一点思考 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-05-20 13:30 |显示全部楼层
原帖由 terryfe 于 2009-5-20 10:17 发表
做了好久的SMP环境下的包转发,总结几点:
1. 对于普通网卡Linux协议栈无法进行实质上的多CPU负载均衡,需要支持RSS(多队列)的网卡,千兆比如intel 82575/6,万兆如intel 82598等。网卡对数据流进行hash然后分配到多个队列上,每个队列对应一个msi-x中断vector。这样就真正实现了多CPU同时处理协议栈。
2. linux内核从2.6.23开始支持多队列的网卡,到2.6.27才完整支持(仍需要hack达到性能最优),主要是NAPI结构的修改和Qdisc的多队列化。这种情况下在nehalem之前的平台上,万兆网卡测试转发时FSB成为瓶颈(多CPU争用)。
3. Nehalem可以解决FSB的问题,万兆多队列卡转发可以做到500万pps,此时PCIE的pps成为瓶颈。
4. 继续上升可能需要PCIE v2.0 的支持,或者像某些NP架构中使用专用总线避开PCIE的瓶颈。
...



这是一种硬件方案。


软件上可以模拟这个方案,把RSS这种东西在协议栈级别实现,Solaris叫fanout, 基于连接来负载均衡。

[ 本帖最后由 Solaris12 于 2009-5-20 13:33 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-05-20 17:38 |显示全部楼层
原帖由 terryfe 于 2009-5-20 17:13 发表
fanout机制确实是想多利用sparc的CMT技术,但是目前还是受制于PCIE总线的限制,至少我用ixgbe的硬件hash在opensolaris上只能做到160wpps(进行了大量hask....)。
NIU那块走专用总线的卡应该可以解决该问题,但是现在的内核协议栈支持好像还差不少....

软件实现的问题可能在于用于分发的CPU很可能成为瓶颈,因为同时只能有一个CPU来做这件事情,sparc的主频低啊== .....
不过一直没时间去试solaris在x86上软RSS实现的表现,不过想做到单机万兆线速只能上硬件了..
...


NIU + Crossbow的bug还很多呢。

如果是single ring的话, fanout的确是一个CPU做,但多个队列的时候,如果用pcitool把中断放到不同的core,理论上每个接收中断上来的CPU都可以做吧。

论坛徽章:
0
3 [报告]
发表于 2009-05-21 12:14 |显示全部楼层
原帖由 terryfe 于 2009-5-20 17:50 发表

前提就是硬件的多队列嘛。所以软RSS的实现在高压力下治标不治本啊...


嗯,关键是目前CPU的核数远远多于NIC的RING的数目。

即便是ixgbe这样的硬件,64个ring,但只有16个MSI-X vector.

目前Solaris ixgbe网卡属于起步阶段,Crossbow刚做完第一阶段,未来协议栈充分利用多核的工作还有很多事情要做。不出几年,上千个硬件线程就会出现,所以,两者是要结合使用的。

论坛徽章:
0
4 [报告]
发表于 2009-05-21 14:17 |显示全部楼层
原帖由 ShadowStar 于 2009-5-21 14:05 发表


Solaris12做Sparc下开发的?

x86下的CPU核数还是不多的。


两个平台都搞一点。


x86也越来越强了。八核 Nehalem EX,  Dula socket的服务器马上就出来了,到时候16个核,不过Intel的网卡也升级了,128个ring,. 中断vector估计也多了。

论坛徽章:
0
5 [报告]
发表于 2009-05-21 14:18 |显示全部楼层
原帖由 terryfe 于 2009-5-21 14:17 发表

至少现在想达到万兆线速的话不需要那么多核..
等到出40GE,100GE的时候估计就用得上了


嗯,总线到时候也肯定升级啊,这是配套的,

而且系统里不会只有一块万兆卡吧,还有其他设备呢。如果核太少了,多个设备中断共享一个CPU, 也不好。

[ 本帖最后由 Solaris12 于 2009-5-21 14:25 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-06-07 23:19 |显示全部楼层
原帖由 platinum 于 2009-6-6 10:15 发表

意思是说,即使我们用 standard kernel 不做任何 hack,使用 82576 配上其 igb 驱动就可以实现多 CPU 负载均衡了吗?


理论上是的,靠的就是Multiple RX/TX queue + Multiple MSI-X vector+ Receive Side Scaling.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP