SR-IOV VF 数据路径

如果物理网络适配器支持单根 I/O 虚拟化 (SR-IOV) 接口,它可以启用一个或多个 PCI Express (PCIe) Virtual Functions (VF) 。 每个 VF 都可以附加到 Hyper-V 子分区。 发生这种情况时,虚拟化堆栈将执行以下步骤:

  1. 分配 VF 的资源后,虚拟化堆栈会公开来宾操作系统中 VF 的网络适配器。 这会导致在来宾操作系统中运行的 PCI 驱动程序启动 VF 微型端口驱动程序。 此驱动程序由独立硬件供应商 (SR-IOV 网络适配器的 IHV) 提供。

    注意 VF 的资源必须由 PCIe 物理功能 (PF) 的微型端口驱动程序分配,然后才能将 VF 附加到 Hyper-V 子分区。 VF 资源包括向 VF 分配虚拟端口 (NIC 交换机上的 VPort) 。 有关详细信息,请参阅 SR-IOV 虚拟函数

  2. 加载并初始化 VF 微型端口驱动程序后,NDIS 会将来宾操作系统中的网络虚拟网络客户端 (NetVSC) 的协议边缘绑定到驱动程序。

    注意 NetVSC 仅绑定到 VF 微型端口驱动程序。 来宾操作系统中的其他协议堆栈无法绑定到 VF 微型端口驱动程序。

NetVSC 成功绑定到驱动程序后,来宾操作系统中的网络流量通过 VF 数据路径发生。 数据包通过网络适配器的基础 VF 而不是基于软件的合成数据路径发送或接收。 有关综合数据路径的详细信息,请参阅 SR-IOV 综合数据路径

下图显示了通过 SR-IOV 网络适配器的 VF 数据路径的组件。

显示使用 pgf 微型端口通信的管理父分区下的 sr-iov 适配器的堆栈图,以及包含使用 vf 微型端口通信的来宾操作系统的子分区。

使用 VF 数据路径具有以下优势:

  • 所有数据数据包直接在来宾操作系统中的网络组件与 VF 之间流动。 这消除了数据包在 Hyper-V 子分区和父分区之间流动的合成数据路径的开销。

    有关综合数据路径的详细信息,请参阅 SR-IOV 综合数据路径

  • VF 数据路径绕过管理操作系统参与 Hyper-V 子分区的数据包流量。 VF 为其附加到的子分区提供独立的内存空间、中断和 DMA 流。 这可实现几乎与非虚拟化环境兼容的网络性能。

  • 通过 VF 数据路径路由数据包由 SR-IOV 网络适配器上的 NIC 交换机执行。 数据包通过适配器的物理端口通过外部网络发送或接收。 数据包还会转发到 VF 附加到的其他子分区或从这些子分区转发。

    注意 NIC 交换机会将传入或传出未附加 VF 的子分区的数据包转发到 Hyper-V 可扩展交换机模块。 此模块在 Hyper-V 父分区中运行,并使用综合数据路径将这些数据包传送到子分区。