nic - XL710如何设置RSS hash函数接收IPv4流类型?

标签 nic dpdk

在 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_IPV4ETH_RSS_NONFRAG_IPV4_TCP 选项,则连接的一些碎片数据包将落入另一个队列,因为它们没有 L4 端口号。如果您排除 ETH_RSS_NONFRAG_IPV4_TCP 函数,则 ETH_RSS_FRAG_IPV4 哈希函数将不会应用于非碎片数据包,这些数据包将进入队列 0。所有其他哈希函数组合都不会工作。那么,我们应该怎么做呢?

最佳答案

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

Functions that require the Hash (RSS) filters on IPv4 packets should set all IPv4 PCTYPEs in the PFQF_HENA / VFQF_HENA (PCTYPEs 31, 33…36)

英特尔® 以太网 Controller 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 IPv4NonFIPv4, Other 的默认输入集是 IP4-S 和 IP4-D。所以不需要修改。请记住修改所有其他 IPv4 流输入集和它们的对称质量。

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

关于nic - XL710如何设置RSS hash函数接收IPv4流类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42342723/

相关文章:

linux - 具有两个 NIC 卡的 Glassfih 和 Apache 配置

dpdk - rte_eal_init 的完整有效参数集是否记录在任何地方?

linux - DPDK 应用程序停止后无法修改大页面大小

linux - 无法在 CentOS 6 上使用绑定(bind)绕过网关

hash - DPDK Hash 无法从辅助进程中查找数据

c - 如何在基于 dpdk 的应用程序中启用 Debug模式?

c - 区分 VMware 网络适配器与物理网络适配器 - 或 - 检测虚拟网络适配器

linux - ubuntu 14.04 无法连接网络并找到 eth0

variables - 在 Terraform 中,我可以选择是否根据不同的变量来寻址变量吗?网卡,动态静态