1安装环境建议版本
GNUmake
coreutils:cmp, sed, grep, arch
gcc:versions >= 4.5.x
libcheaders (glibc-devel.i686 / libc6-dev-i386; glibc-devel.x86_64 for 64-bitcompilation)
Linuxkernel headers or sources required to build kernel modules. (kernel- devel.x86_64)
Additionalpackages required for 32-bit compilation on 64-bit systems are: glibc.i686,libgcc.i686, libstdc++.i686 and glibc-devel.i686
Python,version 2.6 or 2.7
2 setup.sh脚本介绍
脚本在tools子目录中,用于自动化创建DPDK运行环境。
2.1脚本功能
脚本在tools子目录中,允许使用者完成以下任务:
1)构建Intel DPDK 库环境。
2)插入和移除Intel DPDK IGB_UIO、VFIO、KNI内核模块。
3)为NUMA和非NUMA体系结构创建和删除大叶表(HUGPAGE)。
4)查看网卡状态和为DPDK应用预定网卡。
5)为非root用户提供使用VFIO的权限。
6)运行test和testpmd程序。
7)查看大叶表的内存信息。
8)查看/mnt/huge叶表。
9)移除Intel DPDK的库环境。
补充说明:
自英特尔®DPDK 1.7版本提供了VFIO支持,igb_uio模块的编译和使用已成为可选的平台,支持使用VFIO。必须加载项,用如下命令进行加载:
sudo modprobe uio
sudo insmod kmod/igb_uio.ko
UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可,而UIO则是将驱动的很少 一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能!使用UIO可以避免设备的驱动程序需要随着内核的更新而更新的问题
VFIO:VFIO是一套用户态驱动框架,可用于编写高效用户态驱动。(详细请访问:
)
KNI: (K NativeInterface) SUN在发布的KVM源代码中其实就已经提供KNI(K Native Interface)这套比较标准的API扩展辅助库
2.2脚本步骤
总共分为5步,每一步操作提供一些选项供使用者去创建运行环境。分别简单介绍每一个步骤完成的任务。
1)建立DPDK库环境
首先,用户必须选择正确的对象目标和编译环境。并且,用户的安装环境必须有前面建议的安装环境。
2)安装环境
使用者配置linux 运行环境来使用dpdk应用程序。支持NUMP和非NUMP体系结构。属主环境中存在的大叶表都将被删除。这一步会加载相应的内核模块,并且会为DPDK应用绑定相应的网卡(PORT)。
3)运行应用程序
一旦以上步骤完成,使用者可以运行自带的测试程序(test)。TEST应用允许使用DPDK的一些相关函数。Testpmd支持发送和接收数据包。
4)检查系统环境
这一步提供一些工具查看hugepage信息。
5)系统环境清理
可以恢复系统到原来的状态。
3脚本安装示例
如下列子是演示如何使用setup.sh脚本。应该source命令去运行脚本。
用root用户运行脚本。
4测试程序
说明:测试程序运行过程是在虚拟机下完成。
4.1虚拟机的搭建
4.1.1创建虚拟机
安装虚拟机和centos6.5。
4.1.2添加两张inetl 千兆网卡
在安装目录F:\CentOS_VM\CentOS.vmx文件下添加:
ethernet1.virtualDev ="e1000"
ethernet1.present = "TRUE"
ethernet2.virtualDev ="e1000"
ethernet2.present = "TRUE"
并设置为host only。打开虚拟机查看是否添加成功,使用如下命令进行查询:lspci | grep Ethernet
4.2开始安装脚本
下载源码,从官网上下载,测试版本为dpdk-1.7.0。
4.2.1添加环境变量
exportRTE_SDK=‘pwd‘
#export RTE_TARGET=x86_64-default-linuxapp-gcc
exportRTE_TARGET=i686-default-linuxapp-gcc
由于我的是32虚拟机,所以我选择i686,将x86_64那行环境变量注释掉;
4.2.2运行setup.sh
./tools/setup.sh
------------------------------------------------------------------------------
RTE_SDKexported as /home/pym/dpdk-1.7.0
------------------------------------------------------------------------------
----------------------------------------------------------
Step 1: Selectthe DPDK environment to build
----------------------------------------------------------
[1] i686-native-linuxapp-gcc
[2] i686-native-linuxapp-icc
[3] x86_64-ivshmem-linuxapp-gcc
[4] x86_64-ivshmem-linuxapp-icc
[5] x86_64-native-bsdapp-gcc
[6] x86_64-native-linuxapp-gcc
[7] x86_64-native-linuxapp-icc
----------------------------------------------------------
Step 2: Setuplinuxapp environment
----------------------------------------------------------
[8] Insert IGB UIO module
[9] Insert VFIO module
[10] Insert KNI module
[11] Setup hugepage mappings for non-NUMA systems
[12] Setup hugepage mappings for NUMA systems
[13] Display current Ethernet device settings
[14] Bind Ethernet device to IGB UIO module
[15] Bind Ethernet device to VFIO module
[16] Setup VFIO permissions
----------------------------------------------------------
Step 3: Runtest application for linuxapp environment
----------------------------------------------------------
[17] Run test application ($RTE_TARGET/app/test)
[18] Run testpmd application in interactive mode($RTE_TARGET/app/testpmd)
----------------------------------------------------------
Step 4: Othertools
----------------------------------------------------------
[19] List hugepage info from /proc/meminfo
----------------------------------------------------------
Step 5:Uninstall and system cleanup
----------------------------------------------------------
[20] Uninstall all targets
[21] Unbind NICs from IGB UIO driver
[22] Remove IGB UIO module
[23] Remove VFIO module
[24] Remove KNI module
[25] Remove hugepage mappings
[26] Exit Script
4.2.3根据系统类型选择
测试环境选择1
4.2.4安装IGB_UIO
选择8
进行igb_uio.ko驱动的安装,这个驱动在编译后是,在i686-default-linuxapp-gcc/kmod/ 目录中;其实在安装igb_uio.ko之前,脚本先安装了uio模块,uio是一种用户态驱动的实现机制,dpdk有些东西时基于uio实现的;有兴趣 的可以了解一下uio的驱动使用
4.2.5设置hugepage
选择11
有让你输入预留内存大小的 我输入的是 64 , 64 乘以 2M 可以128M 做个简单的测试够了。
4.2.6进行网卡bind
选择14
让你输入pci的地址, 你只要将0000:02:06.0 中的,0000冒号后面的几位输入就行了, 如 02:06.0 记得标点也要输。
4.2.7选择对应的程序进行测试
选择17