網路適配器中的效能
決定要在網路適配器上實作的硬體功能時,一律會有取捨。 請務必考慮新增工作卸除功能,以允許中斷仲裁、硬體上的動態微調、改善PCI總線的使用,以及支援 Jumbo 框架。 這些卸除功能對於需要最高效能的組態中使用的高端網路適配器而言很重要。
支援 TCP 和 IP 總和檢查碼卸除
針對最常見的網路流量,將總和檢查碼計算卸除至網路適配器硬體,可藉由減少每個位元組所需的CPU週期數目來提供顯著的效能優勢。 總和檢查碼計算是網路堆疊中成本最高的函式,原因有兩個:
- 這會導致路徑長度很長。
- 它會導致快取變換效果(通常是在傳送者上)。
將總和檢查碼計算卸除給傳送者,可藉由減少主機 CPU 上的負載並提升快取效率來改善整體系統效能。
在 Windows 效能實驗室中,我們已測量在網路密集工作負載期間卸除總和檢查碼時的 TCP 輸送量改善 19%。 這項改進的分析顯示,11% 的總改善是由於路徑長度減少,而 8% 是因為提高快取效率。
卸除接收者上的總和檢查碼的優點與卸載傳送者上的總和檢查碼相同。 在做為用戶端和伺服器的系統上,可以看到增加的好處,例如套接字 Proxy 伺服器。 在 CPU 不一定忙碌的系統上,例如客戶端系統,卸除總和檢查碼的優點可能會在更好的網路響應時間中看到,而不是明顯改善的輸送量。
支援大型傳送卸除 (LSO)
Windows 提供網路適配器/驅動程式公告大於 MTU 到 TCP 最大區段大小 (MSS) 的功能,最多可達 64K。 這可讓 TCP 將最多 64K 的緩衝區配置給驅動程式,將大型緩衝區分割成符合網路 MTU 的封包。
TCP 區段工作是由網路適配器/驅動程式硬體完成,而不是主機 CPU 。 如果網路適配器 CPU 能夠處理額外的工作,這會產生顯著的效能改善。
針對許多經測試的網路適配器,當主機 CPU 比網路適配器硬體更強大時,純網路活動幾乎沒有改善。 不過,對於一般商務工作負載,已測量高達 9% 輸送量的整體系統效能改善,因為主機 CPU 會使用其大部分週期來執行交易。 在這些情況下,將 TCP 分割卸除至硬體會釋放主機 CPU,使其無法載入分割,讓其額外迴圈執行更多交易。
支援IP安全性 (IPSec) 卸除
Windows 提供將IPSec加密工作卸除至網路適配器硬體的功能。 加密,特別是 3 DES(也稱為三重 DES),具有非常高的迴圈/位元組比率。 因此,將IPSec卸除至網路適配器硬體,在安全的因特網和VPN測試中測量了30%的效能提升,這並不奇怪。
改善中斷仲裁
簡單的網路適配器會在封包抵達時在主機上產生硬體中斷,或發出封包傳送要求的訊號完成。 中斷延遲和產生的快取變換效果,會增加整體網路效能的額外負荷。 在許多案例中(例如,大量系統使用量或大量網路流量),最好是處理每個中斷的數個封包來降低硬體中斷的成本。
由於網路工作負載繁重,透過網路密集型工作負載測量輸送量的效能提升高達 9%。 不過,僅針對輸送量改善調整中斷仲裁參數可能會導致回應時間達到效能。 為了維持最佳設定並容納不同的工作負載,最好允許動態調整的參數,如本文稍後的自動調整中所述。
有效率地使用PCI總線
網路適配器硬體效能中最重要的因素之一是其使用PCI總線的效率。 此外,網路適配器的 DMA 效能會影響相同 PCI 總線上所有 PCI 卡的效能。 優化PCI使用量時,必須考慮下列指導方針:
適當時匯總目標頁面,以簡化 DMA 傳輸。
藉由以大型區塊執行 DMA 來減少 PCI 通訊協定額外負荷(至少 256 個字節)。 可能的話,數據流的時間,讓整個封包在單一PCI交易中傳輸。 不過,請考慮轉移應該如何進行。 例如,不要等候所有數據在起始傳輸之前到達,因為等候會增加延遲並耗用額外的緩衝區空間。
最好使用額外的位元組填補 DMA 封包傳輸,而不是透過傳輸封包的最後幾個位元組來「清除」短的額外傳輸。
使用PCI規格所建議的記憶體讀取、記憶體讀取、記憶體讀取行和記憶體讀取多個交易。
網路適配器總線介面硬體應該偵測主機記憶體控制器的限制,並據以調整行為。 例如,網路適配器總線介面硬體應該偵測 DMA 記憶體讀取的記憶體控制器預先擷取限制,並等候短時間內再嘗試交易。 硬體應該偵測網路適配器部分的過度重試,並在主機切斷時,在第一次重試未來交易之前增加時間。 當您確定它仍然忙於擷取下一組循序數據集時,繼續將交易提交至記憶體控制器時,沒有任何意義。
將等候狀態的插入降到最低,特別是在數據傳輸期間。 如果插入一兩個以上的等候狀態,最好放棄總線,讓另一個PCI配接器使用總線完成一些工作。
使用記憶體對應 I/O,而不是程式化 I/O。 這也適用於驅動程式。
支援巨型框架
支援較大的最大傳輸單位(MTU),因此較大的框架大小,特別是巨幅框架,可減少每個位元組產生的網路堆疊額外負荷。 當 MTU 從 1514 變更為 9000 時,會測量 20% 的 TCP 輸送量增加。 此外,由於從網路堆疊到網路驅動程式的呼叫數目較少,因此可大幅減少 CPU 使用率。