目录
1.DPDK介绍
数据平面开发工具包(Data Plane Development Kit, DPDK)是一组库和驱动程序,用于增强和加速数据平面的数据包处理。它的主要用途是通过绕过内核网络堆栈来提供更快的数据包处理,这可以显著提高性能。
Bond PMD (Link Bonding Poll Mode Driver)是数据平面开发工具包DPDK提供的一种软件机制,用于将多个物理网络接口聚合为单个逻辑接口。
2.服务器配置与对应软件版本
操作系统:Debian12.5
内核版本:6.1.0-18-amd64
网卡信息:Intel X520 万兆光口以太网卡
DPDK版本:dpdk-19.11.14
Suricata版本:Suricata-7.0.3
3.安装部署DPDK
3.1 二进制安装DPDK
在Debian12上源码安装 DPDK-19.11.14,安装失败,所以使用apt来安装。
apt-get install dpdk-dev
查看dpdk版本
卸载dpdk
sudo apt remove dpdk
# 完全卸载dpdk,删除其配置文件
sudo apt purge dpdk
3.2 源码安装DPDK
3.2.1 下载DPDK
DPDK官网下载地址:
http://fast.dpdk.org/rel/dpdk-19.11.14.tar.gz
将dpdk解压到/opt目录下
root@ndr:~# tar -xvf dpdk-19.11.14.tar.xz -C /opt/
3.2.2 设置DPDK环境变量
编辑/etc/profile文件,添加如下内容
export RTE_SDK=/opt/dpdk-stable-19.11.14
export RTE_TARGET=x86_64-native-linuxapp-gcc
RTE_SDK环境变量指向DPDK源代码的安装目录。这个目录通常包含了DPDK的源代码、构建系统、库文件、头文件以及示例应用程序等。当编译基于DPDK的应用程序时,编译器和构建系统会使用这个环境变量来找到DPDK的头文件和库文件,以确保正确地编译和链接应用程序。
RTE_TARGET环境变量指定了DPDK应用程序的目标构建配置。DPDK支持多种硬件架构和操作系统,
RTE_TARGET允许开发者为特定的硬件和操作系统配置编译环境。这个变量通常包含一个描述目标环境的字符串,该字符串对应于DPDK源代码目录中的target子目录下的一个特定目录。
(对于64位机用这个命令,对于32位机用i686-native-linuxapp-gcc)
保存退出后,
source /etc/profile
3.2.3 编译安装DPDK
进入到dpdk-19.11.14/usertools目录下
cd /home/dpdk-19.11.14/usertools
执行./dpdk-setup.sh
会输出一列可选操作:
root@ndr:/opt/dpdk-stable-19.11.14/usertools# ./dpdk-setup.sh
------------------------------------------------------------------------------
RTE_SDK exported as /opt/dpdk-stable-19.11.14
------------------------------------------------------------------------------
----------------------------------------------------------
Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm-armv7a-linux-gcc
[2] arm-armv7a-linuxapp-gcc
[3] arm64-armada-linux-gcc
[4] arm64-armada-linuxapp-gcc
[5] arm64-armv8a-linux-clang
[6] arm64-armv8a-linux-gcc
[7] arm64-armv8a-linuxapp-clang
[8] arm64-armv8a-linuxapp-gcc
[9] arm64-bluefield-linux-gcc
[10] arm64-bluefield-linuxapp-gcc
[11] arm64-dpaa-linux-gcc
[12] arm64-dpaa-linuxapp-gcc
[13] arm64-emag-linux-gcc
[14] arm64-emag-linuxapp-gcc
[15] arm64-graviton2-linux-gcc
[16] arm64-graviton2-linuxapp-gcc
[17] arm64-n1sdp-linux-gcc
[18] arm64-n1sdp-linuxapp-gcc
[19] arm64-octeontx2-linux-gcc
[20] arm64-octeontx2-linuxapp-gcc
[21] arm64-stingray-linux-gcc
[22] arm64-stingray-linuxapp-gcc
[23] arm64-thunderx-linux-gcc
[24] arm64-thunderx-linuxapp-gcc
[25] arm64-thunderx2-linux-gcc
[26] arm64-thunderx2-linuxapp-gcc
[27] arm64-xgene1-linux-gcc
[28] arm64-xgene1-linuxapp-gcc
[29] graviton2
[30] i686-native-linux-gcc
[31] i686-native-linux-icc
[32] i686-native-linuxapp-gcc
[33] i686-native-linuxapp-icc
[34] ppc_64-power8-linux-gcc
[35] ppc_64-power8-linuxapp-gcc
[36] x86_64-native-bsdapp-clang
[37] x86_64-native-bsdapp-gcc
[38] x86_64-native-freebsd-clang
[39] x86_64-native-freebsd-gcc
[40] x86_64-native-linux-clang
[41] x86_64-native-linux-gcc
[42] x86_64-native-linux-icc
[43] x86_64-native-linuxapp-clang
[44] x86_64-native-linuxapp-gcc
[45] x86_64-native-linuxapp-icc
[46] x86_x32-native-linux-gcc
[47] x86_x32-native-linuxapp-gcc
----------------------------------------------------------
Step 2: Setup linux environment
----------------------------------------------------------
[48] Insert IGB UIO module
[49] Insert VFIO module
[50] Insert KNI module
[51] Setup hugepage mappings for non-NUMA systems
[52] Setup hugepage mappings for NUMA systems
[53] Display current Ethernet/Baseband/Crypto device settings
[54] Bind Ethernet/Baseband/Crypto device to IGB UIO module
[55] Bind Ethernet/Baseband/Crypto device to VFIO module
[56] Setup VFIO permissions
----------------------------------------------------------
Step 3: Run test application for linux environment
----------------------------------------------------------
[57] Run test application ($RTE_TARGET/app/test)
[58] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
----------------------------------------------------------
Step 4: Ot