0

我用的是ConnectX-5网卡。
我有一个DPDK我想要支持的应用程序jumbo packets
为此,我添加了 rx 卸载功能:DEV_RX_OFFLOAD_JUMBO_FRAMEDEV_RX_OFFLOAD_SCATTER
tx 卸载功能:DEV_TX_OFFLOAD_MULTI_SEGS
我还将其设置得max_rx_pkt_len更高,因此它将接受巨型数据包(9k)。
我注意到添加这些卸载功能+增加max_rx_pkt_len危害性能。
例如,没有这些卸载标志,我可以重定向80Gbps大小为 512 的数据包而不会丢失任何内容。
使用这些标志减少到~55Gbps没有损失。
我正在使用DPDK 19.11.6.
目前在这个测试中我不发送巨型数据包。我只是想了解它如何影响平均数据包大小。

这是预期的吗?使用这些卸载标志会降低性能吗?
谢谢

- 编辑 -

端口配置:

const struct rte_eth_conf port_conf = {
        .rxmode = {
                .split_hdr_size = 0,
                .offloads = DEV_RX_OFFLOAD_JUMBO_FRAME | DEV_RX_OFFLOAD_SCATTER,
                .max_rx_pkt_len = 9614;
        },
        .txmode = {
                .mq_mode = ETH_MQ_TX_NONE,
                .offloads = DEV_TX_OFFLOAD_MULTI_SEGS
        },
        .intr_conf.lsc = 0
};

- - 更多信息 -

# lspci | grep Mellanox
37:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
37:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]

# lspci -vv -s 37:00.0 | grep "Part number" -A 3
            [PN] Part number: P23842-001
            [EC] Engineering changes: A6
            [SN] Serial number: IL201202BS
            [V0] Vendor specific: PCIe EDR x16 25W
4

1 回答 1

0

通过使用 MLX5 的 DPDK 21.11.0 LTS,我能够使用具有 1 个 CPU 内核的单个 RX 队列以线速发送接收 8000B。而对于较小的数据包大小,如 64B、128B、256B 和 512B(启用 JUMBO 帧支持),我通过正确的配置达到了线路速率。因此强烈建议使用 dpdk 21.11 或使用 LTS drop,因为它包含 MLX5 NIC 的修复和更新,因为它可能是 DPDK 19.11.6 可能缺少潜在的修复(在 mlx5 中有对 mprq 和矢量代码的返工)。

在此处输入图像描述

具有 1 个 RX 和 1 个 TX 队列的数据包吞吐量: 在此处输入图像描述

注意:使用以下参数,我只能使用支持 MLX5 的 NIC 接收和发送巨型帧mprq_en=1,rxqs_min_mprq=1,mprq_log_stride_num=9,txq_inline_mpw=128

要遵循的步骤:

  1. 下载 dpdk 使用wget http://fast.dpdk.org/rel/dpdk-21.11.tar.xz

  2. 使用构建 dpdktar xvf dpdk-21.11.tar.xz; meson build, ninja -C build install; ldconfig

  3. 修改 L2fwd 等 DPDK 示例代码以支持 JUMBO 帧(参考下面的代码)

  4. 在 MLX5 NIC 上启用至少9000B的 MTU。

  5. 使用 ixia, spirent, packeth, ostaniato, xiena 或 dpdk-pktgen 发送 JUMBO 帧。

l2fwd 修改以支持 DPDK 21.11.0 中的 JUMBO:

 95 static struct rte_eth_conf port_conf = {
 96         .rxmode = {
 97         .max_lro_pkt_size = 9000,
 98         .split_hdr_size = 0,
 99         },
100         .txmode = {
101         .mq_mode = ETH_MQ_TX_NONE,
102         .offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM |
103                      DEV_TX_OFFLOAD_MULTI_SEGS),
104         },
105 };
于 2022-03-01T16:29:35.650 回答