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