DPDK 21.11升级后rte_eth_dev_configure在X722 NIC返回-22失败求助
DPDK 21.11
rte_eth_dev_configure返回-22(EINVAL)排查步骤 错误码-22对应EINVAL,即传入参数不合法,结合DPDK版本升级(17.02→21.11)和i40e驱动变更,按以下步骤排查:
1. 验证RX队列数是否超出设备上限
X722网卡的PF/VF队列数上限可能因DPDK驱动版本变化有调整,先通过代码获取设备支持的最大RX队列数:
struct rte_eth_dev_info dev_info; rte_eth_dev_info_get(port_id, &dev_info); printf("Max RX queues supported: %u\n", dev_info.max_rx_queues);
对比设置的4个RX队列是否超过该值。若超过,调整为设备支持的合法值。
2. 检查rte_eth_conf结构体参数兼容性
DPDK 17.02到21.11期间,rte_eth_conf结构体字段有多项变更,需确保参数符合新版本要求:
- RX多队列模式:新版本i40e驱动可能要求显式设置
rxmode.mq_mode,比如ETH_MQ_RX_RSS(若启用RSS),而非依赖默认值; - Offload配置:某些offload选项在新版本中被废弃或需显式配置,比如
rxmode.offloads需避免使用已标记为废弃的宏,确保与驱动支持的offload列表匹配(可通过dev_info.default_rx_offloads获取默认支持项); - MTU设置:若配置的MTU超出X722支持范围(最大通常为9700),会触发参数错误,需验证MTU值合法性。
3. 确认驱动与固件版本匹配
DPDK 21.11的i40e PMD对驱动和固件版本有明确要求:
- 检查i40e内核驱动版本:DPDK 21.11推荐i40e驱动版本≥2.10.17,当前使用的2.7.29版本过低,需升级至匹配版本;
- 固件版本:X722固件版本3.31需确认是否符合DPDK 21.11兼容要求,必要时升级固件。
4. 提升日志级别获取更详细错误信息
当前仅开启pmd级别日志,需同时开启EAL的debug日志以捕获更多错误细节:
./your_app --log-level=eal,8 --log-level=pmd,8
或在代码中调用rte_strerror(rte_errno)打印具体错误描述:
int ret = rte_eth_dev_configure(port_id, rx_q_num, tx_q_num, &conf); if (ret < 0) { printf("Configure failed: %s\n", rte_strerror(rte_errno)); }
5. 检查设备绑定状态
升级DPDK后,需确保网卡正确绑定至DPDK兼容的用户态驱动(如vfio-pci,DPDK 21.11推荐使用vfio-pci而非老旧的igb_uio):
dpdk-devbind.py --status
若绑定至错误驱动,重新绑定:
dpdk-devbind.py -b vfio-pci <pci_address_of_x722>
6. 验证端口配置的设备针对性
确认rte_eth_dev_configure调用的端口ID对应X722网卡,而非82574L千兆网卡(后者队列数上限可能更低)。可通过rte_eth_dev_get_info获取端口的PCI地址,与lspci输出对比验证。
内容的提问来源于stack exchange,提问作者shiv chittora
相关产品推荐
相关产品推荐

