为 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 的队列数。