产品新闻
Intel 以太网Flow Director技术上手指南
[2017-10-10]
By Robison, Clayne B (Intel)

 

简介
无论是应用、容器还是微服务,Intel® Ethernet Flow Director (Intel® Ethernet FD)  技术都可将以太报文精准送达使用它的进程所在的CPU核,。这比RSS(Receive Side Scaling)更进一步,RSS只是将包送到相应的核做中断处理,然后转发给需要它的进程。
Intel Ethernet Flow Director技术支持定制化的过滤器,以便将收到的包分发给不同的队列,并且也支持非常精准的流控。它能将包流与CPU核心对应起来,并且支持多个弹性的流分类以及负载均衡的参数。在ATR (Application Targeting Routing)的模式下,如果需要利用硬件来做Linux的RFS (Receive Flow Steering) 的Offloading,FD是必须的,同时RPS (Receive Packet Steering) 和RFS需要被关闭。
它可以对物理机的Linux做非常好的优化,尤其是包很小并且吞吐量很大的时候。因为包处理已经offloading到了网卡硬件,同时Intel FD技术也可以用来防止DoS攻击。
 
支持的设备
Intel 以太网FD技术支持在使用ixgbe驱动的设备,包括:
       •  英特尔® 以太网聚合网络适配器X520
       •  英特尔® 以太网聚合网络适配器X540
       •  英特尔® 以太网控制器82599家族
也支持使用i40e驱动程序的设备上
       •  英特尔® 以太网控制器X710家族
       •  英特尔® 以太网控制器XL710家族
 
同时,Data Plane Development Kit (DPDK) 对上述设备也有支持,关于如何使用 DPDK 启用FD请参见 DPDK文档 。
要判断你的设备是否支持FD技术,使用ethtool命令来检查:
# ethtool --show-features <interface name> | grep ntuple
 
如果ntuple-filters功能旁显示了off或者on,就表示你的网卡支持FD技术。如果ntuple-filters旁边显示的 [fixed],表示你的网卡设备不支持FD。
 
启用Intel® Ethernet Flow Director
ixgbe支持的驱动程序参数
在ixgbe驱动支持的设备上,有两个FD相关的参数可以在加载阶段被传递到Linux Kernel
•  FdirPballoc
•  AtrSampleRate
> FdirPballoc
这个参数规定了分配给FD的包缓存大小,可以选择1-3, “1”表示缓存使用64k,“2”表示128k,“3”表示256k。如果参数没有被显式指定,默认就是1,即64k。
> AtrSampleRate
AtrSampleRate参数指定了规则被创建之前需要忽略多少个网络包,可变范围是0~255。如果没有显式指定该参数,默认值为20,意味着如果要创建一条新的报文流规则,每次第20个新的包会被做一次判断。如果该参数指定为0,表示关闭ATR模式,并且发送队列里面也不会拿任何包作为包流规则的样本。
注:上述两个驱动参数在i40e的驱动上不需要被用到,驱动自己会做调整。
要启用这些参数,首先移除驱动。(注意,如果你是通过SSH连接服务器,这可能会让你断网)
# rmmod ixgbe
然后重新加载ixgbe驱动并且给相应的参数:
# modprobe ixgbe FdirPballoc=3,2,2,3 
AtrSampleRate=31,63,127,255
可以看到上面的命令中每个参数有四个值。这是因为我的测试系统中有两张卡,82599与X540,每张卡有两个网口。这会按照PCI设备的BDF (Bus/Device/Function) 排序来应用到不同的网口。用下面的命令可以看到系统的BDF顺序。
# lshw -c network -businfo
 
基于这样的系统配置,用上面的modprobe命令会给X540-AT2 (3:00.0) 分配FdirPballoc和AtrSampleRate的值分别是3和31,相应的,82599 (81:00.1) 的一个端口能拿到3和255的参数
一旦确定你的Intel品牌的服务器网卡支持FD技术,并且你已经给驱动相应的参数,执行下面的命令去启用FD:
# ethtool --features enp4s0f0 ntuple on
 
因为这个命令只指示了哪个Rx队列应该被送到,理论上接下来应该将Rx队列和进程、应用或者容器去做绑定。这已经超出了本文档的讨论范围,但这个可以用taskset命令来完成。绑定IRQ与CPU可以用set_irq_affinity脚本(已经包含在i40e和ixgbe的驱动中)来做,在这里可以找到最新版本的驱动 Intel Support: Drivers and Software 。
IRQ Affinity设置可以在这个tuning guide文档的IRQ Affinity的段落找到 。
 
使用Intel Ethernet Flow Director技术
FD技术有两种运行模式:外部编程(EP)模式与ATR模式。只要我们通过上面的步骤启用了FD,默认就启动了ATR模式,让驱动进入多发送队列模式。如果运行在EP模式,用户或者管理编排软件可以手动的设置包的走向。
应用导向路由 (Application Targeting Routing)
在ATR模式中, FD从Tx队列里拿到外发包的字段去填充8K的完美匹配过滤(Perfect-Match Filter)表。选择哪些包的字段取决于包的类型,比如过滤TCP的字段会和UDP的不同。FD会用完美匹配过滤表去智能路由收包到不同的Rx队列。
如果要禁用ATR模式切换到EP模式,简单的用ethtool命令添加一条过滤规则 (下方Adding Filters章节),驱动会自动的切换进入EP模式。如果要切换回到ATR模式,使用ethtool命令清空规则即可(下方Removing Filters 章节)。
外部编程模式(Externally Programmed Mode)
当FD运行在EP(External Programmed)模式,包流可以被手动的管理,可以是管理员输入的规则,也可以是外部的编排管理软件(比如OpenFlow)。像上面说过的一样,只要通过ethtool命令手动输入一条流的规则,FD就会自动进入EP模式。
> Adding Filters
下面的命令展示了如何增加过滤表,使用ethtool的-U, -N or –config-ntuple等等参数
指定从10.23.4.6到10.23.4.18的包使用4号队列,用下面的命令:
# ethtool --config-ntuple flow-type tcp4 src-ip 10.23.4.6 dst-ip 10.23.4.18 action 4
注意:不用’loc’参数,这个规则会放在完美匹配过滤表的1号位置,如果1号位置已经有规则,就会被覆盖掉
转发2号队列所有来自192.168.10.1:2000的ipv4 TCP包到192.168.10.2:2001,这条规则放在33号位置(会覆盖原来在33号的规则,如果有的话)
# ethtool --config-ntuple <interface name> flow-type tcp4 src-ip 192.168.10.1 dst-ip 192.168.10.2 src-port 2000 dst-port 2001 action 2 loc 33
Drops all UDP packets from 10.4.83.2:
丢弃所有来自10.4.83.2的所有UDP报文:
# ethtool --config-ntuple flow-type udp4 src-ip 10.4.82.2 action -1
注意:VLAN字段在i40e的驱动中不支持(XL710 & X710)
参看ethtool的手册看看-U, -N 或者—config-ntuple选项的更多用法
注意:Intel的XL710和X710网卡可以提供扩展的云过滤规则给复杂的云网络环境,详细内容请点击文章末尾“引用文档”中i40e文档链接。
> Removing Filters
在EP模式下,可以用下面的命令移除已经保存的规则:
# ethtool --config-ntuple <interface name> delete N
> Listing Filters
EP模式下罗列相应网口已经采用的规则,使用下面的命令
# ethtool --show-ntuple <interface name>
 
关闭FD技术
关闭Intel FD可以使用这条命令,这同时也会清除所有已有的规则:
# ethtool --features enp4s0f0 ntuple off
 
结论
Intel的以太网FD技术能将以太网报文精准送达使用它的进程所在的CPU核心,无论该进程是应用、容器还是微服务。这比RSS更进一步,RSS只是将包送到相应的核做中断处理,然后转发给需要它的进程。FD可以被管理员或者控制面的软件显式的管理,或者智能自动的创建过滤规则表,通过对发包的取样来决定收包的规则。当处于ATR自动模式时,Intel以太网FD技术对于硬件Offload RFS是必须的。
Intel以太网FD可以带来性能提升,特别是当数据包很小并且吞吐量很大的时候(比如在电信运营商的环境中)。并且在网卡层面就能过滤并且丢弃报文,也可以被用来避免DoS攻击。
 
引用文档
DPDK文档(http://dpdk.org/doc/guides/howto/flow_bifurcation.html#using-flow-bifurcation-on-ixgbe-in-linux)
IRQ Affinity调整
(https://www.intel.com/content/dam/www/public/us/en/documents/reference-guides/xl710-x710-performance-tuning-linux-guide.pdf)
How to Set Up Intel® Ethernet Flow Director(https://software.intel.com/en-us/articles/setting-up-intel-ethernet-flow-director)
Intel® 82599 10 GbE Controller Datasheet(https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/82599-10-gbe-controller-datasheet.pdf)
ixgbe Linux* Base Driver for Intel(R) Ethernet Network Connection(ixgbe Linux* Base Driver for Intel(R) Ethernet Network Connection)
i40e Linux* Base Driver for the Intel(R) XL710 Ethernet Controller Family(https://downloadmirror.intel.com/26713/eng/Readme.txt)
Linux* Base Driver for the Intel(R) Ethernet 10 Gigabit PCI Express Familyof Adapters(https://downloadmirror.intel.com/22919/eng/README.txt)
 
文章摘自英特尔精英汇
欢迎联系宝通集团咨询英特尔产品信息
宝通集团联系方式
咨询热线:13510526731
宝通官网:www.ex-channel.com
客户垂询邮箱:cuifang.mo@ex-channel.com
客户垂询QQ:1627678462
地址:深圳市福田区深南大道1006号国际创新中心C座11楼
邮编:518026
粤ICP备17127798号 | 友情链接 | 联系我们 | 人才招聘