使用VMXNET3接口在VMWare上运行DPDK时出现“不兼容硬件版本”错误

使用VMXNET3接口在VMWare上运行DPDK时出现“不兼容硬件版本”错误,vmware,esxi,dpdk,Vmware,Esxi,Dpdk,我们正在尝试在运行Centos 7.5的来宾计算机上运行DPDK示例应用程序。主机是ESXi版本6.5 我正在来宾机上构建dpdk,我正在尝试运行它。我试过DPDK版本18.05和18.08 我们在esxi上创建了五个接口,用于连接到我们的客户机。一个管理端口和四个数据端口。我们正在将这四个数据端口绑定到DPDK。这些端口都是VMXNET3接口。它们的设置基本上与中的VMXNET3接口类似,使用vswitch连接到物理接口。但是请注意,我们没有本文档中所示的任何VF接口,只有VMXNET3接口。

我们正在尝试在运行Centos 7.5的来宾计算机上运行DPDK示例应用程序。主机是ESXi版本6.5

我正在来宾机上构建dpdk,我正在尝试运行它。我试过DPDK版本18.05和18.08

我们在esxi上创建了五个接口,用于连接到我们的客户机。一个管理端口和四个数据端口。我们正在将这四个数据端口绑定到DPDK。这些端口都是VMXNET3接口。它们的设置基本上与中的VMXNET3接口类似,使用vswitch连接到物理接口。但是请注意,我们没有本文档中所示的任何VF接口,只有VMXNET3接口。遗憾的是,本文档没有显示有关如何进行设置的任何详细信息

来自vmware的文档还显示了一个非常类似的设置。但同样没有关于如何设置的详细信息

从根本上说,我们遇到的障碍是,启动DPDK示例应用程序时,VMXNET3接口初始化失败。以下是我们看到的:

[root@rg-vm ~]# ./dpdk-18.08/examples/packet_ordering/build/packet_ordering -c 0x0e0 -- -p 0xf
EAL: Detected 24 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Probing VFIO support...
EAL: PCI device 0000:04:00.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0
EAL:   probe driver: 15ad:7b0 net_vmxnet3
eth_vmxnet3_dev_init(): Incompatible hardware version: 0
EAL: Requested device 0000:04:00.0 cannot be used
我们在尝试绑定到DPDK的所有四个接口中都看到了这一点。然而,奇怪的是,有时在重新启动后,前两个接口会正确初始化。但是在第一次尝试之后,所有四个接口都以同样的方式失败

下面是我们用来设置DPDK的命令

modprobe uio
insmod ./dpdk-18.08/build/build/kernel/linux/igb_uio/igb_uio.ko
./dpdk-18.08/usertools/dpdk-devbind.py --bind=igb_uio 04:00.0
./dpdk-18.08/usertools/dpdk-devbind.py --bind=igb_uio 0c:00.0
./dpdk-18.08/usertools/dpdk-devbind.py --bind=igb_uio 13:00.0
./dpdk-18.08/usertools/dpdk-devbind.py --bind=igb_uio 1b:00.0
请注意,我们还尝试使用uio_pci_泛型,结果相同。我们无法使vfio pci驱动程序绑定到VMXNET3接口

我不确定这是否重要,但我们连接到的vswitch另一端的物理接口是: 17:00.0以太网控制器:英特尔公司I350千兆光纤网络连接版本01

我们还尝试使用基于intel 82576芯片组的以太网卡这是他们文档中使用的芯片组DPDK,还有一个基于intel X710。我们使用这两种卡中的任何一种都会看到与i350相同的错误。因此,我认为这消除了以太网硬件,这是有意义的,因为在我们和以太网控制器之间使用vswitch应该使我们不知道它实际上是什么

我们正在戴尔R540上运行。还要注意的是,当我们在没有VMWare的硬件上运行带有DPDK的Centos 7.5时,一切正常。同样,如果我们在VMWare中运行,但是通过i350接口将其传递到VM,而不是使用vswitch和vmxnet,那么在这种情况下,一切都可以正常工作

我已经尝试将内核3.10更新到最新的4.18,但仍然得到相同的错误

如果我在使用ethtool绑定到DPDK之前尝试读取版本寄存器VRRS(导致vmxnet3 pci条寄存器中出现此错误的寄存器),它看起来很正常0xf。我在谷歌上搜索了很多,但似乎在这方面找不到什么帮助。很可能问题在于我是如何设置的,但我找不到任何关于如何设置的详细信息

任何帮助都将不胜感激。谢谢

尝试以下步骤:

cd/etc/default 六蛴螬 编辑GRUB-CMDLINE并添加“nopku”

GRUB\u CMDLINE\u LINUX=crashkernel=auto-rd.lvm.lv=centos/root-rd.lvm.lv=centos/swap-rhgb-quiet-nopku-transparent\u-hugepage=never-log\u-buf\u-len=8M

重新编译grub:sudo grub2 mkconfig-o/boot/grub2/grub.cfg

重新启动VM并尝试DPDK。
nopku是什么?nopku=禁用某些英特尔CPU中的内存保护键CPU功能。默认情况下,CentOS会禁用对CPU内存的访问以保护它,而DPDK与内核在同一级别工作,因此需要完全访问它。我正在学习DPDK的工作原理-这里的CPU内存是什么意思?为什么DPDK必须进行访问?