0

我正在购买 25Gbe 卡,目前正在评估该卡,我似乎无法让它接收 64 字节 UDP 或 TCP 数据包流量的 25G 流。收到大量丢包,dpdk-pktgen 说明它使用的内核数量与我设置的一样多。最难发现的是为什么数据包进入 MAC 但在到达物理层时被丢弃。这使我相信数据包接收的分散没有得到正确处理。让我相信 RSS 不会在 dpdk 下与设备一起发生。IRQ 分散在系统中使用的内核中,这些内核已被隔离以防止内核将作业置于它们之上,并且所有需要的调整似乎都表明它已经完成,并且事情应该继续进行,

运行命令初始化 dpdk-pktgen:

RTE_SDK=../dpdk_Src/share/dpdk/ sudo -E ./app/build/pktgen -c 0x555555555 -n 8 w 03:00.1 -- -T -m '[2-28:29-33].0' -N -P

我阅读了DPDK RSS提供的文档,但没有看到任何更改。我已经更改了 dpdk 源“$RTE_SDK/drivers/net/mlx5/mlx5-rss.c”中包含的实际驱动程序,并添加了它建议的密钥,我还操作了 pktgen-port-cfg.c 文件使用相同的指令更改以下代码片段

const struct rte_eth_conf default_port_conf = {
    .rxmode = {
            .split_hdr_size = 0,
            .header_split   = 0,    /**< Header Split disabled. */
            .hw_ip_checksum = 0,    /**< IP checksum offload disabled. */
            .hw_vlan_filter = 0,    /**< VLAN filtering enabled. */
            .hw_vlan_strip  = 0,    /**< VLAN strip enabled. */
            .hw_vlan_extend = 0,    /**< Extended VLAN disabled. */
            .jumbo_frame    = 0,    /**< Jumbo Frame Support disabled. */
            .hw_strip_crc   = 0,    /**< CRC stripping by hardware disabled. */
    },
    .rx_adv_conf = {
            .rss_conf = {
                    .rss_key = NULL,
                    .rss_key_len = 0,
                    .rss_hf = ETH_RSS_IP,
            },
    },
    .txmode = {
            .mq_mode = ETH_MQ_TX_NONE,
    }, };

更改 rx_adv_conf 以反映我想要使用的密钥,即。

.rx_adv_conf = {
            .rss_conf = {
                    .rss_key = "65da65da65da65da65da65da65da65da65da65da",
                    .rss_key_len = 40,
                    .rss_hf = ETH_RSS_IP,
            },
    },

问题是文档似乎声明只要设置了 rss_hf 参数,那么它将使用 RSS,如果没有明确说明,则内部定义。如果是这种情况,是否有办法在 pktgen、ethtool 或任何其他工具中验证每个环的接收率?

4

1 回答 1

0

ETH_RSS_IP 表示我们使用源 IP 和目标 IP 散列流。因此,为了利用 RSS,您生成的数据包应该具有不同的源/目标 IP。

于 2017-05-05T18:27:12.397 回答