4. testpmd 交互模式:交互式命令行入门、help 命令、quit/start/stop 等基础操作
testpmd 是 DPDK 生态中最常用的用户态流量转发与调试工具。它支持两种运行模式:命令行参数模式(启动时一次性配置)和交互模式(运行时动态控制)。本章聚焦交互模式,这是流规则调试、队列监控、丢包定位的核心操作环境。
4.1 进入交互模式
启动 testpmd 时不加 --interactive 参数,默认进入交互模式。典型启动命令如下:
# 绑定网卡后,启动 testpmd,使用 2 个 lcore、2 个端口、每端口 4 队列
./dpdk-testpmd -l 0,1 -n 4 -- -i --portmask=0x3 --nb-cores=2 --rxq=4 --txq=4
参数 -i 表示进入交互模式。启动成功后,终端显示 testpmd> 提示符,等待用户输入命令。
提示: 如果启动时忘记加
-i,testpmd 会按默认配置自动开始转发,此时无法输入命令。可通过 Ctrl+C 中断后重新启动,或使用 --interactive 参数显式指定。
4.2 help 命令:交互式命令手册
help 是交互模式下最常用的命令,用于查看所有可用命令及其简要说明。输入 help 后,testpmd 会按功能分类列出命令组:
testpmd> help
----------------------------- Help for commands ------------------------------
help : 显示本帮助信息
start : 启动包转发
stop : 停止包转发
quit : 退出 testpmd
show port (info|stats|xstats|fdir|cap) (port_id) : 显示端口信息
set fwd (io|mac|mac_swap|flowgen|rxonly|txonly|csum|icmpecho) : 设置转发模式
flow (validate|create|destroy|list|query) (port_id) : 流规则操作
read rxd (port_id) (queue_id) (rxd_id) : 读取指定接收描述符
read txd (port_id) (queue_id) (txd_id) : 读取指定发送描述符
...(省略部分输出)
关键点:
help 输出中的命令分类是学习 testpmd 的索引。调试流规则时,重点关注 flow、show port、read rxd/txd 等命令组。
4.3 quit / start / stop:生命周期三剑客
这三个命令控制 testpmd 转发引擎的运行状态,是交互调试的基础操作。
| 命令 | 功能 | 典型使用场景 |
|---|---|---|
quit |
退出 testpmd 进程,释放所有 DPDK 资源 | 调试结束,或需要重新绑定网卡/修改配置时 |
start |
启动包转发引擎,开始收发包处理 | 配置完流规则或转发模式后,开始流量测试 |
stop |
停止包转发引擎,保留端口和队列配置 | 查看统计、修改流规则、读取描述符前必须停止转发 |
重要: 在
start 状态下修改流规则或读取硬件描述符,可能导致数据不一致或程序崩溃。建议养成 先 stop,再操作,后 start 的调试习惯。
4.4 基础操作流程示例
以下是一个典型的交互式调试会话流程:
- 启动 testpmd:使用
-i参数进入交互模式。 - 查看端口信息:
show port info all确认网卡状态。 - 停止转发:
stop暂停数据面。 - 配置流规则:使用
flow create下发规则。 - 启动转发:
start使规则生效。 - 观察统计:
show port stats all查看收发包计数。 - 退出:
quit结束会话。
testpmd> show port info all
testpmd> stop
testpmd> flow create 0 ingress pattern eth / ipv4 / end actions queue index 2 / end
testpmd> start
testpmd> show port stats 0
testpmd> quit
4.5 交互模式状态机
testpmd 交互模式的核心状态转换如下图所示。理解状态机有助于避免误操作。
4.6 常用基础命令速查表
以下表格列出交互模式下最常用的基础命令,建议初学者熟记:
| 命令 | 参数示例 | 说明 |
|---|---|---|
help |
无参数 | 显示所有命令的帮助信息 |
start |
无参数 | 启动包转发 |
stop |
无参数 | 停止包转发 |
quit |
无参数 | 退出 testpmd |
show port info all |
all 或指定端口号 |
显示端口基本信息(MAC、驱动、队列数等) |
show port stats 0 |
端口号 | 显示端口收发包统计 |
set fwd io |
io/mac/rxonly 等 |
设置转发模式 |
flow list 0 |
端口号 | 列出端口上所有流规则 |
调试技巧: 在
stop 状态下,使用 read rxd 0 0 0 可以读取端口 0 队列 0 的第一个接收描述符,直接查看硬件收到的报文头部信息,这是定位丢包问题的第一手证据。
4.7 常见错误与避坑
- 在 start 状态下执行 flow create:testpmd 会返回错误
Operation not supported。必须先stop。 - quit 前未 stop:testpmd 会自动停止转发并释放资源,但可能丢失部分统计信息。建议先
stop再quit。 - help 输出过长:testpmd 的 help 输出可能超过终端缓冲区。可使用
help <命令组>查看特定组,例如help flow。 - 忘记端口号:使用
show port info all查看所有可用端口及其索引。
掌握以上基础操作后,即可进入下一阶段:使用 flow 命令下发流规则,并结合队列统计进行丢包定位。