2. testpmd 基础命令行与交互模式:启动参数解析、交互式Shell入门、常用help命令
testpmd 是 DPDK 生态中最核心的调试与性能测试工具。它既支持通过命令行参数一次性完成配置并启动,也支持在运行过程中通过交互式 Shell 动态调整转发行为、流规则和统计信息。掌握 testpmd 的启动参数与交互模式,是后续进行流规则配置和丢包分析的基础。
学习目标: 本章将带你掌握 testpmd 的两种运行模式(命令行模式与交互模式)、核心启动参数的解析方法,以及交互式 Shell 中常用的 help 命令体系。学完本章,你将能够独立启动 testpmd 并完成基本的运行状态查询。
2.1 testpmd 的两种运行模式
testpmd 支持两种运行模式,分别适用于不同的调试场景:
| 模式 | 启动方式 | 适用场景 | 特点 |
|---|---|---|---|
| 命令行模式 | 启动时携带所有参数,自动运行 | 自动化测试、批量回归、性能基线测试 | 启动即运行,无需人工干预;参数固化在脚本中 |
| 交互模式 | 启动时加 -i 或 --interactive |
调试阶段、流规则动态调整、丢包现场分析 | 实时输入命令,即时查看结果;支持动态修改配置 |
常见误区: 很多初学者在交互模式下忘记加
-i 参数,导致 testpmd 启动后直接进入转发状态,无法输入命令。此时只能通过 Ctrl+C 终止进程后重新启动。
2.2 启动参数解析
testpmd 的启动参数可以分为三类:EAL 参数、testpmd 核心参数 和 转发配置参数。EAL 参数必须位于所有参数的最前面,与 testpmd 参数之间用 -- 分隔。
2.2.1 典型启动命令示例
# 命令行模式:启动后直接开始转发
./dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x3 --nb-cores=2 --forward-mode=io
# 交互模式:启动后进入 Shell 等待用户输入
./dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x3 --nb-cores=2 --forward-mode=io
2.2.2 核心参数速查表
| 参数 | 示例值 | 说明 |
|---|---|---|
-l |
0-3 |
指定使用的逻辑核列表(EAL 参数) |
-n |
4 |
每个 NUMA 节点的内存通道数(EAL 参数) |
-- |
— | EAL 参数与 testpmd 参数的分隔符 |
-i |
— | 启用交互模式(不加则自动运行) |
--portmask |
0x3 |
位掩码指定启用的端口(bit0=port0, bit1=port1) |
--nb-cores |
2 |
用于转发的核数(不超过 -l 指定的核数) |
--forward-mode |
io |
转发模式:io/mac/flowgen/rxonly/txonly 等 |
--rxd / --txd |
1024 |
收/发描述符环大小(默认 512) |
--mbuf-size |
2048 |
mbuf 大小(字节),影响大包处理能力 |
性能调优提示:
--rxd 和 --txd 的值并非越大越好。过大的描述符环会增加缓存压力,通常建议设置为 512 或 1024,具体取决于网卡型号和报文长度分布。
2.3 交互式 Shell 入门
当使用 -i 参数启动后,testpmd 会进入交互式 Shell,提示符为 testpmd>。此时你可以输入各种命令来查看状态、修改配置或触发动作。
2.3.1 交互模式下的基本操作流程
- 启动交互模式:
./dpdk-testpmd -l 0-3 -n 4 -- -i - 查看端口状态:
show port info all - 启动转发:
start - 查看转发统计:
show port stats all - 停止转发:
stop - 退出 testpmd:
quit
小技巧: 在交互模式下,可以使用
Tab 键自动补全命令,使用 ↑/↓ 键浏览历史命令。这些功能在长时间调试时能显著提升效率。
2.4 常用 help 命令体系
testpmd 的 help 命令采用分层结构,从全局帮助到具体命令的帮助,层层递进。
2.4.1 全局帮助
testpmd> help
# 输出示例(节选):
# --------------------------------------
# help : 显示所有命令分类
# help all : 显示所有命令的详细帮助
# help <command> : 显示指定命令的帮助
# --------------------------------------
# 命令分类:
# control : 启动/停止转发、重置统计
# config : 配置端口、队列、流规则
# show : 显示端口、统计、内存等信息
# flow : 流规则管理(create/destroy/list)
# dump : 导出内部数据结构
2.4.2 分类帮助与命令速查
| 命令分类 | 常用命令 | 功能说明 |
|---|---|---|
| control | start, stop, quit |
控制转发引擎的启停 |
| config | port config, set fwd |
修改端口属性、转发模式、队列数等 |
| show | show port info, show port stats |
查看端口信息、统计计数、内存使用 |
| flow | flow create, flow list, flow destroy |
管理硬件流规则(RTE Flow) |
| dump | dump_ring, dump_mempool |
导出内部数据结构用于深度调试 |
2.4.3 查看具体命令的帮助
# 查看 flow 命令的帮助
testpmd> help flow
# 查看 show 命令的帮助
testpmd> help show
# 查看 start 命令的帮助
testpmd> help start
避坑指南: 在交互模式下,如果输入了错误的命令,testpmd 会提示
Unknown command。此时不要慌张,先输入 help 查看可用命令列表,或者输入 help all 查看所有命令的详细说明。不要频繁重启 testpmd,这会丢失当前的运行时状态。
2.5 启动参数与交互模式的完整工作流程
2.6 实战:快速启动并验证交互模式
以下是一个完整的实战步骤,帮助你快速验证本章所学内容:
# 步骤1:以交互模式启动 testpmd(使用2个核,2个端口)
./dpdk-testpmd -l 0-1 -n 4 -- -i --portmask=0x3 --nb-cores=2
# 步骤2:查看端口基本信息
testpmd> show port info all
# 步骤3:查看当前转发配置
testpmd> show config fwd
# 步骤4:启动转发
testpmd> start
# 步骤5:查看转发统计(观察是否有丢包)
testpmd> show port stats all
# 步骤6:停止转发
testpmd> stop
# 步骤7:退出
testpmd> quit
验证要点: 在步骤5中,重点关注
Rx-packets、Tx-packets、Rx-errors 和 Tx-errors 四个字段。如果 Rx-errors 或 Tx-errors 不为零,说明存在丢包或错误,这是后续丢包分析的起点。
2.7 本章小结
- testpmd 的 命令行模式 适用于自动化场景,交互模式 适用于调试场景,两者通过
-i参数切换。 - 启动参数分为 EAL 参数 和 testpmd 参数,中间用
--分隔,顺序不可颠倒。 - 交互模式下,
help命令采用分层结构,从help→help all→help <command>逐级深入。 - 掌握
start、stop、show port stats all三个命令,即可完成最基本的转发测试与丢包观察。