接收端調整簡介
接收端均衡 (RSS) 是一種網路驅動技術,能夠在多處理器系統中有效地將網路接收處理分配至多個計算機中央處理器(CPU)。
注意
由於相同核心處理器上的超線程 CPU 會共用相同的執行引擎,因此效果與有多個核心處理器不同。 因此,RSS 不會使用超線程處理器。
為了高效率地處理接收的數據,迷你端口驅動程式的接收中斷服務函式會排程延遲程序呼叫(DPC)。 在沒有 RSS 的情況下,一般的 DPC 顯示 DPC 調用中接收的所有資料。 因此,與中斷相關聯的所有接收處理都會在發生接收中斷的CPU上執行。 如需非 RSS 接收處理的概觀,請參閱 非 RSS 接收處理。
RSS 可讓 NIC 和迷你端口驅動程式在其他處理器上排程接收 DPC。 RSS 設計可確保與指定連線相關聯的處理會保留在指派的 CPU 上。 NIC 會實作哈希函式,而產生的哈希值有助於選取 CPU。
下圖說明判斷 CPU 的 RSS 機制。
NIC 會使用哈希函式,在接收的網路數據內,透過定義的區域(哈希類型)計算哈希值。 定義的區域可以是非連續區域。
哈希值的若干最小有效位(LSB)用來索引一個間接尋址表。 間接值數據表中的值是用來將接收的數據指派給 CPU。
如需指定間接資料表、哈希類型和哈希函式的詳細資訊,請參閱 RSS 組態。
透過訊息信號中斷 (MSI) 支援,NIC 也可以中斷相關聯的 CPU。 如需 MSIS NDIS 支援的詳細資訊,請參閱 NDIS MSI-X。
RSS 的硬體支援
下圖說明 RSS 的硬體支援層級。
RSS 有三種可能的硬體支援層級:
具有單一佇列的哈希計算:NIC 會計算哈希值,而迷你埠驅動程式會將接收的封包指派給與 CPU 相關聯的佇列。
具有多個接收佇列的哈希計算:NIC 會將接收的數據緩衝區指派給與 CPU 相關聯的佇列。
訊息信號中斷 (MSIs):NIC 會向應處理已接收封包的 CPU 發出中斷信號。
NIC 一律會傳遞 32 位哈希值。
RSS 如何改善系統效能
RSS 可藉由減少以下因素來改善網路系統效能:
通過將來自 NIC 的接收處理分散到多個 CPU,來處理處理延遲。
分散接收處理有助於確保所有 CPU 的負載均衡,避免某個 CPU 過載而另一個 CPU 閒置。
透過增加共用數據在相同CPU上執行軟體演算法的可能性,以降低自旋鎖的額外負擔。
例如,當在 CPU0 上執行的函式擁有旋轉鎖,而該鎖控制的資料需要由在 CPU1 上執行的函式進行存取時,就會發生旋轉鎖負擔。 CPU1 會旋轉(等候),直到CPU0釋放鎖定為止。
透過提高共用數據的軟體演算法在同一 CPU 上執行的機率,達到重新加載快取和其他資源的效果。
例如,當在 CPU0 上執行和存取共用數據的函式在後續中斷中於 CPU1 上執行時,就會發生這類重載。
為了在安全的環境中達成這些效能改善,RSS 提供下列機制:
分散式處理
RSS 會將來自 DPC 中指定 NIC 的接收指示處理散發至多個 CPU。
訂單處理
RSS 會保留所接收數據封包傳遞的順序。 針對每個網路連線,RSS 進程會收到相關聯 CPU 上的指示。 如需 RSS 接收處理的詳細資訊,請參閱 指出 RSS 接收資料。
動態負載平衡
RSS 提供了一種方法,用於在主機系統負載變化時,重新平衡 CPU 之間的網路處理負載。 若要重新平衡負載,上層驅動程式可以變更間接尋址表。 如需指定間接資料表、哈希類型和哈希函式的詳細資訊,請參閱 RSS 組態。
傳送端調整
RSS 可讓驅動程式堆疊處理相同 CPU 上指定連線的傳送和接收端數據。 一般而言,上層的驅動程式(例如 TCP)會傳送數據區塊的一部分,並在傳送剩餘的資料之前等候確認。 通知接著會觸發後續的傳送要求。 RSS 間接取值數據表會識別接收數據處理的特定 CPU。 根據預設,如果傳送處理是由接收通知所觸發,則會在相同的CPU上執行。 驅動程式也可以指定 CPU(例如,如果使用定時器)。
安全哈希
RSS 包含提供新增安全性的簽章。 此簽章可保護系統免於惡意遠端主機,而該主機可能會嘗試強制系統進入不平衡狀態。
MSI-X 支援
RSS 支援 MSI-X,會在稍後執行 DPC 的相同 CPU 上執行中斷服務例程 (ISR)。 這樣可減少自旋鎖的開銷和快取的重新加載。