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

来源:互联网 发布:营收数据分析 ppt模板 编辑:程序博客网 时间:2024/06/01 08:34

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/bashmake config T=x86_64-native-linuxapp-gccmakemkdir -p /mnt/hugemount -t hugetlbfs nodev /mnt/hugeecho 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepagesmodprobe uioinsmod build/kmod/igb_uio.koifconfig eth1 downifconfig 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.cindex 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-testpmd测试结果
  

0 0
原创粉丝点击