主要使用的版本:vmware 12,ubuntu 12.04,dpdk 16.04-rc2
1.虚拟机配置
处理器配置
配置处理器为2个核
网卡配置
由于没有那么多Intel的网卡,因此在虚拟机中弄出几个Intel网卡来,所以另外添加2块网卡,但要注意的是添加的网卡默认是AMD的,可以通过 lspci |grep Eth 来看,网卡可以设置为桥接模式。
内存配置
至少1G及以上。
在以上配置完成后,关闭虚拟机(不是挂起)。找到虚拟机的配置文件,把新添加的2个网卡的virtualDev 设置为"e1000",如ethernet1.virtualDev = "e1000",保存。这里e1000就是intel的一种网卡咯。然后再启动虚拟机,再看网卡和类型时就变成了Intel类型的咯。
2.DPDK的配置
下载dpdk的源码 http://www.dpdk.eu/download
进入主目录后,在tool目录中,有个setup.sh的文件,可以快速指导完成dpdk的设置的安装测试。运行它就可以一步步指引,主要是三大步:编译-设置环境-测试。
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 来查看设置的情况。
V.接下来就是绑定网卡了,在绑定之前,先选择22可以查看下当前的网卡的情况。然后,选择23进行绑定,输入对应的Intel网卡的02:06.0和02:07.0绑定。这里要注意的是在绑定之前可能需要先把这两个网卡down掉,如ifconfig eth1 down,我这里设置成桥接时没出现这个问题,设置成NAT时有。绑定好之后,就是这样的咯。可以看出dpdk已经接管了那两个网卡。
VI.然后就是可以运行 27,进行最后的测试咯,首先会需要填处理器的掩码,2个核,掩码就是0x3了,之后运行会出现testpmd>这里输入start就可以开始咯,过一段再输入stop,就会出现统计信息了。
这里可能会出现的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,问题才解决,如果一直不行,可以增大一下虚拟机的内存。