繼 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。
|
|
輸入指令lsmod | grep bbr
,如果輸出結果沒有 tcp_bbr
的話,執行下面的指令:
|
|
執行下面兩行指令,且執行結果都有顯示 tcp_bbr 時代表 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: