何時使用和不使用BBR

2022-08-21 08:03:15 字數 2777 閱讀 8039

tcp bbr(bottleneck bandwidth and round-trip propagation time)是由google設計,並於2023年發布的擁塞演算法,以往大部分擁塞演算法是基於丟包來作為降低傳輸速率的訊號,而bbr基於模型主動探測。

不過,在具體談論應該bbr合適的應用場景之前,有必要先回顧一下傳統擁塞控制演算法的弊端所在。

1.傳統擁塞控制演算法的弊端(即bbr試**決的問題)

tcp擁塞控制演算法已經持續發展了30多年,主流的擁塞控制演算法是基於丟包的,即它們將資料報丟失作為擁塞訊號。例如,linux的預設tcp演算法cubic在遇到資料報丟失時將其擁塞視窗降低了30%。

但是,在某些情況下,基於丟包的tcp演算法效果不佳。例如,在淺緩衝區中,資料報丟失可能被誤解為網路擁塞,從而導致吞吐量降低和網路利用率降低。另一方面,在較深的緩衝區中,資料報通常要花很長時間才能填滿緩衝區。這將導致較高的網路延遲,這稱為緩衝膨脹問題

為了解決此類問題,google在2023年提出了bbr。bbr不會使用資料報丟失作為擁塞訊號,而是根據觀察到的頻寬和延遲值來調節其流量。具體來說,bbr將其傳輸中的資料報數量限制為時延頻寬積(bdp)的倍數。此外,bbr還使用 pacing來控制資料報之間的間隔。

重點:2.bbr的優勢和劣勢

雖然bbr是為了解決基於丟包的擁塞控制演算法的某些問題而提出的,但是這並不意味著在所有的情況下,bbr都比基於丟包的擁塞控制演算法有更好的效能。

為了**bbr在何種情況下相比較基於丟包的擁塞控制演算法有更好的效能,原作者進行了幾個相關的實驗,旨在**:

原作者和其在石溪大學的同事們在不同的網路條件下,跨不同的網路測試平台(lan,wan,mininet)進行了廣泛的測量研究,從而做到了這一點。他們在路由器上部署了流量控制器,以進行細粒度的網路引數控制,並使用帶有netem的linux流量控制(tc)來設定網路延遲,並使用令牌桶過濾器(tbf)來設定網路頻寬和緩衝區大小。

2.1bbr在何時更有效?

為了研究bbr或cubic在不同情況下能否獲得更高的吞吐量,他們在區域網中進行了640個iperf3實驗。在這些實驗中,收集了bbr和cubic的有效值,並通過決策樹(使用python3中的decisiontreeclassifier包)將這些值進行了概括。

在決策樹中,橙色節點表示bbr獲得更高吞吐量的例項,而藍色節點代表cubic獲得更高吞吐量的例項。圖中可以觀察到,瓶頸緩衝區大小和bdp之間的相對差異通常決定了bbr何時執行良好-在較小的bdp和較深的緩衝區大小下,cubic可獲得較高的吞吐量,而在較大的bdp和較淺的緩衝區大小下,bbr可獲得較高的吞吐量。更高的產量。

也就是bbr與cdp呈現正相關,與緩衝區大小呈現負相關,而cubic恰恰相反。

為了分析和量化bbr與淺緩衝區中的cubic相比,吞吐量的提高,定義乙個以下指標:

gpgain = (goodput|bbr – goodput|cubic) / goodput|cubic x 100(顯然,當bbr更有效時,gpgain為正數)

對於較淺的緩衝區大小(100kb)的情況下,在圖2中展示了在不同的rtt和頻寬值下gpgain指標的熱圖。我們觀察到bbr與cubic相比有顯著改善。例如,在200ms的rtt和500mbps的頻寬下,與cubic相比,bbr的吞吐量提高了115%。這是因為bbr使用頻寬和延遲估計作為擁塞訊號而不是資料報丟失。

2.2忽略丟包的缺點

bbr需要將2bdp資料保留在網路中(額外的bdp資料用於處理延遲/聚合的ack),在淺緩衝區中,這些額外的資料bdp將導致巨大的資料報重傳。

更糟糕的是,bbr不會將丟包視為擁塞訊號,這會導致高重傳率的保持。下面的熱圖(圖3)顯示了在不同的rtt和頻寬值下bbr和cubic的資料報重傳次數。

圖3中可以觀察到,bbr導致的資料報重傳比cubic的重傳100倍。這表明bbr是以淺緩衝區中的高資料報重傳為代價提高吞吐量。因此,如果傳遞的內容對丟包敏感,那麼bbr可能不是乙個好選擇。在這種情況下,內容提供商需要仔細檢查吞吐量和體驗質量之間的權衡。

3.bbr的cliff point

在這些實驗中可以發現有乙個「cliff point」-即損失百分比,超出此百分比,bbr的實際吞吐量會大大下降。如圖5(左)所示,bbr的吞吐量保持幾乎滿負荷,直到損失百分比達到20%。

經分析,cliff point與bbr的最大pacing_gain引數密切相關,該引數決定了其探測能力。如果丟包概率為p,則在頻寬探測期間,bbr的速度為pacing_gain×頻寬(bw)。但是,由於損耗,其有效pacing為pacing_gain×bw×(1- p)。因此,如果此值小於頻寬,則bbr將不會探測額外的容量,並且會因丟包而推斷出較低的容量。

4.總結

總的來說,bbr作為在cubic之後提出的擁塞控制演算法,它的有很多優點,並且解決了cubic演算法存在的一些問題,但是因為它並非是採用丟包作為擁塞訊號,也帶來了一些新的問題。

bbr目前來看,只能說和cubic更有優劣,兩者擅長處理的網路環境並不相同。不過它不採用丟包作為擁塞訊號,而是通過自己評估,也許會在其他的環境下取得更好的成績,比如說和強化學習相結合。

NoSQL與RDBMS 何時使用,何時不使用

naresh kumar是位軟體工程師與熱情的博主,對於程式設計與新事物擁有極大的興趣,非常樂於與其他開發者和程式設計師分享技術上的研究成果。近日,naresh撰文比較了nosql與rdbms,並詳細介紹了他們各自的特點與適用的場景。nosql並不是關係型資料庫管理系統,本文將會介紹nosql資料庫...

何時使用或何時不使用malloc函式

在初學資料結構時,我們往往不太清楚在定義乙個結構體指標時要不要使用malloc函式。例如以下的 linklist init linklist retrun h linklist s s data x 以上這兩句 是不行的,因為s沒有指向確切的位址,所以不能通過s來向它要指向的位址賦值 但是linkl...

MySQL何時使用索引 何時不使用索引

mysql何時使用索引 對乙個鍵碼使用 if null和between select from table name where key part1 1 and key part2 5 select from table name where key part1 is null 當使用不以萬用字元開...