ubuntu14.04下安装dpdk及运行

来源:互联网 发布:离散数学 编程 编辑:程序博客网 时间:2024/04/30 08:50

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需要在内核启动参数中设置,具体如下:

查看cpu是否支持1G大内存页:

cat /proc/cpuinfo | grep pdpe1gb

如果有显示,则支持1G大内存页

默认支持2M内存页

cat /proc/cpuinfo |grep pse

如果有显示,则支持2M内存页

? vim /etc/default/grub

找到GRUB_CMDLINE_LINUX=””,在双引号中添加default_hugepagesz=1G hugepagesz=1G hugepages=16 isolcpus=1,2,3,4,5,6,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,igb_uio

从上面的输出可以可以看到有两个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

或者在/etc/profile文件末尾增加

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为一对;

-T 1 在执行程序的时候,会有一些统计数据打印到屏幕上,这个的 参数是设定多长时间统计一次,显示到屏幕,1秒钟一次;

0 0
原创粉丝点击