DPDK在虚拟机上的安装和使用

DPDK的安装与使用

  最近从老板那里拿到一个将Intel DPDK移植到龙芯平台的任务,上网查了下资料关于它的资料真是少之又少,看来是个大坑啊,于是就自己摸索着来吧,这里感谢下朝阳_tony,他那里提供了许多许多关于DPDK详实的资料和心得。

虚拟机环境搭建

  首先由于手头没有多网卡的linux x86的机器,所以很自然的想到了使用虚拟机安装DPDK。我给虚拟机分配了4GB的内存,4个处理器核,3块虚拟网卡,每个网卡都采用NAT模式。我这里用VMWare直接添加的网卡就是Intel的82545EM芯片,网络上有人说会添加AMD芯片,这里我比较幸运。如果手动添加Intel网卡方法是:
  
  先找到虚拟机的配置文件,后缀为.vmx,在后面添加两行:

ethernet2.virtualDev=”e1000”
ethernet2.present=true

  配置好虚拟机,我给它装上了Ubuntu14.01系统,然后就是下载DPDK了,这里我使用了Git,采用了官网的链接:

git clone http://dpdk.org/git/dpdk

DPDK的安装

  我下载下来的版本是2.1,在DPDK的根目录下,在./tools/中,DPDK提供了一个简便的安装脚本setup.sh,通过它可以很方便的完成DPDK初始环境的配置,编译和加载。一般步骤是:
  

  1. 设置环境变量;
  2. 加载uio模块,并绑定网卡到uio;
  3. 分配巨页内存;
  4. 执行应用程序;
#! /bin/bash

make config T=x86_64-native-linuxapp-gcc
make

mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

modprobe uio
insmod build/kmod/igb_uio.ko

ifconfig eth1 down
ifconfig eth2 down
./tools/dpdk_nic_bind.py --bind=igb_uio 02:02.0
./tools/dpdk_nic_bind.py --bind=igb_uio 02:03.0

  这一切都执行完后,就可以执行一些DPDK自带的应用程序了,但是我这个DPDK版本如果直接执行testpmd会报Input/output error,具体错误的图片已经找不着了,经过一番搜寻发现是需要打一个补丁:

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index d1ca26e..c46a00f 100644
--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
@@ -505,14 +505,11 @@  igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
        }
        /* fall back to INTX */
    case RTE_INTR_MODE_LEGACY:
-       if (pci_intx_mask_supported(dev)) {
-           dev_dbg(&dev->dev, "using INTX");
-           udev->info.irq_flags = IRQF_SHARED;
-           udev->info.irq = dev->irq;
-           udev->mode = RTE_INTR_MODE_LEGACY;
-           break;
-       }
-       dev_notice(&dev->dev, "PCI INTX mask not supported\n");
+       dev_dbg(&dev->dev, "using INTX");
+       udev->info.irq_flags = IRQF_SHARED;
+       udev->info.irq = dev->irq;
+       udev->mode = RTE_INTR_MODE_LEGACY;
+       break;
        /* fall back to no IRQ */
    case RTE_INTR_MODE_NONE:
        udev->mode = RTE_INTR_MODE_NONE;

  然后再运行testpmd,就可以正常的得到结果了,结果如下:
DPDK在虚拟机上的安装和使用_第1张图片
  

你可能感兴趣的:(DPDK)