正文
最新的DPDK版本可见DPDK官网 https://dpdk.org/ ,本文主要介绍DPDK的使用自动化(dpdk-setup.sh)方式来完成开发环境的搭建以及在虚拟机中搭建过程中所遇到一些问题和解决方法。
1.所使用的系统和软件版本
系统:Ubuntu 16.04.3 LTS 64位 [下载地址]
dpdk: 17.08.1 [下载地址]
DPDK 17.08.1 在虚拟机试验,由于网卡兼容性等问题,会使得配置好开发环境后运行各示例都有以下错误
EAL:Error reading from file descriptor
解决方法:
在解压后文件中,路径:DPDK所在文件夹/lib/librte_eal/linuxapp/igb_uio/igb_uio.c中
/* fall back to INTX */
case RTE_INTR_MODE_LEGACY:
if (pci_intx_mask_supported(dev)) {
dev_dbg(&dev->dev, "using INTX");
udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD;
udev->info.irq = dev->irq;
udev->mode = RTE_INTR_MODE_LEGACY;
break;
}
dev_notice(&dev->dev, "PCI INTX mask not supported\
修改为:
/* fall back to INTX */
case RTE_INTR_MODE_LEGACY:
if (pci_intx_mask_supported(dev)||true) {
dev_dbg(&dev->dev, "using INTX");
udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD;
udev->info.irq = dev->irq;
udev->mode = RTE_INTR_MODE_LEGACY;
break;
}
dev_notice(&dev->dev, "PCI INTX mask not supported\
2.虚拟机配置
vmware:11.1.1 build-2771112
CPU: 2个CPU,每个CPU 2个核心
内存:2GB
网卡:网卡*3 (网络连接方式:NAT 桥接 桥接)
3.DPDK版本配置环境要求
如果使用不同的dpdk版本,最好看一下官方dpdk的pdf要求,dpdk16.07要求内核•Kernel version >= 2.6.34(使用uname –r查看),glibc>=2.7,(ldd –version查看)。
4.DPDK环境搭建过程
建议首先获取root权限,root没开的话使用在编译和配置环境会出现问题,会5.所遇到的问题及解决方法中介绍
其次解压下载好的DPDK文件
tar xvJf dpdk-17.08.1.tar.xz
4.1 配置环境变量
export RTE_SDK=
export RTE_TARGET=x86_64-native-linuxapp-gcc
然后用source启用这几个环境变量; source dpdk.rc
注意:每次重启后需要重新配置环境
4.2 利用dpdk-setup.sh进行配置
sudo ./dpdk-setup.sh
注意:此命令在dpdk-stable-17.08.1/usertools路径下运行
运行后会出现
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:
注意:不同版本的dpdk,配置目录不同,要仔细查看内容所对应的数字是多少
(1)这里选择13(x86_64-native-linuxapp-gcc),进行编译
(2)编译完成后,选择16, 插入igb_uio模块
(3)选择19,配置大页内存(非NUMA),选择后会提示你选择页数,输入128
选择27可以查看大页的情况
(4)绑定网卡,选择21,查看当前网卡状况
若Active,则33退出,输入指令
sudo ifconfig ens38 down
sudo ifconfig ens39 down
重新进入配置目录,选择22,输入指令绑定
02:06.0
02:07.0
并选择21重新查看网卡状况
注意 要绑定两张网卡
(5)
选择26, 运行testpmd测试程序
如果没有问题,回车后出现以下输出
输入start,开始转发
输入stop,停止包转发,显示统计信息
5.所遇到的问题及解决方法
问题1:选择13编译失败报错
解决方法:sudo ./dpdk-setup.sh 或者 su 获得root权限在运行
问题2:选择13编译失败报错,显示找不到numa.h
解决办法:sudo apt-get install libnuma-dev
问题3:ERROR: Target does not have the DPDK UIO Kernel Module. please try to rebuild target.
解决办法:没有插入igb_uio模块
问题4:绑定网卡报错
解决方法:这是由于网卡被占用,需要sudo ifconfig ens38(具体) down 在重新进行绑定
问题5:无法运行26选项的testpmd测试
解决方法:这是提到的为什么第一步要获得root权限,一般用户下root设置环境变量时会出问题的。其次在设置环境变量时,请自己编写,复制粘贴有时仍会出错。
问题6:cause:creation of mbuf pool for socket 0 failed can not allocate memory
解决办法:重新分配大页内存大小,给予足够大,即可解决问题
至于25测试仍然无法运行,显示command not found 还没有解决