Pktgen-DPDK 是一个基于 DPDK(Data Plane Development Kit)的高性能数据包生成器。它主要用于网络性能测试、基准测试和流量发生器,可以在高速网络上生成大量的数据包,用于测试网络设备、协议栈和应用程序的性能,支持多种常见的网络协议(如 IPv4、IPv6、TCP、UDP)以及自定义报文格式,可以灵活地模拟不同类型的流量。本篇文章将介绍该工具的编译安装流程。
一、版本使用
- DPDK:23.11.0-rc1
- Pktgen:23.10.2
注意:Pktgen对应DPDK使用版本的依赖比较苛刻,需要匹配合适的版本才能编译通过。
二、前提依赖
-
meson:>= 0.47.1
-
ninja:>= 1.7.1
- Pktgen编译过程中碰到的其他所需依赖:
yum install libpcap-devel yum install numactl-devel yum install numactl-libs pip3 install pyelftools
三、获取DPDK与Pktgen-DPDK
git clone github.com/DPDK/dpdk.git
git clone github.com/pktgen/Pktgen-DPDK.git
四、编译DPDK
cd dpdk
mkdir dpdklib # 安装目录
mkdir dpdkbuild # 构建目录
meson -Denable_kmods=true -Dprefix=$(pwd)/dpdklib dpdkbuild
cd dpdkbuild
ninja
ninja install # 安装在dpdk/dpdklib下
五、编译Pktgen
设置PKG_CONFIG_PATH变量,需要指定libdpdk和numa所对应pkgconfig路径,否则meson build会报错
# 查找到numa库的pkgconfig路径为/usr/lib64/pkgconfig
export PKG_CONFIG_PATH=<YOUR PATH>/dpdk/dpdklib/lib64/pkgconfig:/usr/lib64/pkgconfig
cd Pktgen-DPDK
meson -Denable_kmods=true -Dexamples=all build
需要修改的地方:
(1)build.ninja,指定c99编译
vim build/build.ninja
在rule c_COMPILER下的command = cc $ARGS -MD -MQ ... 这行补充-std=c99
(2)pktgen-pcap.c 第313行,强制转化为无符号类型
vim app/pktgen-pcap.c
pktgen-pcap.c 第313行,MAX_MBUFS_PER_PORT结果返回值强制转化为无符号类型
最后,保存并执行,完成构建
cd build && ninja