2. testpmd 简介:核心功能与定位

testpmd 是 DPDK 官方提供的 交互式数据平面调试工具,运行在用户态,无需内核驱动即可完成报文收发、转发和流规则测试。它是 DPDK 开发与运维中最常用的诊断工具,也是本课程定位丢包问题的核心操作环境。

2.1 testpmd 是什么

testpmd 基于 DPDK 的 librte_ethdev、librte_flow 和 librte_mbuf 库构建,是一个轻量级的多线程转发应用。它不依赖任何第三方协议栈,直接操作网卡硬件队列,适合在开发阶段验证网卡功能、调试流规则和排查性能瓶颈。

适用场景: 功能验证(流表下发是否生效)、性能摸底(单核/多核转发 PPS)、异常定位(队列丢包、硬件 offload 失效)。
testpmd 在 DPDK 生态中的位置 用户应用 (APP) testpmd dpdk-proc-info DPDK 核心库 (librte_ethdev / librte_flow / librte_mbuf) PMD 驱动 (ice / i40e / mlx5 / virtio ...) testpmd 直接调用 PMD 驱动,绕过内核协议栈,实现零拷贝高速转发

2.2 主要功能

testpmd 提供三大核心能力,覆盖数据面调试的完整链路:

功能分类 典型命令 / 操作 用途说明
发包 start tx_first / set txpkts 从指定端口连续发送固定长度或自定义报文,用于打流测试
收包 start / show port stats 启动转发内核,实时查看收包计数、丢包统计和队列分布
流规则测试 flow create / flow list / flow destroy 下发硬件流表规则,验证匹配/动作是否生效,定位规则失效原因
关键指标: testpmd 在单核 64B 小包场景下,通常能达到线速转发(如 25Gbps 端口约 37Mpps),若实际 PPS 远低于理论值,说明存在软件或硬件瓶颈。

2.3 与 dpdk-proc-info 的区别

dpdk-proc-info 是另一个 DPDK 官方工具,但定位与 testpmd 完全不同。下表从多个维度对比两者:

对比维度 testpmd dpdk-proc-info
主要用途 数据面功能调试、性能测试、流规则验证 运行时信息采集、统计导出、调试诊断
交互方式 交互式 CLI + 自动转发引擎 命令行一次性查询,不参与数据转发
是否收发报文 是,直接驱动网卡收发 否,只读取 DPDK 统计和状态
流规则操作 支持创建/删除/查询硬件流表 不支持流规则操作
典型输出 实时 PPS、队列统计、丢包计数 port info、ring 使用率、mbuf 池状态
适用阶段 开发调试、功能验证、性能调优 线上巡检、异常排查、事后分析
testpmd vs dpdk-proc-info 功能对比 testpmd ✓ 交互式 CLI ✓ 实时收发报文 ✓ 流规则创建/删除 ✓ 队列级丢包统计 ✓ 性能打流测试 dpdk-proc-info ✓ 一次性命令行查询 ✗ 不参与数据转发 ✗ 不支持流规则操作 ✓ 读取 ring/mbuf 状态 ✓ 线上巡检与诊断 互补

2.4 何时选择 testpmd

  • 流规则调试: 需要反复下发/删除硬件流表,观察匹配计数和动作效果。
  • 队列丢包定位: 需要查看每个队列的收发包计数、溢出丢包和硬件错误统计。
  • 性能基线测试: 在更换硬件或驱动后,用 testpmd 快速验证线速转发能力。
  • 功能验证: 验证 RSS、VLAN 过滤、checksum offload 等硬件特性是否正常。
注意: testpmd 不适用于长时间线上部署,因为它会独占网卡端口,且不具备协议栈处理能力。线上巡检建议使用 dpdk-proc-info 或自定义监控工具。