我正在购买 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 或任何其他工具中验证每个环的接收率?