原文地址:https://blog.csdn.net/u010827484/article/details/79389711
VPP运行
配置DPDK运行环境
DPDK编译完成后会在build-root目录输出编译出来的文件,包括DPDK相关文件,编译出的DPDK源码文件路径:
build-root/build-vpp_debug-native/dpdk/dpdk-17.11
加载DPDK网络接口驱动:
- 加载uio驱动:modpro uio
- 加载igb_uio驱动:insmod x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
配置DPDK网络接口:
可使用DPDK usertools目录里面的工具dpdk-devbind.py绑定网络接口
dpdk-devbind.py -s查看网络接口状态
![]()
根据PCI设备号解绑网络接口驱动
dpdk-devbind.py -u 0000:02:06.0
dpdk-devbind.py -u 0000:02:07.0
![]()
根据PCI设备号绑定DPDK igb_uio驱动
dpdk-devbind.py -b igb_uio 0000:02:06.0
dpdk-devbind.py -b igb_uio 0000:02:07.0
也可以使用dpdk-setup.sh工具设置DPDK需要的大页内存和网络接口绑定
![]()
根据引导进行相关设置:
- step1:设置DPDK编译时使用的编译工具
- step2:设置DPDK运行时的环境(加载uio驱动,加载igb_uio驱动,设置大页内存等)
- step3:DPDK测试demo
- step4:查看DPDK大页内存环境
- step5:清理DPDK运行时需要的环境
设置大页内存:
查看大页内存:
如果宿主机运行在VMware并且使用DPDK igb_uio驱动,需要修改DPDK源码,不然会出现“EAL : Input/output error on DPDK”这样的错误:
对应补丁 DPDK Patch。
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;
打上补丁后需要重新编译DPDK igb_uio驱动,并重新加载。
运行VPP
在VPP源码目录执行make run,VPP就运行起来了:
make run命令启动VPP参数可以通过VPP源码根目录Makfile修改:
也可以使用vpp启动配置文件启动vpp,具体配置参考官方文档:
VPP启动配置