为 VMMQ 分配 VPort

虚拟机多队列 (VMMQ) 功能以以下方式存在时,NDIS 会分配 VPort。

NDIS 通过发出 OID_NIC_SWITCH_CREATE_VPORT OID 请求,在微型端口适配器上创建非默认 VPort。 (PF) VPort 创建 RSS 物理函数时,NDIS 将初始化 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构,如下所示:

  • NDIS 将 AttachedFunctionId 字段设置为 NDIS_PF_FUNCTION_ID

  • 如果启用了 VMMQ,NDIS 会将 NumQueuePairs 字段设置为应用于此 VPort 的 VMMQ 队列对数。 此数字包括此 VPort 的默认 RSS 处理器。 可以保证处理器总数不会超过此数目。 如果禁用 VMMQ,NDIS 会将此值设置为 1

  • 如果启用了 VMMQ,则 ProcessorAffinity 字段定义微型端口适配器必须用于此 VPort 的潜在 RSS 处理器的位掩码。 网络堆栈用于填充 VPort 的间接表条目的处理器是此位掩码标识的处理器的子集。 掩码将是从调用 NdisGetRssProcessorInformation 返回的 RSS 处理器的子集,设置位数可能超过为 VPort 请求的 RSS 队列数。 如果禁用 VMMQ,则在设置 VPort 队列的关联时,微型端口适配器必须使用此位掩码中指定的最低处理器数。

  • NDIS 设置 NDIS_NIC_SWITCH_VPORT_PARAMS_NUM_QUEUE_PAIRS_CHANGED 标志,以指示 NumQueuePairs 成员在创建 VPort 后已更新。 启用 VMMQ 后,可以更新默认和非默认 VPort 的队列数。