队列对的对称和非对称分配

队列对由网络适配器上的单独传输和接收队列组成。 创建 VPort 时,在虚拟端口上配置队列对 (VPort) 。 与默认 VPort 关联的队列对在创建交换机时通过 OID_NIC_SWITCH_CREATE_SWITCH的 OID 方法请求进行配置。 通过 OID_NIC_SWITCH_CREATE_VPORT的 OID 方法请求,在非默认 VPort 上配置一个或多个队列对。

可以将每个非默认 VPort 配置为具有不同数量的队列对。 这称为队列对 的非对称分配 。 如果微型端口驱动程序不支持非对称分配,则每个非默认 VPort 都配置为具有相等数量的队列对。 这称为队列对的 对称分配

微型端口驱动程序使用 NDIS_NIC_SWITCH_CAPABILITIES 结构在 MiniportInitializeEx 期间播发其 VPort 和队列对功能。 驱动程序通过在此结构的 NicSwitchCapabilities 成员中设置 NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED 标志来播发对队列对非对称分配的支持。

如果微型端口驱动程序支持非对称队列对分配,则虚拟化堆栈会为每个非默认 VPort 配置不同数量的队列对。 如果微型端口驱动程序支持对称队列对分配,则虚拟化堆栈会为每个 VPort 配置相同数量的队列对。

注意 支持非默认 VPort 上对称或非对称队列对分配的微型端口驱动程序必须支持要在默认 VPort 上分配的不同数量的队列对。 默认 VPort 始终附加到网络适配器的 PF。

队列对配置是在通过 OID_NIC_SWITCH_CREATE_VPORT 和 OID_NIC_SWITCH_VPORT_PARAMETERS 的 OID 请求创建或更新非默认 VPort 时指定的。 配置参数在与两个 OID 请求关联的 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构中指定。

例如,假设微型端口驱动程序通过设置 NDIS_NIC_SWITCH_CAPABILITIES 结构的以下 成员,在 NIC 交换机上播发 VPort 和队列对的配置:

  • MaxNumQueuePairs 设置为 128。

  • MaxNumVPorts 设置为 64。

  • MaxNumQueuePairsPerNonDefaultPort 设置为 4。

如果微型端口驱动程序不支持非默认 VPort 上队列对的非对称配置,则虚拟化堆栈可以在创建 VPort 时指定以下队列对配置:

  • 63 个具有两个队列对的非默认 VF VPort,以及具有一个队列对的默认 PF VPort。
  • 31 个非默认 VF VPort,每个队列对有 4 个队列对,以及具有一个队列对的默认 PF VPort。

注意从Windows Server 2012开始,仅支持一个默认 VPort,并且始终附加到网络适配器的 PF。