TCP加速–初始擁塞窗口調整

最近開始着手靜態cdn節點的速度優化,由於網絡層指標可以比較精確的量化單次cdn流量(從發起數據請求到完成數據下載的整個過程)的各個階段耗時,因此優化會從整個網絡層時間線展開;

 

1、初始擁塞窗口值調整可行性

上圖爲現代瀏覽器從數據請求、下載到渲染的整個過程;我們關心的部分主要是紅色框內的這幾個階段,主要分成dns請求,請求,響應這3個階段;在繼續細分後,我們主要會針對dns時間,建立連接時間,等待響應時間,內容下載時間這幾個方面開始優化;

google工程師Yuchung Cheng在<<Let’s make TCP faster>>一文給出了幾個tcp協議層的優化點並通過內部測試驗證了這些優化點的效果,它們分別是:

– Increase TCP initial congestion window
– Reduce the initial timeout from 3 seconds to 1 second
– Use TCP Fast Open (TFO)
– Use Proportional Rate Reduction for TCP (PRR)

其中,內核未提供直接修改RTO時間的接口,TFO需要客戶端和服務器的雙邊支持,PRR已經在3.2以上的內核默認開啓;看起來我們能優化的點只能是init_cwnd(初始擁塞窗口)值了;

2、初始擁塞窗口值取值

較大的初始擁塞窗口值雖然能顯式的提高內容下載速度,但是相對應的丟包率和重傳率也會顯著上升,因此這個取值需要兼顧下載速度和可用性等多方面來確定;
我們主要通過探測行業競品的取值來確定自己產品的取值,畢竟行業內幾個大佬已經在該領域摸爬滾打N年,早已摸索出了合理的初始擁塞窗口值了,這麼幹能省下不少事兒;

1)初始擁塞窗口值估計方法

通過三次握手階段的syn,syn+ack,ack來計算RTT時間,然後計算從第一個服務器響應包(時間戳r1)開始到r1+RTT時間段內的服務器數據包個數,此r1-r1+RTT時間段內的數據包個數可近似認爲是初始擁塞窗口值;

比如:
測試url : http://img5.dwstatic.com/www/1404/261510188736/1431050996364.jpg
IP: xxx.xxx.xxx.xxx
域名:img5.dwstatic.com
RTT: 28號包減27號包
4.460638000-4.393042000=0.067596
號包4.555419000+0.067596=4.623015
因此,在32號至47號包之間,init_cwnd初始擁塞窗口爲10

2)自動化的估值工具

工具主要自動化以下的執行步驟,通過海量樣本取平均的方法來最終計算出初始擁塞窗口近似值;

工具開源代碼地址見“6、資料”部分

3)行業大佬的取值分析

探測結果顯示,行業內各大cdn廠商都調整過init_cwnd值,普遍取值在10-20之間;

4)最終取值確定

取值初始擁塞窗口值:15

3、init_cwnd調整方法

 

 

4、init_cwnd值生效驗證

登陸目標機器後進行以下操作:

 

5、init_cwnd值調整後效果

centos 7.1默認init_cwnd 10,調整後init_cwnd 20;下載速度提升還是很明顯的;

使用mmtrix的監測工具:

6、資料

自動化遠程探測init_cwnd值工具;

https://github.com/fifa2002nb/detectcwnd

http://www.apmbe.com/tcp%E5%8A%A0%E9%80%9F-%E5%88%9D%E5%A7%8B%E6%8B%A5%E5%A1%9E%E7%AA%97%E5%8F%A3%E8%B0%83%E6%95%B4/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章