虚拟端口 (VPort)

(VPort) 的虚拟端口是一个数据对象,表示网络适配器的 NIC 交换机上的内部端口,该端口支持单根 I/O 虚拟化 (SR-IOV) 。 每个 NIC 交换机都有以下用于网络连接的端口:

  • 一个外部物理端口,用于连接到外部物理网络。

  • 连接到 PCI Express 物理功能 (PF) 或虚拟功能的一个或多个内部 VPort (VFs) 。

    PF 附加到 Hyper-V 父分区,并在该分区中运行的管理操作系统中作为虚拟网络适配器公开。

    VF 附加到 Hyper-V 子分区,并在该分区中运行的来宾操作系统中作为虚拟网络适配器公开。

NIC 交换机将网络流量从物理端口桥接到一个或多个 VPort。 这提供了对基础物理网络接口的虚拟化访问。

每个 VPort 都有一个唯一标识符 (VPortId) ,该标识符对于网络适配器上的 NIC 交换机是唯一的。 默认 VPort 始终存在于默认 NIC 交换机上,永远无法删除。 默认 VPort 的 VPortId 为 NDIS_DEFAULT_VPORT_ID。

当 PF 微型端口驱动程序处理对象标识符 (OID) OID_NIC_SWITCH_CREATE_SWITCH 方法请求时,它将为该开关创建 NIC 开关和默认 VPort。 默认 VPort 始终附加到 PF,并且始终处于操作状态。

非默认 VPort 是通过 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求创建的。 只能将一个非默认 VPort 附加到 VF。 附加后,默认处于操作状态。 还可以创建一个或多个非默认 VPort 并将其附加到 PF。 这些 VPort 在创建时是非操作的,可以通过 OID_NIC_SWITCH_VPORT_PARAMETERS的 OID 集请求运行。

注意

VPort 正常运行后,只有在通过 OID_NIC_SWITCH_DELETE_VPORT 的 OID 请求将其删除时,它才能成为非操作。

每个 VPort 都有一个或多个与之关联的硬件队列对,用于接收和传输数据包。 网络适配器上的默认队列对保留供默认 VPort 使用。 当通过 OID_NIC_SWITCH_CREATE_VPORT请求创建 VPort 时,将分配和分配非默认 VPort 的队列对。

非默认 VPort 是通过 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求创建的和配置的。 默认 VPort 和非默认 VPort 是通过 OID_NIC_SWITCH_VPORT_PARAMETERS 的 OID 集请求重新配置的。 每个 OID 请求都包含一个指定以下配置参数 的 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构:

  • VPort 附加到的 PCIe 函数。

    每个 VPort 可以随时附加到 PF 或 VF。 创建 VPort 并将其附加到 PCIe 函数后,无法将附件动态更改为另一个 PCIe 函数。

    注意

    默认 VPort 始终附加到网络适配器上的 PF。

从 Windows Server 2012 中的 NDIS 6.30 开始,只能将一个非默认 VPort 附加到 VF。 但是,可以将多个非默认 VPort 以及默认 VPort 附加到 PF。

  • 分配给 VPort 的硬件队列对的数目。

    每个 VPort 都有一组可供其使用的硬件队列对。 每个队列对由网络适配器上的单独传输和接收队列组成。

    队列对是网络适配器上的有限资源。 创建 NIC 开关时,指定保留供默认和非默认 VPort 使用的队列对总数。 这允许分配给默认 VPort 的队列对数与非默认 VPort 不同。

    每个非默认 VPort 都可以配置为具有不同数量的队列对。 这称为队列对 的非对称分配 。 如果 NIC 不允许此类非对称分配,则每个非默认 VPort 都配置为具有相等数量的队列对。 这称为队列对的 对称分配 。 有关详细信息,请参阅 队列对的对称和非对称分配

    注意

    PF 微型端口驱动程序报告在 MiniportInitializeEx 期间是否支持队列对的非对称分配。 有关详细信息,请参阅 初始化 PF 微型端口驱动程序

分配给每个 VPort 的队列对数不会动态更改。 创建 VPort 后,无法更改分配给 VPort 的队列对数。

注意

分配给非默认 VPorts 的一个或多个队列对可用于接收方缩放 (在来宾操作系统中运行的 VF 微型端口驱动程序) RSS。

  • VPort 的中断审查参数。

    可以为不同的 VPort 指定不同的中断审查类型。 这允许虚拟化堆栈控制特定 VPort 生成的中断数。

除了配置参数之外,过分的驱动程序还可以通过发出 OID_RECEIVE_FILTER_SET_FILTER的 OID 方法请求来为每个 VPort 配置接收筛选器。 NIC 开关基于 VPort 执行指定的接收筛选。

VPort 的接收筛选器参数包括数据包筛选条件,例如媒体访问控制列表 (MAC) 地址和虚拟 LAN (VLAN) 标识符。 MAC 地址筛选器和 VLAN 标识符始终在与OID_RECEIVE_FILTER_SET_FILTER请求关联的NDIS_RECEIVE_FILTER_PARAMETERS一起指定。 NIC 交换机必须将传入数据包筛选到目标 MAC 地址和 VLAN 标识符与 VPort 上设置的任何接收筛选器条件匹配的交换机。 NIC 交换机会筛选从另一个 VPort 或外部物理端口接收的数据包。 如果数据包与筛选器匹配,NIC 交换机必须将其转发到 VPort。

可以在 VPort 上设置多个 MAC 地址和 VLAN 标识符对。 如果仅设置 MAC 地址,则接收筛选器指定 VPort 应接收与以下条件匹配的数据包:

  • 数据包的目标 MAC 地址与筛选器的 MAC 地址匹配。

  • 如果 VLAN 标记) VLAN 标识符为零,则数据包具有 VLAN 标记或 (。

通过 OID_NIC_SWITCH_DELETE_VPORT的 OID 集请求删除非默认 VPort。 仅当通过OID_NIC_SWITCH_DELETE_SWITCH的 OID 集请求删除 NIC 开关时,才会删除 默认 VPort