为虚拟功能分配资源
支持单根 I/O 虚拟化 (SR-IOV) 的网络适配器必须能够支持以下硬件组件:
一个 PCI Express (PCIe) 物理功能 (PF) 。 PF 始终存在于网络适配器上,并附加到 Hyper-V 父分区。
有关此硬件组件的详细信息,请参阅 SR-IOV 物理功能 (PF) 。
VF) (一个或多个 PCIe 虚拟函数。 必须先初始化每个 VF 并将其附加到 Hyper-V 子分区,然后来宾操作系统的网络组件才能通过 VF 发送或接收数据包。
有关此硬件组件的详细信息,请参阅 SR-IOV Virtual Functions (VFs) 。
在 Hyper-V 父分区的管理操作系统中运行的 PF 微型端口驱动程序为 SR-IOV 网络适配器上的 PF 和每个 VF 分配资源。 此驱动程序为 PF 分配资源,就像为任何网络适配器分配资源一样。 但是,驱动程序按以下方式为每个 VF 分配资源:
当驱动程序在网络适配器上创建网络接口卡 (NIC) 时,PF 微型端口驱动程序为每个 VF 分配硬件资源。 驱动程序通过调用 NdisMEnableVirtualization 完成 VF 的硬件资源分配。 有关此过程的详细信息,请参阅 创建 NIC 交换机。
当驱动程序处理对象标识符 (OID) OID_NIC_SWITCH_ALLOCATE_VF 方法请求时,PF 微型端口驱动程序为 VF 分配软件资源。 即使已为 VF 分配硬件资源,在 PF 微型端口驱动程序成功完成OID_NIC_SWITCH_ALLOCATE_VF之前,该资源仍被视为非操作资源。
过度分配驱动程序可以通过发出 OID_NIC_SWITCH_ALLOCATE_VF 的 OID 方法请求来请求 为 VF 分配软件资源。 OID 请求的 NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向 NDIS_NIC_SWITCH_VF_PARAMETERS 结构的指针。
从 OID 请求成功返回后,NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向 NDIS_NIC_SWITCH_VF_PARAMETERS 结构的指针。 此结构具有适配器唯一 VF 标识符和 PCI 请求者标识符 (RID) 。 这些标识符按以下方式使用:
覆盖驱动程序在与 VF 相关的操作中使用 VF 标识符,如下所示:
通过 OID_NIC_SWITCH_VF_PARAMETERS 的 OID 方法请求获取当前 VF 参数。
通过OID_NIC_SWITCH_FREE_VF的 OID 集请求释放以前为 VF 分配的资源。
通过OID_SRIOV_RESET_VF的 OID 集请求向 VF 发出 PCI 重置。
虚拟化堆栈使用 RID 重新映射 DMA 和 PF 和 VF 之间的中断。 RID 还允许硬件输入/输出内存管理单元 (IOMMU) 将来宾物理地址转换为主机物理地址。
有关过分驱动程序 如何OID_NIC_SWITCH_ALLOCATE_VF 方法请求发出问题的详细信息,请参阅 发出OID_NIC_SWITCH_ALLOCATE_VF请求。
有关 PF 微型端口驱动程序如何处理 OID_NIC_SWITCH_ALLOCATE_VF 方法请求的详细信息,请参阅 处理OID_NIC_SWITCH_ALLOCATE_VF请求。
注意 通过 OID_NIC_SWITCH_ALLOCATE_VF 的 OID 方法请求分配 VF 的资源后,无法动态更改 VF 的资源参数。