3

在 DPKD 中ETH_RSS_IPV4,XL710 Intel NIC 的数据流默认不激活。因此,当您想在 lcore 之间分发数据包时,您必须选择 XL710 支持的其他 IPv4 数据流,即ETH_RSS_FRAG_IPV4ETH_RSS_NONFRAG_IPV4_TCPETH_RSS_NONFRAG_IPV4_UDPETH_RSS_NONFRAG_IPV4_SCTPETH_RSS_NONFRAG_IPV4_OTHER。但是,当您处理分段的 IP 数据包时,您将面临一个愚蠢的问题。如果您选择使用ETH_RSS_FRAG_IPV4andETH_RSS_NONFRAG_IPV4_TCP选项,则连接的一些碎片数据包将落入另一个队列,因为它们没有 L4 端口号。如果排除ETH_RSS_NONFRAG_IPV4_TCP函数,则ETH_RSS_FRAG_IPV4散列函数将不会应用于非分段数据包,这些数据包将进入队列 0。所有其他散列函数组合将不起作用。那么,我们应该怎么做呢?

4

1 回答 1

4

XL710 的行为与 DPDK 中的约定不兼容。因此,您必须直接使用 i40e 驱动程序提供的 API 才能为 ETH_RSS_IPV4 设置 RSS。如英特尔® 以太网控制器 710 系列规范更新,第 18 页(2017 年 1 月发布)中所述:

需要对 IPv4 数据包进行哈希 (RSS) 过滤器的函数应在 PFQF_HENA / VFQF_HENA (PCTYPEs 31, 33…36) 中设置所有 IPv4 PCTYPE

英特尔® 以太网控制器 710 系列数据表第 597 和 598 页(2017 年 1 月发布)中提到了支持的数据包类型 (PCTYPE )。您可以看到没有为 IPv4 定义的数据包类型。

不过有一个解决办法。线索是修改所有需要的流类型(或数据包类型)的输入集testpmd让我们用DPDK在app文件夹中提供的工具来试试吧。编译 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 IPv4NonFIPv4、Other的默认输入集是 IP4-S 和 IP4-D。所以不需要修改。请记住修改所有其他 IPv4 流输入集和它们的对称质量。

您可以通过查看 testpmd 应用程序的源代码找到这些命令的 API 函数。

于 2017-02-20T11:59:27.100 回答