虚拟机无流量

虚拟机无流量

总结

(1)仅将前 2 个 VF 传输到 VM

(2)虚拟机没有流量。

设置

  • 主机是Ubuntu 16.04
  • 通过 PCIe 连接的 Intel 82599(支持 SR-IOV)
  • 司机ixgbe
  • 客户虚拟机是 Ubuntu 16.10
  • 在 KVM 上使用 Libvirt 作为虚拟机管理程序

过程

尝试利用 SR-IOV 功能。将sriov_numvfs两个 NIC 更新至 4 会导致每个 NIC 获得 4 个 VF。运行虚拟机并将其连接到 Intel 82599 上的两个 NIC。

使用流量生成器来测试设置。

问题

在运行 VM 之前,ixgbe驱动程序会在主机中创建另外 8 个链接(每个 VF 一个),所有链接均可见ip link且处于关闭状态。VM 激活后,只有 2 个 VF(每个 NIC 中的第一个 VF,即功能 0)会传输到 VM。

VM 激活之前

  • 检查lspci主机可显示 PCI 总线上的 NIC 和所有 VF。
  • 检查ip link主机显示驱动程序创建的所有 8 个链接(状态为关闭并分配了 MAC 地址)以及两个卡 NIC。

VM 激活后

  • 检查lspci主机可显示 PCI 总线上的 NIC 和所有 VF。
  • 办理lspci客人入住手续时仅显示转移的 2 个 VF。
  • ip linkVM 激活后在主机中检查显示驱动程序创建的剩余 6 个链接(具有分配的 MAC 地址)、显示两个卡 NIC 和所有 VF(具有分配的 MAC 地址)。
  • 检查ip link客户机显示连接到 VF 的 2 个 NIC(具有 MAC 地址 - 正确且与 HW 匹配)。
  • 检查主机中的 libvirt(virsh net-dumpxml在两个 NIC 上)显示所有 8 个 VF 都已排序并连接到 VM。

但...

没有到虚拟机的流量。

有从虚拟机到外部的流量。

有任何想法吗?

正在努力

1

试图绕过司机的自动化流程,链接,VM 启动时使用两个桥接网络连接到 2 个卡 NIC。VM 正常启动,并且两个 NIC 都有流量。接下来使用命令添加新设备,virsh attach-device命令执行成功。首先,XML 文件仅包含 VF 的 PCI 地址。VM 中没有明显的变化,没有ip link,没有lspci......什么都没有。--config标志被提出,因此重新启动后再次检查状态,再次什么都没有。接下来明确添加 NIC(PF)的 PCI 地址,并明确指定 VF MAC 地址。virsh attach-device使用显式参数后 - 仍然什么都没有。

2

走基础路线,遵循链接,PCI 设备手动从主机分离并注入虚拟机。最终结果是 PCIe 卡不是 vHBA,因此不兼容 NPIV(请参阅这里),并会相应地出现错误消息通知。

3

另一种方法是使用passthrough转发模式,如下所述这里。这不是理想的工作模式,因为它有意一次只允许一个 vNIC 访问一个 NIC(整个目的是利用 SR-IOV 功能),并且行为类似于hostdev转发模式:如果 NIC 名称在pf指令中说明,则它就像一个基本网桥一样工作,如果 VF 名称在pf指令中说明,则没有任何内容。

4

与 Passthrough 方法类似,还有 MACvTap 方法,如下所述这里这里这里。这不适用。ixgbe驱动程序设置 VF 链接名称,因此它们被区别对待。没有将 VF 的名称指定为接口的选项,并且声明接口名称会导致传递类似于passthrough转发模式的接口。这可能是由驱动程序版本、内核版本、libvirt 版本或它们的某种组合造成的。

5

更换 SFP 似乎也没什么用。更换了几种不同的型号,但都无法与英特尔卡配合使用,只有一种型号可以接通电源,链路也已接通(在 PCIe 总线上可见),但驱动程序无法检测到ixgbe,其他内核模块也无法检测到,也没有创建任何接口。

答案1

用于利用该处理器的内核参数与其他处理器设置的略有不同。

调整参数可以解决这两个问题。

基本思想仍然是激活内核(Intel或AMD)中的SR-IOV功能,并传递内核参数以将其设置为“直通”模式。

使用更多内核参数选项的链接。

相关内容