Testpmd 作为 DPDK 生态中功能强大的转发测试工具,不仅能生成高流量负载,还能通过精细化的统计功能提供精准的性能数据。本文将系统讲解如何使用 Testpmd 进行带宽测试,深入解读测试结果中的关键指标,并提供性能优化的实用策略。

一、Testpmd 带宽测试准备

1.1 硬件与系统环境要求

进行带宽测试前,需确保硬件和系统满足基本要求

  • 网卡:支持 DPDK 的高性能网卡(如 10G/25G/100G 以太网网卡),需提前绑定到 DPDK 兼容驱动(如 vfio-pciigb_uio

  • CPU:多核处理器(推荐 8 核及以上),确保有足够的核心用于数据包转发

  • 内存:至少 16GB 内存,建议按 NUMA 节点分布配置

  • 系统优化

    • 关闭 CPU 节能模式(intel_pstate=performance

    • 禁用 NUMA 自动平衡(echo 0 > /proc/sys/kernel/numa_balancing

    • 隔离测试用 CPU 核心(通过 isolcpus 内核参数)

    • 关闭防火墙和无关服务,避免资源抢占

二、双机对测拓扑与测试模式

双机对测是验证网络带宽的常用场景,通过两台设备互发流量,可真实模拟实际通信环境。这里只讨论在没有打流仪的情况下,用testpmd进行打流测试的情况。

2.1 双机对测拓扑结构-单向测试

在这里插入图片描述
*拓扑说明

  • 设备 A 和设备 B 均为支持 DPDK 的服务器, 两台设备通过至少 1 条高速链路连接(如 100G 光纤)
  • 单向测试:设备 A 发送流量,设备 B 接收,设备A配置成txonly,设备B配置成rxonly模式

2.2 双机对测拓扑结构-转发测试

在这里插入图片描述

拓扑说明

  • 设备 A 和设备 B 均为支持 DPDK 的服务器, 两台设备通过至少2 条高速链路连接(如 100G 光纤)
  • 转发测试: 设备A配置成txonly,设备B配置成io模式
  • 转发测试:设备 A 发送流量,设备 B 的Port0接收数据并转发给Port1。同理,设备B的Port1接收数据并转发给Port0(这里不知道我理解是否有误,还需再确认

三、带宽计算方法与关键指标解析

查看转发性能:

testpmd> show port stats all
testpmd> show fwd stats all

3.1 show fwd stats all 结果分析

测试stop后会显示结果,和show fwd stats all的显示是一样的,如下图所示:
在这里插入图片描述
指标说明
以下是整理后的 DPDK testpmd show fwd stats all 关键指标解析表(不包含你的具体数据):

指标 含义
RX-packets 接收的报文总数(Received packets)
TX-packets 成功转发的报文数(Transmitted packets)
RX-dropped 接收路径丢弃的报文数(通常因缓冲区不足或配置错误)
TX-dropped 发送路径丢弃的报文数(通常因发送队列满或硬件错误)
Accumulated RX-total 所有端口的累计接收报文数

补充说明

  • RX/TX 不对称:若 RX-packets 高但 TX-packets 为0,需检查转发模式(如 mac/iofwd)或硬件队列配置。
  • 丢包分析RX-droppedTX-dropped 非零时,可能需调整缓冲区大小或排查硬件瓶颈。
  • 多队列场景:需结合 Queue 编号(如 Queue=0/4)确认流量是否均匀分布。

此表可用于快速定位转发性能或配置问题。

3.3 show port stats all 结果分析

show port stats all 显示结果:
在这里插入图片描述
指标说明

指标 全称 含义与作用
RX-packets 接收数据包总数 累计接收的所有数据包数量(含正常包和错误包)
RX-bytes 接收字节总数 累计接收的字节数(含帧头、payload 和 CRC)
RX-errors 接收错误总数 硬件检测到的接收错误(含 CRC 错误、帧长错误等)
RX-missed 接收丢失包数 因硬件队列满未被处理的接收包数
RX-nombuf 内存不足丢弃数 因内存池无空闲缓冲区丢弃的接收包数
TX-packets 发送数据包总数 累计发送的所有数据包数量
TX-bytes 发送字节总数 累计发送的字节数(含帧头、payload 和 CRC)
TX-errors 发送错误总数 硬件检测到的发送错误(含冲突、载波丢失等)
Rx-pps 接收包率 统计周期内每秒接收的数据包数
Rx-bps 接收比特率 统计周期内每秒接收的比特数(实时带宽)
Tx-pps / Tx-bps 发送包率 / 比特率 统计周期内每秒发送的数据包数和比特数

3.4 带宽计算

实际带宽(Gbps)的标准计算公式为:

实际带宽(Gbps) = (统计周期内发送字节增量 × 8) / (统计周期时间 × 10^9)
数据获取方法
1. 统计周期内发送字节增量(ΔTX-bytes)

通过 show port stats all 命令分两次获取 TX-bytes 数值,计算差值:

  1. 第一次执行命令,记录端口的 TX-bytesTX1
  2. 间隔 Δt 时间(如 1 秒)后再次执行,记录 TX-bytesTX2
  3. 字节增量:ΔTX-bytes = TX2 - TX1
2.统计周期时间(Δt)
  • 若通过 --stats-period=N 配置自动统计,周期时间为 N 秒(如 --stats-period=1 表示周期 1 秒);
  • 手动统计时,需用计时器记录两次执行命令的间隔时间。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐