无法通过 vmxnet3 使用 DPDK 接收数据包
Not able to receive packets using DPDK over vmxnet3
我已经实现了一个简单的代码,它使用 DPDK 将数据包从一个 machine 发送到另一个。
当我使用 E1000E 时,我就可以接收数据包。但是,当我使用 vmxnet3 时,接收方会根据以太网统计信息接收到错误数据包。 rte_eth_rx_burst() 没有收到任何数据包。
有办法解决这个问题吗?为什么数据包错误?
更新:vmxnet3 正在正确接收非 DPDK 数据包,但是当涉及到我们的自定义生成器发送的 DPDK 数据包时,它仍然被归类为错误。 ESXI 和 Vcenter 中的安全性是否发生了变化?我使用 vcenter 6+ 为早期版本的 ESXI 工作。
[EDIT-1] 根据评论分享的详细信息
VMShpere 版本:7
- VMShpere vswitch:仅在支持 10Gbps VMXNET3 NIC 的 2 个虚拟机之间连接
- DPDK 版本:18.11
- 客人os:Ubuntu 20.04(也试过Ubuntu 16.04)
- 数据包流:mac 地址根据目标 VM 设置更改:VM-1 运行 DPDK 应用程序是自定义数据包生成器和接收器,VM-2 运行 rx_burst 和 tx_burst.
[基于实时调试的答案]在 e1000e 或 vmxnet3 设备的 DPDK 端没有问题。基于当前调试它基于 vsphere
上的开关
使用内核驱动程序调试 vmnext3
,显示
- VM-1 接收和传输数据包
- VM-2 接收和传输数据包
- 还连接了一个转发数据包的物理接口。
- 将 VM-1 的 IP 地址设置为“12.12.12.1”,将 VM-2 的 IP 地址设置为“12.12.12.2”
- 运行 VM-1 和 VM-2 之间的 iperf3,
it fails
。
- 使用
tcpdump
进行调试表明 VM-1 未从 VM-2 的交换机接收数据包。当接收到来自 VM-1 的数据包时。
DPDK l2fwd/testpmd/skeleton 甚至示例应用程序的行为也是如此。因此,带有 vmxnet3 的 DPDK 18.11.11 LTS 在发送或接收数据包方面没有问题。
我已经实现了一个简单的代码,它使用 DPDK 将数据包从一个 machine 发送到另一个。 当我使用 E1000E 时,我就可以接收数据包。但是,当我使用 vmxnet3 时,接收方会根据以太网统计信息接收到错误数据包。 rte_eth_rx_burst() 没有收到任何数据包。 有办法解决这个问题吗?为什么数据包错误?
更新:vmxnet3 正在正确接收非 DPDK 数据包,但是当涉及到我们的自定义生成器发送的 DPDK 数据包时,它仍然被归类为错误。 ESXI 和 Vcenter 中的安全性是否发生了变化?我使用 vcenter 6+ 为早期版本的 ESXI 工作。
[EDIT-1] 根据评论分享的详细信息
VMShpere 版本:7
- VMShpere vswitch:仅在支持 10Gbps VMXNET3 NIC 的 2 个虚拟机之间连接
- DPDK 版本:18.11
- 客人os:Ubuntu 20.04(也试过Ubuntu 16.04)
- 数据包流:mac 地址根据目标 VM 设置更改:VM-1 运行 DPDK 应用程序是自定义数据包生成器和接收器,VM-2 运行 rx_burst 和 tx_burst.
[基于实时调试的答案]在 e1000e 或 vmxnet3 设备的 DPDK 端没有问题。基于当前调试它基于 vsphere
上的开关使用内核驱动程序调试 vmnext3
,显示
- VM-1 接收和传输数据包
- VM-2 接收和传输数据包
- 还连接了一个转发数据包的物理接口。
- 将 VM-1 的 IP 地址设置为“12.12.12.1”,将 VM-2 的 IP 地址设置为“12.12.12.2”
- 运行 VM-1 和 VM-2 之间的 iperf3,
it fails
。 - 使用
tcpdump
进行调试表明 VM-1 未从 VM-2 的交换机接收数据包。当接收到来自 VM-1 的数据包时。
DPDK l2fwd/testpmd/skeleton 甚至示例应用程序的行为也是如此。因此,带有 vmxnet3 的 DPDK 18.11.11 LTS 在发送或接收数据包方面没有问题。