安装dpdk有两种方式:第一种命令;第二种使用dpdk-setup.sh。本文讲解通过dpdk-setup.sh来安装。
进入dpdk官网,下载想要的版本:http://core.dpdk.org/download/
yum install -y kernel-devel kernel-headers
yum install kernel.x86_64 -y
根据编译安装dpdk时候的提示是否还有其他需要安装的依赖库,在此就不一一列举了。
1. export RTE_SDK='pwd' (pwd为你dkdk的解压目录,比如/home/dpdk-19.08)
2. export RTE_TARGET=x86_64-native-linuxapp-gcc
cd /home/dpdk-19.08/usertools
./dpdk-setup.sh
第一步选择: 36,配置编译的环境。
第二步选择 43,选择硬件支持的模式
在选择43的时候出现如下错误
经过查询,是内核版本和dpdk的模块版本不一致导致的问题。
查看ls /usr/src/kernels/发现只有 3.10.0-957.27.2.el7.x86_64;而我通过uname -r查看我的版本却是:3.10.0-123.el7.x86_64。
通过rpm命令查看我所安装的内核版本:
通过rpm -e kernel-3.10.0-123.el7.x86_64 卸载掉第二个kernel,然后重启系统再用uname -r查看内核版本就变成了kernel-3.10.0-957.27.2.el7.x86_64。
再从头开始执行安装步骤。
1.export RTE_SDK='/home/dpdk-19.08'
2.export RTE_TARGET=x86_64-native-linuxapp-gcc
3../dpdk-setup.sh
第三步选择 47,设置大页内存,然后提示输入1024
设置大页内存太小会导致运行helloworld这个例子报错,所以先设置1024。
第四部选择49,绑定网卡
选择49的时候绑定网卡,需要先停掉需要绑定的网卡 。
我在虚拟机上开了四个网卡,打算停掉后面的ens38和ens39,执行如下命令:
ifconfig ens38 down
ifconfig ens39 down
然后在运行脚本来选择49:
我机器如图显示 ,直接输入02:06.0和02:07.0对应的就是ens38和ens39的网卡(前面4个0不需要输入)。
到此,环境已经搭建好了。
export RTE_SDK='/home/dpdk-19.08/'
export RTE_TARGET=x86_64-native-linuxapp-gcc
cd /home/dpdk-19.08/examples/helloworld
make
./build/helloworld
我的机器输出如上,虽然正确输出了hello from core# 但是上一句提示了错误:
EAL: Error reading from file descriptor 27: Input/output error
经了解是在虚拟机添加的网卡,dpdk不支持导致的。需要修改一行代码,跳过dpdk pci 检查:
打开/home/dpdk-19.02/kernel/linux/igb_uio/igb_uio.c,找到:
pci_intx_mask_supported(dev)
这行代码,然后修改为
pci_intx_mask_supported(dev)||true
再重新执行./dpdk-setup.sh重新编译。
再来运行./build/helloworld
这次就不会有报错了。