日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

先說(shuō)一下我的思路,由于我自從中學(xué)開始就是一個(gè)深度的數(shù)形結(jié)合控,希望能把一切都畫在一個(gè)坐標(biāo)系里,然后無(wú)非就是找最高點(diǎn),最低點(diǎn),找規(guī)律這些了,所謂求極值,展示特征無(wú)非也就是那些慣用的方法, 求導(dǎo),積分,數(shù)列展開這些,所以對(duì)于BBR算法,我依然循著這樣的思路。

現(xiàn)在要做的,就是怎么把BBR的行為畫在一個(gè)坐標(biāo)系里。如果這一步做到了的話,我相信以我20年的經(jīng)驗(yàn)順?biāo)浦凼虑榫鸵欢艹伞?/p>

其實(shí),BBR最初的slides和paper中,不斷展示的圖示是下面這個(gè):

Google tcp擁塞控制 bbr算法

 

然后,我仔細(xì)觀察了這兩個(gè)坐標(biāo)系,分別是BW(其實(shí)是Deliveryrate) vs Inflight以及RTT vs Inflight,都有Infligh。其實(shí),這兩張圖是用于展示BBR特征的,它只說(shuō)了What,并沒有解釋W(xué)hy,實(shí)際上,難道Inflight不應(yīng)該是 計(jì)算出來(lái)的 嗎?如果說(shuō)我能根據(jù)另一個(gè)坐標(biāo)系的曲線進(jìn)行一系列計(jì)算,最后 推導(dǎo)出Inflight的值必須是那個(gè)值才能達(dá)到某種最優(yōu)的效果,那就解釋了Why。

就是這個(gè)思路。讓我們一步一步去做。

既然我們把Inflight當(dāng)成了一個(gè)結(jié)果而不是原因,為了找這個(gè)原因,我們合并兩個(gè)坐標(biāo)系,消去公共的Inflight,那么我們就可以得到RTT vs BW的曲線了!

為了數(shù)學(xué)上表述的方便,后面統(tǒng)一一下符號(hào):BW:ww wwRTT:tt ttInflight:ff ff臨界的Inflight:fcfc f_cfc?

下圖是消去ff ff的方法:首先給出圖像的方程表示:

r={1f−fc−1f≤fcf>fcr={1f≤fcf−fc−1f>fc r =

{1f−fc−1amp;f≤fcamp;fgt;fc{1amp;f≤fcf−fc−1amp;fgt;fc

r={1f−fc?−1?f≤fc?f>fc??

 

w={ffc1f≤fcf>fcw={ffcf≤fc1f>fc w=

?????ffc1amp;f≤fcamp;fgt;fc{ffcamp;f≤fc1amp;fgt;fc

w=????fc?f?1?f≤fc?f>fc??

 

Google tcp擁塞控制 bbr算法

 

很簡(jiǎn)單,方程組聯(lián)立就可以消去變量ff ff。

我們可以看到,最終ww ww和tt tt的取值范圍就是那條開向第二象限的折線,現(xiàn)在的問題是,在這條折線中,P(w,t)P(w,t) P(w,t)P(w,t)在哪里是最優(yōu)的,而此時(shí)的Inflight值就是最適合灌進(jìn)網(wǎng)絡(luò)中的數(shù)據(jù)包的數(shù)量,換句話說(shuō),它反映了Cwnd應(yīng)該取什么值。

問題轉(zhuǎn)化為了 如何度量所謂的最優(yōu) 。

一般工業(yè)界和經(jīng)濟(jì)學(xué)領(lǐng)域都會(huì)采用 ***產(chǎn)出/成本***的比值來(lái)衡量一個(gè)系統(tǒng)是不是優(yōu)秀,換句話說(shuō)就是 最優(yōu)的系統(tǒng)是用最少的代價(jià)換取最高的收益。對(duì)于我們目前的模型而言,用語(yǔ)言來(lái)表達(dá),即 最少的時(shí)間傳輸最多的數(shù)據(jù)包

因此,很顯然,我給出下列的比值,最為衡量系統(tǒng)是否最優(yōu)的度量:E=wtE=wt E=dfrac{w}{t}E=tw?問題變成了 P(w,t)取在哪里,上述的比值E最大?

肉眼看得出來(lái),ww ww取最大值wmax=1wmax=1 w_{max}=1wmax?=1,tt tt取最小值tmin=1tmin=1 t_{min}=1tmin?=1即可,即取點(diǎn)Pe(wmax,tmin)Pe(wmax,tmin) P_{e}(w_{max},t_{min})Pe?(wmax?,tmin?),所謂的最優(yōu)的EE EE值就是11 11,而此時(shí),Inflight的值就是所謂的BDP=wmax×tmin=fc=1BDP=wmax×tmin=fc=1 BDP=w_{max} times t_{min}=f_c=1BDP=wmax?×tmin?=fc?=1

這確實(shí)說(shuō)明了Inflight取值為臨界的恰好要使得隊(duì)列增加的fcfc f_cfc?時(shí),系統(tǒng)的效能真的是最優(yōu)的。

Google tcp擁塞控制 bbr算法

 

如果你將P(w,t)P(w,t) P(w,t)P(w,t)在允許的定義域值域稍微偏離PePe P_ePe?點(diǎn),你會(huì)發(fā)現(xiàn)EE EE值均會(huì)減少,這反映在TCP數(shù)據(jù)傳輸上,就是:

  1. 要么帶寬沒有用滿,沒有達(dá)到wmaxwmax w_{max}wmax?;
  2. 要么帶寬超額了,數(shù)據(jù)排隊(duì)了,數(shù)據(jù)到達(dá)的太快,因此延遲增加了;

無(wú)論發(fā)生了上述的什么情況,顯然都不是什么好事。

這算完成了任務(wù)嗎?證明了BBR是最優(yōu)的。看起來(lái)算是吧…


如果這樣就算是一個(gè)BBR背后完備的數(shù)學(xué)模型,這篇文章一個(gè)多月前就能寫出了。。。


我們發(fā)現(xiàn),上面的推導(dǎo)基于一個(gè)明顯的事實(shí),即 用肉眼看,之所以可以用肉眼觀測(cè)出最值,那是因?yàn)閅uchung Cheng和Neal Cardwell在描述BBR算法時(shí),簡(jiǎn)化了模型,基于簡(jiǎn)化的模型,才給出了那兩幅BW vs Inflight和RTT vs Inflight的坐標(biāo)圖示,在這兩個(gè)圖示中,所有的線均為直線。

所謂的簡(jiǎn)化模型,即假設(shè)數(shù)據(jù)包是間隔均勻勻速到達(dá)的,數(shù)據(jù)包也是勻速經(jīng)過(guò)網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)備的。但是在實(shí)際上,這并不是事實(shí),真實(shí)的情況畫在坐標(biāo)系里并不是直線,而是曲線,類似下面的樣子:

Google tcp擁塞控制 bbr算法

 

此時(shí)如果我們依然要求解E=wtE=wt E=dfrac{w}{t}E=tw?的極大值,很顯然要求這條曲線函數(shù)tt tt針對(duì)ww ww的導(dǎo)數(shù),這下麻煩有點(diǎn)大!我怎么能知道帶寬ww ww和傳輸時(shí)間tt tt之間的關(guān)系呢?顯然,必須有二者之間的關(guān)系,才能求導(dǎo)?。?/p>

怎么辦?這件事讓我搞了一個(gè)多月時(shí)間!

我能理解數(shù)據(jù)包的到達(dá)其實(shí)是柏松到達(dá),被服務(wù)時(shí)間符合指數(shù)分布特征,但是我并沒有就著這個(gè)思路思考下去(不然我一定能想到排隊(duì)論),而是希望能先有一個(gè)通用的解。

起初,我是反著求解,我假設(shè)傳輸時(shí)間tt tt已經(jīng)可以用帶寬ww ww來(lái)表示,即t=f(w)t=f(w) t=f(w)t=f(w)然后,就會(huì)有:

```

E=wt=wf(w)E=wt=wf(w) E=dfrac{w}{t}=dfrac{w}{f(w)}E=tw?=f(w)w?進(jìn)一步按照求導(dǎo)法則針對(duì)ww ww求導(dǎo),推導(dǎo)如下:E'=w×df(w)dw−f(w)f2(w)E′=w×df(w)dw−f(w)f2(w) Eprime=dfrac{wtimes dfrac{d f(w)}{d w}-f(w)}{f^2(w)}E′=f2(w)w×dwdf(w)?−f(w)?若求EE EE的極大值,那么它一定出現(xiàn)在曲線的拐點(diǎn)處,其導(dǎo)數(shù)一定為00 00,因此:E'=w×df(w)dw−f(w)f2(w)=0E′=w×df(w)dw−f(w)f2(w)=0 Eprime=dfrac{wtimes dfrac{d f(w)}{d w}-f(w)}{f^2(w)}=0E′=f2(w)w×dwdf(w)?−f(w)?=0f(w)=w×df(w)dwf(w)=w×df(w)dw f(w)=wtimes dfrac{d f(w)}{d w}f(w)=w×dwdf(w)?

```

這便是最終的關(guān)系式,雖然我不知道tt tt如何用ww ww來(lái)表示,但這個(gè)關(guān)系是存在的,這是個(gè)普遍適用的關(guān)系。

我為得到這個(gè)關(guān)系式興奮了一個(gè)周末,非常有成就感,雖然它現(xiàn)在看起來(lái)很簡(jiǎn)單,但在當(dāng)時(shí),這個(gè)想法真的顯得來(lái)得太晚!

我是從初中開始就喜歡擺置坐標(biāo)系的,一直到大學(xué),幾乎任何數(shù)學(xué)題,我都能采用數(shù)形結(jié)合的方案一題多解,某種程度上,我老婆就是當(dāng)時(shí)我如此炫技追到的…最近幾年,我用同樣的方式設(shè)計(jì)了iptables的優(yōu)化方案,DxR的優(yōu)化方案…不多的幾次失敗包括Bloom Filter的形象化展示。

所以面對(duì)上述的表達(dá)式子,依然可以任意把玩。式子兩邊同時(shí)除以ww ww:f(w)w=df(w)dwf(w)w=df(w)dw dfrac{f(w)}{w}=dfrac{d f(w)}{dw}wf(w)?=dwdf(w)?

看看左邊右邊分別是什么?

  • 左邊:f(w)f(w) f(w)f(w)上任意一點(diǎn)到原點(diǎn)的直線的斜率;
  • 右邊:曲線f(w)f(w) f(w)f(w)上任意一點(diǎn)切線的斜率。

兩個(gè)斜率一致的時(shí)候,ww ww取值計(jì)算的EE EE是最優(yōu)的,即 曲線f(w)f(w) f(w)f(w)上任意一點(diǎn)PP PP和原點(diǎn)之間的直線與該點(diǎn)的切線共線! 的時(shí)候,該點(diǎn)PP PP的ww ww和tt tt的取值為最優(yōu)!

形象地看,我們可以通過(guò) 操作 來(lái)獲取最優(yōu)的點(diǎn),即:從經(jīng)過(guò)原點(diǎn)的t=0這條直線開始,任其繞著原點(diǎn)逆時(shí)針旋轉(zhuǎn),第一次切到曲線f(w)f(w) f(w)f(w)的那個(gè)點(diǎn),就是最優(yōu)點(diǎn)。

很簡(jiǎn)單,是吧。


現(xiàn)在已經(jīng)定性地把問題解決了,無(wú)論曲線t=f(w)t=f(w) t=f(w)t=f(w)長(zhǎng)什么樣子,我們可以從上述的操作步驟中獲取最優(yōu)的PP PP點(diǎn),進(jìn)而求出Inflight值,最終確定Cwnd。

然而,這并不能定量地分析,如果要定量地分析,則必須要有t=f(w)t=f(w) t=f(w)t=f(w)的表達(dá)式。

這個(gè)表達(dá)式何來(lái)?我花了好長(zhǎng)時(shí)間也沒有思路。


再仔細(xì)看看帶寬和RTT之間的關(guān)系,在固定的帶寬下,RTT受到Inflight的影響,然而Inflight正是我們要求解的,這貌似進(jìn)入了一個(gè)循環(huán),消除Inflight變量并無(wú)法確定二者的關(guān)系,這便是陷入了兩難!

我略過(guò)了好多文字,這些文字描述了大概將近一個(gè)月的見聞,然后我就想到了 排隊(duì)論, 排隊(duì)論, 排隊(duì)論, 排隊(duì)論, 排隊(duì)論!


排隊(duì)論基于概率理論給出精確的逗留時(shí)長(zhǎng)和到達(dá)率以及服務(wù)率之間的關(guān)系。

排隊(duì)論是一個(gè)復(fù)雜的理論,能寫幾大部頭都寫不完,我自己也只是略懂一二,并不是專門研究這個(gè)的,所以本著解決手頭當(dāng)前問題的廣度優(yōu)先原則,下面我依據(jù)排隊(duì)論的一些結(jié)論性的公式進(jìn)行推導(dǎo),關(guān)于這個(gè)公式的推導(dǎo),我會(huì)在本文后面給出一個(gè)附錄。

我們依然根據(jù)最簡(jiǎn)單的情況建立模型,即經(jīng)典的M/M/1排隊(duì)模型下的場(chǎng)景,在該場(chǎng)景下,先設(shè)以下的變量:

  • 到達(dá)率:λλ lambdaλ
  • 服務(wù)率:μμ muμ
  • 系統(tǒng)負(fù)荷水平:ρρ rhoρ
  • 用戶停留時(shí)間:WsWs W_sWs?

然后,有一些用到的定義以及公式,我們根據(jù)這些公式來(lái)進(jìn)行后續(xù)的關(guān)于BBR最優(yōu)化的證明。需要聲明的是,M/M/1排隊(duì)模型是一個(gè)簡(jiǎn)化的模型,并不代表現(xiàn)網(wǎng)中運(yùn)行BBR算法的TCP傳輸發(fā)包特征就一定符合這個(gè)模型,但這是一個(gè)很好的開始。

這些結(jié)論性的定義和公式如下:

  • 系統(tǒng)負(fù)荷水平
    ρ=λμρ=λμ rho=dfrac{lambda}{mu}ρ=μλ?
  • 用戶停留時(shí)間(包括排隊(duì)時(shí)間和被服務(wù)的時(shí)間)
    Ws=1μ−λWs=1μ−λ W_s=dfrac{1}{mu-lambda}Ws?=μ−λ1?
  • 當(dāng)前系統(tǒng)中用戶數(shù)(包括排隊(duì)的和正在被服務(wù)的)
    Ls=λμ−λLs=λμ−λ L_s=dfrac{lambda}{mu-lambda}Ls?=μ−λλ?
  • 排隊(duì)等待時(shí)間
    Wg=λμ×(μ−λ)Wg=λμ×(μ−λ) W_g=dfrac{lambda}{mu times (mu-lambda)}Wg?=μ×(μ−λ)λ?

有了這些,便可以建立BBR的模型了。

在一個(gè)帶寬固定的網(wǎng)絡(luò)中,我們假設(shè)帶寬為CC CC(基于這種固定帶寬的假設(shè),實(shí)際上這是M/D/1排隊(duì)模型,但是推導(dǎo)過(guò)程并無(wú)傷大雅!),而我們發(fā)送的帶寬可以理解為 到達(dá)率, 即λλ lambdaλ,此時(shí)我們可以把WsWs W_sWs?等效于RTT,因此RTT和帶寬的關(guān)系則為:

RTT=f(λ)=Ws=1μ−λ=1C−λRTT=f(λ)=Ws=1μ−λ=1C−λ RTT=f(lambda)=W_s=dfrac{1}{mu-lambda}=dfrac{1}{C-lambda}RTT=f(λ)=Ws?=μ−λ1?=C−λ1?

根據(jù)我們上面的那個(gè)最優(yōu)解公式:

f(λ)=λ×df(λ)dλf(λ)=λ×df(λ)dλ f(lambda)=lambda times dfrac{d f(lambda)}{d lambda}f(λ)=λ×dλdf(λ)?

帶入則有:

f(λ)=λ×df(λ)dλ=1C−λf(λ)=λ×df(λ)dλ=1C−λ f(lambda)=lambdatimes dfrac{d f(lambda)}{d lambda}=dfrac{1}{C-lambda}f(λ)=λ×dλdf(λ)?=C−λ1?

而這里的df(λ)dλdf(λ)dλ dfrac{d f(lambda)}{dlambda}dλdf(λ)?則可以對(duì)f(λ)f(λ) f(lambda)f(λ)簡(jiǎn)單求導(dǎo):

df(λ)dλ=1(C−λ)2df(λ)dλ=1(C−λ)2 dfrac{d f(lambda)}{dlambda}=dfrac{1}{(C-lambda)^2}dλdf(λ)?=(C−λ)21?

代入則有了結(jié)論:

λ(C−λ)2=1C−λλ(C−λ)2=1C−λ dfrac{lambda}{(C-lambda)^2}=dfrac{1}{C-lambda}(C−λ)2λ?=C−λ1?λ=C−λλ=C−λ lambda=C-lambdaλ=C−λλ=C2λ=C2 lambda=dfrac{C}{2}λ=2C?

最終,我們發(fā)現(xiàn)了最有點(diǎn)PP PP,即:

P(C2,2C)P(C2,2C) P(dfrac{C}{2},dfrac{2}{C})P(2C?,C2?)

這個(gè)結(jié)論有什么用呢?它意味著什么呢?

我們?cè)賮?lái)看M/M/1模型中的另外一個(gè)公式,即計(jì)算當(dāng)前系統(tǒng)的用戶數(shù):

Ls=λμ−λ=C2C−C2=1Ls=λμ−λ=C2C−C2=1 L_s=dfrac{lambda}{mu-lambda}=dfrac{dfrac{C}{2}}{C-dfrac{C}{2}}=1Ls?=μ−λλ?=C−2C?2C??=1

這意味著系統(tǒng)中只有一個(gè)用戶,這意味著沒有排隊(duì)?。∵@意味著最優(yōu)的情況,即EE EE最大的時(shí)候,系統(tǒng)是沒有隊(duì)列堆積的!這個(gè)時(shí)候,我們來(lái)計(jì)算一下BDP:

BDP=λ×f(λ)=C2×2C=1BDP=λ×f(λ)=C2×2C=1 BDP=lambdatimes f(lambda)=dfrac{C}{2}times dfrac{2}{C}=1BDP=λ×f(λ)=2C?×C2?=1

正解于天下!這也是我在這方面工作的一個(gè)里程碑,現(xiàn)在總結(jié)一下就是:在M/M/1排隊(duì)模型的假設(shè)下,BBR擁塞控制算法是效能E最優(yōu)的。

然而,M/M/1模型只是一個(gè)開始,事實(shí)上,基于端到端的TCP協(xié)議,在鏈路上會(huì)經(jīng)過(guò)非常多的中間節(jié)點(diǎn),即,至少起碼的,我們也要在M/M/k排隊(duì)模型上再次證明上述結(jié)論的正確性才行。

而這是簡(jiǎn)單的。

我們假設(shè)一個(gè)端到端的鏈路上有kk kk個(gè)中間節(jié)點(diǎn),那么每一個(gè)節(jié)點(diǎn)都遵循M/M/1排隊(duì)模型的法則,綜合起來(lái)就是M/M/k了,我們假設(shè)這些節(jié)點(diǎn)的處理能力并不相同,并假設(shè)其中有一個(gè)能力最弱的節(jié)點(diǎn)m,其處理能力μmμm mu_mμm?,在排隊(duì)論模型中,只要有排隊(duì)現(xiàn)象,就會(huì)增加時(shí)延而降低效能E,所以為了不排隊(duì)每一個(gè)節(jié)點(diǎn)的到達(dá)率均要滿足:λk≤μm2λk≤μm2 lambda_k le dfrac{mu_m}{2}λk?≤2μm??,所以最終的系統(tǒng)中的用戶數(shù)是要小于kk kk的,這就是說(shuō),系統(tǒng)的吞吐是由最弱的節(jié)點(diǎn)決定的這個(gè)典型的漏桶理論

我們來(lái)看BBR的名稱,Bottleneck Bandwidth and RTT,其中以 Bottleneck Bandwidth為M/M/k排隊(duì)模型的依據(jù)保證了RTT不會(huì)因?yàn)榕抨?duì)引入的延遲而增加。

換句話說(shuō),BBR擁塞控制算法告訴你,別發(fā)太多包,超過(guò)Bottleneck Bandwidth的限額,你多發(fā)了也過(guò)不去,還平添時(shí)延,因?yàn)橐呀?jīng)偏離了最優(yōu)的操作點(diǎn)!

算法是OK的,代表了一種正確的方法,退一步,至少可以說(shuō)是一種引向正確方法的趨勢(shì)。然而在實(shí)現(xiàn)上,它的根基在于 測(cè)量的準(zhǔn)確性。算法實(shí)現(xiàn)的具體實(shí)施過(guò)程中,TCP協(xié)議固有的不可測(cè)量性是最大的掣肘,而這是TCP的固有缺陷所導(dǎo)致,永遠(yuǎn)也無(wú)法被解決!

那么QUIC的實(shí)現(xiàn)呢?我準(zhǔn)備花大力氣測(cè)測(cè)看。


在很早之前介紹BBR算法的文章中,我提到了 帶寬和RTT互為正交 的概念:google’s BBR擁塞控制算法模型解析:https://blog.csdn.net/dog250/article/details/52895080

現(xiàn)在我們可以基于本文上述的關(guān)于最優(yōu)化的結(jié)論再來(lái)理解這個(gè) 正交。

先從固定的D/D/1排隊(duì)模型看,我們?cè)倏碆W vs RTT圖:

Google tcp擁塞控制 bbr算法

 

我們可以看到最優(yōu)點(diǎn)PePe P_ePe?處,帶寬和RTT的乘積正好是矩形的面積,而它就是BDP,無(wú)論你在折線上怎么移動(dòng)PP PP點(diǎn),你均無(wú)法獲得更大的矩形面積,往左移動(dòng),面積減少,這意味著不夠,效能當(dāng)然低,往上移動(dòng),面積不再增加,這說(shuō)明多發(fā)數(shù)據(jù)包也沒用,并不能增加有效BDP。

好完美的既視感!貌似打消了任何企圖通過(guò)多發(fā)包來(lái)提升性能的念頭,然而突然發(fā)現(xiàn)這只是理想D/D/1排隊(duì)模型下的結(jié)論。

稍微真實(shí)點(diǎn)的M/M/1排隊(duì)模型下,是這樣子的:

Google tcp擁塞控制 bbr算法

 

你會(huì)發(fā)現(xiàn),在最優(yōu)化點(diǎn)附近,還是可以 通過(guò)比較小的RTT增加的代價(jià),獲得更多有效BDP的。這似乎給了人們稍微增加一點(diǎn)Cwnd以理由和意義。黑暗壓下來(lái)的時(shí)候,總是留下一絲的光亮,沒有辦法。


通過(guò)相對(duì)嚴(yán)格的數(shù)學(xué)推導(dǎo),我們發(fā)現(xiàn)BBR算法在BW vs RTT坐標(biāo)系的曲線上的操作點(diǎn)確實(shí)是最優(yōu)的,然而我們又從同樣一張圖的M/M/1表述中發(fā)現(xiàn)了一點(diǎn)可以利用的Trick…

不管怎么說(shuō),不想排隊(duì)是為了自己,然而制造排隊(duì)則是毀了大家,你能控制的,僅僅是自己不排隊(duì),這是個(gè)博弈,答案卻非常簡(jiǎn)單!


如此簡(jiǎn)單的數(shù)學(xué)推導(dǎo),展示了事實(shí),那么,為什么路由器和交換機(jī)還要設(shè)計(jì)隊(duì)列緩存呢?

從商業(yè)的角度,如今的存儲(chǔ)設(shè)備越來(lái)越便宜,更多的緩存可以換取更多的 不丟包指標(biāo),極低的代價(jià)換一個(gè)噱頭。

從工程的角度來(lái)看,隊(duì)列不僅僅是 為了緩存多出來(lái)的數(shù)據(jù)包,更多的是一種主動(dòng)式的管理設(shè)施,比如流量整形,按照不同的產(chǎn)品進(jìn)行限速,優(yōu)先級(jí)管理等等。

最后,從數(shù)學(xué)上看,假設(shè)數(shù)據(jù)包到達(dá)行為是泊松到達(dá),其到達(dá)率期望是λλ lambdaλ,那么為了獲得最佳的效能,其服務(wù)率必然是2λ2λ 2lambda2λ,但是這些都是統(tǒng)計(jì)分布,到達(dá)率的期望只是一個(gè)均值,在可計(jì)算的概率下,到達(dá)率完全可以達(dá)到3λ3λ 3lambda3λ,4λ4λ 4lambda4λ…為了吸收這些統(tǒng)計(jì)峰值,則必須設(shè)計(jì)隊(duì)列緩存。

現(xiàn)在的問題是轉(zhuǎn)發(fā)節(jié)點(diǎn)設(shè)備上的緩存要設(shè)計(jì)多大?有了BW vs RTT這張圖,這是可以計(jì)算出來(lái)的!

我們依然假設(shè)這個(gè)模型是簡(jiǎn)單的M/M/1排隊(duì)模型。我將D/D/1模型和M/M/1模型放在一張圖里解釋:

Google tcp擁塞控制 bbr算法

 

虛線和橘黃色真實(shí)的實(shí)線圍成部分的面積就是節(jié)點(diǎn)需要的緩存的大小(事實(shí)上要稍微大一點(diǎn),畢竟這里的RTT也是均值),因?yàn)樗诓此傻竭_(dá)的正常波動(dòng)范圍內(nèi)。

此外根據(jù)本文上面的推論,當(dāng)λ=μ2λ=μ2 lambda=dfrac{mu}{2}λ=2μ?的時(shí)候,系統(tǒng)的效能E最大,在上圖中,這也是可以解釋的:

Google tcp擁塞控制 bbr算法

 

其中藍(lán)線圍成的區(qū)域面積為 最佳的BDP,這個(gè)是和D/D/1模型不同的。

由于泊松到達(dá)的統(tǒng)計(jì)效應(yīng)造成了不可避免的排隊(duì)和空轉(zhuǎn),且二者不能抵消,因此必須設(shè)計(jì)緩存隊(duì)列,曲線相對(duì)t=1t=1 t=1t=1往上下凸了,因此從原點(diǎn)出發(fā)相切于t=f(λ)t=f(λ) t=f(lambda)t=f(λ)的切線肯定在λ=μλ=μ lambda=muλ=μ的左邊,這意味著相對(duì)于D/D/1模型,M/M/1模型在其它條件都相同的情況下,損失了一點(diǎn)Inflight!這是統(tǒng)計(jì)的不確定性帶來(lái)的不可消除的代價(jià)!

所以說(shuō),在非主動(dòng)管理的意義上,隊(duì)列的作用是什么?隊(duì)列的作用是,平滑泊松到達(dá)的統(tǒng)計(jì)特性引發(fā)的突發(fā)。突發(fā)總是存在的,為了能容忍這些突發(fā), 而不至于丟包。

從示意圖上看,即便是BBR,也是無(wú)法100%避免排隊(duì)的,這是泊松到達(dá)的統(tǒng)計(jì)特征決定的,即便單一服務(wù)節(jié)點(diǎn)的服務(wù)率μμ muμ是到達(dá)率λλ lambdaλ的1000倍(而不是計(jì)算出來(lái)的最優(yōu)值2倍),也會(huì)有小概率的突發(fā)會(huì)造成輕微排隊(duì)。故而,隊(duì)列算是一個(gè)基礎(chǔ)設(shè)施,必不可少,但你要明白,隊(duì)列是用來(lái)干嘛的!

然而,還有一個(gè)話題,與統(tǒng)計(jì)突發(fā)概率相等的對(duì)稱的現(xiàn)象就是系統(tǒng)空轉(zhuǎn),而空轉(zhuǎn)是無(wú)法彌補(bǔ)的,沒有任務(wù)到達(dá),系統(tǒng)確實(shí)什么也做不了。因此,引入主動(dòng)隊(duì)列管理是必要的,上一時(shí)間周期來(lái)不及處理的任務(wù)通過(guò)緩存隊(duì)列推遲到下一個(gè)時(shí)間周期,填補(bǔ)空轉(zhuǎn)期,這方面,我覺得帶突發(fā)的令牌桶這個(gè)設(shè)計(jì),簡(jiǎn)單又直接。

慢啟動(dòng)在BBR中仍然保留,它的意義是在不知道連接的瓶頸帶寬時(shí),以起始較低的發(fā)送速率,以每RTT兩倍的速度快速增加發(fā)送速率,直到到達(dá)一個(gè)閾值,對(duì)應(yīng)上圖中0-4秒。到該閾值后,進(jìn)入線性提高發(fā)送速率的階段,該階段叫做擁塞避免,直到發(fā)生丟包,對(duì)應(yīng)上圖中8-11秒。丟包后,發(fā)速速率大幅下降,針對(duì)丟包使用快速重傳算法重送發(fā)送,同時(shí)也使用快速恢復(fù)算法把發(fā)送速率盡量平滑的升上來(lái)。

如果瓶頸路由器的緩存特別大,那么這種以丟包作為探測(cè)依據(jù)的擁塞算法將會(huì)導(dǎo)致嚴(yán)重問題:TCP鏈路上長(zhǎng)時(shí)間RTT變大,但吞吐量維持不變。

事實(shí)上,我們的傳輸速度在3個(gè)階段被不同的因素限制:

1、應(yīng)用程序限制階段,此時(shí)RTT不變,隨著應(yīng)用程序開始發(fā)送大文件,速率直線上升;

2、BDP限制階段,此時(shí)RTT開始不斷上升,但吞吐量不變,因?yàn)榇藭r(shí)瓶頸路由器已經(jīng)達(dá)到上限,緩沖隊(duì)列正在不斷增加;

3、瓶頸路由器緩沖隊(duì)列限制階段,此時(shí)開始大量丟包。


宏觀背景下的BBR

1980年代的擁塞崩潰導(dǎo)致了1980年代的擁塞控制機(jī)制的出爐,某種意義上這屬于見招拆招的策略,針對(duì)1980年代的擁塞,提出了1980年代的擁塞控制算法,即ss,ssthresh,congestion avoid這些。

說(shuō)實(shí)話,這些機(jī)制完美適應(yīng)了1980年代的網(wǎng)絡(luò)特征,低帶寬,淺緩存隊(duì)列,美好持續(xù)到了2000年代。

隨后互聯(lián)網(wǎng)大爆發(fā),多媒體應(yīng)用特別是圖片,音視頻類的應(yīng)用促使帶寬必須猛增,而摩爾定律促使存儲(chǔ)設(shè)施趨于廉價(jià)而路由器隊(duì)列緩存猛增,這便是BBR誕生的背景。換句話說(shuō),1980年代的CC已經(jīng)不適用了,2010年代需要另外的一次見招拆招。

如果說(shuō)上一次1980年代的CC旨在 收斂,那么這一次BBR則旨在 效能E最大化,這里的E就是本文上面大量篇幅描述的那個(gè)E,至少我個(gè)人是這么認(rèn)為的,這也和BBR的初衷 提高帶寬利用率 相一致!

分享到:
標(biāo)簽:算法 bbr
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定