更加精確的TCPWestwood擁塞控制算法_第1頁
更加精確的TCPWestwood擁塞控制算法_第2頁
更加精確的TCPWestwood擁塞控制算法_第3頁
更加精確的TCPWestwood擁塞控制算法_第4頁
更加精確的TCPWestwood擁塞控制算法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、st乳忙iniIxp訓畀ructsacksk,cafisisuurtskbLffscbrtfiag)更加精確的TCPWestwood擁塞控制算法Westwood算法控制的是在從快速恢復(fù)階段退出時的擁塞窗口的值。原理上講,這時的窗口值應(yīng)該是一個不包括隊列緩存在內(nèi)的BDP,即最大帶寬與最小RTT的乘積。問題是如何求最大帶寬。標準的Westwood算法做的非常粗糙,它將一個TCP連接的生命周期分解為一段一段的采樣周期,每一個采樣周期內(nèi)采集被ACK的字節(jié)數(shù),然后除以采樣周期的間隔,結(jié)果做低通濾波(其實就是移動指數(shù)平均),就是帶寬。我們來看一下Westwood是如何在采樣周期內(nèi)采集ACK字節(jié)數(shù)的。然而,

2、4.9版本之前的內(nèi)核對于Linux的TCP實現(xiàn),在開放給擁塞控制回調(diào)的接口中,只能通過當前的snd_una與上次記錄的snd_una之間的差值來估算被ACK的字節(jié)數(shù),說“估算”這個詞的意思是,在擁塞控制回調(diào)中,關(guān)于SACK的信息會丟失。比如說收到一個ACK,如果它是重復(fù)的ACK,那么在擁塞控制回調(diào)中將無法取到任何其攜帶的SACK信息。雖然說一個重復(fù)的ACK可能攜帶了一大段SACK,然而對于擁塞控制回調(diào)而言,它看到的只是一個沒有推進snd_una的ACK。本來,攜帶SACK的ACK段是想告訴擁塞模塊對端其實收到了N個字節(jié)的數(shù)據(jù),只不過沒有按序,按照BDP的觀點,這些亂序的數(shù)據(jù)也應(yīng)該計入BDP的,

3、然而卻由于擁塞模塊聽不到這個信息而被忽略。我們來看一下這個邏輯:staticinlineu32westwood_acked_count(structsock*sk)conststructtcp_sock*tp=tcp_sk(sk);structwestwood*w=inet_csk_ca(sk);w-cumul_ack=tp-snd_una-w-snd_una;/*Ifcumul_ackis0thisisadupacksinceitsnotmoving*tp-snd_una.*/if(!w-cumul_ack)/如果當前ACK是沒有推進snd_una的重復(fù)ACK,僅計入一個段,忽略SACK帶來

4、的BDP排空。w-accounted+=tp-mss_cache;w-cumul_ack=tp-mss_cache;if(w-cumul_acktp-mss_cache)/*Partialordelayedack*/if(w-accounted=w-cumul_ack)w-accounted-=w-cumul_ack;w-cumul_ack=tp-mss_cache;elsew-cumul_ack-=w-accounted;w-accounted=0;w-snd_una=tp-snd_una;returnw-cumul_ack;可見,上述針對ACK數(shù)據(jù)的計數(shù)是極其粗糙的!然而這不是Westwo

5、od的錯,這是LinuxTCP實現(xiàn)的錯!st乳忙iniIxp訓畀ructsacksk,cafisisuurtskbLffscbrtfiag)st-uctpori|.estiofl_opsttrudi吐總記iisl;uiiMjiedSongHd(s;Fr(tiaizeprvate曲口lopth)財I*vojdfluitistactscdcst):/*zleariuppr和我電cati)+vaid*reii-trudsoctSsk;tipofi忙p/ck.dubiousl就F理ii-單邂&FU.G_3flTA_AXEDj&也t中11那誌e_潔出比I:-Jups:匸:;:垢HLi二泗7_少丄,0皿嘰

6、LI:,;上:_-.11FJl*g&F/GJMH.gED)/*連扎巾山凋starttheshoiij肝equh副(*55trira5hi;(5:ftctsock七朗/*c/erKxreTorccnggstloircowfDptcnaEi*/u32(1Tiin_2ATdXca訕sirirtso:k*sf/dneurcwndcakuHiDnirequied|/_3pidrcongLSVuicIUstiuct?ccksKu32乍曲u32廣cjNbtfotcunngcajlste(cptid冊l|*/cfoid|*5邑伯te|ELCtseekik,訂為抽怛劃;:illwtnencndeventoccu

7、riloxbrcillKf/Tosdfo:k*已numt卬_uje呃nte).怙/*砂理悄Iuee*詡他a-terlo&sgptiDnaO/、u31(*Lrdd_twndHnirt址山skj:X,/*forpacketzekilulntinjfQtianlB/oidrpktikeJJisInjctsxKKsk.j32numcted.戶學tmtalorinef_d延loptiona*/vod(*;卿:nteiistructsock*也口膽&AtJrjstOpen的擁塞控制狀態(tài)中,系統(tǒng)會調(diào)用私有的有在特定的點,才會進入外掛的擁塞控制模塊的回調(diào)函數(shù),對于在非程和重傳邏輯了無法被擁塞控制模塊控制.。后

8、來在Linux內(nèi)核升級時,將重傳邏輯從tCp_fastretrans_alert中剝離可以看到,只tcp_fastretrans_alert函數(shù),該函數(shù)中就是例行的PRR降窗chafnueFFCPCAMflMEMAXf;了出來,但是那只是代碼結(jié)構(gòu)的調(diào)整,整個非Open狀態(tài)依然是skip-節(jié)羽竭&FlAG_SKWPATHi鵲曲州町hp-iw_sn1_vuHNtT_fflicsk_ca_ops-cong_control)icsk-icsk_ca_ops-cong_control(sk,rs);/然后直接返回。return;/常規(guī)的邏輯。類似CUBIC等算法均會調(diào)用常規(guī)邏輯。if(tcp_in_cw

9、nd_reduction(sk)/*Reducecwndifstatemandates*/tcp_cwnd_reduction(sk,acked_sacked,1);elseif(tcp_may_raise_cwnd(sk,flag)/*Advancecwndifstateallows*/tcp_cong_avoid(sk,ack,prior_in_flight);tcp_update_pacing_rate(sk);我認為,拋開BBR算法本身不談,以上邏輯的引入是BBR為LinuxTCP實現(xiàn)帶來的最有價值禮物。這個大禮包中最重要的也許要算structrate_sample參數(shù)了。我們看下這個

10、參數(shù)包含什么:/*Aratesamplemeasuresthenumberof(original/retransmitted)datapacketsdelivereddeliveredoveranintervaloftimeinterval_us.Thetcp_rate.ccodefillsintheratesample,andcongestioncontrolmodulesthatdefineacong_controlfunctiontorunattheendofACKprocessingcanoptionallychosetoconsultthissamplewhensettingcwnd

11、andpacingrate.Asampleisinvalidifdeliveredorinterval_usisnegative.*/structrate_samplestructskb_mstampprior_mstamp;/*startingtimestampforinterval*/u32prior_delivered;/*tp-deliveredatprior_mstamp*/s32delivered;/*numberofpacketsdeliveredoverinterval*/longinterval_us;/*timefortp-deliveredtoincrdelivered*

12、/longrtt_us;/*RTToflast(S)ACKedpacket(or-1)*/intlosses;/*numberofpacketsmarkedlostuponACK*/u32acked_sacked;/*numberofpacketsnewly(S)ACKeduponACK*/u32prior_in_flight;/*inflightbeforethisACK*/boolis_app_limited;/*issamplefrompacketwithbubbleinpipe?*/boolis_retrans;/*issamplefromretransmission?*/;已經(jīng)攜帶了

13、足夠的注釋,我就不解釋了。對于Westwood而言,最重要的或許是acked_sacked參數(shù)了。好了,現(xiàn)在開始修改Westwood的實現(xiàn):1.去掉既有的帶寬統(tǒng)計邏輯:staticvoidtcp_westwood_event(structsock*sk,enumtcp_ca_eventevent)structtcp_sock*tp=tcp_sk(sk);structwestwood*w=inet_csk_ca(sk);switch(event)/*不再需要*/*caseCA_EVENT_FAST_ACK:westwood_fast_bw(sk);break;*/caseCA_EVENT_COM

14、PLETE_CWR:tp-snd_cwnd=tp-snd_ssthresh=tcp_westwood_bw_rttmin(sk);break;caseCA_EVENT_LOSS:tp-snd_ssthresh=tcp_westwood_bw_rttmin(sk);/*UpdateRTT_minwhennextackarrives*/w-reset_rtt_min=1;break;/*不再需要*/*caseCA_EVENT_SLOW_ACK:westwood_update_window(sk);w-bk+=westwood_acked_count(sk);update_rtt_min(w);br

15、eak;*/default:/*dontcare*/break;2加入新的回調(diào)函數(shù)和新的帶寬統(tǒng)計邏輯2.1.加入一個新的回調(diào)staticstructtcp_congestion_opstcp_westwood_read_mostly=.init=tcp_westwood_init,.ssthresh=tcp_reno_ssthresh,.cong_collect=westwood_collect,.cong_avoid=tcp_reno_cong_avoid,添加一個新回調(diào)的用意在于不改變原有的BBR以及我修改過的CDG等算法的調(diào)用邏輯,因此在tcp_cong_control中需要增加對該回調(diào)

16、的調(diào)用:staticvoidtcp_cong_control(structsock*sk,u32ack,u32prior_in_flight,u32acked_sacked,intflag,conststructrate_sample*rs)conststructinet_connection_sock*icsk=inet_csk(sk);/新增了一個cong_control回調(diào)函數(shù)。在擁塞狀態(tài)無關(guān)的情況下無條件接管所有的邏輯。if(icsk-icsk_ca_ops-cong_control)icsk-icsk_ca_ops-cong_control(sk,rs);/然后直接返回。return;if(icsk-icsk_ca_ops-cong_collect)icsk-icsk_ca_ops-cong_collect(sk,rs);/并不返回。fallthrough!/常規(guī)的邏輯。類似CUBIC等算法均會調(diào)用常規(guī)邏輯。2.2.實現(xiàn)新增的回

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論