SR-IOV 虚拟功能 (VF)

PCI Express (PCIe) Virtual Function (VF) 是网络适配器上的轻型 PCIe 功能,支持单根 I/O 虚拟化 (SR-IOV) 。

VF 与网络适配器上的 PCIe 物理功能 (PF) 相关联,表示网络适配器的虚拟化实例。 每个 VF 都有自己的 PCI 配置空间。 每个 VF 还与 PF 和其他 VF 共享网络适配器上的一个或多个物理资源,例如外部网络端口。

VF 不是完整的 PCIe 设备。 但是,它提供了一种基本机制,用于在 Hyper-V 子分区和基础 SR-IOV 网络适配器之间直接传输数据。 与数据传输关联的软件资源可直接供 VF 使用,并且不受其他 VF 或 PF 使用。 但是,大部分这些资源的配置由 Hyper-V 父分区的管理操作系统中运行的 PF 微型端口驱动程序执行。

VF 作为虚拟网络适配器公开, (VF 网络适配器) 在 Hyper-V 子分区中运行的来宾操作系统中。 将 VF 与 SR-IOV 网络适配器 (的 NIC 交换机上的 VPort) 虚拟端口关联后,在 VM 中运行的虚拟 PCI (VPCI) 驱动程序会公开 VF 网络适配器。 公开后,来宾操作系统中的 PnP 管理器将加载 VF 微型端口驱动程序。

注意

Hyper-V 子分区也称为 虚拟机 (VM)

VF 微型端口驱动程序是安装在 VM 中用于管理 VF 的 NDIS 微型端口驱动程序。 VF 微型端口驱动程序执行的任何操作不得影响同一网络适配器上的任何其他 VF 或 PF。

VF 微型端口驱动程序可以像任何 PCI 设备驱动程序一样工作。 它可以读取和写入 VF 的 PCI 配置空间。 但是,对虚拟 PCI 设备的访问是一种特权操作,由 PF 微型端口驱动程序通过以下方式进行管理:

  • 当 VF 微型端口驱动程序调用 NdisMGetBusData 从 VF 网络适配器的 PCI 配置空间读取数据时,将通知虚拟化堆栈。 此堆栈在 Hyper-V 父分区的管理操作系统中运行。 当堆栈收到读取请求的通知时,它会向 PF 微型端口驱动程序发出对象标识符 (OID ) 方法请求OID_SRIOV_READ_VF_CONFIG_SPACE 。 要读取的数据在 OID 请求中包含的 NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS 结构中指定。

    驱动程序从 VF PCI 配置空间读取请求的数据,并通过完成 OID 请求返回数据。 然后,当对 NdisMGetBusData 的调用完成时,此数据将返回到 VF 微型端口驱动程序。

  • 当 VF 微型端口驱动程序调用 NdisMSetBusData 将数据写入 VF 网络适配器的 PCI 配置空间时,虚拟化堆栈会收到写入请求的通知。 它向 PF 微型端口驱动程序发出 OID_SRIOV_WRITE_VF_CONFIG_SPACE 的 OID 方法请求。 要写入的数据在 OID 请求中包含的 NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS 结构中指定。

    驱动程序将数据写入 VF PCI 配置空间,并在完成 OID 请求时返回请求的状态。 对 NdisMSetBusData 的调用完成后,此状态将返回到 VF 微型端口驱动程序。

VF 微型端口驱动程序还可以与 PF 微型端口驱动程序通信。 此通信路径通过反向通道接口。 有关详细信息,请参阅 SR-IOV PF/VF 反向通道通信

注意 VF 微型端口驱动程序必须知道它在虚拟化环境中运行,以便它可以与 PF 微型端口驱动程序通信以执行某些操作。 有关驱动程序如何执行此操作的详细信息,请参阅 初始化 VF 微型端口驱动程序