intel DPDK虚拟机开发环境配置

DPDK介绍见:www.dpdk.org

1. 所用系统与软件版本

系统:Ubuntu 12.04.3 LTS 64位, CentOS Linux release 7.0.1406 64位
dpdk: 1.7.0 (下载页

dpdk 1.7.1 经过试验,发现在这两个系统上都有问题, 运行各示例程序都有以下错误
  EAL: Error reading from file descriptor

2. 虚拟机配置

虚拟机软件:VMWare WorkStation 10.0.1 build-1379776
CPU: 2个CPU, 每个CPU2个核心
内存: 1GB+
网卡:intel网卡*2, 用于dpdk试验;另一块网卡用于和宿主系统进行通信

3. Ubuntu 12.04上的配置

3.1 准备

需要安装gcc及其他一些小工具等,默认都有了,没有的话运行sudo apt-get install装一下。dkdk的一些脚本用到了python,也装一下。

3.2 通过setup脚本进行配置

首先运行su切换到root权限,root没有开的话使用

su passwd root

来开一下。

dpdk提供了一个方便的配置脚本: <dpdk>/tools/setup.sh,通过它可以方便地配置环境。
1) 设置环境变量,这里是linux 64位的配置

export RTE_SDK <dpdk>
export RTE_TARGET=x86_64-native-linuxapp-gcc

2)运行setup.sh,显示如下

------------------------------------------------------------------------------
 RTE_SDK exported as /home/hack/dpdk-1.7.0
------------------------------------------------------------------------------
----------------------------------------------------------
 Step 1: Select the 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: Setup linuxapp 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: Run test 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: Other tools
----------------------------------------------------------
[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

选择6, 进行编译

3)选择8, 插入igb_uio模块

4)选择11,配置大页内存(非NUMA),选择后会提示你选择页数,输入64,128什么的即可

Removing currently reserved hugepages
Unmounting /mnt/huge and removing directory

  Input the number of 2MB pages
  Example: to have 128MB of hugepages available, enter ‘64‘ to
  reserve 64 * 2MB pages
Number of pages: 128

选择19,可以确认一下大页内存的配置:

AnonHugePages:         0 kB
HugePages_Total:     128
HugePages_Free:      128
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

5)选择14, 绑定dpdk要使用的网卡

Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:02:01.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ if=eth0 drv=e1000 unused=igb_uio *Active*
0000:02:06.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ if=eth1 drv=e1000 unused=igb_uio
0000:02:07.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ if=eth2 drv=e1000 unused=igb_uio 

Other network devices
=====================
<none>

Enter PCI address of device to bind to IGB UIO driver: 0000:02:06.0

绑定好后,选择13,可以查看当前的网卡配置:

Network devices using DPDK-compatible driver
============================================
0000:02:06.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ drv=igb_uio unused=e1000
0000:02:07.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ drv=igb_uio unused=e1000

Network devices using kernel driver
===================================
0000:02:01.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ if=eth0 drv=e1000 unused=igb_uio *Active*

Other network devices
=====================
<none>

6)选择18, 运行testpmd测试程序

注意,运行这个测试程序,虚拟机最好提供2个网卡用于dpdk。

  Enter hex bitmask of cores to execute testpmd app on
  Example: to execute app on cores 0 to 7, enter 0xff
bitmask: f

如果没问题,按回车后会出现以下输出:

Launching app
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 0 on socket 0
EAL: Detected lcore 3 as core 1 on socket 0
EAL: Support maximum 64 logical core(s) by configuration.
EAL: Detected 4 lcore(s)
EAL: Setting up memory...
EAL: Ask a virtual area of 0xf000000 bytes
EAL: Virtual area found at 0x7fe828000000 (size = 0xf000000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7fe827c00000 (size = 0x200000)
EAL: Ask a virtual area of 0x200000 bytes
EAL: Virtual area found at 0x7fe827800000 (size = 0x200000)
EAL: Ask a virtual area of 0x800000 bytes
EAL: Virtual area found at 0x7fe826e00000 (size = 0x800000)
EAL: Ask a virtual area of 0x400000 bytes
EAL: Virtual area found at 0x7fe826800000 (size = 0x400000)
EAL: Requesting 128 pages of size 2MB from socket 0
EAL: TSC frequency is ~3292453 KHz
EAL: Master core 0 is ready (tid=37c79800)
EAL: Core 3 is ready (tid=24ffc700)
EAL: Core 2 is ready (tid=257fd700)
EAL: Core 1 is ready (tid=25ffe700)
EAL: PCI device 0000:02:01.0 on NUMA socket -1
EAL:   probe driver: 8086:100f rte_em_pmd
EAL:   0000:02:01.0 not managed by UIO driver, skipping
EAL: PCI device 0000:02:06.0 on NUMA socket -1
EAL:   probe driver: 8086:100f rte_em_pmd
EAL:   PCI memory mapped at 0x7fe837c23000
EAL:   PCI memory mapped at 0x7fe837c13000
EAL: PCI device 0000:02:07.0 on NUMA socket -1
EAL:   probe driver: 8086:100f rte_em_pmd
EAL:   PCI memory mapped at 0x7fe837bf3000
EAL:   PCI memory mapped at 0x7fe837be3000
Interactive-mode selected
Configuring Port 0 (socket 0)
Port 0: 00:0C:29:14:50:CE
Configuring Port 1 (socket 0)
Port 1: 00:0C:29:14:50:D8
Checking link statuses...
Port 0 Link Up - speed 1000 Mbps - full-duplex
Port 1 Link Up - speed 1000 Mbps - full-duplex
Done
testpmd> 

输入start, 开始包转发

testpmd> start
  io packet forwarding - CRC stripping disabled - packets/burst=32
  nb forwarding cores=1 - nb forwarding ports=2
  RX queues=1 - RX desc=128 - RX free threshold=0
  RX threshold registers: pthresh=8 hthresh=8 wthresh=0
  TX queues=1 - TX desc=512 - TX free threshold=0
  TX threshold registers: pthresh=32 hthresh=0 wthresh=0
  TX RS bit threshold=0 - TXQ flags=0x0

输入stop,停止包转发,这时会显示统计信息

testpmd> stop
Telling cores to stop...
Waiting for lcores to finish...

  ---------------------- Forward statistics for port 0  ----------------------
  RX-packets: 5544832        RX-dropped: 0             RX-total: 5544832
  TX-packets: 5544832        TX-dropped: 0             TX-total: 5544832
  ----------------------------------------------------------------------------

  ---------------------- Forward statistics for port 1  ----------------------
  RX-packets: 5544832        RX-dropped: 0             RX-total: 5544832
  TX-packets: 5544832        TX-dropped: 0             TX-total: 5544832
  ----------------------------------------------------------------------------

  +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
  RX-packets: 11089664       RX-dropped: 0             RX-total: 11089664
  TX-packets: 11089664       TX-dropped: 0             TX-total: 11089664
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Done.

3.3 通过命令配置

最好切换到root权限。

1)编译dpdk

进入dpdk主目录<dpdk>,输入

make install T=x86_64-native-linuxapp-gcc

进行编译

2)配置大页内存(非NUMA)

echo 128 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

可以用以下命令查看大页内存状态:

cat /proc/meminfo | grep Huge

3)安装igb_uio驱动

modprobe uio
insmod x86_64-native-linuxapp-gcc/kmod/igb_uio.ko

4)绑定网卡

先看一下当前网卡的状态

 ./tools/dpdk_nic_bind.py --status

Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:02:01.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ if=eth0 drv=e1000 unused=igb_uio *Active*

Other network devices
=====================
0000:02:06.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ unused=e1000,igb_uio
0000:02:07.0 ‘82545EM Gigabit Ethernet Controller (Copper)‘ unused=e1000,igb_uio

进行绑定:

./tools/dpdk_nic_bind.py -b igb_uio 0000:02:06.0
./tools/dpdk_nic_bind.py -b igb_uio 0000:02:07.0

如果网卡有接口名,如eth1, eth2, 也可以在-b igb_uio后面使用接口名, 而不使用pci地址。

5) 运行testpmd测试程序

 ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3 -n 2 -- -i

6)编译运行其他示例程序

<dpdk>/examples下面有很多示例程序,这些程序在dpdk编译时,没有被编译。这里以编译helloworld为例,首先要设置环境变量:

export RTE_SDK <dpdk>
export RTE_TARGET=x86_64-native-linuxapp-gcc

之后进入<dpdk>/examples/helloworld,运行make,成功会生成build目录,其中有编译好的helloworld程序。

4. CentOS 7.0上的配置

4.1 准备

安装CentOS虚拟机时,如果选择minimal安装,还需要安装其下的基本开发工具集(含gcc,python等)

另外,dpdk提供的dpdk_nic_bind.py脚本中会调用到lspci命令,这个默认没有安装,运行以下命令安装(不安装此工具则无法绑定网卡):

yum install pciutils

ifconfig默认也没有安装,如果想用它,应运行:

yum install net-tools

在CentOS上,要绑定给dpdk使用的网卡在绑定前,可能是活动的(active),应将其禁用,否则无法绑定。禁用的一种方式是运行:

ifconfig eno33554984 down

eno33554984是接口名,如同eth0一样。

在CentOS上使用setup.sh和通过命令编译和配置dpdk的过程与Ubuntu一样,这里就从略了。

时间: 2024-10-08 22:31:59

intel DPDK虚拟机开发环境配置的相关文章

Ubuntu虚拟机+ROS+Android开发环境配置笔记

Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04, 比较稳定,且支持很多ROS 3.虚拟机配置:硬盘至少50G,因为整个工具链配置起来需要很多空间,性能方面可以尽量往高配置. 4.虚拟环境搭建起来后,Ubuntu会弹出提示窗口询问是否升级软件,升级完后重启,约30分钟,取决于网络环境. 5.重启后,terminal执行以下: $ sudo apt-get upgrade $ s

Android开发环境配置(以windows为例)

Android开发环境配置工具  如果你准备从事Android开发,那么无论选择在eclipse下开发,还是选择在AndroidStudio下开发,都可以参照以下步骤进行Android开发环境的配置. Android开发环境配置过程 1.准备笔记本或台式机 使用笔记本还是台式机,视个人需求而定,但我要强调的是在配置上不要手软,要舍得下手.一台流畅的电脑,会让你在枯燥的编程中不至于抓狂. 官方推荐的AndroidStudio或eclipse运行环境对电脑配置要求很低,现在市面上的电脑基本都可以达到

Android开发环境配置(win7_64bit)

Android开发环境配置(win7_64bit) 目录 1.概述 2.Android开发涉及的技术 3.Android常用开发环境搭建 4.注意事项 >>看不清的图片可在新标签打开查看大图 1.概述 Android开发是什么,相信已不用做过多介绍,不过需要了解的是,Android开发不仅仅是用Java和XML写个APP,一个完整的开发流程,可能涉及从移动端到网页再到服务器等的诸多技术,需要全面掌握. 2.Android开发涉及的技术 最开始肯定要学JavaSE部分,面向对象.IO.多线程.网

ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置

原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/8113948   2.开发环境配置 2.1 系统要求 1)      支持的操作系统 A.      Windows XP(32位).Vista(32/64位).Windows 7(32/64位) B.      Mac

ubuntu 安装 OpenCv 及其Qt的开发环境配置

ubuntu安装opencv (1)安装编译opencv的环境 sudo apt-get -y install build-essential cmake pkg-config (2)安装Image I/O库 sudo apt-get -y install libjpeg62-dev sudo apt-get -y install libtiff4-dev libjasper-dev (3)安装GTK库 sudo apt-get -y install libgtk2.0-dev (4)安装Vid

ios开发环境配置及cordova安装与常用命令

一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本: 3.下载并安装unlock-all(VMware Workstation默认限制安装Mac虚拟机,需要安装此文件后解除限制); 4.下载Mac OS操作系统的镜像文件(需要是.ios文件)如果下载的是.dmg文件,需要用 anytoiso.exe工具转换成.ios文件,下载完成后在VMware

一步一步学习Swift之(一):关于swift与开发环境配置

一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣. 4.Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发. 5.Swift 是编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进.

Mac系统cocos2dx + android 开发环境配置

Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:http://www.cnblogs.com/wt616/p/3758828.html(这位大哥真的很牛,谢谢!) 然后,文章中又加入了一些自己的理解以及在实际操作过程中遇到问题的解决办法.而这些办法也是来自于伟大 的网友,但由于搜索的比较多,很多出处地址都没有记录好,抱歉,若你们看到,告诉我,我再加上地

VC/DDK/DriverWorks开发环境配置

1·前言开发windows内核驱动程序是一个非常具有挑战性的工作,你得忍耐调试过程中操作系统 不断蓝屏.不断崩溃的噩梦,所以强烈建议你采用虚拟机做开发平台,这样即使把整个系统都搞蹦了,大不了从新装过虚拟机而已.那么搭建一个完整的 Windows驱动开发环境是每个人必须迈过的第一道坎.本文将具体介绍如何安装和配置好一个完整的DDK开发换件:Windows XP + 英文原版Visual studio 6.0 + WinXP_DDK + DriverStudio 3.2 2·准备工作先要把eset(