SR-IOV VF 故障转移和实时迁移支持

启动 Hyper-V 子分区后,网络流量会流经综合数据路径。 如果物理网络适配器支持单根 I/O 虚拟化 (SR-IOV) 接口,则它可以) 启用一个或多个 PCI Express (PCIe) Virtual Functions (VF。 每个 VF 都可以附加到 Hyper-V 子分区。 发生这种情况时,网络流量会流经硬件优化的 SR-IOV VF 数据路径

建立 VF 数据路径后,如果满足以下任一条件,网络流量可以还原到合成数据路径

  • VF 已附加到 Hyper-V 子分区,但已分离。 例如,虚拟化堆栈可以从一个子分区中分离 VF,并将其附加到另一个子分区。 当正在运行的 Hyper-V 子分区多于基础 SR-IOV 网络适配器上的 VF 资源时,可能会发生这种情况。

    从 VF 数据路径故障转移到综合数据路径的过程称为 VF 故障转移

  • Hyper-V 子分区正在实时迁移到其他主机。

下图显示了 SR-IOV 网络适配器上支持的各种数据路径。

堆栈图显示管理父分区下有一个 sr-iov 适配器,该分区使用 vm 总线与子分区通信 #1,其中包含使用 vm 总线进行通信的来宾操作系统,此外子分区 #2 还使用 vf 微型端口与 sr-iov 适配器进行通信。

NetVSC 公开虚拟机 (VM) 网络适配器,该适配器绑定到 VF 微型端口驱动程序以支持 VF 数据路径。 在转换到综合数据路径期间,VF 网络适配器会尽可能从来宾操作系统中正常删除。 如果无法正常删除 VF 并超时,则会意外删除。 然后,VF 微型端口驱动程序将停止,并且网络虚拟网络客户端 (NetVSC) 与 VF 微型端口驱动程序解除绑定。

VF 和综合数据路径之间的转换以最少的数据包丢失发生,并防止 TCP 连接丢失。 在过渡到合成数据路径之前,虚拟化堆栈遵循以下步骤:

  1. 虚拟化堆栈将 VM 网络适配器的媒体访问控制 (MAC) 和虚拟 LAN (VLAN) 筛选器移动到附加到 PCIe 物理功能 (PF) 的默认虚拟端口 (VPort) 。 VM 网络适配器在子分区的来宾操作系统中公开。

    将筛选器移动到默认 VPort 后,合成数据路径将完全适用于传入和传出来宾操作系统中运行的网络组件的网络流量。 PF 微型端口驱动程序指示默认 PF VPort 上收到的数据包,该端口使用合成数据路径将数据包指示到来宾操作系统。 同样,从来宾操作系统传输的所有数据包都通过合成数据路径路由,并通过默认的 PF VPort 传输。

    有关 VPort 的详细信息,请参阅 虚拟端口 (VPorts)

  2. 虚拟化堆栈通过向 PF 微型端口驱动程序发出对象标识符 (OID) OID_NIC_SWITCH_DELETE_VPORT 集请求来删除附加到 VF 的 VPort。 微型端口驱动程序释放与 VPort 关联的所有硬件和软件资源,并完成 OID 请求。

    有关详细信息,请参阅 删除虚拟端口

  3. 在解除分配 VF 的资源之前,虚拟化堆栈请求 PCIe 功能级别重置 (FLR) 。 堆栈通过向 PF 微型端口驱动程序发出 OID_SRIOV_RESET_VF的 OID 集请求来执行此操作。 FLR 将 SR-IOV 网络适配器上的 VF 置于静止状态,并清除 VF 的任何挂起中断事件。

  4. 重置 VF 后,虚拟化堆栈通过向 PF 微型端口驱动程序发出 OID_NIC_SWITCH_FREE_VF 的 OID 集请求来请求解除 VF 资源的分配。 这会导致微型端口驱动程序释放与 VF 关联的硬件资源。

有关此过程的详细信息,请参阅 虚拟函数拆解序列