Windows 提供了一些注冊表參數的編輯方式來優化TCP/IP協議的性能。改變這些注冊表值的時候,你應當了解它的作用,如果發現這些改變降低了服務器的性能,應該恢復成原有的設置。
提示:本文描述的一些注冊表值默認狀態下可能不存在,需要手工添加。
修改注冊表需要有經驗的技術人員完成,錯誤的注冊表修改可能導致嚴重的系統不穩定或無法正常啟動,在實施注冊表的修改前,您應當完全了解注冊表項目的作用以及可能造成的影響或副作用。建議訪問微軟網站或其它站點獲得更多的與注冊表參數修改相關的信息。
很多注冊表的改變在系統重啟后才能生效,很多改變可能限制Windows的自我調優。
注意:Windows TCP/IP調優可能對內存資源產生很大影響,實施調優的措施后監控內存資源的使用率是非常重要的。
TCP 窗口大小
TCP receive window(TCP 數據接收緩沖)定義了發送端在沒有接收端確認信息的狀態下可以發送的最大字節數。此數值越大,返回的確認信息就越少,相應的在發送端和接收端之間的通信就越好。此數值較小時可以降低發送端在等待接收端返回確認信息時發生超時的可能性,但這將增加網絡流量,降低有效吞吐率。
TCP在發送端和接收端之間動態調整一個最大段長度MSS(maximum segment size)的整數倍。MSS在連接剛剛開始建立時確定,由于receive window被調整為MSS的整數倍,在數據傳輸中完全長度的TCP數據段的使用增加,故而提高了網絡吞吐率。
默認狀態下,TCP將試圖依據MSS來優化window size,起始值為16KB,最大為64KB。TCP window size也可以在注冊表中手工設定。
TCP window size最大值通常為65535字節(64KB), 以太網最大段長度為1460字節,低于64KB的1460的最大整數倍為62420字節,故注冊表中可以將62420設置為高帶寬網絡中適用的性能優化值。此值在注冊表中原本沒有,需要手工添加。
TcpWindowSize注冊表項的值可以被設定在global或每個interface級別,interface級別設置覆蓋global值。為了達到最大window尺寸,我們建議此處設為global級別。
注冊表建議設置如下:
大TCP窗口和RTT估測(時間戳)
為了更高效地利用高帶寬網絡,你可以使用比前述TCP窗口大得多的TCP窗口大小,此特性是Windows 2000和Windows Server 2003中的新特性,稱為TCP window scaling,它將以前的65535字節(64KB)的限制提高到了1073741824字節(1GB)。使用scaling window,系統可以允許確認信息間更大數據量的傳輸,增加了網絡吞吐量及性能。
發送端和接收端往返通信所需時間稱為回環時間(RTT)。TCP有一個時間戳選項,通過更加頻繁地計算來提高RTT值的估測值,此選項特別有助于估測更長距離的廣域網上連接的RTT值,并更精確調整TCP轉發超時時間。時間戳在TCP報頭提供了兩個區域,一個記錄開始轉發的時間,另一個記錄接收到的時間。
時間戳對于window scaling,即確認信息收到前的大數據包傳送特別有用,激活時間戳僅僅在每個數據包的頭中增加12字節,對網絡流量的影響微乎其微。數據完整性與數據吞吐率最大化哪個更重要是個需要評估的問題。在某些環境中,象視頻流傳送,需要大的TCP窗口,這是第一重要的,而數據完整性排在第二位,在此中環境中,window scaling可以不打開時間戳。
當發送端和接收端均激活window scaling和時間戳時,此特性才有效。
初始時生成小的TCP窗口,之后窗口大小將按照內部算法增大。
相關注冊表如下:
注意低位代表是否打開window scaling,高位代表是否打開時間戳。
表4 TCP1323Opts注冊表入口
TCP1323Opts設置成激活TCP window scaling后,注冊表項TCPWindowSize的值從65535字節變為1GB,為了達到最佳性能,這里的值最好設置成MSS的倍數。
TCP 連接轉發
TCP退出前轉發非確認連接請求(SYN)的次數記錄在注冊表項TcpMaxConnectRetransmisstions。對于每次嘗試,轉發超時是成功轉發的兩倍。在Windows Server 2003中默認超時次數是2,默認超時時間為3秒(在注冊表項TCPInitialRTT中)。速度較慢的WAN連接中超時時間可相應增加。不同環境中可能會有不同的最優化設置,需要在實際環境中測試確定。
注:超時時間不要設置太大否則將不會發生網絡連接超時。
TCP數據轉發
退出前TCP轉發非確認數據段的個數記錄在注冊表項TcpMaxDataRetransmissions。默認值是5。TCP依據給定連接的回環時間建立一個初始間隔。每次成功轉發,間隔時間加倍,直到響應發生或超時發生,此時間隔時間又回到初始值。
TCP 時間等待延遲
默認狀況下TCP在1024和5000之間定位一個端口提供給任意可用的短周期用戶端口。當一個給定的通信被TCP關閉,它將在釋放前等待一段時間,這稱為時間等待延遲。Windows Server 2003默認設置為2分鐘,適用于大多數環境。但一些繁忙的系統在短時間內建立了多個連接,將耗盡可用端口,降低網絡吞吐率。
兩個注冊表項:
TCPTimedWaitDelay 釋放前TCP等待時間
MaxUserPort TCP連接使用的最大端口數量
降低等待時間和增加最大端口數量可以提高系統的數據吞吐率。
此設置適用于非常繁忙的服務器,有數千個并發TCP連接,如很大負載的LDAP,FTP,Web服務器。
TCP 控制塊表
對于每個TCP連接,控制變量保存在一個稱為TCP控制塊(TCB)的內存塊中。TCB表的大小由注冊表項MaxHashTableSize控制。在活動連接很多的大系統中,設定一個較大的表可以降低系統定位TCB表的時間。
在TCB表上分區,可以降低對表的訪問的爭奪。增加分區的數量,TCP的性能會得到優化,特別是在多處理器的系統上。注冊表項NumTcbTablePartitions控制分區的數量。默認是處理器個數的平方。
TCB通常預置在內存中以防止TCP反復連接和斷開時TCB反復重新定位浪費時間,這種緩沖的方式促進了內存管理,但同時也限制了同一時刻允許TCP連接的數量。注冊表項MaxFreeTcbs配置了在時間等待狀態的TCB重新可用之前的連接數量。在NT架構中常設置成高于默認值,以確保有足夠的預置的TCB。
從Windows2000開始添加了一個新特性降低超出預置TCB運行的可能性。如果在時間等待狀態的連接多于MaxFreeTWTcbs中的設置,所有超過60秒等待的連接將被強制關閉,以后再次啟用。此特性合并到Windows2000Server和Windows Server 2003后,MaxFreeTcbs將不再用于優化性能。
TCP確認頻率
TCP用延遲確認來降低網絡中轉發的數據包數量,以提升性能。
注:此值配置為interface級別。
默認值為2,100Mbps網絡使用5(0x5),1000Mbps網絡用13(0xD)。