Linux都該安裝的好東西 Google BBR

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek
6 min readSep 8, 2019
Google BBR 演算法

在台灣,很少聽人討論BBR,似乎在台灣沒什麼知名度,這是套很厲害的工具,不只是網站,對系統的幫助都很大。

幾乎每個SEOer都知道網站速度的重要性,所以每個工程師窮究畢生之力,從網路層(Network layer)、硬體層(Hardware Layer)、系統層(System layer)、應用層(Application layer),不斷鑽研增加速度的方式,但網站這種東西畢竟是用在網路上,受到網路層的影響很大,特別是TCP/IP 這個通訊協定,是個有很多缺點跟效能耗損的技術,因此Google要改變世界的第一步就是制定更好的技術規格出來,不論從大力支持 https,以及號稱http/3 的 QUIC,其中最特別的就是在數年前就發佈了的 BBR (擁塞控制算法),效果顯著到連Wordpress CTO都大力讚賞。

“BBR allows the 500,000 WordPress sites on our digital experience platform to load at lightning speed. According to Google’s tests, BBR’s throughput can reach as much as 2,700x higher than today’s best loss-based congestion control; queueing delays can be 25x lower. Network innovations like BBR are just one of the many reasons we partner with GCP.” — Jason Cohen, Founder and CTO, WP Engine

TCP/IP 有個很討厭的”握手階段(three-way handshaking)”,這是TCP/IP 設計之初為了確保正確性而有的,這個階段的建立之後,才能夠有應用層的傳輸,網路傳輸有很大的耗損就是在這個階段。

three-way handshaking

這也是網路有丟包(loss packet)的原因之一,傳統 TCP 擁塞控制算法,基於丟包反饋的協議。基於「丟包反饋」的協議是一種 “被動式的擁塞控制機制”,依據網絡中的丟包來做擁塞判斷。即便網絡中的負載很高時,只要沒有產生擁塞丟包,協議就不會主動控制自己的發送速度。這種協議可以最大程度的利用網絡剩餘頻寬,並提高吞吐量。但是由於基於丟包反饋協議在網絡近飽和狀態下所表現出來的結果,這些協議在提高網絡頻寬高利用率的同時,也加大了網絡的丟包率,造成整個網絡的抖動性加劇。

基於loss packet 的擁塞控制

說到丟包就不得不提全球最牛的防火牆GWF 的隨機丢包策略
GFW(中國國家防火牆,又稱防火長城)

這時Google 的科學家們,就跳出來展現出基礎科學研發的實力,發明了不透過丟包的擁塞控制算法,名字就叫做 BBR(Bottleneck Bandwidth and RTT),而且只要Server 有安裝BBR lib,就可以使用這套功能,不需要更換網路設備。

Bottleneck Bandwidth and RTT

所以我常說,Google最大的夢想,就是統治世界。

若您的Server是Win10 like 的系統(Windows server 2016之後自帶),那就可以跳過以下的教學,因為都內建了,如果是Linux base,就可以參考下面的安裝,完成之後保證耳目一新。

要注意一點,如果是VPS (雲端主機)用戶,要確認主機商使用的虛擬層技術(hypervisor),Google BBR目前不支援 OpenVZ,OpenVZ很多小主機商愛用,因為技術門檻低可超賣,而KVM、Xen、VMware都沒問題。

以下以CentOS 7 為例 :
記得要用root,然後安裝前先測試傳輸速度,比較一下before / after
1、先安裝 epel 開源包 : yum install epel-release -y
2、切到tmp 資料夾 : cd /tmp (這一步驟是我自己的習慣)
3、下載BBR : wget — no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
4、授權 : chmod +x bbr.sh
5、執行 : ./bbr.sh (這步驟會跑很久,記得要按y (確認安裝))
6、完成後會自動reboot
7、確認是否有安裝成功 : sysctl net.ipv4.tcp_available_congestion_control
這時系統應該會反饋 : net.ipv4.tcp_available_congestion_control = bbr cubic reno
8、升級內核 : yum --enablerepo=elrepo-kernel -y install kernel-ml kernel-ml-devel
9、啟動 : grub2-set-default 0
10、重開機 : reboot

我的before / after

左邊before / 右邊 after,是打雞血了嗎?

--

--

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek

I am Kirin., I was ShellFans AI Technology’s CTO. Our team specializes in IoT, Blockchain, Cloud and Ai. | https://www.shell.fans