由於相同核心處理器上的超線程 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 的硬體支援層級。
透過增加共用數據在相同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)。 這樣可減少自旋鎖的開銷和快取的重新加載。