"Incompatible hardware version" 在具有 VMXNET3 接口的 VMWare 上使用 运行 DPDK 时出错

"Incompatible hardware version" error when running DPDK on VMWare with VMXNET3 interface

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

我正在尝试 运行 它的来宾计算机上构建 dpdk。我已经尝试了 DPDK 版本 18.05 和 18.08。

我们在 esxi 上创建了五个接口来连接我们的来宾。一个管理端口和四个数据端口。我们将这四个数据端口绑定到 DPDK。端口都是 VMXNET3 接口。它们基本上像 [https://doc.dpdk.org/guides/nics/vmxnet3.html] 中的 VMXNET3 接口一样设置,使用 vswitch 连接到物理接口。但是请注意,我们没有本文档中显示的任何 VF 接口,只有 VMXNET3 接口。遗憾的是,本文档未显示有关如何进行设置的任何详细信息。

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

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

[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_generic 得到相同的结果。我们无法让 vfio-pci 驱动程序绑定到 VMXNET3 接口。

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

我们还尝试过使用基于 intel 82576 芯片组的以太网卡(这是 DPDK 在其文档中显示使用的芯片组),以及基于 Intel X710 的以太网卡。我们在使用这些卡中的任何一个时都看到了与在 i350 上所做的相同的错误。所以我认为这消除了以太网硬件,这是有道理的,因为在我们和以太网控制器之间使用 vswitch 应该让我们不知道它到底是什么。

我们运行正在使用 Dell R540。另请注意,当我们 运行 Centos 7.5 在这个没有 VMWare 的硬件上使用 DPDK 时,一切正常。此外,如果我们 运行 在 VMWare 中,但 "passthrough" i350 与 VM 的接口(而不是使用 vswitch 和 vmxnet),在这种情况下一切也都可以正常工作。

我已经尝试将内核 (3.10) 更新到最新 (4.18),但仍然出现相同的错误。

如果我尝试使用 ethtool 读取 vmxnet3 pci 条寄存器(在我绑定到 DPDK 之前)中的版本寄存器 (VRRS)(导致此错误的那个),它看起来很好 (0xf)。我在谷歌上搜索了很多,但似乎找不到太多帮助。问题很可能出在我的设置方式上,但我找不到任何详细说明如何进行设置的信息。

如有任何帮助,我们将不胜感激。谢谢!

试试这些步骤:

  1. cd /etc/default
  2. vi grub
  3. 编辑 GRUB-CMDLINE 并添加“nopku”

    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet nopku transparent_hugepage=never log_buf_len=8M"

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

  5. 重新启动 VM 并尝试 DPDK。