共用方式為


RSS 組態

若要取得 RSS 設定資訊,過度處理驅動程式可以將 OID_GEN_RECEIVE_SCALE_CAPABILITIES 的 OID 查詢傳送至迷你埠驅動程式。 NDIS 也會在初始化期間,提供 RSS 組態資訊給 NDIS_BIND_PARAMETERS 結構中的過度通訊協定驅動程式。

過度處理驅動程式會選擇雜湊函式、類型和間接取值資料表。 若要設定這些組態選項,驅動程式會將 OID_GEN_RECEIVE_SCALE_PARAMETERS 的 OID 集合要求傳送至迷你埠驅動程式。 過度調整驅動程式也可以查詢此 OID 以取得目前的 RSS 設定。 OID_GEN_RECEIVE_SCALE_PARAMETERS OID 的資訊緩衝區包含 NDIS_RECEIVE_SCALE_PARAMETERS 結構的指標。

過度處理驅動程式可以在 NIC 上停用 RSS。 在此情況下,驅動程式會在 NDIS_RECEIVE_SCALE_PARAMETERS 結構的 Flags 成員中設定NDIS_RSS_PARAM_FLAG_DISABLE_RSS旗標。 設定此旗標時,迷你埠驅動程式應該忽略所有其他旗標和設定,並在 NIC 上停用 RSS。

NDIS 會先處理OID_GEN_RECEIVE_SCALE_PARAMETERS,再將其傳遞至迷你埠驅動程式,並視需要更新迷你埠介面卡的 *RSS 標準化關鍵字。 如需 *RSS 關鍵字的詳細資訊,請參閱 RSS 的標準化 INF 關鍵字

在收到已設定NDIS_RSS_PARAM_FLAG_DISABLE_RSS旗標 的OID_GEN_RECEIVE_SCALE_PARAMETERS 集要求之後,迷你埠驅動程式應該會在初始化之後,將 NIC 的 RSS 狀態設定為 NIC 的初始狀態。 因此,如果迷你埠驅動程式收到後續OID_GEN_RECEIVE_SCALE_PARAMETERS設定要求,並清除NDIS_RSS_PARAM_FLAG_DISABLE_RSS旗標,則迷你埠驅動程式在第一次初始化迷你埠配接器之後收到OID_GEN_RECEIVE_SCALE_PARAMETERS設定要求之後,所有參數都應該具有相同的值。

過度處理驅動程式可以使用 OID_GEN_RECEIVE_HASH OID,在接收的畫面格上啟用和設定雜湊計算,而不需要啟用 RSS。 過度調整驅動程式也可以查詢此 OID,以取得目前的接收雜湊設定。

OID_GEN_RECEIVE_HASH OID 的資訊緩衝區包含 NDIS_RECEIVE_HASH_PARAMETERS 結構的指標。 針對集合要求,OID 會指定迷你埠配接器應該使用的雜湊參數。 針對查詢要求,OID 會傳回迷你埠配接器所使用的雜湊參數。 此 OID 對於支援 RSS 的驅動程式而言是選擇性的。

注意 如果啟用接收雜湊計算,NDIS 會在啟用 RSS 之前停用接收雜湊計算。 如果已啟用 RSS,NDIS 會在啟用接收雜湊計算之前停用 RSS。

迷你埠驅動程式支援的所有迷你埠介面卡都必須為所有後續的通訊協定系結提供相同的雜湊組態設定。 此 OID 也包含迷你埠驅動程式或 NIC 必須用於雜湊計算的秘密金鑰。 索引鍵長度為 320 位, (40 個位元組) ,而且可以包含過度配置驅動程式選擇的任何資料,例如隨機的位元組資料流程。

若要重新平衡處理負載,過度處理驅動程式可以設定 RSS 參數並修改間接資料表。 一般而言,除了間接資料表之外,所有參數都會保持不變。 不過,在 RSS 初始化之後,過度處理驅動程式可能會變更其他 RSS 初始化參數。 如有必要,迷你埠驅動程式可以重設 NIC 硬體,以變更雜湊函式、雜湊金鑰、雜湊類型、基底 CPU 編號,或用來編制間接資料表索引的位數。

注意 過度處理驅動程式可以隨時設定這些參數。 這可能會造成順序不足的接收指示。 不支援 TCP 的迷你埠驅動程式不需要清除此實例中的接收佇列。

下圖提供間接取值資料表兩個實例的範例內容。

此圖說明具有四個處理器組態和 64 個專案之 RSS 間接取值資料表兩個實例的內容。

上圖假設有四個處理器組態,而雜湊值中使用的最小有效位數目為 6 位。 因此,間接資料表包含 64 個專案。

在圖中,資料表 A 會在初始化之後立即列出間接取值資料表中的值。 之後,當一般流量負載不同時,處理器負載會變得不平衡。 過度分配的驅動程式會偵測不平衡的狀況,並嘗試藉由定義新的間接資料表來重新平衡負載。 資料表 B 列出新的間接取值資料表值。 在資料表 B 中,CPU 2 的部分負載會移至 CPU 1 和 3。

注意 當間接資料表變更時, (目前接收描述項佇列) 處理時,封包可以在錯誤的 CPU 上處理。 這是一般暫時性狀況。

間接資料表的大小通常是系統中處理器數目的兩到八倍。

當迷你埠驅動程式將封包散發至 CPU 時,如果有太多 CPU,則散發負載所花費的心力可能會變得令人禁止。 在此情況下,過度處理網路資料的驅動程式應該選擇 CPU 子集。

在某些情況下,可用的硬體接收佇列數目可能小於系統上的 CPU 數目。 迷你埠驅動程式必須檢查間接資料表,以判斷要與硬體佇列相關聯的 CPU 號碼。 如果間接取值資料表中顯示的不同 CPU 數位總數超過 NIC 支援的硬體佇列數目,迷你埠驅動程式必須從間接資料表挑選 CPU 號碼的子集。 子集的數目等於硬體佇列的數目。 迷你埠驅動程式已從OID_GEN_RECEIVE_SCALE_PARAMETERS取得IndirectionTableSize參數。 迷你埠驅動程式指定 NumberOfReceiveQueues 值,以回應OID_GEN_RECEIVE_SCALE_CAPABILITIES。