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

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

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

微型端口驱动程序在 MiniportInitializeEx 期间使用 NDIS_NIC_SWITCH_CAPABILITIES 结构声明其 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 交换机上广告 VPorts 和队列对的配置:

  • MaxNumQueuePairs 设置为 128。

  • MaxNumVPorts 设置为 64。

  • MaxNumQueuePairsPerNonDefaultPort 设置为 4。

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

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

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