TCP BBR 壅塞控制演算法

繼 google.com 與 YouTube 之後,Google 宣布其雲端平台將一併使用新演算法 TCP BBR。相對於目前的演算法,在 10Gb 的網路頻寬下,網路傳輸率最高可提升 2700 倍。

(圖片來源:Google Cloud Platform Blog

什麼是 TCP BBR?

TCP BBR 的全名為 TCP Bottleneck Bandwidth and Round-trip propagation time,是 Google 在 2017 年所提出的新型 TCP 壅塞控制演算法,在具有連網能力的電腦或行動裝置中運行,可決定資料傳輸的速度,目的在於解決網路壅塞問題。在 TCP BBR 問世前,TCP/IP 的演算法大多都是先觀測傳輸時封包是否有丟失狀況,如果有丟失則判定此為網路壅塞,而處理方式是全面降速,直到丟失的封包成功傳送為止。此舉會導致緩衝區不斷擴大,在傳輸大量資料時速度越來越慢、最後卡死。

而 BBR 主要是估計頻寬和延遲狀況,透過不斷偵測封包傳輸的錯誤率,根據總傳輸量和錯誤量的比例來決定要以多大的頻寬傳輸,降低緩衝區堵塞的狀況,進而提高傳輸速度。Google 將 BBR 應用在 YouTube 上,使全球網路平均傳輸量提升 4%,最高更達到 14%,封包往返時間減少約 33%,重新緩衝平均時間增加約 11%。

各國 Youtube 影音服務使用 TCP BBR 壅塞控制演算法後提升的網路吞吐量比較(圖片來源:Google Cloud Platform Blog

各國 Youtube 影音服務使用 TCP BBR 壅塞控制演算法後提升的重新緩衝時間比較(圖片來源:Google Cloud Platform Blog

各國 Youtube 影音服務使用 BBR 壅塞控制演算法後降低的封包往返時間比較(圖片來源:Google Cloud Platform Blog

如何使用 TCP BBR?

目前 TCP BBR 已整合進 Linux Kernel 4.9 以後的版本,所有基於 Linux 核心的發行版本只要透過更新 Linux Kernel 後即可使用。

輸入指令 uname -srm,查詢 Linux 核心版本是否高於 4.9。

1
2
uname -srm
Linux 4.15.0-22-generic x86_64

輸入指令lsmod | grep bbr,如果輸出結果沒有 tcp_bbr 的話,執行下面的指令:

1
2
3
4
5
6
7
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

執行下面兩行指令,且執行結果都有顯示 tcp_bbr 時代表 BBR 已啟動。

1
2
3
4
sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic bbr
sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr

實機測試

這裡使用 DigitalOcean VPS 建立兩台 Ubuntu 18.04(Linux Kernel: 4.15),將TCP 壅塞控制演算法分別設為 BBR 與 CUBIC 來進行檔案傳輸測試。

Server

Platform: DigitalOcean Cloud VPS (2 Hosts)
Datacenter region: Singapore
CPU: Intel Xeon E5-2650 v4 @ 2.20GHz (1C2T)
RAM: 2GB
Storage: 25GB SSD
OS: Ubuntu 18.04 LTS x64
Linux Kernel Version: 4.15.0-22-generic
HTTP Server: Apache HTTP Server 2.4.29
TCP Congestion Method: BBR, CUBIC

Client

CPU: Intel Core i5-3230M @ 2.60GHz (2C4T)
RAM: 4GB
OS: Ubuntu 16.04 LTS x64

ICMP Ping

除了第 150 ~ 250 回測試時 LAN 似乎有點小狀況,其餘時段並沒有太大的差異。

HTTP Download Test

傳輸速度方面所有時段幾乎是有提升的,最佳情況下可以提升約 80%。

下圖總結一下平均表現,ICMP Ping 平均只差 1.02 ms,而下行速度平均差 52.02 Mbps(約 55.49%)。

後記

TCP BBR 不光是帶來顯著的速度提升,重要的是僅需要透過內核升級即可使用,完全不用更動現有網路架構,若系統不需要使用特定內核版本,幾乎等於無痛升級!

References:

comments powered by Disqus