0%

DPDK环境搭建

    Dpdk全称为(Data Plane Development Kit),字面上看解释其实就是一款数据面软件开发套件,究其本质,也就是一些底层的软件库组成。是一个高性能网络数据宝处理框架。我最初开始接触Dpdk的时候一脸懵逼,没有任何人教授,只能在网络上一点点啃,国内外各种资料慢慢磨,慢慢摸索出一些门道,现在还是很菜,但是至少有迹可循了!!记录下dpdk环境搭建开发的一个过程,帮助下有缘的小白们入门。

  1. 安装操作系统

我使用的操作系统是Centos8.0,实际使用的操作系统。其他的操作系统也可以,注意对应的版本的硬件CPU注意是否支持,方便述说,下面默认介绍Centos8.0操作系统上具体的步骤。

  1. 选择dpdk版本

dpdk大版本之间的差异还是比较大的,可能有些接口就变了,所以选择一个稳定的版本进行开发还是很有必要的,我是学习使用所以就没那么多讲究,我使用的版本是17.08,源码下载地址。下载源码,在服务器上解压。

  1. 编译dpdk

dpdk提供了安装向导,可以在usertools目录下执行脚本sh dpdk-setup.sh,注意低版本可能没有。这个向导其实主有三个步骤,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[22:49:37][root@xiaoluo usertools]#sh dpdk-setup.sh 
------------------------------------------------------------------------------
RTE_SDK exported as /root/lpyuan/dpdk/dpdk-stable-17.08.2
------------------------------------------------------------------------------
----------------------------------------------------------
Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm64-armv8a-linuxapp-clang
[2] arm64-armv8a-linuxapp-gcc
[3] arm64-dpaa2-linuxapp-gcc
[4] arm64-thunderx-linuxapp-gcc
[5] arm64-xgene1-linuxapp-gcc
[6] arm-armv7a-linuxapp-gcc
[7] i686-native-linuxapp-gcc
[8] i686-native-linuxapp-icc
[9] ppc_64-power8-linuxapp-gcc
[10] x86_64-native-bsdapp-clang
[11] x86_64-native-bsdapp-gcc
[12] x86_64-native-linuxapp-clang
[13] x86_64-native-linuxapp-gcc
[14] x86_64-native-linuxapp-icc
[15] x86_x32-native-linuxapp-gcc

----------------------------------------------------------
Step 2: Setup linuxapp environment
----------------------------------------------------------
[16] Insert IGB UIO module
[17] Insert VFIO module
[18] Insert KNI module
[19] Setup hugepage mappings for non-NUMA systems
[20] Setup hugepage mappings for NUMA systems
[21] Display current Ethernet/Crypto device settings
[22] Bind Ethernet/Crypto device to IGB UIO module
[23] Bind Ethernet/Crypto device to VFIO module
[24] Setup VFIO permissions

----------------------------------------------------------
Step 3: Run test application for linuxapp environment
----------------------------------------------------------
[25] Run test application ($RTE_TARGET/app/test)
[26] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

----------------------------------------------------------
Step 4: Other tools
----------------------------------------------------------
[27] List hugepage info from /proc/meminfo

----------------------------------------------------------
Step 5: Uninstall and system cleanup
----------------------------------------------------------
[28] Unbind devices from IGB UIO or VFIO driver
[29] Remove IGB UIO module
[30] Remove VFIO module
[31] Remove KNI module
[32] Remove hugepage mappings

[33] Exit Script

Option:

Step 1: Select the DPDK environment to build(选择dpdk环境进行编译)

Step 2: Setup linuxapp environment(配置对应开发的应用层的程序环境的环境,主要是一些虚拟网卡的配置)

Step 3: Run test application for linuxapp environment(测试我们搭建的环境是否可用)

由于我是Centos 8.0系统内核版本为4.18.0-193.14.2.el8_2.x86_64,我就选择了[13] x86_64-native-linuxapp-gcc编译项。

遇到报错:

image-20210510232108101

以上报错是缺少numa.h头文件造成,执行命令安装yum -y install numactl-devel.x86_64安装,安装numa之后,重新选择编译,又再一次出现以下报错。

image-20210510232722134

执行命令elfutils-libelf-devel.x86_64安装。

  1. 加载igb_uio驱动模块

选择16选项,[16] Insert IGB UIO module

image-20210510233519952
  1. 绑定网卡

  2. 设置内存大页

选择选项[20] Setup hugepage mappings for NUMA systems因为我的是2M的内存页,所以我输入1024那就是2014*2M等于2G。

image-20210510233850685
  1. 配置全局环境变量

实际的路径地址以你的目录地址为准!!

1
2
3
4
5
// 配置开发套件目录
export RTE_SDK=/root/lpyuan/dpdk/dpdk-stable-17.08.2

// 配置dpdk目标目录
export RTE_TARGET=x86_64-native-linuxapp-gcc
image-20210510235030390
  1. 检测环境是否正常

dpdk提供了一个简单的hello world示例程序在examples/helloworld目录下进入到该目录,执行make命令 编译Makefile,在build目录下会生成一个helloworld的可执行程序,执行运行命令helloworld -c 0x3(CPU掩码)执行1、3号core运行,成功运行则如下所示,由于我只有一个核心core所以只打印出出一个helloworld,下图显示在core 0上运行成功。

image-20210510235859069
小主,路过打个赏再走呗~