DPDK19.11下XL710 i40e网卡开启TSO偶发丢包,求驱动调试方法
DPDK i40e驱动调试方案(针对TSO丢包场景)
1. 开启驱动调试日志
- 编译DPDK时,修改
config/common_base配置文件,将CONFIG_RTE_LIBRTE_I40E_DEBUG设为y,同时可开启CONFIG_RTE_LIBRTE_I40E_DEBUG_TX和CONFIG_RTE_LIBRTE_I40E_DEBUG_RX,重新编译DPDK。 - 运行应用前设置环境变量开启调试日志:
export RTE_LOG_LEVEL=RTE_LOG_DEBUG,重点关注TSO相关的Tx路径日志,包括分段逻辑、描述符填充、硬件寄存器交互等细节。
2. 校验TSO配置与参数合法性
- 用
dpdk-devbind.py --status确认网卡已正确绑定到DPDK驱动。 - 在应用中调用
rte_eth_dev_info_get获取设备信息,检查dev_info.tx_offload_capa是否包含DEV_TX_OFFLOAD_TSO;发送数据包时,确保mbuf->ol_flags已设置PKT_TX_TSO,且mbuf->tso_segsz符合XL710硬件支持的分段大小范围(参考Intel官方硬件手册)。 - 通过
dpdk-testpmd工具进入交互模式,执行show port <port-id> registers,检查TSO相关寄存器(如I40E_TXDQCTRL、I40E_TSO_CFG)的配置是否符合预期。
3. 抓包对比定位丢包环节
- 在物理网卡端口用
tcpdump抓取实际发出的数据包,同时在DPDK应用的Tx回调中打印mbuf关键信息(包长、TSO参数、mbuf状态),对比两者是否一致,判断丢包发生在驱动提交阶段还是硬件发送阶段。 - 使用
dpdk-pdump工具抓取驱动提交给硬件前的Tx队列数据包,和物理端口抓包对比,确认丢包是否出现在驱动到硬件的传输环节。
4. 驱动代码插桩调试
- 在i40e驱动Tx路径的核心函数(如
i40e_xmit_pkts、i40e_tso_segment)中添加打印,记录每个TSO包的分段数、描述符数量、mbuf指针、硬件返回的发送状态。 - 重点排查:mbuf处理是否存在内存越界或引用计数错误,描述符填充是否符合硬件规范,是否有未处理的硬件错误(如发送队列满、描述符格式错误)。
5. 硬件错误状态统计分析
- 定期调用
rte_eth_dev_get_stats获取端口统计,关注tx_errors、tx_dropped、tx_tso_errors等指标的变化,定位是否存在硬件层面的错误触发丢包。 - 用
dpdk-testpmd执行show port <port-id> stats查看详细统计,若特定错误计数持续增长,对应查找驱动中该错误的处理逻辑,定位根因。
6. 版本与固件验证
- 对比DPDK高版本(如20.11、21.11)的i40e驱动代码,提取TSO相关的修复补丁移植到19.11版本,验证是否解决丢包问题。
- 升级XL710网卡的固件到Intel官方最新稳定版,排除固件层面的潜在问题。
内容的提问来源于stack exchange,提问作者J.Heng
相关产品推荐
相关产品推荐

