各网卡对于FDIR的支持在DPVS中的应用

背景

在CPU单核时代,数据包经由网卡接收后均被送往唯一的CPU进行处理。随着多核时代到来,出现了负载均衡问题(某些core过载,而另一些core空载的情况)。为解决该问题,RSS(Receive Side Scaling)技术先通过hash操作将数据包发送到不同的core上进行中断处理,然后再经由core间转发将数据包发送到运行目的应用所在的core上。虽然负载看似在多core上均衡了,但由于hash的抗碰撞特性,大量数据包会被送到了不匹配的core上,因而数据包的core间转发成为性能瓶颈。
​​​​在这里插入图片描述

RSS通过计算包的五元组(sip、sport、dip、dport、protocol)的hash并取余,得到队列的index,然后将包放入这个队列,实现了数据包在各个队列之间的负载均衡,不过RSS不能保证回包也落在同一个队列上;

对称hash(symmetric hash: sip/sport和dip/dport交换后hash不变)可以部分解决该问题,但是对于一些需要做NAT的设备(比如负载均衡)就失效了,FDIR可以完全解决该问题。

Intel® 以太网Flow Director技术(Intel® Ethernet Flow Director,简称FDIR)将数据包定向发送到对应应用所在core上,从而弥补了RSS的不足,可用来加速数据包到目的应用处理的过程。

FDIR(Flow Director)的优先级高于RSS(Receive Side Scaling)

FDIR模式缺陷

FDIR模式

在这里插入图片描述
我的理解:

感觉 perfect mode,就是收到的报文的字段和配置的规则是完全匹配的。
signature mode,就是收到的报文的字段的hash 和 配置字段的 hash 是匹配的。
signature mode的优点是节省空间,不需要存储各个field,但是模糊匹配,不精确。

DPDK中FDIR相关测试:
https://doc.dpdk.org/dts/test_plans/fdir_test_plan.html

fdir容量限制

我的理解:

fdir 规则 和 网卡的收包缓冲区共享内存,共享内存的大小为 512K。
fdir 匹配的字段:sip、dip、ip proto、sport、dport;
fdir 规则,不可作用于 非 ip包,隧道包的内层,分片包;因为没有上诉的某个字段。

  • 82599 匹配FDIR的原理
    在这里插入图片描述
1> 过滤单元从来包中提取 相关元组(基于设置的fdir filter rule来提取元组)
2> 根据提取出的元组进行hash
3> 在hash 桶中查找,直到查找到,或者查找不到。
4> 查找到:
更新 fdir match 统计计数;
执行fdir filter rule动作(比如放入到指定的队列中)
注:fdir的优先级要低于 L2 filter/syn filter/5-tuple filter。
比如:非ip包的filter、tcp syn的filter 等优先于 fdir;
5> 查找不到;
更新 fdir dismatch 统计计数。
  • testpmd中FDIR设置
    在这里插入图片描述

–pkt-filter-size 其实就是 fdir_conf.pballoc :
设置的是 存放fdir filter的大小,目前看只有三种规格,64K,128K,256K;一般而言,默认是64K。

  • DPVS中FDIR应用

对于DPVS而言:
fdir_conf.pballoc 默认 64K,可以支持 2K个 perfect 模式的 filter 规则。
实际上

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值