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 交互模式下的基本操作流程

  1. 启动交互模式: ./dpdk-testpmd -l 0-3 -n 4 -- -i
  2. 查看端口状态: show port info all
  3. 启动转发: start
  4. 查看转发统计: show port stats all
  5. 停止转发: stop
  6. 退出 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 启动参数与交互模式的完整工作流程

testpmd 启动与交互模式工作流程 1. 命令行启动 2. EAL参数解析 3. testpmd参数解析 -i 参数? 是 → 交互模式 Shell 提示符: testpmd> 否 → 命令行模式 自动开始转发 输入 help / start / show 自动转发 + 统计输出 说明:交互模式适合调试阶段动态调整;命令行模式适合自动化测试和性能基线回归

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 三个命令,即可完成最基本的转发测试与丢包观察。