1

所以我目前正在研究如何在 DPDK(数据平面开发工具包)中接收侧缩放 (RSS) 卸载工作。所以基本上根据我的理解,根据您选择的卸载,它计算一个哈希值并使用它来将您的数据包放置在一个特定的队列上进行处理,该队列绑定到一个特定的 CPU 核心。

所以我有两个关于这个的查询:

  • 当我使用 RSS 卸载时**ETH_RSS_IPV6_EX**,我无法获得零以外的哈希值,这意味着根据选择的 RSS 卸载,数据包被认为是无效的,即使我的 Mellanox 卡支持这种卸载。我已经发送了以下 Scapy 数据包,但哈希值仍然为 0: sendp(Ether(dst="AA:AA:BB:BB:CC:DD")/IPv6(dst="a:a:a:a:a:a:a:b",src="a:a:a:a:a:a:a:c",nh=60)/IPv6ExtHdrDestOpt(nh=43,options=HAO(hoa="a:a:a:a:a:a:a:d"))/IPv6ExtHdrRouting(nh=59,type=2,addresses=["a:a:a:a:a:a:a:e"]),iface="enp4s0f0",count=1)。(关于要操作的数据包,我从https://docs.microsoft.com/en-us/windows-hardware/drivers/network/rss-hashing-types#ndis_hash_ipv6_ex获得了这个资源,但我相信两者之间可能存在差异这些 RSS 卸载和 DPDK 拥有的那些。)这个EX术语在 RSS 卸载中是什么意思。

  • 除此之外,有人可以指出一个资源来解释 DPDK 中的 RSS 卸载,一次一个,其中一些如下(如果您了解这些,提供其中的一个笑话也可以有帮助):

    #define ETH_RSS_IPV4               (1ULL << 2)
    #define ETH_RSS_FRAG_IPV4          (1ULL << 3)
    #define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
    #define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
    #define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6)
    #define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
    #define ETH_RSS_IPV6               (1ULL << 8)
    #define ETH_RSS_FRAG_IPV6          (1ULL << 9)
    #define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
    #define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
    #define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12)
    #define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
    #define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
    #define ETH_RSS_IPV6_EX            (1ULL << 15)
    #define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
    #define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
    

请随时进行任何澄清或详细说明。

提前致谢。

Edit_1(回应 Vipin 的评论):

  1. 我在这个结构中启用 RSS (ETH_RSS_IPV6_EX):

    静态结构 rte_eth_conf port_conf = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, .max_rx_pkt_len = RTE_ETHER_MAX_LEN, .split_hdr_size = 0, .offloads = DEV_RX_OFFLOAD_CHECKSUM, }, .rx_adv_conf = { .rss_conf = { .rss_h, rss_key = ETH_NULL,IP //ETH_RSS_IP //Orignal, //AU: 改变哈希应用 }, }, .txmode = { .mq_mode = ETH_MQ_TX_NONE, }, };

  2. 我使用的 DPDK 版本是 20.08。

  3. 使用的 NIC 是 Mellanox ConnectX-5

  4. 我使用 DPDK l3fwd 应用程序作为基础并在其上进行测试。

4

2 回答 2

1

好的,所以我联系了 Mellanox 支持的人,他们回复说他们已经与他们的 DPDK 专家核实并报告他们不支持 RSS 卸载中的 IPv6 扩展标头支持,因此在IPV6_EX使用 RSS 卸载时计算零哈希的原因。

我问 Mellanox 的问题是关于 ConnectX-5 和 ConnectX-6。

感谢@Vipin 的支持。

于 2020-12-07T13:17:20.563 回答
0

正如评论中所解释的,ETH_RSS_IPV6_EX是一个通用的占位符。并非所有驱动程序都支持相同的。因此,根据 PMD,extended features将支持基于 SRC-IP/DST-IP 或部分字段的 RSS 等驱动程序和固件。ETH_RSS_IPV6_TCP如果 IPV6 中包含 TCP,则将使用示例,ETH_RSS_IPV6_TCP_EX如果 TCP 是扩展标头,则将使用该示例。

注意: igb 和 ixgbe 支持_EX,而 i40e 不支持,您检查intel NIC。DPDK邮件线程讨论。因此,不要期望每个 NIC 都为 RSS 设置相同的功能

于 2020-11-27T07:51:51.427 回答