共用方式為


在 VPort 上啟用、停用和更新 VMMQ

建立 VPort 之後,上層驅動程式可以啟用、停用或更新 VPort 的 RSS 參數。

驅動程式可以更新 VPort 的 RSS 間接取值資料表,以 變更 VPort 的數位佇列。 不過,VPort 的 RSS 雜湊類型、雜湊函式和雜湊秘密金鑰會被視為靜態參數,而且在 VPort 存留期間,驅動程式不會過度變更。 如果上層驅動程式想要變更任何 RSS 靜態參數,則必須刪除並重新建立 VPort。

上層驅動程式會發出 OID_GEN_RECEIVE_SCALE_PARAMETERS OID 要求,來啟用、停用或變更 VPort 的 RSS 參數。 上層驅動程式會將NDIS_OID_REQUEST結構中的VPortId欄位設定為新組態之目標 VPort 的識別碼。

上層驅動程式也會設定 OID 要求中使用的 NDIS_RECEIVE_SCALE_PARAMETERS 結構,如下所示。 請注意,根據基礎迷你埠介面卡所公告的 VMMQ 功能,某些欄位可能會設定為所有 PF VPorts 的相同值。

  • [標頭] 的 [修訂成員] 設定為[NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_3]。

  • 設定 NDIS_RSS_PARAM_FLAG_DEFAULT_PROCESSOR_UNCHANGED 旗標,以指定 DefaultProcessorNumber 成員尚未變更。

  • BaseCpuNumber 設定為

  • DefaultProcessorNumber 設定為指定此 VPort 的預設 RSS 處理器。 迷你埠可以假設預設處理器是 RSS 處理器清單的一部分,但無法假設預設 RSS 處理器位於目前的間接資料表中。

  • 設定 HashInformation 以指出 NIC 應該用來計算為此 VPort 所接收封包的雜湊值雜湊類型和雜湊函式。 上層驅動程式可能會為每個 VPort 將此欄位設定為不同的值。

  • 設定 IndirectionTableSize 以位元組為單位指定間接資料表的大小。 將此欄位設定為所有 PF VPorts 的相同值。 上層驅動程式必須確定間接資料表中的專案數是兩個的乘冪。

  • IndirectionTableOffset 設定為指定從 NDIS_RECEIVE_SCALE_PARAMETERS 結構開頭的間接資料表位移。

  • HashSecretKeySize 設定為以位元組為單位指定雜湊秘密金鑰的大小。 如果迷你埠配接器支援,則上層驅動程式可能會為每個 VPort 設定不同的秘密金鑰。 如需詳細資訊,請參閱 Advertising VMMQ 功能

  • HashSecretKeyOffset 設定為從 NDIS_RECEIVE_SCALE_PARAMETERS 結構的開頭指定雜湊秘密金鑰的位移。 如果迷你埠配接器支援,則上層驅動程式可能會為每個 VPort 設定不同的秘密金鑰。 如需詳細資訊,請參閱 Advertising VMMQ 功能

  • 適當地設定 ProcessorMaskOffsetNumberOfProcessorMasksProcessorMasksEntrySize

當迷你埠驅動程式收到停用 VPort 之 VMMQ 的 OID 要求時,它應該會還原為指出在OID_NIC_SWITCH_CREATE_VPORT OID 要求中使用的NDIS_NIC_SWITCH_VPORT_PARAMETERS結構中,該VPort 在處理器上針對該 VPort 接收的所有封包。

變更 VPort 的佇列數目

VPort 間接資料表中使用的唯一處理器數目不能超過上一個發出OID_NIC_SWITCH_CREATE_VPORT OID 要求中所指定NDIS_NIC_SWITCH_VPORT_PARAMETERS結構的NumQueuePairs欄位值。 這些處理器將會是 呼叫 NdisGetRssProcessorInformation所傳回的 RSS 處理器集子集。 如需詳細資訊,請參閱 配置 VMMQ 的 VPorts。 不過,不同 VPorts 上的間接資料表可以包含相同的處理器。

若要減少 PF VPort 的佇列數目,上限層驅動程式必須:

  1. 使用原始間接資料表大小傳送 OID_GEN_RECEIVE_SCALE_PARAMETERS OID。 不過,此步驟中的間接資料表只能參考相異處理器的數目,最多隻能參考新的佇列數目。 如果由於 NDIS_NIC_SWITCH_PARAMETERS結構的NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED 旗標,新的間接資料表必須小於原始資料表,簽發者必須保證此步驟中的間接資料表將包含視需要複寫的新間接資料表,以滿足原始佇列數目的 RESTRICTED 旗標需求。

  2. 傳送具有新佇列數目 的 OID_NIC_SWITCH_VPORT_PARAMETERS OID。

  3. 如果變更,請使用新的間接資料表大小傳送OID_GEN_RECEIVE_SCALE_PARAMETERS。

若要增加 PF VPort 的佇列數目,上限層驅動程式必須:

  1. 驅動程式不需要在步驟 2 之前更新目前的間接資料表,因為資料表只會參考目前佇列數目的相異處理器數目。

  2. 傳送具有新佇列數目 的 OID_NIC_SWITCH_VPORT_PARAMETERS OID。 如果已設定 RESTRICTED 旗標,迷你埠驅動程式應該視需要多次在內部複寫原始間接取值資料表,以符合新佇列數目的間接資料表大小需求。

  3. 如果已變更,請傳送具有新間接資料表大小的 OID_GEN_RECEIVE_SCALE_PARAMETERS OID。