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 的處理器。