总结
(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 link
VM 激活后在主机中检查显示驱动程序创建的剩余 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功能,并传递内核参数以将其设置为“直通”模式。
使用这更多内核参数选项的链接。