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是一套用户态驱动框架,可用于编写高效用户态驱动。(详细请访问:

https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/vfio?lang=en

    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