DPDK 20.05版本l3fwd示例运行报错,请求排查解决
DPDK l3fwd启动失败:rte_eth_rx_queue_setup报错-22
环境信息
- DPDK版本:20.05(源码编译)
- 网卡:Mellanox ConnectX-5 虚拟功能(VF)网卡
- 已配置大页,通过
-b参数隔离SSH使用的PCI地址
报错现象
运行命令:
./dpdk-l3fwd -b $SSHADDR -l 1 -n 1 -- -p 0x1 --config="(0,0,1)"
出现核心报错:
Initializing rx queues on lcore 1 ... rxq=0,0,0 Invalid RX queue_id=0 EAL: Error - exiting with code: 1 Cause: rte_eth_rx_queue_setup: err=-22, port=0
错误指向rte_ethdev.c中的rte_eth_rx_queue_setup函数,提示dev->data->nb_rx_queues = 0,但testpmd可正常调用该函数创建RX队列。
问题原因
- VF队列资源未分配:Mellanox ConnectX-5的VF默认队列数可能为0,物理功能(PF)侧未为VF配置足够的RX/TX队列资源,导致l3fwd无法创建队列。
- 驱动参数缺失:DPDK 20.05的mlx5驱动需要显式指定VF的队列数参数,否则无法识别可用队列。
- 配置不匹配:l3fwd的
--config参数要求使用队列0,但VF实际无可用队列,触发参数无效错误(err=-22对应EINVAL)。
解决方法
1. 配置PF侧的VF队列数
在PF所在节点执行以下操作:
- 查看当前PF的VF队列配置:
mlxconfig -d <PF_PCI_ADDR> q - 设置VF的RX/TX队列数(例如设为4):
mlxconfig -d <PF_PCI_ADDR> set NUM_OF_VF_RX_QUEUES=4 NUM_OF_VF_TX_QUEUES=4 - 重启网卡或系统使配置生效:
ip link set <PF_INTERFACE> down && ip link set <PF_INTERFACE> up
2. 修改l3fwd启动命令
显式指定mlx5驱动的队列数参数,确保VF能识别可用队列:
./dpdk-l3fwd -b $SSHADDR -l 1 -n 1 --vdev 'net_mlx5,pci=XXXX:00:02.0,rx_queue_num=1,tx_queue_num=1' -- -p 0x1 --config="(0,0,1)"
替换XXXX:00:02.0为你的VF PCI地址。
3. 验证VF队列能力
使用testpmd确认VF的可用队列数:
./dpdk-testpmd -b $SSHADDR -l 1 -n 1 -- --port-topology=chained
进入testpmd交互界面后执行:
show port info 0
查看Max possible RX queues和Max possible TX queues的值,确保大于0。
4. 确认DPDK编译配置
确保编译DPDK时启用了mlx5驱动:
meson configure -Ddrivers=net/mlx5 build ninja -C build
如果之前编译未包含mlx5驱动,重新编译后再测试。
内容的提问来源于stack exchange,提问作者DPKD_Learner
相关产品推荐
相关产品推荐

