黃宏平,朱小勇,王志遠
(1.中國科學(xué)院聲學(xué)研究所國家網(wǎng)絡(luò)新媒體工程技術(shù)研究中心,北京 100190; 2.中國科學(xué)院大學(xué),北京 100049)
1986年10月,因特網(wǎng)第一次經(jīng)歷的“擁塞崩潰”促使擁塞控制算法誕生[1]。隨著互聯(lián)網(wǎng)的迅速發(fā)展,各類服務(wù)、應(yīng)用對網(wǎng)絡(luò)性能的要求越來越高。擁塞控制算法被不斷改進,新型擁塞控制算法不斷地涌現(xiàn),如Remy[2]、PCC[3]、Copa[4]等,這些擁塞控制算法為解決網(wǎng)絡(luò)擁塞提供了全新的視角。一般來說,擁塞控制算法有2個關(guān)鍵的衡量指標,即帶寬利用率與公平性。高帶寬利用率意味著所有的流能夠充分利用鏈路帶寬,但是要避免鏈路過載而導(dǎo)致網(wǎng)絡(luò)癱瘓。同時,盡可能地保證各個流之間帶寬分配公平,擁塞控制算法應(yīng)該具有良好的收斂性。谷歌在2016年提出了基于鏈路容量的BBR擁塞控制算法[5],與傳統(tǒng)的基于丟包的擁塞控制算法不同,該算法在保證高帶寬利用率的同時,能夠保持較低的RTT(Round Trip Time),且算法具備很強的抗丟包能力。BBR通過主動探測鏈路可用帶寬和最小鏈路傳輸時延(RTTmin),來充分利用鏈路可用帶寬的同時,減少在瓶頸鏈路排隊的數(shù)據(jù)包,并保證良好的公平性。根據(jù)網(wǎng)絡(luò)反饋的數(shù)據(jù)包到達速率和測得的RTTmin,計算得到鏈路的帶寬時延積(Bandwidth Delay Product, BDP),BBR輸出2個擁塞控制關(guān)鍵參數(shù):數(shù)據(jù)包發(fā)送速率(pacing_rate)和擁塞窗口(congestion window, cwnd),pacing_rate決定BBR發(fā)送數(shù)據(jù)的速率,cwnd決定BBR能夠發(fā)送多少數(shù)據(jù)。此外,BBR對丟包不敏感,其最大抗丟包率達到20%,即丟包“崖點”[6]。
圖1揭示了BBR與基于丟包的擁塞控制算法工作方式的根本區(qū)別[5]。該圖顯示了TCP流經(jīng)過瓶頸鏈路時RTT、吞吐量與inflight的關(guān)系。inflight為正在鏈路中傳輸?shù)臄?shù)據(jù)量大小,即所有己發(fā)送的但未被確認的數(shù)據(jù)量。
當inflight剛好大于鏈路BDP時(圖1中A點),瓶頸鏈路帶寬得到充分利用,且此時幾乎不產(chǎn)生數(shù)據(jù)包排隊,排隊延遲為0或者接近于0,該點被文獻[7]證明為最優(yōu)操作點,此時吞吐量達到瓶頸鏈路帶寬,RTT接近鏈路固有時延。而在A點的左邊,inflight數(shù)據(jù)低于BDP,瓶頸鏈路帶寬沒有被完全利用,可用帶寬被浪費。隨著inflight數(shù)據(jù)的增加,到達數(shù)據(jù)的速率超過瓶頸鏈路的轉(zhuǎn)發(fā)速率,傳輸速率保持不變,超發(fā)的數(shù)據(jù)會被緩存在中間轉(zhuǎn)發(fā)設(shè)備的緩沖區(qū)或被中間轉(zhuǎn)發(fā)設(shè)備丟棄。瓶頸鏈路處的數(shù)據(jù)包隊列越長,數(shù)據(jù)包排隊延遲將越大,該過程在圖1中表現(xiàn)為帶寬限制。
基于丟包的擁塞控制算法以丟包作為鏈路擁塞的信號,在丟包之前不斷增加擁塞窗口大小,直至出現(xiàn)丟包才減小擁塞窗口。基于丟包的擁塞控制算法操作點為圖1中的B點,該點不但容易產(chǎn)生丟包,且會產(chǎn)生不必要的數(shù)據(jù)包排隊延遲,緩沖區(qū)膨脹(Buffer Bloat)問題最嚴重[8]。
BBR試圖將傳輸過程控制在最優(yōu)操作點A,即獲得最大帶寬利用率的同時盡可能減少數(shù)據(jù)包排隊延遲。Jaffe[9]證明不存在一個分布式的算法使得傳輸過程收斂到最優(yōu)操作點A。BBR采取了一個折中的辦法來近似收斂到點A。BBR采用一個狀態(tài)機,如圖2所示,在探測帶寬和探測RTT這2個狀態(tài)之間來回切換從而測得最大可用帶寬BWmax和最小鏈路傳播時延RTTmin,兩者的乘積即為BDP,從而控制傳輸過程近似收斂到最優(yōu)點。
BBR的基本流程如圖2所示,算法首先進入START_UP階段,該階段以一個初始速率迅速增長到較為公平的可用帶寬,然后算法進入DRAIN階段,在該階段BBR以START_UP階段速率的倒數(shù)發(fā)送數(shù)據(jù)包,其目的在于排空START_UP階段超發(fā)的數(shù)據(jù)包。當網(wǎng)絡(luò)中的數(shù)據(jù)包數(shù)量小于等于BDP時,BBR退出DRAIN階段,進入PROBE_BW階段。BBR大部分時間都處在PROBE_BW階段,在該階段,BBR以速率增益數(shù)組[1.25,0.75,1,1,1,1,1,1]完成帶寬的探測和算法的公平收斂,pacing_gain取值為1.25或0.75使得速率增加1/4,隨后將超發(fā)的數(shù)據(jù)包排空。pacing_gain取值為1使得帶寬保持不變,以保證算法的收斂。此外,BBR如果10 s內(nèi)沒有探測到更小的RTT將進入PROBE_RTT狀態(tài),該階段將擁塞窗口設(shè)置為4個發(fā)送方最大段大小以排空網(wǎng)絡(luò)鏈路重新測得RTTmin。
網(wǎng)絡(luò)一旦產(chǎn)生擁塞,將可能造成丟包和高延遲。丟包會觸發(fā)TCP重傳,進而降低網(wǎng)絡(luò)的有效吞吐量。高延遲同樣會帶來嚴重問題,首先,許多應(yīng)用程序如AR/VR、在線游戲、遠程系統(tǒng)管理、視頻會議等對延遲及其波動性均有較高要求[10]。延遲如果過大,甚至網(wǎng)頁瀏覽QoE也將急劇下降。受應(yīng)用限制的流的帶寬通常較小,如果擁塞控制不能保持較低的延遲,這些數(shù)據(jù)流在傳輸過程中也將持續(xù)存在高延遲,帶寬較小的流吞吐量被擠占[11]。
實驗發(fā)現(xiàn),無論是單條還是多條BBR流,均存在較大的延遲,且延遲、帶寬波動均較大。其次,BBR在帶寬探測上還存在著一些問題,如在較小RTT環(huán)境下性能不佳,應(yīng)對帶寬改變不夠及時等問題。本文對以上問題進行詳細分析,并給出相應(yīng)的解決方案。
BBR擁塞控制算法已被廣泛地研究與評估,文獻[12]搭建了物理測試環(huán)境,對高帶寬環(huán)境下的BBR進行理論分析和實驗測試。該文獻證明了多個BBR流對可用帶寬的估計總和總是趨向于超過瓶頸帶寬,使得多個BBR流共享同一個瓶頸帶寬環(huán)境時將收斂到Kleinrock最優(yōu)操作點的右側(cè),多個BBR流通常產(chǎn)生1~1.5倍RTT的排隊延遲。該現(xiàn)象的產(chǎn)生源于BBR帶寬探測時,為保證流的收斂性,不同BBR流盡可能選擇在不同的時間探測鏈路帶寬;探測帶寬時使用最大過濾帶寬窗口(BWmax-filter)得到的傳輸速率作為發(fā)送速率,最大瓶頸帶寬(Max-BtlBW)即時采集,而Max-BtlBW的衰減是隨著時間緩慢進行的,該機制是保證多個BBR流能夠公平收斂的關(guān)鍵[13]。
此外,BBR存在嚴重的RTT不公平性問題,文獻[14]建立了帶寬動力學(xué)模型,證明了當RTT比率超過2時,BBR流之間將發(fā)生嚴重的帶寬不公平。文獻[15]通過調(diào)整發(fā)送速率增益系數(shù)的方式來改進RTT公平性,并且在一定程度上降低了排隊延遲。文獻[16]通過調(diào)整不同網(wǎng)絡(luò)狀態(tài)下的擁塞窗口大小以提高RTT公平性。文獻[17]證明了BBR流實際獲得帶寬增長的增益系數(shù)與RTT相關(guān),進而提出了更加公平的增益系數(shù)以改進RTT公平性。
在與傳統(tǒng)基于丟包的擁塞控制算法混合部署中,BBR存在著較為嚴重的協(xié)議間公平性問題。文獻[18]提出了一種BBR擁塞窗口縮放方案,來提高BBR與其他基于丟包的擁塞控制算法間的公平性。谷歌在2019年提出的BBRv2[19]一定程度地緩解了該問題,文獻[20]對BBRv1和BBRv2進行了充分的比較與實驗評估。
文獻[21]評估了主流擁塞控制算法在慢啟動階段的行為,實驗評估結(jié)果表明BBR在慢啟動階段的表現(xiàn)遜于其他擁塞控制算法。該文獻的主要評估指標包括慢啟動階段Inflight數(shù)據(jù)量、成功發(fā)送的數(shù)據(jù)量、RTT等。
文獻[13]對多個BBR流的收斂性進行了理論證明,指出多個BBR流能夠最終收斂到同一個公平的帶寬得益于BBR的帶寬探測機制。進行帶寬探測的BBR流,在探測RTT內(nèi),傳輸速率乘以一個大于1的增益系數(shù)以探測帶寬,在排空RTT內(nèi),將傳輸速率乘以增益系數(shù)的倒數(shù)以排空探測RTT期間產(chǎn)生排隊的數(shù)據(jù)包。而收斂的關(guān)鍵在于相比瓶頸帶寬占比較大的流,瓶頸帶寬占比較小的流能夠得到更大的傳輸速率增長。
針對BBR多流共享瓶頸鏈路出現(xiàn)嚴重的排隊延遲問題,谷歌在2018年發(fā)布了一個補丁[22]試圖解決該問題,其改進方案是在帶寬探測狀態(tài)下,要求pacing_gain數(shù)組的第2個drain RTT內(nèi),inflight數(shù)據(jù)包小于等于BDP之后才進入下一個探測階段,來解決之前的固定耗盡時長不足以排空隊列的問題,但是NS3最新版本NS-3.35以及最新版本的Linux內(nèi)核源碼均未實現(xiàn)該改進。本文在NS3中應(yīng)用該改進后,發(fā)現(xiàn)排隊時長縮短了40%以上。
文獻[17]進一步改進了BBR帶寬探測階段發(fā)送數(shù)據(jù)包行為,在第1個pacing階段(pacing_gain=1.25),當向網(wǎng)絡(luò)中注入的數(shù)據(jù)包達到1.25倍BDP后立即退出此階段,而不必等待一個RTTmin的最小時長,該改進在瓶頸帶寬被高估時減少了注入網(wǎng)絡(luò)的數(shù)據(jù)包,進而減少排隊延遲。通過應(yīng)用該改進,排隊延遲進一步降低了10%左右。該文獻還通過更快地退出PROBE_RTT狀態(tài)顯著減少了RTT探測引起的RTT抖動。
文獻[23]旨在解決鏈路容量快速變化的網(wǎng)絡(luò)場景下,BBR的最大過濾帶寬(BWmax-filter)機制帶來的高延遲問題。該文獻提出了一種自適應(yīng)的Tobit Kalman帶寬過濾器以應(yīng)對帶寬改變,但是該帶寬過濾器一定程度降低了BBR的帶寬利用率和協(xié)議公平性。
文獻[11]借鑒了BBR的設(shè)計思想,設(shè)計了一種以擁塞窗口為主要控制參數(shù)的狀態(tài)機。該算法嚴格根據(jù)BDP調(diào)整cwnd大小,相比BBR能夠提供更低的延遲,但是代價是一定的帶寬利用率損失。
在NS-3.35中仿真實驗發(fā)現(xiàn),在應(yīng)用了上述所提到的延遲優(yōu)化[17,22]后,即使單個BBR流獨占瓶頸鏈路,仍舊存在一定的排隊延遲,實驗中設(shè)置鏈路傳播時延(RTTprop)為60 ms,瓶頸帶寬為10 Mbit/s,RTT變化見圖3。
從圖3可以看出,絕大部分時間RTT在60 ms到80 ms之間劇烈波動,遠高于RTTprop(60 ms)。在第10 s之后,RTTmin逐漸增大,超過鏈路設(shè)置的傳播時延,在此之后RTTmin進一步增大。本文發(fā)現(xiàn)其原因在于BBR的RTTmin有效時間為10 s,當RTTmin過期時,瓶頸鏈路此時存在較大的排隊時延,使得更新的RTTmin偏大進而使得瓶頸鏈路排隊現(xiàn)象進一步加劇,整個過程如圖4所示。
對于多路流共享瓶頸帶寬的場景,BBR存在更為嚴重的排隊延遲,對比結(jié)果見本文實驗評估部分。文獻[12]從定性的角度分析了BBR在多流共享瓶頸鏈路時將過載瓶頸鏈路,進而產(chǎn)生較大的排隊延遲。本文從定量的角度對該問題進行分析。
設(shè)瓶頸鏈路帶寬為BtlBw,流的總數(shù)為N。假設(shè)瓶頸鏈路處的緩沖區(qū)大小足夠大。第i個流探測的傳播時延記為RTTmin_i,由于各個流共享瓶頸緩沖區(qū),所以其排隊時延相同,記為D(t)。則往返時延為:
RTTi=RTTmin_i+D(t)
(1)
BtlBw=∑ibwi
(2)
設(shè)該平衡狀態(tài)下2路流的BWmax-filter分別為m1、m2,當2路流的發(fā)送速率完全相等時,2路流將達到平衡狀態(tài),則m1=m2=m。由于BBR是以BWmax-filter乘以增益系數(shù)g的速率發(fā)送數(shù)據(jù)包的,BBR能夠保證充分利用鏈路帶寬,則有:
(3)
編寫程序?qū)ι鲜鰩捥綔y過程進行模擬,繪制出每次A、B這2個流帶寬探測后兩者帶寬變化散點圖、2路流各自的BWmax-filter變化散點圖如圖6所示??梢杂^察到,帶寬分配起始點P1從直線Y=1-X的任意處開始,經(jīng)過若干次輪流探測后都將收斂到同一狀態(tài)。當前實際帶寬坐標輪流取值(0.4444,0.5556),2路流BWmax-filter均收斂到0.5556。
在圖6中,當流A探測帶寬時,A、B這2路流的實際帶寬取值分別如L1和L3所示,當流B探測時,A、B這2路流的實際帶寬取值分別為L2和L4所示。無論是流A還是流B向上探測,流A的帶寬都隨著探測次數(shù)的增大逐漸減少,流B的帶寬會隨著探測次數(shù)的增大逐漸增大。L1和L4同樣是A與B這2路流各自的BWmax-filter變化,可以看出流A的實際發(fā)送速率逐漸減小,流B的實際發(fā)送速率逐漸增大,在大約第34輪探測后兩者收斂到同一值,其值高于理想情況下的公平帶寬。
理想情況下有:
(4)
實際發(fā)送速率超過瓶頸帶寬,在瓶頸鏈路處產(chǎn)生數(shù)據(jù)包堆積,進而導(dǎo)致RTTmin估計持續(xù)偏大。BBR實際操作點處的帶寬和時延兩者都大于理想值,導(dǎo)致BBR無法收斂到最優(yōu)操作點,整個傳輸過程中持續(xù)存在較大排隊延遲。
2.2.1 BBR在RTT較小時性能表現(xiàn)不佳
可以觀察到,當RTT較小時,BBR吞吐率曲線在PROBE_RTT階段后出現(xiàn)帶寬崩塌現(xiàn)象。實驗鏈路帶寬設(shè)置為10 Mbit/s, RTT為8 ms,吞吐率曲線如圖7所示。
可以看出,大約在第10 s左右,吞吐率迅速下降。通過進一步對該現(xiàn)象進行分析,發(fā)現(xiàn)原因在于PROBE_RTT階段后,BBR對鏈路的帶寬估計極度偏低,因為在探測RTT階段,BBR設(shè)置擁塞窗口值為4個發(fā)送方最大段大小來排空網(wǎng)絡(luò)鏈路上的數(shù)據(jù)包,從而測得RTTprop。畫出BBR在整個傳輸過程中BWmax-filter的變化曲線可進一步驗證該分析,如圖7中虛線所示。
該曲線在第10 s之后有多次下降過程。其原因在于BBR的BWmax-filter窗口僅在10個RTT內(nèi)有效,而BBR在PROBE_RTT階段采集到的帶寬樣本通常遠低于實際鏈路可用帶寬,當RTT較小時,整個PROBE_RTT階段經(jīng)歷的RTT輪數(shù)將大于10,這將導(dǎo)致BBR無法正確估計鏈路帶寬。
2.2.2 對帶寬變化敏感性不足
如前所述,BBR通過將pacing_gain設(shè)置為一個大于1的增益增大發(fā)送速率來探測鏈路帶寬,隨后一輪RTT內(nèi)將pacing_gain設(shè)置為增益的倒數(shù)排空上一輪產(chǎn)生的數(shù)據(jù)包隊列,接下來6輪RTT內(nèi)按照網(wǎng)絡(luò)鏈路可用帶寬發(fā)送數(shù)據(jù)包,這6個平穩(wěn)狀態(tài)是BBR帶寬能夠收斂的關(guān)鍵,保證了BBR的公平性[13]。平穩(wěn)狀態(tài)維持時間如果過短,留給其他流探測帶寬的時間將會不足。平穩(wěn)狀態(tài)維持時間如果過長,BBR將不能及時探測網(wǎng)絡(luò)鏈路帶寬;平穩(wěn)階段過長還會使得BBR收斂時間更長[25]。對于較長RTT的流而言,保持平穩(wěn)狀態(tài)的時間將過長,其帶寬探測的靈活性與收斂速度均較差。
針對BBR傳輸過程中排隊延遲較高的問題,結(jié)合BBR公平收斂的原理,本文提出一種改進算法,該算法的核心思想是限制在外數(shù)據(jù)包數(shù),并對BBR流進行適當?shù)臏p窗,在不影響B(tài)BR帶寬利用率、公平性的條件下,進一步減小BBR的延遲,降低延遲抖動,提升BBR收斂速度。網(wǎng)絡(luò)鏈路中的某路流對整體網(wǎng)絡(luò)參數(shù)通常是不可知的,如理想公平分配的帶寬大小、流的數(shù)目等。該算法動態(tài)計算鏈路BDP來減小擁塞窗口,在保證鏈路被充分利用的同時,使延遲盡可能減小。算法1詳細描述了算法的主要邏輯。
算法1 BBR延遲優(yōu)化算法。
Set cwnd_gain=1.0;
pacing_gain=[6.0/5, 4.0/5, 1, 1, 1, 1, 1, 1]
For every ack do
queue_delay=RTT_Sample-RTTmin;
If BBR bottleneck bandwidth is stable:
If queue_delay>delaylower_bound:
cumu_shrink_cwnd+=gain_cwnd;
send_cwnd=BDP-Cumulative_shrink_cwnd;
BBR以pacing_rate作為主要控制參數(shù),cwnd_gain被設(shè)置為2,在PROBE_BW階段最高允許2BDP的inflight數(shù)據(jù)包,其目的是應(yīng)對ACK延遲和聚合嚴重的網(wǎng)絡(luò)傳輸場景[5]。本文將其減少到1,保證在外數(shù)據(jù)包數(shù)能夠充分利用帶寬,且能夠應(yīng)對較為嚴重的ACK延遲場景(如延遲ACK直到每4個數(shù)據(jù)包回復(fù)一個ACK);對于在接收者驅(qū)動的傳輸協(xié)議中使用BBR[26],由于并不通過ACK進行帶寬估算,也將不受ACK延遲和壓縮的影響。將PROBR_BW階段探測帶寬的pacing_gain由5/4減小到6/5以進一步減少BBR探測帶寬時超發(fā)的數(shù)據(jù)量,進而降低RTT及其波動性。算法維護一個累積減少擁塞窗口值cumu_shrink_cwnd,該值根據(jù)網(wǎng)絡(luò)鏈路排隊狀況進行設(shè)置,以達到減少排隊時延并加速流的收斂的目的。對每個到達的ACK,算法計算當前排隊時延,并根據(jù)排隊時延計算超發(fā)的數(shù)據(jù)包,在cwnd_pace個RTT期間逐步減少超發(fā)數(shù)據(jù)包。由于各個流共享瓶頸緩沖區(qū),所以其排隊時延相同。根據(jù)BDP=maxBW·RTTprop,帶寬更大的流相比帶寬小的流將會減少更多的超發(fā)數(shù)據(jù)包,從而進一步加快流的收斂。減少擁塞窗口需要在網(wǎng)絡(luò)較為穩(wěn)定的條件下進行,否則過度地減少擁塞窗口將帶來不必要的帶寬損失。判斷網(wǎng)絡(luò)是否穩(wěn)定可計算RTT的方差與平均值的比值,文獻[27]測得有線網(wǎng)絡(luò)中該比值不超過0.3;當BBR退出DRAIN或者處于PROBE_RTT階段附近測得的延遲通常是較低的,在這些情況下不調(diào)整擁塞窗口。設(shè)置delaylower_bound的目的在于提高算法的穩(wěn)定性,保證各個流之間的公平收斂。
3.2.1 BBR在RTT較小時性能表現(xiàn)不佳
針對根據(jù)RTT大小與PROBE_RTT階段經(jīng)歷的輪數(shù)的關(guān)系,可以列出關(guān)系式:
(5)
其中1輪是用來排空管道使得鏈路中該流的inflight數(shù)據(jù)包不超過4個,令round≤10,解得RTT≥22.23 ms時,PROBE_RTT階段不會使鏈路估算帶寬失效。
針對上述問題,解決該問題的方向大致分為2種。首先,可以更改PROBE_RTT階段的持續(xù)時長,使其在BWmax-filter過期之前結(jié)束PROBE_RTT,比如將PROBE_RTT階段持續(xù)的時長改為RTT相關(guān),如3個RTT,但是該方法可能使得BBR流不再同時進入PROBE_RTT狀態(tài),進而破壞BBR的收斂性。其次,可以為探測RTT之后的BBR提供一個有效帶寬。本文采取的解決思路是將進入PROBE_RTT階段之前的Max-FilterBW延續(xù)到退出PROBE_RTT階段,繼續(xù)作為鏈路帶寬估計數(shù)據(jù)來指導(dǎo)BBR的帶寬探測行為。上述思路基于以下假設(shè),即RPOBE_RTT階段時間較短,僅有200 ms左右,該段時間內(nèi)鏈路的可用帶寬變化通常較小。
3.2.2 對帶寬變化的敏感性改進
針對較長RTT場景BBR對帶寬探測敏感性不足的問題,設(shè)置一個平穩(wěn)狀態(tài)最長保持時間MaxStableDuration來及時退出平穩(wěn)狀態(tài),并轉(zhuǎn)入帶寬探測周期進行帶寬探測。具體來說,當BBR進入平穩(wěn)周期時記錄平穩(wěn)周期起始時間,在判斷是否要進入下一個平穩(wěn)周期時,檢查平穩(wěn)周期保持時間是否已經(jīng)超過MaxStableDuration,如果超過則直接轉(zhuǎn)入帶寬探測周期(pacing_gain=1.25),否則按照順序進入下一個周期。
本文在NS-3.35仿真平臺上對改進BBR進行驗證。實驗拓撲為經(jīng)典的啞鈴?fù)負?,其結(jié)構(gòu)如圖8所示。節(jié)點之間通信采用TCP協(xié)議,設(shè)置TCP的擁塞控制算法為BBR或改進BBR。
為了驗證改進BBR的性能,本文進行以下幾個實驗,分別對帶寬利用率、RTT、算法公平性、帶寬搶占能力進行測試與分析。以下實驗設(shè)置RTTprop為60 ms,瓶頸帶寬為10 Mbit/s, delaylower_bound=10 ms, cwnd_pace=30, ACK延遲計數(shù)為2。
圖9為2路流同時啟動,改進BBR與BBR帶寬利用率、延遲的對比結(jié)果??梢钥闯?,兩者均能夠快速收斂到公平帶寬,并持續(xù)保持在該帶寬附近。改進BBR相比BBR具有更為公平的帶寬分配,且其帶寬波動非常小。BBR延遲在[70,90] ms范圍內(nèi)迅速波動,而改進BBR延遲僅為BBR的延遲波動范圍的下限值,為72 ms左右,該值還可以通過調(diào)整算法delaylower_bound和cwnd_pace進一步減少,其代價是有一定的帶寬波動;改進BBR的延遲波動非常小。
圖10為富余帶寬搶占能力對比結(jié)果。設(shè)置第2路流在27 s附近停止傳輸,觀察第1路流對富余帶寬的搶占能力。可以看出,改進BBR甚至比BBR能夠更快地搶占富余帶寬,即使其具有更小的搶占增益系數(shù),其原因是改進BBR在搶占周期的持續(xù)時間比BBR更長。搶占帶寬前后,改進BBR的帶寬與延遲均能夠保持較小波動。
圖11顯示了5路流同時傳輸時的帶寬與時延變化,可以看出,改進BBR在大約3 s左右?guī)捯鸦臼諗康焦綆?,而BBR在第42 s左右才收斂,改進BBR收斂速度提升約13倍。改進BBR在多流環(huán)境下的帶寬與延遲波動仍舊較小,其RTT約為BBR的RTT波動范圍的下限值。
4.2.1 RTT較小時吞吐量對比
圖12為鏈路帶寬為10 Mbit/s、RTT=4 ms時的吞吐量變化曲線。BBR在第10 s之后帶寬迅速下降至接近于0,而改進BBR仍然能夠保持高帶寬利用率,改進BBR能夠適應(yīng)更小的RTT環(huán)境。如果要將BBR應(yīng)用到RTT極低的應(yīng)用場景,還需要修改RTTprop的更新機制,以使得所有流同步進入PROBE_RTT狀態(tài)。
4.2.2 對帶寬變化的敏感性改進
圖13顯示了BBR與改進BBR在相同鏈路下吞吐量的變化曲線。實驗設(shè)置瓶頸鏈路帶寬為10 Mbit/s, RTT=240 ms, MaxStableDuration=400 ms。相同時間內(nèi),改進BBR相比BBR帶寬向上探測的次數(shù)大幅增加,分別為43次和24次。改進BBR能夠更加及時地探測到鏈路帶寬增加,進而提高發(fā)送速率,及時利用鏈路富余帶寬。
本文對BBR延遲較高的問題進行了詳細的分析,進一步給出了解決方案,即通過限制在外數(shù)據(jù)包數(shù),適時減少擁塞窗口來減少延遲及其波動性。對BBR在較小RTT環(huán)境下性能不理想以及帶寬探測敏感性不夠高的問題給出了解決方案。對于改進BBR應(yīng)對RTT公平性問題以及與基于丟包的擁塞控制算法混合部署的場景本文并未討論,這是將來需要進一步研究的內(nèi)容。