ubuntu14.04下安装DPDK
一.硬件环境:
cpu: intel i7-4790K
内存: 金士顿32G DDR3
硬盘: 华硕z97-K
硬盘: 1T
BISO:需要支持HPET(Advanced->PCH-IO Configuration -> High Precision Timer 选择Enable)
PCIE: 1 x PCIe 3.0/2.0 x16 扩展卡插槽 (x16 模式,灰色)
开启HPET:
# grep hpet /proc/timer_list
如果没有显示,则需要在BIOS中开启HPET
开启方式:
? 进入BIOS
? 进入Advanced -> PCH-IO Configuration -> High Precision Timer ? 把 High Precision Timer从Disabled 改为 Enabled
二. 软件环境
从ubuntu官网下载ubuntu14.04 64位系统
下载地址:http://www.ubuntu.com/download/desktop
DPDK2.0要求:
kernel-version >=2.6.33 :查看命令 uname –r
glibc>=2.7: 查看命令ldd --version
下载安装完成后建立root用户:
1. 在终端下输入:
sudo passwd root
输入root密码
2. 更改配置文件,使能root登陆
sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
增加以下两条命令:
greeter-show-manual-login=true
allow-guest=false
3. 重启,以root用户登陆
三. DPDK安装
3.1 DPDK下载
DPDK各种版本下载地址: http://dpdk.org/browse/dpdk/refs/
本次使用的是DPDK 2.0版本,直接从官网下载:
? 打开ubuntu终端,安装git:
apt-get install git
? 安装dpdk:
git clone git://dpdk.org/dpdk
3.2 DPDK编译安装
3.2.1编译
? cd /root/dpdk
? make config T=x86_64-native-linuxapp-gcc && make
? make install T=x86_64-native-linuxapp-gcc
3.2.2加载内核模块
打开~/.bashrc,写入下面命令
modprobe uio_pci_generic
3.2.3设置大内存页,隔离cpu
设备的配置是32G内存,分出16G的大内存页给DPDK使用,并将1,2,3,4,5,6,7这7个cpu隔离出来,设置1G大内存页和隔离cpu需要在内核启动参数中设置,具体如下:
cat /proc/cpuinfo | grep pdpe1gb
默认支持2M内存页
cat /proc/cpuinfo |grep pse
? vim /etc/default/grub
找到GRUB_CMDLINE_LINUX=””,在双引号中添加default_hugepagesz=1G hugepagesz=1G hugepages=16 isolcpus=1,2,7
? 执行update-grub命令
? 打开~/.bashrc,写入以下两条命令:
mkdir –p /mnt/huge
mount –t hugetlbfs nodev /mnt/huge
? 重启系统:
reboot
3.2.4绑定网卡
运行/root/dpdk/tools下的dpdk_nic_bind.py脚本绑定网卡
./tools/dpdk_nic_bind.py --bind=uio_pci_generic [device0] ? 首先通过脚本看看本机有哪些可用的网卡,包括网卡当前的状态
./tools/ dpdk_nic_bind.py –status
输出如下
Network devices using IGB_UIO driver
====================================
<none>
Network devices using kernel driver
===================================
0000:02:00.0 'I350 Gigabit Network Connection' if=eth0 drv=igb unused=igb_uio *Active*
Other network devices
=====================
0000:83:00.0 '82599EB 10-Gigabit SFI/SFP+ Network Connection' unused=ixgbe,igb_uio
0000:83:00.1 '82599EB 10-Gigabit SFI/SFP+ Network Connection' unused=ixgbe,230)"> 从上面的输出可以可以看到有两个intel 10G网口并没有绑定到任何驱动。 ? 通过命令把0000:83:00.0绑定到uio_pci_generic模块:
./tools/dpdk_nic_bind.py --bind=uio_pci_generic 0000:82:00.0
绑定完成后再通过status参数来查看状态发现0000:83:00.0网口已经绑定到uio_pci_generic上了。
四.设置环境变量
在当前shell下输入以下两个命令
export RTE_SDK=/dpdk
export RTE_TARGET=x86_64-native-linuxapp-gcc
然后执行source /etc/profile 命令
RTE_SDK后为dpdk目录的路径
五.测试l2fwd
进入/root/dpdk/example/l2fwd下,执行make命令编译l2fwd。 l2fwd命令执行的格式如下:
./build/l2fwd [EAL options] -- -p PORTMASK [-q NQ] -T PERIOD
EAL options:
-c COREMASK: A hexadecimal bitmask of cores to run on
-n NUM : Number of memory channels
-p PORTMASK : A hexadecimal bitmask of the ports to configure
-q NQ: A number of queues (=ports) per lcore (default is 1)
-T PERIOD: statistics will be refreshed each PERIOD seconds (0 to disable,10 default,86400 maximum)
本次测试2个万兆口,命令如下:
./build/l2fwd –c 0x0F –n 2 -- -p 0x03 -T 1
参数讲解:
-c 0x0F 指分配4个core给dpdk程序,这个参数是主参数,必须设定; -n 2 指内存通道数
-- 由于程序有主次参数之分,主参数是在指所有实例程序都可以用的参数;次参数,是指每个实例程序自身拥有的参数, -- 之后的为次参数;
-p 0x3 设置dpdk起点的端口数,也是以16进制的源码作为标志位, 0x3是指后两位为1,也就是起点两个端口,0和1为一对;