声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date: 2013-7-5 13:38:52 Friday
Last Change: 2013-8-7 10:53:23 Wednesday
转载请注明出处:http://blog.csdn.net/linzhaolover
此文请结合intel dpdk源码去阅读,源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
intel DPDK交流群希望大家加入互相学习,QQ群号:
289784125
本文章基于intel dpdk 的源码1.3.1 版本进行讲解;
1、概要:
intel dpdk(Intel® Data Plane Development Kit) 是intel开发的一个关于网络数据包处理转发的套件;
intel dpdk 官网
http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/packet-processing-is-enhanced-with-software-from-intel-dpdk.html
6wind 官网
http://dpdk.org
2、系统环境要求
首先查看一下的自己当前的系统环境,决定是否可以安装intel dpdk;
1)网卡
目前应该只支持intel的部分网卡,如:我的网卡是intel82576的,
lspci | grep Ethernet
15:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
15:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
大概还支持以下列表中的网卡;http://www.java123.net/detail/view-429081.html
轮询驱动模型-1GbE 控制器(librte_pmd_igb)
支持intel 82576 gb ethernet 控制器(以前叫做kawela)
支持intel 82580 gb ethernet 控制器(以前叫做Barton hills)
支持intel I350 gb控制器(以前叫做Powerville)
轮询驱动模型-10GbE 控制器(librte_pmd_ixgbe)
支持intel 82599 10gb ethernet 控制器(以前叫做Niantic)
支持intel Ethernet 服务器适配器X520-T2(以前叫做Iron Pond)
支持intel Ethernet 控制器X540-T2(以前叫做Twin Pond)
支持Virtual Machine Device Queues(VMDq)和Data Center Bridging(DCB)
支持自适应到1Gb
支持Flow Director
查看系统有多少个cpu,支持多少硬件线程,我的有12个core,也是 说支持12个cpu硬件线程
cat /proc/cpuinfo
查看系统内存,内存也应该大点,因为dpdk利用了,hugepage技术;
cat /proc/meminfo
查看hpet,需要支持hpet,
grep hpet /proc/timer_list
Clock Event Device: hpet
set_next_event: hpet_legacy_next_event
set_mode: hpet_legacy_set_mode
如果没有显示,需要设置bios;
Advanced -> PCH-IO Configuration -> High Precision Timer -> (Change from Disabled to Enabled if necessary)
查看系统内核是否支持hugepage;
官方文档说,内核版本要大于kernel >= 2.6.33才支持hugepage,但我升级了一下内核为3.0.36的,所以说,你还是将内核升级到最新版本吧;
3、安装部署
下载dpdk源码:
git clone git://dpdk.org/dpdk
or
git clone http://dpdk.org/git/dpdk
安装dpdk
dpdk有自己的安装脚本,去按数字选择安装,当然也可以自己手动安装;
脚本安装
cd dpdk
./tools/setup.sh
手动安装
make install T=x86_64-default-linuxapp-gcc
编辑一个环境变量文件,然后source,
vim dpdk.rc ,将下面两行添加进去;设置环境变量;
export RTE_SDK=`pwd`
export RTE_TARGET=x86_64-default-linuxapp-gcc
$ > source dpdk.rc
配置hugepage
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
上面设置为每块内存大小为2M,共申请1024个2M内存;
配置网卡驱动,dpdk的数据处理是基于用户态的,所以用的底层的uio模块,主要数据处理部分放在上层应用,底层驱动很少的代码;
modprobe uio
cd x86_64-default-linuxapp-gcc
make
insmod kmod/igb_uio.ko
新的网卡驱动用到了uio底层的函数
4、运行测试程序helloworld
cd examples/helloworld
make
./build/helloworld -c f -n 2
EAL: coremask set to f
EAL: Detected lcore 0 as core 0 on socket 0
EAL: Detected lcore 1 as core 1 on socket 0
EAL: Detected lcore 2 as core 2 on socket 0
EAL: Detected lcore 3 as core 8 on socket 0
EAL: Setting up hugepage memory...
EAL: Ask a virtual area of 0x80000000 bytes
EAL: Virtual area found at 0x7f9a6b000000 (size = 0x80000000)
EAL: Requesting 1024 pages of size 2MB from socket 0
EAL: Increasing open file limit
EAL: Master core 0 is ready (tid=ec19b800)
EAL: Core 3 is ready (tid=693f0700)
EAL: Core 1 is ready (tid=6a3f2700)
EAL: Core 2 is ready (tid=69bf1700)
hello from core 1
hello from core 2
hello from core 3
hello from core 0
参数解释
c 代表用几个core, 采用bit位设置,如 f 代码 二进制 1111 相当于 从0到3这4个core都采用;
n 表示设置内存的通道数;(这一点 我也不怎么了解)
待续。。。。。。
学习是一种循序渐进的过程,一天进步一点点,坚持不懈;
欢迎大家学习交流