XL710 的行为与 DPDK 中的约定不兼容。因此,您必须直接使用 i40e 驱动程序提供的 API 才能为 ETH_RSS_IPV4 设置 RSS。如英特尔® 以太网控制器 710 系列规范更新,第 18 页(2017 年 1 月发布)中所述:
需要对 IPv4 数据包进行散列 (RSS) 过滤器的功能应该
在 PFQF_HENA / VFQF_HENA 中设置所有 IPv4 PCTYPEs (PCTYPEs 31, 33…36)
英特尔® 以太网控制器 710 系列数据表第 597 和 598 页(2017 年 1 月发布)中提到了支持的数据包类型 (PCTYPE)。您可以看到没有为 IPv4 定义数据包类型。
但是有一个解决方案。线索是为所有需要的流类型(或数据包类型)修改输入集。让我们用DPDK在app文件夹中提供的testpmd工具试试吧。编译 DPDK 和应用程序后,运行 testpmd 应用程序:
./app/test-pmd/testpmd -c ff -n 2 -w 0a:00.0 -w 0a:00.1 -- -i --rxq=4 --txq=4
我们的系统中有两个 XL710。使用以下命令,您可以将 XL710 配置为您希望支持 IPv4 数据流的行为。
port config all rss all
set_hash_input_set 0 ipv4-tcp src-ipv4 select
set_hash_input_set 0 ipv4-tcp dst-ipv4 add
set_hash_input_set 0 ipv4-udp src-ipv4 select
set_hash_input_set 0 ipv4-udp dst-ipv4 add
set_hash_input_set 1 ipv4-tcp src-ipv4 select
set_hash_input_set 1 ipv4-tcp dst-ipv4 add
set_hash_input_set 1 ipv4-udp src-ipv4 select
set_hash_input_set 1 ipv4-udp dst-ipv4 add
set_hash_global_config 0 default ipv4-frag enable
set_hash_global_config 0 default ipv4-tcp enable
set_hash_global_config 0 default ipv4-udp enable
set_hash_global_config 1 default ipv4-frag enable
set_hash_global_config 1 default ipv4-tcp enable
set_hash_global_config 1 default ipv4-udp enable
它通过删除 L4 端口部分为 TCP 和 UDP 流类型选择正确的输入集。 set_hash_global_config 命令在需要时启用对称哈希。通过修改 TCP 输入集,它的行为就像 Frag IPv4 流类型,因此属于同一连接的所有数据包都进入同一个 lcore。
请注意,Frag IPv4 和 NonFIPv4, Other 的默认输入集是 IP4-S 和 IP4-D。所以不需要修改。请记住修改所有其他 IPv4 流输入集和它们的对称质量。
您可以通过查看 testpmd 应用程序的源代码找到这些命令的 API 函数。