NetAdapterCx 接收端調整 (RSS)

接收端調整 (RSS) 是一種網路驅動程式技術,可在多處理器系統中跨多個 CPU 有效率地散發網路接收處理。 RSS 藉由利用系統中的所有可用處理器,並動態重新平衡 CPU 工作負載,以改善系統效能並增加網路延展性。

本主題強調 NetAdapterCx 用戶端驅動程式的 RSS,並假設具備 RSS 概念和術語的知識。 如需 RSS 一般的詳細資訊,包括說明不同硬體案例中 RSS 的圖表,請參閱 接收端調整

NetAdapterCx 中的 RSS 概觀

NetAdapterCx 中的 RSS 著重于輕鬆設定、啟用和停用的簡單性,以及處理器對中斷複雜性的抽象概念。 支援 RSS 之 NIC 的用戶端驅動程式只需要符合三個準則,才能在 NetAdapterCx 中支援 RSS:

  1. 驅動程式必須在啟動網路介面卡時設定 RSS 功能,但在呼叫 NetAdapterStart之前。 這包括實作四個 RSS 回呼,並在 RSS 功能結構中註冊。
  2. 必須建立驅動程式的資料路徑佇列,並準備好接受要求。
  3. 驅動程式必須處於 D0 電源狀態。

NetAdapterCx 中的 RSS 設計可確保系統不會呼叫用戶端的 RSS 回呼,並啟用 RSS,直到 電源序列的結尾為止。 用戶端不需要管理間接資料表移動要求或處理其他 RSS 事件,直到他們所需的一切就緒為止。

稍後,當驅動程式卸載時,NetAdapterCx 不會在 關閉電源順序期間終結資料路徑佇列之後呼叫 RSS 回呼。 由於 datapath 佇列會在關閉電源期間當做第一個步驟中斷,這表示用戶端不需要在關閉電源期間處理任何其他階段的可能 RSS 事件。

設定 RSS 功能

若要在 NetAdapterCx 中開始使用 RSS,請遵循下列步驟:

  1. 啟動您的網路介面卡時,請使用 NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES 結構,告訴系統硬體的 RSS 功能和條件約束。
  2. 呼叫 NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT,以初始化功能結構。
  3. 當您初始化 RSS 功能結構時,請將結構的 RSS 回呼成員設定為註冊這些回呼的實作:
    1. EvtNetAdapterReceiveScalingEnable
    2. EvtNetAdapterReceiveScalingDisable
    3. EvtNetAdapterReceiveScalingSetHashSecretKey
    4. EvtNetAdapterReceiveScalingSetIndirectionEntries
  4. 視需要設定 RSS 功能結構的 SynchronizeSetIndirectionEntries
  5. 將初始化的 RSS 功能結構傳遞至 NetAdapterSetReceiveScalingCapabilities 方法。

啟用和停用 RSS

設定 RSS 功能之後,系統會繼續執行驅動程式的電源啟動順序。 NetAdapterCx 會在建立 datapath 佇列的最後一個步驟完成之後,開始叫用驅動程式的 RSS 回呼。 此時,系統可以視需要啟用和停用 RSS。

重要

啟用或停用 RSS 時 ,您不應該 清除或重設間接資料表。 架構會設定您的初始間接資料表狀態。

啟用 RSS

NetAdapterCx 藉由叫用驅動程式的 EvtNetAdapterReceiveScalingEnable 回呼來啟用 RSS。 在此回呼的內容中,您通常會在硬體中啟用控制位。

如需啟用 RSS 的程式碼範例,請參閱 EvtNetAdapterReceiveScalingEnable

停用 RSS

NetAdapterCx 叫用驅動程式的 EvtNetAdapterReceiveScalingDisable 回呼來停用 RSS。 在這裡,您通常會停用先前在 EvtNetAdapterReceiveScalingEnable中設定的硬體中的控制位。

如需停用 RSS 的程式碼範例,請參閱 EvtNetAdapterReceiveScalingDisable

設定雜湊秘密金鑰

啟用 RSS 之後,NetAdapterCx 會叫用 EvtNetAdapterReceiveScalingSetHashSecretKey 回呼,為您的驅動程式提供 NIC 在驗證雜湊計算時應該使用的雜湊秘密金鑰。 如果雜湊秘密金鑰變更,可以隨時叫用此回呼。

如需設定雜湊秘密金鑰的程式碼範例,請參閱 EvtNetAdapterReceiveScalingSetHashSecretKey

移動間接取值資料表專案

當 RSS 在系統上執行時,高層通訊協定驅動程式會監視處理器工作負載,並維護間接資料表,以將接收佇列對應至處理器。 當通訊協定驅動程式需要重新平衡 RSS 中的處理器工作負載時,它會先計算每個間接資料表專案與新處理器的新對應。 然後通訊協定會將此資訊傳遞至 NetAdapterCx,以代表您的 NIC 用戶端驅動程式處理將接收佇列和硬體中斷向量對應至正確處理器的複雜性。 NetAdapterCx 會在 NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES 結構中儲存新的間接分析資料表,其中包含對應至接收佇列識別碼的專案,並在叫用 EvtNetAdapterReceiveScalingSetIndirectionEntries 回呼函式時將其傳遞至驅動程式。

在此回呼中,您會將 NIC 間接取值資料表中的每個專案移至指定的接收佇列。 NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES陣列中的每個NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY結構都包含資料表中該專案的雜湊索引、要指派專案的新接收佇列,以及指出個別移動是否成功的狀態欄位。

將索引項目目指派給硬體接收佇列的方法,取決於 NIC 的設計及其擁有的接收佇列數目。 如需詳細資訊和程式碼範例,請參閱 EvtNetAdapterReceiveScalingSetIndirectionEntries

異質 CPU 支援

重要

異質 CPU 支援是發行前版本功能,在正式發行前可能會大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

異質 CPU 系統會使用具有不同時脈速度和功能的多種核心類型。 相較于每個核心彼此相同的同質多處理器系統,異質 CPU 系統可以更妥善地調整動態運算負載,並使用較少的能源。

從 WDK 預覽版本 25197 開始,NetAdapterCx 提供異質 CPU 系統支援,方法是有效率地利用各種核心類型。 當 RSS 執行時,系統會根據用戶端驅動程式收到的流量工作負載,決定要使用的處理器。 當收到較少的流量時,較小、更有效率的核心可以處理流量。 當有更多流量時,需要更大的效能核心,才能持續輪詢所接收的封包。

若要加入宣告異質系統支援,系統管理員必須將 *RSSProfile標準化 INF 關鍵字 設定為 NdisRssProfileBalanced。 這是異質系統的預設設定檔。 若要讓系統決定要使用的最佳核心,您無法設定 RSS 進階關鍵字。

其他 RSS 設定檔也支援異質系統。 如果您想要控制進階設定,例如系統上的 RSS 基底處理器號碼和 RSS 處理器數目上限,您應該使用不同的 RSS 設定檔。

您也可以在同質 CPU 系統上使用 NdisRssProfileBalanced 。 在此情況下,系統會決定要用於 RSS 的處理器。