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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、然而卻由于擁塞模塊聽不到這個(gè)信息而被忽略。我們來看一下這個(gè)邏輯: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)/如果當(dāng)前ACK是沒有推進(jìn)snd_una的重復(fù)ACK,僅計(jì)入一個(gè)段,忽略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;可見,上述針對(duì)ACK數(shù)據(jù)的計(jì)數(shù)是極其粗糙的!然而這不是Westwo

5、od的錯(cuò),這是LinuxTCP實(shí)現(xiàn)的錯(cuò)!st乳忙iniIxp訓(xùn)畀ructsacksk,cafisisuurtskbLffscbrtfiag)st-uctpori|.estiofl_opsttrudi吐總記iisl;uiiMjiedSongHd(s;Fr(tiaizeprvate曲口lopth)財(cái)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冊(cè)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.戶學(xué)tmtalorinef_d延loptiona*/vod(*;卿:nteiistructsock*也口膽&AtJrjstOpen的擁塞控制狀態(tài)中,系統(tǒng)會(huì)調(diào)用私有的有在特定的點(diǎn),才會(huì)進(jìn)入外掛的擁塞控制模塊的回調(diào)函數(shù),對(duì)于在非程和重傳邏輯了無法被擁塞控制模塊控制.。后

8、來在Linux內(nèi)核升級(jí)時(shí),將重傳邏輯從tCp_fastretrans_alert中剝離可以看到,只tcp_fastretrans_alert函數(shù),該函數(shù)中就是例行的PRR降窗chafnueFFCPCAMflMEMAXf;了出來,但是那只是代碼結(jié)構(gòu)的調(diào)整,整個(gè)非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等算法均會(huì)調(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);我認(rèn)為,拋開BBR算法本身不談,以上邏輯的引入是BBR為L(zhǎng)inuxTCP實(shí)現(xiàn)帶來的最有價(jià)值禮物。這個(gè)大禮包中最重要的也許要算structrate_sample參數(shù)了。我們看下這個(gè)

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、足夠的注釋,我就不解釋了。對(duì)于Westwood而言,最重要的或許是acked_sacked參數(shù)了。好了,現(xiàn)在開始修改Westwood的實(shí)現(xiàn):1.去掉既有的帶寬統(tǒng)計(jì)邏輯: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)計(jì)邏輯2.1.加入一個(gè)新的回調(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,添加一個(gè)新回調(diào)的用意在于不改變?cè)械腂BR以及我修改過的CDG等算法的調(diào)用邏輯,因此在tcp_cong_control中需要增加對(duì)該回調(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);/新增了一個(gè)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等算法均會(huì)調(diào)用常規(guī)邏輯。2.2.實(shí)現(xiàn)新增的回

溫馨提示

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

評(píng)論

0/150

提交評(píng)論