0.环境介绍
    主要使用的版本:vmware 12,ubuntu 12.04,dpdk 16.04-rc2
1.虚拟机配置
    处理器配置
         配置处理器为2个核   
    网卡配置
         由于没有那么多Intel的网卡,因此在虚拟机中弄出几个Intel网卡来,所以另外添加2块网卡,但要注意的是添加的网卡默认是AMD的,可以通过 lspci |grep Eth 来看,网卡可以设置为桥接模式。
dpdk在ubuntu 12.04中的建立-LMLPHP
    内存配置
         至少1G及以上。
    在以上配置完成后,关闭虚拟机(不是挂起)。找到虚拟机的配置文件,把新添加的2个网卡的virtualDev 设置为"e1000",如ethernet1.virtualDev = "e1000",保存。这里e1000就是intel的一种网卡咯。然后再启动虚拟机,再看网卡和类型时就变成了Intel类型的咯。
dpdk在ubuntu 12.04中的建立-LMLPHP
dpdk在ubuntu 12.04中的建立-LMLPHP
2.DPDK的配置
    下载dpdk的源码  http://www.dpdk.eu/download
    进入主目录后,在tool目录中,有个setup.sh的文件,可以快速指导完成dpdk的设置的安装测试。运行它就可以一步步指引,主要是三大步:编译-设置环境-测试。
dpdk在ubuntu 12.04中的建立-LMLPHP
           I.编译前,要先配置几个环境变量,
            export RTE_SDK=,
            export RTE_TARGET
=i686-native-linuxapp-gcc,
            export DESTDIR=
            在这里第二个要注意的是查看自己的ubuntu是32位的还是64位的,uname -m,如果结果是i686,就填上面的,如果是x86_64,则是64位的,改为export RTE_TARGET=x86_64-native-linuxapp-gcc。
           II.根据setup.sh的运行选择 5 进行编译,如果第一步选的编译器不对,这里可能出错。
           III. 选择 17 插入IGB UIO Module。
           IV.选择  20 设置大页的参数。会提示输入大页的个数,每页为2048K。这里的话,一般设置为64+,主要是有些系统在最后的测试时会出错,然后可以调大这个参数,比如我的最后调到了512,才正常运行了。设置完可以通过 选择28 来查看设置的情况。
dpdk在ubuntu 12.04中的建立-LMLPHP
           V.接下来就是绑定网卡了,在绑定之前,先选择22可以查看下当前的网卡的情况。然后,选择23进行绑定,输入对应的Intel网卡的02:06.0和02:07.0绑定。这里要注意的是在绑定之前可能需要先把这两个网卡down掉,如ifconfig eth1 down,我这里设置成桥接时没出现这个问题,设置成NAT时有。绑定好之后,就是这样的咯。可以看出dpdk已经接管了那两个网卡。
dpdk在ubuntu 12.04中的建立-LMLPHP
           VI.然后就是可以运行 27,进行最后的测试咯,首先会需要填处理器的掩码,2个核,掩码就是0x3了,之后运行会出现testpmd>这里输入start就可以开始咯,过一段再输入stop,就会出现统计信息了。
dpdk在ubuntu 12.04中的建立-LMLPHP
                这里可能会出现的2个bug,如下:
                (1)EAL: Error reading from file descriptor 13:Input/Output error
                (2)EAL: Error - exiting with code: 1 Cause: Creation of mbuf pool for socket 0 
                对于第一个问题,邮件列表已经解决,如下,只需要把‘-’的部分换成‘+’的部分重新编译就好了。
                 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;

                第二个问题的话,可以重新设置一下大页的个数,就比我的,一直设置到512,问题才解决,如果一直不行,可以增大一下虚拟机的内存。
11-15 16:58