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 基础操作流程示例

以下是一个典型的交互式调试会话流程:

  1. 启动 testpmd:使用 -i 参数进入交互模式。
  2. 查看端口信息:show port info all 确认网卡状态。
  3. 停止转发:stop 暂停数据面。
  4. 配置流规则:使用 flow create 下发规则。
  5. 启动转发:start 使规则生效。
  6. 观察统计:show port stats all 查看收发包计数。
  7. 退出: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 交互模式的核心状态转换如下图所示。理解状态机有助于避免误操作。

testpmd 交互模式状态机 启动 (init) 端口初始化完成 转发中 (start) 数据面运行 已停止 (stop) 可修改配置 退出 (quit) 释放资源 start stop start(重新启动) quit quit ⚠ 修改流规则前必须 stop start 后规则才生效

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 命令下发流规则,并结合队列统计进行丢包定位。