我使用 Mellanox connectX-5 100G NIC 来运行具有 IPV4 巨型帧 9000 字节的应用程序。 我能够发送巨型帧数据包,但无法在 RX 端接收巨型帧数据包。我正在使用 DPDK 21.11.3。
这是我的
ethtool -i NIC
命令输出:
driver: mlx5_core
version: 5.4-3.4.0
firmware-version: 16.33.1048 (NXE0000000005)
expansion-rom-version:
bus-info: 0000:65:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: yes
这是我的接收和发送卸载功能,
const struct rte_eth_conf default_port_conf = {
.rxmode = {
.split_hdr_size = 0,
.max_lro_pkt_size = 9614, //this is for DPDK-21.11.3
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
.offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_UDP_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM | DEV_TX_OFFLOAD_MULTI_SEGS),
},
};
这是我用来运行我的应用程序的命令
./application -c 0xfffefffe -n 8 -a 0000:65:00.0,mprq_en=1,rxqs_min_mprq=1,mprq_log_stride_num=9,txq_inline_mpw=128 -a 0000:65:00.1,mprq_en=1,rxqs_min_mprq=1,mprq_log_stride_num=9,txq_inline_mpw=128 -a 0000:66:00.0,mprq_en=1,rxqs_min_mprq=1,mprq_log_stride_num=9,txq_inline_mpw=128 -a 0000:66:00.1,mprq_en=1,rxqs_min_mprq=1,mprq_log_stride_num=9,txq_inline_mpw=128 -d librte_mempool_ring.so -d librte_net_mlx5.so -- -m [2:3].0,[4:5].1,[6:7].2,[8:9].3,
当我运行此命令时,我在控制台中看到此日志
mlx5_net: Port 0 MPRQ is requested but cannot be enabled
(requested: pkt_sz = 1646, desc_num = 256, rxq_num = 1, stride_sz = 1, stride_num = 512
supported: min_rxqs_num = 1, min_buf_wqe_sz = 16384 min_stride_sz = 64, max_stride_sz = 8192).
Rx segment is not enable.
我遵循了此参考链接,但面临同样的问题(无法在 RX 端接收巨型帧),
启用巨型、分散和多分段时,ConnectX-5 DPDK 性能会下降
我还需要验证什么才能使其正常工作吗?! 谢谢,
应用程序应通过 rte_eth_dev_set_mtu
明确设置 MTU
,无论是在启动端口之前还是在启动状态。
rx_burst_vec
,根据文档,这会阻止使用大MTU。为了启用大 MTU 支持,应传递设备参数
rx_vec_en=0
(例如,
-a 0000:65:00.0,rx_vec_en=0
)。