2. testpmd 简介:核心功能与定位
testpmd 是 DPDK 官方提供的 交互式数据平面调试工具,运行在用户态,无需内核驱动即可完成报文收发、转发和流规则测试。它是 DPDK 开发与运维中最常用的诊断工具,也是本课程定位丢包问题的核心操作环境。
2.1 testpmd 是什么
testpmd 基于 DPDK 的 librte_ethdev、librte_flow 和 librte_mbuf 库构建,是一个轻量级的多线程转发应用。它不依赖任何第三方协议栈,直接操作网卡硬件队列,适合在开发阶段验证网卡功能、调试流规则和排查性能瓶颈。
适用场景: 功能验证(流表下发是否生效)、性能摸底(单核/多核转发 PPS)、异常定位(队列丢包、硬件 offload 失效)。
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 池状态 |
| 适用阶段 | 开发调试、功能验证、性能调优 | 线上巡检、异常排查、事后分析 |
2.4 何时选择 testpmd
- 流规则调试: 需要反复下发/删除硬件流表,观察匹配计数和动作效果。
- 队列丢包定位: 需要查看每个队列的收发包计数、溢出丢包和硬件错误统计。
- 性能基线测试: 在更换硬件或驱动后,用 testpmd 快速验证线速转发能力。
- 功能验证: 验证 RSS、VLAN 过滤、checksum offload 等硬件特性是否正常。
注意: testpmd 不适用于长时间线上部署,因为它会独占网卡端口,且不具备协议栈处理能力。线上巡检建议使用 dpdk-proc-info 或自定义监控工具。