免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 26677 | 回复: 28
打印 上一主题 下一主题

多队列网卡RSS与RPS的配置 [复制链接]

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-29 11:32 |只看该作者 |倒序浏览
4核心CPU,网卡(82580)队列设置为4个队列。
在开启RPS的情况下,是否有必要将4个队列的中断指定到不同的CPU上?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2012-02-29 11:44 |只看该作者
回复 1# 瀚海书香
先说一下个人的观点:
可以将不同的队列中断指定到不同的CPU,充分利用RRS的特点。
但是由于数据包大部分的处理在软中断和应用层,所以即使不使用的RRS,由于RPS/RFS仍然会将数据包分发到各个CPU处理,所以跟开启RSS的情况相比,性能应该不会差距太大。

   

论坛徽章:
0
3 [报告]
发表于 2012-02-29 16:41 |只看该作者
瀚海书香 发表于 2012-02-29 11:32
4核心CPU,网卡(82580)队列设置为4个队列。
在开启RPS的情况下,是否有必要将4个队列的中断指定到不同的 ...


如果是 TCP/UDP 应用,建议开启RFS,可以将stream导入到期望的CPU上。而RSS仅仅是根据hash值确定处理器。
由于RFS/RSS都不能提供irq affinity hint,所以使用irqbalance足够。

论坛徽章:
0
4 [报告]
发表于 2012-03-01 21:15 |只看该作者
回复 1# 瀚海书香


    驱动自己来设置affinity, 不用用户自己制定的

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
5 [报告]
发表于 2012-03-02 08:22 |只看该作者
回复 4# rocky1972
很遗憾,并不是所有的操作系统都会这么做的。而且开启中断均衡能否提高效率还是一个问题?因为简单的硬中断均衡可能会导致数据包乱序

   

论坛徽章:
0
6 [报告]
发表于 2012-03-02 09:24 |只看该作者
瀚海书香 发表于 2012-03-02 08:22
回复 4# rocky1972
很遗憾,并不是所有的操作系统都会这么做的。而且开启中断均衡能否提高效率还是一个问 ...


你硬件既然都支持多队列了,最好就不用软件了,再调度一次,多一次性能消耗。除非有非要再调度一次的必要理由。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
7 [报告]
发表于 2012-03-02 10:07 |只看该作者
回复 6# 独孤九贱
你硬件既然都支持多队列了,最好就不用软件了,再调度一次,多一次性能消耗。除非有非要再调度一次的必要理由。

但是硬件调度只是单纯的hash调度,而RFS可以根据sock来调度。
比如进程A运行在CPU1上,但是网卡队列却将数据包的软中断调度到CPU2上,那么缓存的效率就会降低。
而RFS却可以将属于A的数据包的软中断调度到CPU1上。

不知道RFS在缓存这块的优势与其因为调度而耗费CPU的劣势相比,那个会更好一些?

   

论坛徽章:
0
8 [报告]
发表于 2012-03-02 13:26 |只看该作者
瀚海书香 发表于 2012-03-02 10:07
回复 6# 独孤九贱

但是硬件调度只是单纯的hash调度,而RFS可以根据sock来调度。


硬件可以做perfect filters, 参考sfc卡,sfc有1024个perfect filters可以针对五元做精确的匹配。
另一个可以参考的是ixgbe, ixgbe有基于hash的filters也有perfect filters

sfc和ixgbe都可以和驱动协作:

sfc采用的是accelerate RFS方法,这种方法基于RFS,它讲软件维护的flow to cpu表,通过irq affinity逆向映射既cpu to vector表,得到一个flow to vector表,每个队列(确切的说是channel)都有自己的MSI-X映射,所以由此得到了flow to queue映射,这时候RFS通过驱动程序注册的回调函数,讲flow to queue映射翻译成网科可以理解的filter表项。通过这种方式,sfc可以讲packet直接发送给期望的cpu,避免的IPI带来的开销,而且管理员可以根据配置irq affinity。

ixgbe采用的是另外一种方法,他使用的的hash filter,并且尽可能的为每一个CPU分配独占的队列,这是通过:
1)在发送是基于smp_processor_id()取得tx queue的队列
2)接受端绑定irq affinity,尽可能的使映射为1:1映射
通过两种方式,每个CPU(在CPU总数不是太多时)有自己独占的队列。
另外ixgbe采用的是ATR(Application Target Receiving),既如果一个flow的packet最后是从CPU M(队列M)发送的,那在接受这个队列的包时也被放到队列M中由CPU M处理。可以参考ixgbe_atr()实现,ixgbe在包发送前,都会对82599的hash filter编程,确保该flow的包被送到发送的处理器。

两种方式各有千秋,很难说那种好。理论上说ixgbe可以被修改并使用accelerate RFS,反之亦然。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2012-03-02 14:41 |只看该作者
回复 8# crspo
按你所描述的ixgbe的情况,我认为就完全不需要RFS了,因为他已经可以做到基于sock或者说进程的分发了。
但是像e1000e这样的网卡驱动,貌似只是简单的hash吧,应该没有考虑到处理数据包进程所在的CPU的情况吧?

   

论坛徽章:
0
10 [报告]
发表于 2012-03-02 17:11 |只看该作者
瀚海书香 发表于 2012-03-02 14:41
回复 8# crspo
按你所描述的ixgbe的情况,我认为就完全不需要RFS了,因为他已经可以做到基于sock或者说进 ...


实际测试,软件重新调度,至少在高速网络上的性能损耗太大了……所以我一般不用,除非万不得已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP