2. testpmd 基础操作:启动、参数与模式
testpmd 是 DPDK 生态中最核心的交互式流量生成与调试工具。掌握 testpmd 的启动方式、命令行参数以及两种运行模式(交互模式与脚本模式),是后续进行 RSS 配置、队列映射和流规则调试的前提。本章将系统梳理 testpmd 的基础操作,确保你能够快速搭建调试环境。
2.1 启动 testpmd:典型命令行与参数解析
testpmd 的启动命令通常包含 DPDK 通用 EAL 参数和 testpmd 应用层参数。以下是一个典型的 4 队列、2 端口的启动示例:
./dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x3 --nb-cores=2 --rxq=4 --txq=4
参数分为两段:-l 0-3 -n 4 属于 EAL 参数,-- -i --portmask=0x3 ... 属于 testpmd 应用参数。下表列出最常用的参数及其含义:
| 参数类别 | 参数示例 | 含义说明 |
|---|---|---|
| EAL 核心绑定 | -l 0-3 |
绑定逻辑核 0~3 给 DPDK 使用 |
| EAL 内存通道 | -n 4 |
指定内存通道数(通常与 NUMA 节点对应) |
| EAL 大页内存 | --socket-mem=1024 |
每个 socket 预留 1024 MB 大页内存 |
| 应用模式 | -i |
进入交互模式(interactive mode) |
| 端口掩码 | --portmask=0x3 |
启用 port 0 和 port 1(二进制 0b11) |
| 转发核心数 | --nb-cores=2 |
使用 2 个核心进行数据包转发 |
| 接收队列数 | --rxq=4 |
每个端口创建 4 个接收队列 |
| 发送队列数 | --txq=4 |
每个端口创建 4 个发送队列 |
-i 交互模式启动,并显式指定 --rxq 和 --txq 数量,确保队列资源与后续 RSS 配置对齐。
2.2 交互模式:实时控制与状态查询
交互模式是 testpmd 最常用的工作方式。启动后进入 testpmd> 提示符,支持数百条运行时命令。以下是与 RSS 和队列映射强相关的核心命令分类:
- 端口与队列信息:
show port info all、show port stats all、show rxq info 0 0 - RSS 配置:
port config 0 rss all、port config 0 rss ip、show port 0 rss-hash - 流规则操作:
flow create 0 ingress ...、flow list 0、flow destroy 0 rule 0 - 转发控制:
start、stop、set fwd io、set fwd mac
下图展示了交互模式下,从启动到流规则验证的典型操作流程:
2.3 脚本模式:自动化批量执行
当调试流程稳定后,可以将一系列 testpmd 命令写入脚本文件,通过 -f 参数批量执行。脚本模式适用于回归测试、自动化验证和持续集成场景。
脚本文件每行一条 testpmd 命令,支持注释(以 # 开头)。以下是一个 RSS 配置脚本示例:
# RSS 配置脚本:rss_setup.txt
port config 0 rss all
port config 1 rss all
show port 0 rss-hash
show port 1 rss-hash
start
启动方式:
./dpdk-testpmd -l 0-3 -n 4 -- -f rss_setup.txt --portmask=0x3 --rxq=4 --txq=4
脚本模式与交互模式的核心差异如下表:
| 对比维度 | 交互模式 (-i) | 脚本模式 (-f) |
|---|---|---|
| 适用场景 | 调试、探索、实时验证 | 自动化测试、批量部署、CI 集成 |
| 命令输入方式 | 键盘实时输入 | 从文本文件逐行读取 |
| 动态调整能力 | 强,可随时修改参数 | 弱,需修改脚本后重新启动 |
| 输出捕获 | 终端直接查看 | 可重定向到日志文件分析 |
| 典型启动参数 | ./dpdk-testpmd ... -- -i |
./dpdk-testpmd ... -- -f script.txt |
2.4 常用调试命令速查
以下命令在后续 RSS 和流规则调试中会频繁使用,建议熟记:
show port info <port_id>— 查看端口能力,包括支持的 RSS 哈希类型、队列数上限show port rss-hash <port_id>— 查看当前端口的 RSS 哈希配置show rxq info <port_id> <queue_id>— 查看指定接收队列的详细配置(如 RSS 是否生效)port config <port_id> rss <hash_types>— 配置 RSS 哈希类型(如all、ip、tcp)flow list <port_id>— 列出端口上所有已创建的流规则set fwd <mode>— 设置转发模式(io、mac、rxonly等)
stop 再 start 才能使新配置生效。流规则创建后,如果 RSS 配置发生变化,部分硬件需要重新创建流规则才能正确映射队列。
2.5 启动参数与队列映射的关联
testpmd 启动时的 --rxq 和 --txq 参数直接决定了后续 RSS 和流规则可用的队列资源。下图展示了启动参数如何影响最终的队列映射拓扑:
理解这一拓扑关系至关重要:流规则中的 queue 动作指定的队列 ID,必须在启动时 --rxq 声明的范围内。例如,若启动时 --rxq=4,则流规则只能指定 queue 0~3,指定 queue 4 将导致规则创建失败。