tencent cloud

云服务器

使用 DPDK 测试

Download
聚焦模式
字号
最后更新时间: 2026-08-07 10:12:30

操作场景

本文档介绍如何通过 DPDK 方法进行云服务器高吞吐网络性能测试。

操作步骤

步骤一:环境准备与安装

本章将引导您完成 DPDK 测试环境的搭建,包括下载源码、解压、安装依赖库及编译。

环境准备

云服务器需要公网访问能力,您可在创建云服务器时选择分配公网 IP,或在云服务器创建后为其配置 弹性公网 IP
云服务器配置多张网卡,建议使用 eth0 测试,使用其余网卡进行远程登录。
相关操作需要系统 root 权限下进行,请提前申请相关权限。
以下操作指引适用于 TencentOS 3.0及以上操作系统。
准备2台测试服务器,分别为接收端和发送端。
如何创建实例,请参见 通过购买页创建实例

下载并解压 DPDK 源码包

使用 wget 命令从官方仓库下载 DPDK 23.11 源码压缩包并解压。
说明:
后续操作请在 DPDK 解压后目录中进行。
wget https://fast.dpdk.org/rel/dpdk-23.11.tar.gz
tar -xf dpdk-23.11.tar.gz
cd dpdk-23.11

安装依赖库与编译

安装必要的依赖库和编译工具。
安装 numactl-devel 依赖库(需要 root 权限)。
yum install numactl-devel -y
安装 Python 构建工具。
pip3 install meson ninja pyelftools
使用 meson 进行项目构建(设置最大逻辑核心数为1024)。
meson build -Dmax_lcores=1024
使用 ninja 编译项目。
ninja -C build
注意:
如果您使用的测试服务器为标准型 SA4之后的实例类型且 CPU 为最高规格,请参见 特殊场景处理,增加相关配置步骤。

步骤二:内核驱动模块绑定

DPDK 需要绑定专用的内核驱动模块接管网卡设备。

下载 UIO 模块

从 DPDK 官方仓库克隆内核模块代码:
git clone http://dpdk.org/git/dpdk-kmods
或使用 git 协议(备选)。
git clone git://dpdk.org/dpdk-kmods

编译 UIO 模块

进入 igb_uio 目录并进行编译。
cd ./dpdk-kmods/linux/igb_uio
make

加载 UIO 模块

加载 uioigb_uio 内核模块(需要 root 权限)。
modprobe uio
insmod ./dpdk-kmods/linux/igb_uio/igb_uio.ko

查询并记录网卡 PCI 地址

绑定网卡前,需要获取并记录目标网卡的 PCI 地址。执行以下命令查看并记录所有网卡设备信息:
ethtool -i eth0 | grep bus-info


绑定网卡到 UIO 驱动

使用 DPDK 提供的工具绑定网卡到 igb_uio 驱动。
1. 关闭网卡。
注意:
关闭网卡前,请检查当前是否通过其他弹性网卡的 IP 远程登录云服务器, 若使用 eth0 远程登录,将导致连接中断。
ifconfig eth0 down
2. 绑定网卡到 igb_uio 驱动(注意替换为实际 PCI 地址)。
./usertools/dpdk-devbind.py --bind=igb_uio 0000:02:01.0 #0000:02:01.0 需要替换为您实际的网卡 PCI 地址

步骤三:大页内存配置

DPDK 使用大页内存(Huge Pages)来提高内存访问效率。配置大页内存是运行 DPDK 的必要前提。
执行以下命令分配大页内存(此处以 2MB 大页为例,分配 8192 个页面,共约 16GB):
echo 8192 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

步骤四:运行性能测试

DPDK 性能测试采用 RX-TX 双机模式:一台服务器作为接收端(RX),另一台服务器作为发送端(TX)。
说明:
RX 接收端,TX 发送端。两台服务器需分别执行对应的命令。
RX 接收端执行命令如下:
C=4; Q=32; ./build/app/dpdk-testpmd -l 0-47 --proc-type primary --file-prefix bench -a 0000:1b:00.0 -- --burst=128 --nb-cores=$C --txd=4096 --rxd=4096 --txq=$Q --rxq=$Q --forward-mode=rxonly --stats-period=1
TX 发送端执行命令如下:
C=4; Q=32; S=10.31.0.80; D=10.31.0.240; ./build/app/dpdk-testpmd -l 0-47 --proc-type primary --file-prefix bench -a 0000:1b:00.0 -- --burst=128 --nb-cores=$C --tx-ip $S,$D --txonly-multi-flow --txpkts=64 --txd=4096 --rxd=4096 --txq=$Q --rxq=$Q --forward-mode=txonly --stats-period=1

参数详细说明

参数
说明
-a 0000:1b:00.0
指定要使用的网卡 PCI 地址,需根据实际环境替换。
--tx-ip S,D
TX 端发包的目标 IP 地址,按云服务器网卡地址替换。
--txonly-multi-flow
启用多流发送模式(不设置则只发送单条流)。
--txpkts=64
报文长度(字节,包含 MAC 头),测试 PPS 场景建议 64。
-l 0-47
指定使用的 CPU 核心编号范围,按需调整,跨 NUMA 场景可 查看队列跨 NUMA 分布 获取。
--txq / --rxq = $Q
发送/接收队列数量,可通过 ethtool -l eth0 | grep Combined 查看。
--nb-cores=$C
实际参与测试的 CPU 核心数,推荐 2 ≤ C ≤ Q。
--stats-period=1
每秒输出一次统计信息。
测试结果示例如下,左侧为 RX 接收端,右侧为 TX 发送端:


步骤五:测试环境恢复

测试完成后,建议将环境恢复到初始状态,释放资源并避免影响其他服务。

恢复网卡驱动

使用 dpdk-devbind.py 工具将网卡还原到默认驱动:
./usertools/dpdk-devbind.py -b virtio-pci 0000:00:08.0 # 注意:0000:00:08.0 需替换为实际 PCI 地址
如果上述命令无法正常工作,可手动执行以下命令解除 vfio-pci 绑定。
echo 0000:1b:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind #0000:1b:00.0按需替换
echo virtio-pci > /sys/bus/pci/devices/0000\\:1b\\:00.0/driver_override #设置 driver_override 为 virtio-pci
echo 0000:1b:00.0 > /sys/bus/pci/drivers/virtio-pci/bind #重新绑定到 virtio-pci

恢复大页内存

将大页内存数量归零。
echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
重新启用网卡。
ifconfig eth1 up

特殊场景处理

如果您使用的测试服务器为标准型 SA4之后的实例类型且 CPU 为最高规格,需要增加以下配置步骤。

查看队列跨 NUMA 分布

说明:
对于多路 CPU 的服务器,需要确保 DPDK 使用的 CPU 核心与网卡位于同一个 NUMA 节点上,否则性能会大幅下降。
1. 下载查看脚本
wget https://lag-dpdk-1326316016.cos.ap-guangzhou.myqcloud.com/dpdk_core_advisor.sh
2. 运行查看跨队列 NUMA 分布脚本
sh dpdk_core_advisor.sh eth0
如返回结果显示队列跨 NUMA 分布,请安装 lag_dpdk.patch


安装 lag_dpdk.patch

1. 下载 lag_dpdk.patch 补丁脚本。
wget https://lag-dpdk-1326316016.cos.ap-guangzhou.myqcloud.com/lag_dpdk.patch
2. 应用补丁。
git apply lag_dpdk.patch
# 等效命令(二选一即可)
patch -p1 < lag_dpdk.patch
3. 重新编译。
meson build -Dmax_lcores=1024
ninja -C build



帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈