DPDK性能基准测试:pktgen与testpmd实战 - 第1节

1.1 DPDK性能测试的意义

在NFV、5G核心网、云原生网关等场景中,数据面性能直接决定业务容量与成本。DPDK通过绕过内核协议栈、轮询驱动、大页内存等技术,将包处理吞吐量从传统内核的几Mpps提升到几十甚至上百Mpps。然而,“能跑”不等于“跑得对”——没有标准化的基准测试,就无法量化优化效果、定位瓶颈或进行硬件选型。

性能基准测试的核心价值:
  • 基线建立:在相同硬件与配置下,获得可复现的吞吐、时延、丢包率基线。
  • 瓶颈定位:通过逐步加压,识别CPU、内存带宽、PCIe、网卡硬件队列等环节的瓶颈。
  • 回归防护:每次代码或配置变更后,快速验证性能是否退化。
  • 硬件选型:对比不同网卡、CPU、NUMA拓扑下的实际转发能力。

本课程选用pktgen与testpmd作为测试工具,前者擅长高精度流量生成与统计,后者擅长快速验证转发路径与调优参数。两者结合,可覆盖从单核转发到多队列、从二层交换到隧道封装的绝大多数性能测试场景。

DPDK性能测试在数据面开发中的位置 功能开发 单元测试 性能基准测试 上线部署 pktgen testpmd perf stat / pmdstat 吞吐量 (Mpps) 时延 (us / ns) 丢包率 / CPU占用 可复现的基线数据

1.2 pktgen与testpmd简介

1.2.1 pktgen:高精度流量生成器

pktgen是DPDK社区维护的高速包生成与统计工具,基于DPDK轮询驱动实现线速发包。它支持自定义报文模板、多核并行发送、实时统计与Lua脚本控制,是性能测试中最常用的流量源。

特性说明
发包速率单核可达14.88 Mpps(64字节线速)
报文模板支持Ethernet/IP/UDP/TCP/ARP等协议字段自定义
统计维度每秒吞吐、累计包数、丢包率、pps趋势
控制方式交互式CLI + Lua脚本自动化
多核支持多lcore并行发送,可绑定不同网口
适用场景:吞吐量极限测试、不同包长下的转发性能对比、多流(多IP/多端口)压力测试、长时间稳定性测试。

1.2.2 testpmd:快速转发路径验证器

testpmd是DPDK自带的二层/三层转发测试应用,无需编写代码即可启动多队列转发、配置RSS、调整ring/buffer大小、查看端口统计。它常用于验证网卡驱动、硬件卸载、NUMA亲和性等底层配置是否正确。

特性说明
转发模式iofwd(二层)、macfwd(MAC转发)、flowgen(流量生成)等
队列控制支持多队列、RSS、DCB、VMDq
运行时调参无需重启即可调整burst size、descriptor数量、tx/rx阈值
统计输出端口级收发包计数、错包、fwd速率
多进程支持primary/secondary多进程架构
注意:testpmd的转发性能通常低于经过深度优化的生产级应用,但它能快速暴露驱动、内存、PCIe带宽等底层问题,是调优前的“探针”。
pktgen vs testpmd 功能定位对比 pktgen 流量生成器 实时统计 Lua脚本控制 多核并行发包 testpmd 转发路径验证 运行时调参 多队列/RSS 端口统计 互补

1.3 实验拓扑与硬件要求

1.3.1 推荐实验拓扑

本课程采用双机直连拓扑:一台作为流量发生器(pktgen),另一台作为设备待测(testpmd)。两台服务器通过高速网卡(25GbE/100GbE)背对背直连,避免交换机引入的抖动与瓶颈。

双机直连实验拓扑 流量发生器 pktgen CPU: 2×Xeon Gold NIC: 25GbE ×2 设备待测 testpmd CPU: 2×Xeon Gold NIC: 25GbE ×2 流量方向 统计/反馈

1.3.2 硬件最低要求

组件最低配置推荐配置
CPU4核x86_64,支持SSE4.22×Xeon Gold 6248 (20核/40线程)
内存8 GB64 GB (配2MB/1GB大页)
网卡1×10GbE (Intel XL710)2×25GbE (Mellanox ConnectX-5 / Intel E810)
存储100 GB SSD500 GB NVMe
操作系统Ubuntu 20.04 / CentOS 7.9Ubuntu 22.04 / Rocky Linux 9
DPDK版本20.11 LTS22.11 LTS 或 23.11
NUMA注意事项:DPDK性能高度依赖NUMA亲和性。测试时务必确保网卡所在PCIe slot与使用的CPU core、内存分配在同一NUMA节点。可通过 lspci -vvv | grep NUMA 和 lstopo 确认拓扑。

1.3.3 软件环境准备清单

  1. DPDK编译安装:从dpdk.org下载源码,使用meson + ninja编译,启用共享库与示例应用。
  2. 大页配置:在GRUB或运行时预留2MB/1GB大页,挂载hugetlbfs。
  3. 网卡绑定:使用 dpdk-devbind.py 将物理网卡绑定到vfio-pci或igb_uio驱动。
  4. pktgen安装:从DPDK pktgen仓库克隆,编译生成 pktgen 可执行文件。
  5. testpmd验证:DPDK编译完成后,app/dpdk-testpmd 即生成,无需额外安装。
# 大页配置示例(运行时)
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

# 网卡绑定示例
./usertools/dpdk-devbind.py -b vfio-pci 0000:18:00.0 0000:18:00.1

# 验证绑定状态
./usertools/dpdk-devbind.py -s
常见陷阱:
  • 未关闭irqbalance服务导致CPU亲和性失效。
  • BIOS中未开启VT-d、SR-IOV、NUMA相关选项。
  • 网卡固件版本过低,不支持DPDK所需卸载功能。
  • 测试时CPU频率缩放策略未设置为performance模式。

1.4 本章小结