【DPDK】高性能网络测试工具Testpmd命令行使用指南
在 DPDK 生态中,Testpmd 不仅是一款高性能的数据包转发测试工具,更提供了丰富的运行时交互功能。通过交互式命令,开发者可以实时调整转发策略、监控网络性能、配置硬件加速特性,从而快速验证网络设备的功能与性能。本文将深入解析 Testpmd 的运行时函数,带你从基础操作到高级配置,全面掌握这款工具的实战技巧。
一、交互式模式:Testpmd 的操作核心
Testpmd 的交互式模式(通过 -i
或 --interactive
启动)是其最具特色的功能之一。启动后会显示 testpmd>
提示符,支持命令补全(按 <TAB>
键)、历史记录(上箭头)和快捷键(如 Ctrl+a
跳至行首),操作体验类似 Bash。
# 启动交互式模式示例
sudo ./dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x3
进入交互式模式后,首先可以通过 help
命令查看功能分类:
testpmd> help
Help is available for the following sections:help control : Start and stop forwarding.help display : Displaying port, stats and config information.help config : Configuration information.help ports : Configuring ports....
二、控制命令:转发流程的启停与退出
控制命令是交互式操作的基础,用于管理数据包转发的生命周期:
命令 | 功能说明 |
---|---|
start | 按当前配置启动数据包转发 |
start tx_first [burst_num] | 先发送指定批次(默认1批)的数据包再启动转发(仅非交互式模式有效) |
stop | 停止转发并显示累计统计信息 |
quit | 退出交互式模式 |
示例:
testpmd> start # 启动转发
testpmd> stop # 停止转发并查看统计
---------------------- Forward statistics for port 0 ----------------------
RX-packets: 102400 RX-dropped: 0 RX-total: 102400
TX-packets: 102400 TX-dropped: 0 TX-total: 102400
三、显示命令:监控设备状态与性能
显示命令用于实时查看端口信息、统计数据和配置详情,是调试与性能分析的关键工具。
3.1 端口信息查询
-
show port (info|stats|xstats|cap) (port_id|all)
:查看端口基本信息、统计数据、扩展统计或能力。# 查看端口0的基本信息 testpmd> show port info 0 ********************* Infos for port 0 ********************* MAC address: 7C:FE:90:CB:74:CE Link status: up Link speed: 10000 Mbps Link duplex: full-duplex Supported flow types: ipv4-tcp, ipv4-udp, ...
-
show port rss-hash [key|algorithm]
:查看 RSS(接收端缩放)哈希键或算法。 -
show (rxq|txq) info (port_id) (queue_id)
:查看指定端口的 RX/TX 队列信息。
3.2 统计数据与转发状态
show fwd stats all
:查看所有端口的转发统计(如 RX/TX 包数、丢弃数)。clear port stats all
:清空所有端口的统计数据。show config (rxtx|cores|fwd)
:查看当前配置(如队列数、核心分配、转发模式)。
3.3 系统资源监控
Testpmd 还提供了底层资源的查询命令,方便调试内存与核心分配:
dump_physmem
:打印物理内存段布局dump_mempool [name]
:查看内存池统计dump_lcores
:列出逻辑核心信息dump_ring [name]
:显示环形缓冲区状态
四、配置命令:实时调整转发策略
配置命令允许在运行时修改转发参数,无需重启应用。注意:多数配置需在转发停止后生效。
4.1 转发模式切换
通过 set fwd
命令可切换转发模式,支持多种场景:
# 切换为仅接收模式
testpmd> set fwd rxonly
Set rxonly packet forwarding mode# 切换为 MAC 地址交换模式(交换源/目的 MAC 后转发)
testpmd> set fwd macswap
常用转发模式包括:
io
:默认模式,直接转发数据包(最快)macswap
:交换源/目的 MAC 地址rxonly
/txonly
:仅接收/仅发送(用于单向测试)flowgen
:多流生成模式(用于性能测试)icmpecho
:响应 ICMP 回显请求(模拟 ping 响应)
4.2 资源分配调整
set nbcore N
:设置转发核心数量(如set nbcore 2
)set corelist 1,3
:指定转发核心列表(如核心1和3)set portlist 0,2
:指定转发端口列表(如端口0和2)set burst 64
:设置每批处理的数据包数量(默认32)
4.3 硬件加速配置
Testpmd 支持实时配置网卡硬件加速功能,如 VLAN 卸载、校验和计算等:
vlan set strip on 0
:启用端口0的 VLAN 剥离csum set tcp hw 0
:端口0的 TCP 校验和由硬件计算set port 0 gro on
:启用端口0的 GRO(通用接收卸载)
示例:配置 VLAN 过滤
# 启用端口0的 VLAN 过滤
testpmd> vlan set filter on 0
# 添加允许通过的 VLAN ID 100
testpmd> rx_vlan add 100 0
4.4 流量控制与限速
set flow_ctrl rx on tx on 8000 4000 100 1 0
:配置端口0的流控参数(高水位、低水位等)set port 0 queue 0 rate 1000
:限制端口0的队列0发送速率为1000 Mbps
五、端口管理:动态增删与配置
Testpmd 支持运行时动态管理端口,包括添加、移除和重置,灵活性极强。
5.1 端口的附加与分离
-
port attach <identifier>
:添加端口(支持物理网卡的 PCI 地址或虚拟设备)# 添加 PCI 地址为 0000:0a:00.0 的物理网卡 testpmd> port attach 0000:0a:00.0
-
port detach <port_id>
:移除端口(需先停止并关闭端口)testpmd> port stop 0 testpmd> port close 0 testpmd> port detach 0
5.2 端口状态与参数配置
port start/stop <port_id|all>
:启动/停止指定端口port config <port_id> speed 10000 duplex full
:设置端口速率为10Gbps、全双工port config all rxq 4
:为所有端口配置4个 RX 队列port reset <port_id>
:重置端口(需先停止)
六、高级功能:流规则与隧道配置
Testpmd 支持复杂的流量处理场景,如隧道封装/解封装、自定义流规则等。
6.1 隧道配置
通过命令可配置 VXLAN、NVGRE 等隧道的封装参数:
# 配置 VXLAN 隧道封装
testpmd> set vxlan ip-version ipv4 vni 100 udp-src 4789 udp-dst 4789 \ip-src 192.168.1.1 ip-dst 192.168.1.2 \eth-src 7C:FE:90:CB:74:CE eth-dst 7C:FE:90:CB:74:CA
6.2 流规则与采样
set sample_actions 0 count / mirror 1 / end
:配置采样动作(计数并镜像到端口1)flow create 0 ingress pattern eth / ipv4 / end actions sample ratio 2 index 0 / end
:创建流规则,按2:1比例采样符合条件的流量
七、实战场景:从调试到性能测试
场景1:验证网卡基本功能
# 启动交互式模式,端口0环回
testpmd> set port-topology loop
testpmd> set fwd io
testpmd> start
# 查看统计,确认 RX/TX 包数匹配
testpmd> show port stats 0
场景2:测试硬件校验和卸载
# 启用 TCP 硬件校验和
testpmd> csum set tcp hw 0
testpmd> set fwd csum
testpmd> start
# 验证校验和计算是否正确(无丢包或错误)
testpmd> show fwd stats all
场景3:动态调整 RSS 配置
# 查看当前 RSS 配置
testpmd> show port 0 rss-hash
# 配置 RSS 仅基于 IPv4
testpmd> port config 0 rss ipv4
# 验证队列分配是否符合预期
testpmd> show port 0 rss reta
八、注意事项与最佳实践
- 权限要求:所有命令需在 root 权限下执行,否则无法访问硬件资源。
- 配置生效:多数配置(如队列数、转发模式)需停止转发后重新启动才生效。
- 硬件依赖:部分功能(如 GRO、RSS)需网卡支持,可通过
show port cap <port_id>
查看端口能力。 - 多进程限制:在多进程模式下,从进程不支持端口配置、队列修改等操作,仅主进程可执行设备管理命令。
- 命令文件:通过
--cmdline-file
或load <file>
可批量执行命令,适合自动化测试。
总结
Testpmd 的运行时函数为网络开发者提供了一套完整的调试与测试工具链,从基础的转发控制到复杂的硬件加速配置,覆盖了从功能验证到性能优化的全流程。掌握这些命令不仅能提高调试效率,更能深入理解 DPDK 与网卡硬件的交互细节。
无论是验证新网卡的功能、测试网络协议的性能,还是调试复杂的隧道转发场景,Testpmd 都能成为你的得力助手。建议结合官方文档,通过实际操作熟悉各类命令,逐步构建对高性能网络转发的理解。
参考文档:DPDK Testpmd 官方手册