SR-IOV 虚拟函数 (VF)

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

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_SRIOV_READ_VF_CONFIG_SPACE 的对象标识符(OID)方法请求。 要读取的数据是在 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 微型端口驱动程序