共用方式為


Windows Server 中的網路適配器效能微調

本文說明如何在 Windows Server 環境中優化網路適配器效能。 網路適配器效能微調可以大幅改善輸送量、降低延遲,並將伺服器工作負載的資源使用率最大化。

網路介面卡的正確調整設置取決於以下變數:

  • 網路介面卡及其功能集
  • 伺服器執行的工作負載類型
  • 伺服器硬體和軟體資源
  • 您的伺服器效能目標

最佳微調設定取決於您的特定硬體組態、工作負載需求和效能目標。 實作變更之前,請先評估您目前的網路效能,並找出改進的領域。 某些功能和設定可能會因版本而異。

以下各節說明一些效能調整選項。

卸載功能

網路卸除功能會將處理工作從CPU傳輸到網路適配器硬體,減少系統負荷並改善整體網路效能。 常見的卸載功能包括 TCP 檢查碼卸載、大型傳送卸載(LSO),和接收端調整(RSS)。

啟用網路適配器卸載功能通常是有利的。 但是,網路配接器可能不夠強大,無法處理高吞吐量的卸載功能。 例如,請考慮具有有限硬體資源的網路適配器。 在這種情況下,啟用分段卸載功能可能會降低適配器的最大可持續吞吐量。 不過,如果您可以接受降低的輸送量,那麼您應該啟用分段卸載功能。

某些網路介面卡要求您為傳送和接收路徑獨立啟用卸載功能。

Important

請勿使用卸載功能 IPsec 工作卸載TCP Chimney 卸載。 這些技術在 Windows Server 2016 中已棄用,可能會對伺服器和網路效能產生不利影響。 此外,Microsoft未來可能不支援這些技術。

網頁伺服器的接收端縮放(RSS)

當伺服器上的網路介面卡比邏輯處理器少時,RSS 可以改善 Web 延展性和效能。 當所有 Web 流量都透過支援 RSS 的網路介面卡時,伺服器可以在不同的 CPU 上同時處理來自不同連線的傳入 Web 要求。

Important

避免在同一伺服器上同時使用不支援 RSS 的網路介面卡和支援 RSS 的網路介面卡。 由於 RSS 和超文本傳送協定 (HTTP) 中的負載分配邏輯,如果不支援 RSS 的網路介面卡在具有一個或多個支援 RSS 的網路配接器的伺服器上接受 Web 流量,則效能可能會嚴重下降。 在此情況下,您應該使用支援 RSS 的網路介面卡,或在網路介面卡屬性的 [進階屬性] 索引標籤上停用 RSS。

若要判斷網路介面卡是否支援 RSS,您可以在網路介面卡屬性的 [進階屬性] 索引標籤上檢視 RSS 資訊。

RSS 設定檔和 RSS 佇列

預設 RSS 預先定義的設定檔為 NUMAStatic。 開始使用 RSS 設定檔之前,請先檢閱可用的配置檔,以了解它們何時有益,以及它們如何套用至您的網路環境和硬體。

例如,開啟 工作管理員 並檢閱伺服器上的邏輯處理器。 如果接收流量似乎使用量過低,您可以嘗試將 RSS 佇列數目從預設值的兩個增加到網路適配器支援的最大值。 您的網路介面卡可能會在驅動程式中提供變更 RSS 佇列數目的選項。

網路適配器資源

對於可以讓您手動設置資源(例如接收和傳送緩衝區)的網路介面卡,您應該增加分配的資源。

某些網路介面卡會將其接收緩衝區設低以節省來自主機的配置記憶體。 低的值會導致丟棄封包和降低效能。 因此,對於大量接收的情況,建議您將接收緩衝區的值增加到最大。

如果網路適配器未公開手動資源設定,則會動態設定資源,或將資源設定為無法變更的固定值。

中斷審核

為了控制中斷審核,某些網路介面卡會公開不同的中斷審核等級、不同的緩衝區合併參數(有時分別用於傳送和接收緩衝區)或兩者。

您應該考慮對 CPU 密集型工作負載進行中斷調整。 使用中斷調整時,請考慮主機 CPU 節省和延遲與因更多中斷和更少延遲而增加的主機 CPU 節省之間的權衡。 如果網路適配器未執行中斷調節,但確實支援緩衝區合併,您可以透過增加合併緩衝區的數目來改善效能,從而允許每次傳送或接收更多緩衝區。

低延遲封包處理

許多網路介面卡都有提供將作業系統引起的延遲最佳化的選項。 延遲係指網路驅動程式處理連入封包到網路驅動程式將封包傳送回去之間的經歷時間。 此時間通常是以微秒為單位。 為了進行比較,長距離資料包傳送的傳送時間通常以毫秒為單位(大一個數量級)。 此微調不會減少封包在傳輸中花費的時間。

下列清單提供微秒敏感網路的一些效能微調建議:

  • 如果您的 BIOS 支援它,請將電腦 BIOS 設定為 高效能,並 C-states 停用。 如果作系統控制電源管理,某些系統會提供更高的效能。 您可以從電源設定或使用 powercfg 命令來檢查和調整電源管理設定。 更多詳細資訊,請參閱Powercfg 命令列選項

  • 將作業系統電源管理設置檔設置為高效能係統。 如果系統 BIOS 設定為停用電源管理的作系統控制,此設定將無法正常運作。

  • 啟用靜態卸載。 例如,啟用 UDP 校驗和、TCP 校驗和和發送大量卸載 (LSO) 設置。

  • 如果流量是多流的,例如接收大量組播流量時,請啟用 RSS。

  • 停用需要盡可能低延遲的網路卡驅動程式的 中斷審核 設定。 請記住,此設置可能會使用更多的 CPU 時間,這是一種權衡。

  • 在與處理封包的程式 (使用者執行緒) 所使用之核心共用 CPU 快取的核心處理器上,處理網路介面卡插斷和 DPC。 CPU 親和性微調可用來將進程導向至具有 RSS 設定的特定邏輯處理器。 將相同的核心用於插斷、DPC 及使用者模式執行緒會讓效能隨著負載增加而變差,因為 ISR、DPC 及執行緒會爭相使用該核心。

系統管理中斷

許多硬體系統使用系統管理中斷(SMI)進行各種維護功能,例如報告錯誤更正碼 (ECC) 記憶體錯誤、維護舊版 USB 相容性、控制風扇,以及管理 BIOS 控制的電源設定。

SMI 是系統上優先順序最高的中斷,並將 CPU 置於管理模式。 當 SMI 執行中斷服務例程(通常包含在 BIOS 中)時,此模式會搶佔所有其他活動。 不幸的是,這種行為可能會導致 100 微秒或更長的延遲高峰。

如果您需要達到最低延遲,您應該向硬體提供者要求一個可將 SMI 盡可能降到最低限度的 BIOS 版本。 這些 BIOS 版本通常稱為 低延遲 BIOSSMI 免費 BIOS。 在某些情況下,硬體平臺不可能完全消除 SMI 活動,因為它用來控制冷卻風扇等基本功能。

作業系統無法控制SMIs,因為邏輯處理器正以特殊的維護模式運行,這可防止作業系統的介入。

TCP接收視窗自動調整

Windows 網路堆疊會使用名為 TCP 接收視窗自動調整層級 的功能來交涉 TCP 接收視窗大小。 這項功能可以交涉 TCP 交握期間每個 TCP 通訊的已定義接收視窗大小,並可改善 TCP 連線的效能。

先前,Windows 網路堆疊使用固定大小的接收視窗 65,535 個字節,以限制連線的整體潛在輸送量。 TCP 連線可實現的總吞吐量可能會限制網路使用情境。 TCP 接收視窗自動調整可讓這些案例完全使用網路。

對於具有特定大小的 TCP 接收視窗,您可以使用下列方程式來計算單一連線的總輸送量:

以位元組為單位的可實現總接收量 = 以位元組為單位的TCP 接收視窗大小 * (1 / 以秒為單位的連線延遲)

例如,針對延遲為 10 毫秒的 1 Gbps 連線,可達到的輸送量總計僅為 51 Mbps。 對於大型企業網路基礎設施來說,該值是合理的。 不過,透過使用自動調整接收窗口,連線可以達到 1 Gbps 的完整線路速率。

一些應用程式設置 TCP 接收視窗的大小。 如果應用程式未定義接收視窗大小,連結速度會決定大小,如下所示:

連結速度 接收視窗大小
小於 1 Mbps 8 KB
1 Mbps 到 100 Mbps 17 KB
100 Mbps 到 10 Gbps 64 KB
10 Gbps 或更快 128 KB

例如,在已安裝 1 Gbps 網路適配器的電腦上,視窗大小應該是 64 KB。

該功能還充分利用其他功能來提高網路效能。 這些功能包括 RFC 1323中定義的其餘TCP選項。 Windows 計算機可以使用這些功能來協商較小的 TCP 接收視窗大小,但會根據配置縮放到已定義的值。 此行為可讓網路裝置更容易處理大小。

Note

您可能會遇到網路裝置不符合 TCP 視窗縮放選項的問題,如 RFC 1323 中所定義,因此不支援縮放比例。 在這種情況下,請連絡您的網路裝置廠商。

自動調整級別

您可以將 TCP 接收視窗自動調整為五個層級中的任何一個。 預設層級為 Normal。 下表描述了各個層級。

Level 十六進位值 Comments
正常 (預設) 0x8(比例條件為 8) 將 TCP 接收視窗設置為成長以適應幾乎所有情境。
Disabled 沒有可用的比例條件 將 TCP 接收視窗設置為其預設值。
Restricted 0x4(比例條件為 4) 將 TCP 接收視窗設置為超出其預設值,但在某些情況下限制這種增長。
高度限制 0x2(比例條件為 2) 將 TCP 接收視窗設置為超出其預設值,但這樣做要非常保守。
Experimental 0xE(比例條件為 14) 將 TCP 接收視窗設置為成長以適應極端情況。

如果您使用應用程式來擷取網路封包,應用程式應該報告類似下列不同視窗自動調整層級設定範例的數據。

自動調整層級:一般(預設狀態)

此示例顯示當TCP接收視窗自動調整級別設定為 Normal時,資料包捕獲工具的輸出。 縮放比例為8。

Frame: Number = 492, Captured Frame Length = 66, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[D8-FE-E3-65-F3-FD],SourceAddress:[C8-5B-76-7D-FA-7F]
+ Ipv4: Src = 192.169.0.5, Dest = 192.169.0.4, Next Protocol = TCP, Packet ID = 2667, Total IP Length = 52
- Tcp: [Bad CheckSum]Flags=......S., SrcPort=60975, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=4075590425, Ack=0, Win=64240 ( Negotiating scale factor 0x8 ) = 64240
SrcPort: 60975
DstPort: Microsoft-DS(445)
SequenceNumber: 4075590425 (0xF2EC9319)
AcknowledgementNumber: 0 (0x0)
+ DataOffset: 128 (0x80)
+ Flags: ......S. ---------------------------------------------------------> SYN Flag set
Window: 64240 ( Negotiating scale factor 0x8 ) = 64240 ---------> TCP Receive Window set as 64K as per NIC Link bitrate. Note it shows the 0x8 Scale Factor.
Checksum: 0x8182, Bad
UrgentPointer: 0 (0x0)
- TCPOptions:
+ MaxSegmentSize: 1
+ NoOption:
+ WindowsScaleFactor: ShiftCount: 8 -----------------------------> Scale factor, defined by AutoTuningLevel
+ NoOption:
+ NoOption:
+ SACKPermitted:

自動調整層級:已停用

此示例顯示當TCP接收視窗自動調整級別設定為 Disabled時,資料包捕獲工具的輸出。 沒有使用縮放比例。

Frame: Number = 353, Captured Frame Length = 62, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[D8-FE-E3-65-F3-FD],SourceAddress:[C8-5B-76-7D-FA-7F]
+ Ipv4: Src = 192.169.0.5, Dest = 192.169.0.4, Next Protocol = TCP, Packet ID = 2576, Total IP Length = 48
- Tcp: [Bad CheckSum]Flags=......S., SrcPort=60956, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=2315885330, Ack=0, Win=64240 ( ) = 64240
SrcPort: 60956
DstPort: Microsoft-DS(445)
SequenceNumber: 2315885330 (0x8A099B12)
AcknowledgementNumber: 0 (0x0)
+ DataOffset: 112 (0x70)
+ Flags: ......S. ---------------------------------------------------------> SYN Flag set
Window: 64240 ( ) = 64240 ----------------------------------------> TCP Receive Window set as 64K as per NIC Link bitrate. Note there is no Scale Factor defined. In this case, Scale factor is not being sent as a TCP Option, so it will not be used by Windows.
Checksum: 0x817E, Bad
UrgentPointer: 0 (0x0)
- TCPOptions:
+ MaxSegmentSize: 1
+ NoOption:
+ NoOption:
+ SACKPermitted:

自動調整層級:限制

此範例顯示當TCP接收視窗自動調整層級設定為受 時,封包捕獲工具的輸出。 縮放比例為 4。

Frame: Number = 3, Captured Frame Length = 66, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[D8-FE-E3-65-F3-FD],SourceAddress:[C8-5B-76-7D-FA-7F]
+ Ipv4: Src = 192.169.0.5, Dest = 192.169.0.4, Next Protocol = TCP, Packet ID = 2319, Total IP Length = 52
- Tcp: [Bad CheckSum]Flags=......S., SrcPort=60890, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=1966088568, Ack=0, Win=64240 ( Negotiating scale factor 0x4 ) = 64240
SrcPort: 60890
DstPort: Microsoft-DS(445)
SequenceNumber: 1966088568 (0x75302178)
AcknowledgementNumber: 0 (0x0)
+ DataOffset: 128 (0x80)
+ Flags: ......S. ---------------------------------------------------------> SYN Flag set
Window: 64240 ( Negotiating scale factor 0x4 ) = 64240 ---------> TCP Receive Window set as 64K as per NIC Link bitrate. Note it shows the 0x4 Scale Factor.
Checksum: 0x8182, Bad
UrgentPointer: 0 (0x0)
- TCPOptions:
+ MaxSegmentSize: 1
+ NoOption:
+ WindowsScaleFactor: ShiftCount: 4 -------------------------------> Scale factor, defined by AutoTuningLevel.
+ NoOption:
+ NoOption:
+ SACKPermitted:

自動調整層級:高度限制

此示例顯示當TCP接收視窗自動調整級別設定為 高度限制時,資料包捕獲工具的輸出。 縮放比例為 2。

Frame: Number = 115, Captured Frame Length = 66, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[D8-FE-E3-65-F3-FD],SourceAddress:[C8-5B-76-7D-FA-7F]
+ Ipv4: Src = 192.169.0.5, Dest = 192.169.0.4, Next Protocol = TCP, Packet ID = 2388, Total IP Length = 52
- Tcp: [Bad CheckSum]Flags=......S., SrcPort=60903, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=1463725706, Ack=0, Win=64240 ( Negotiating scale factor 0x2 ) = 64240
SrcPort: 60903
DstPort: Microsoft-DS(445)
SequenceNumber: 1463725706 (0x573EAE8A)
AcknowledgementNumber: 0 (0x0)
+ DataOffset: 128 (0x80)
+ Flags: ......S. ---------------------------------------------------------> SYN Flag set
Window: 64240 ( Negotiating scale factor 0x2 ) = 64240 ---------> TCP Receive Window set as 64K as per NIC Link bitrate. Note it shows the 0x2 Scale Factor.
Checksum: 0x8182, Bad
UrgentPointer: 0 (0x0)
- TCPOptions:
+ MaxSegmentSize: 1
+ NoOption:
+ WindowsScaleFactor: ShiftCount: 2 ------------------------------> Scale factor, defined by AutoTuningLevel
+ NoOption:
+ NoOption:
+ SACKPermitted:

自動調整層級:實驗性

此示例顯示當TCP接收視窗自動調整級別設定為 實驗性時,資料包捕獲工具的輸出。 縮放比例為 14。

Frame: Number = 238, Captured Frame Length = 66, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[D8-FE-E3-65-F3-FD],SourceAddress:[C8-5B-76-7D-FA-7F]
+ Ipv4: Src = 192.169.0.5, Dest = 192.169.0.4, Next Protocol = TCP, Packet ID = 2490, Total IP Length = 52
- Tcp: [Bad CheckSum]Flags=......S., SrcPort=60933, DstPort=Microsoft-DS(445), PayloadLen=0, Seq=2095111365, Ack=0, Win=64240 ( Negotiating scale factor 0xe ) = 64240
SrcPort: 60933
DstPort: Microsoft-DS(445)
SequenceNumber: 2095111365 (0x7CE0DCC5)
AcknowledgementNumber: 0 (0x0)
+ DataOffset: 128 (0x80)
+ Flags: ......S. ---------------------------------------------------------> SYN Flag set
Window: 64240 ( Negotiating scale factor 0xe ) = 64240 ---------> TCP Receive Window set as 64K as per NIC Link bitrate. Note it shows the 0xe Scale Factor.
Checksum: 0x8182, Bad
UrgentPointer: 0 (0x0)
- TCPOptions:
+ MaxSegmentSize: 1
+ NoOption:
+ WindowsScaleFactor: ShiftCount: 14 -----------------------------> Scale factor, defined by AutoTuningLevel
+ NoOption:
+ NoOption:
+ SACKPermitted:

查閱並設置 TCP 接收視窗自動調整級別

您可以使用 Windows PowerShell Cmdlet 或 netsh Windows 命令來檢閱或變更 TCP 接收視窗自動調整層級。

Note

從 Windows Server 2019 開始,您無法再使用登錄來設定 TCP 接收視窗大小。 有關已棄用設置的更多資訊,請參閱已棄用的 TCP 參數

您可以使用 Get-NetTCPSetting Cmdlet 來檢閱或修改自動調整層級。 若要檢閱並變更目前的設定:

  1. 以系統管理員身分開啟 PowerShell,然後執行下列 Cmdlet:

    Get-NetTCPSetting | Select SettingName,AutoTuningLevelLocal
    

    輸出類似於下列範例:

    SettingName          AutoTuningLevelLocal
    -----------          --------------------
    Automatic
    InternetCustom       Normal
    DatacenterCustom     Normal
    Compat               Normal
    Datacenter           Normal
    Internet             Normal
    
  2. 若要變更設定,請執行下列命令。 請務必將 設定 <value> 為所需的自動調整層級。 如需詳細資訊,請參閱 Set-NetTCPSetting

    Set-NetTCPSetting -AutoTuningLevelLocal <value>
    

Windows 篩選平台

Windows 篩選平臺 (WFP),在 Windows Server 2008 中引進,為非Microsoft獨立軟體供應商 (ISV) 提供 API,以建立封包處理篩選器。 WFP 允許第三方軟體檢查、修改或篩選網路堆疊各層的網路流量。 雖然這項功能對於安全性應用程式而言很重要,但如果未正確實作,可能會造成效能額外負荷。 範例包括防火牆和防毒軟體。

撰寫不佳的 WFP 篩選可能會大幅降低伺服器的網路效能。 有關詳細資訊,請參閱Windows 開發人員中心中的將資料包處理驅動程式和應用程式移植到 WFP。

已棄用的 TCP 參數

Windows Server 2003 中的以下註冊表設置不再受支援,並且在更高版本中將被忽略。

  • TcpWindowSize
  • NumTcbTablePartitions
  • MaxHashTableSize

所有這些設定都位於下列登錄子機碼中: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters