1. 下载dpdk安装包
DPDK
下载 dpdk-20.05.tar.gz
解压到本地目录/home下: tar -xvf dpdk-20.05.tar.gz
2. 环境变量配置:
在dpdk-20.05下,创建一个dpdkenv的文件,在里面填充如下内容:
export RTE_SDK='/usr/local/dpdk-20.05' (pwd为你dkdk的解压目录), (注意中英文符号)
export RTE_TARGET=x86_64-native-linuxapp-gcc (对于64位机用这个命令,对于32
位机用i686-native-linuxapp-gcc)
执行一下 source dpdkenv.
查看环境变量是否设置好:env |grep RTE
3. 安装依赖
yum -y install gcc //安装gcc环境
yum install numactl-devel*x86_64 //安装numa.h相关库即可解决
modprobe uio //uio模块没有加载
4 遇到的问题:
1. 内核版本和dpdk的模块版本不一致导致的,修改为正确的版本
1 #cat /etc/redhat-release
2 CentOS Linux release 7.6.1810 (Core)
4 #uname -r 查看一下系统版本
5 3.10.0-957.el7.x86_64
6 #rpm -qa kernel 通过rpm命令查看我所安装的内核版本
7 kernel-3.10.0-957.el7.x86_64
8 #ls /usr/src/kernels/ 查看有没有相应的内核开发包
9 空 如果该目录下没有系统内核源码,执行以下操作
10 #yum install kernel-devel 安装内核头文件后
11 #ls /usr/src/kernels/
12 3.10.0-1062.12.1.el7.x86_64
13 两个版本号不一致,进行升级并重启
18 #yum -y update kernel kernel-devel
19 #reboot
20 再此查看,版本号一致,问题解决
21 #ls /usr/src/kernels/
22 3.10.0-1062.12.1.el7.x86_64
23 #uname -r
24 10.0-1062.12.1.el7.x86_64
2. 即使安装了uio之后有可能在执行安装脚本的时候还会遇到问题
原因:
dpdk编译后无igb_uio.ko或安装Insert IGB UIO module失败
自v20.02版本以后,DPDK就默认关闭igb_uio模块。若构建它,需要配置文件选项CONFIG_RTE_EAL_IGB_UIO设置为enabled。并且官方已计划将其移到其他项目。
解决办法:
一是配置文件dpdk/config/common_base中开启该配置CONFIG_RTE_EAL_IGB_UIO=y,注意这个文件是全局配置。如果仅修改局部的编译,可以在编译时各自文件夹dpdk/x86_64-native-linux-gcc/.config文件中对应修改该参数。本文采用v20.02版本,系统内核3.10,可以正常编译出igb_uio.ko文件。(调试DPDK可开启参数CONF_RTE_LIBRTE_CRYPTODEV_DEBUG=y)
$ vi config/common_base
#修改CONFIG_RTE_EAL_IGB_UIO=y
#:wq
3. 在dpdk接管接口时提示not modifying
解决办法:ifconfig ens33 down //需要接管的接口down掉
5 通过dpdk提供的脚本安装dpdk
到 /usr/local/dpdk-19.02/usertools目录下,执行./dpdk-setup.sh,依次选择执行以下操作:
1. 配置编译环境:
[38] x86_64-native-linuxapp-gcc
2.加载igb_uio模块
3.配置大页
4.绑定网卡:
需要使用命令查看接口信息并将接口down掉
6 验证接口接管情况
接口已经成功被dpdk接管
[root@nll-waf-dev-2 usertools]# ./dpdk-devbind.py --status
Network devices using DPDK-compatible driver
============================================
0000:00:04.0 'Virtio network device 1000' drv=igb_uio unused=virtio_pci
Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,igb_uio *Active*
7 测试dpdk
完成以上内容环境就配置完成了,下面我们来测试一下,测试程序在/usr/local/dpdk-20.05/example/helloworld目录下:
-
在dpdk-20.05/目录下 配置环境变量:source dpdkenv
-
在dpdk-20.05/example/helloworld/目录下 编译:make,之后生成一个build目录
-
执行可执行文件:./build/helloworld