原文鏈接:https://blog.apnic.net/2020/01/10/when-to-use-and-not-use-bbr/
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google設計,並於2016年發布的擁塞算法,以往大部分擁塞算法是基於丟包來作為降低傳輸速率的信號,而BBR基於模型主動探測。
不過,在具體談論應該BBR合適的應用場景之前,有必要先回顧一下傳統擁塞控制算法的弊端所在。
1.傳統擁塞控制算法的弊端(即BBR試圖解決的問題)
TCP擁塞控制算法已經持續發展了30多年,主流的擁塞控制算法是基於丟包的,即它們將數據包丟失作為擁塞信號。例如,Linux的默認TCP算法Cubic在遇到數據包丟失時將其擁塞窗口降低了30%。
但是,在某些情況下,基於丟包的TCP算法效果不佳。例如,在淺緩沖區中,數據包丟失可能被誤解為網絡擁塞,從而導致吞吐量降低和網絡利用率降低。另一方面,在較深的緩沖區中,數據包通常要花很長時間才能填滿緩沖區。這將導致較高的網絡延遲,這稱為緩沖膨脹問題。
為了解決此類問題,Google在2016年提出了BBR。BBR不會使用數據包丟失作為擁塞信號,而是根據觀察到的帶寬和延遲值來調節其流量。具體來說,BBR將其傳輸中的數據包數量限制為時延帶寬積(BDP)的倍數。此外,BBR還使用 pacing來控制數據包之間的間隔。
重點:
- 瓶頸緩沖區大小和時延帶寬積(BDP)之間的差異通常指示BBR何時運行良好。在較大的BDP和較淺的緩沖區大小下,BBR可獲得更高的吞吐量。
- 與Cubic相比,BBR可能導致100倍的數據包重傳。
- BBR和Cubic之間的不公平性取決於瓶頸緩沖區的大小—如果緩沖區大小較小(10KB),則BBR可以獲取總帶寬的90%以上;具有較大的緩沖區大小(10MB),Cubic可獲得大約80%的總帶寬。
2.BBR的優勢和劣勢
雖然BBR是為了解決基於丟包的擁塞控制算法的某些問題而提出的,但是這並不意味着在所有的情況下,BBR都比基於丟包的擁塞控制算法有更好的性能。
為了探究BBR在何種情況下相比較基於丟包的擁塞控制算法有更好的性能,原作者進行了幾個相關的實驗,旨在探究:
- BBR什么時候更有用(與基於丟包的算法(例如Cubic)相比)
- BBR忽略數據包丟失的缺點是什么?
- BBR是否對基於丟包的算法不公平?(答案是yes)
原作者和其在石溪大學的同事們在不同的網絡條件下,跨不同的網絡測試平台(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算法的帶寬(取決於瓶頸緩沖區的大小)
- BBR的機制會導致高重傳率
BBR目前來看,只能說和Cubic更有優劣,兩者擅長處理的網絡環境並不相同。不過它不采用丟包作為擁塞信號,而是通過自己評估,也許會在其他的環境下取得更好的成績,比如說和強化學習相結合。