Google BBR是什麼?以及在 CentOS 7 上如何部署

傳統 TCP 擁塞控制算法,基於 丟包反饋 的協議。

基於「丟包反饋」的協議是一種 被動式 的擁塞控制機制,其依據網絡中的 丟包事件 來做網絡擁塞判斷。即便網絡中的負載很高時,只要沒有產生擁塞丟包,協議就不會主動降低自己的發送速度。

這種協議可以 最大程度的利用網絡剩餘帶寬,提高吞吐量。 然而,由於基於丟包反饋協議在網絡近飽和狀態下所表現出來的侵略性,一方面大大提高了網絡的帶寬利用率;但另一方面,對於基於丟包反饋的擁塞控制協議來說,大大提高網絡利用率同時意味着下一次擁塞丟包事件爲期不遠了,所以這些協議 在提高網絡帶寬利用率的同時也間接加大了網絡的丟包率,造成整個網絡的抖動性加劇。

還有誰導致了丟包?

丟包並不總是擁塞導致,丟包可能原因是多方面,比如:

  • 全球最牛的防火牆 GWF 的隨機丟包策略

  • 網路中由於多路徑衰落(multi-path fading)所造成的信號衰減(signal degradation)

  • 通道阻塞造成的丟包(packet drop),再者損壞的封包(corrupted packets)被拒絕通過

  • 有缺陷的網路硬件、網路驅動軟件發生故障

  • 信號的信噪比(SNR)的影響

Google BBR 的出現

我們自然不喜歡 GWF 這種人爲的隨機丟包策略,當路過 GWF 時,數據被丟包,我們在此時應該 立刻重新發包,增大發送的頻率,而不希望降低速度,也就是不希望傳統的 TCP 擁塞算法去控制。

由此,就出現了基於不丟包的擁塞控制算法 CDG , 以 延遲 作爲判斷依據,延遲增大說明擁塞, 數據開始在路由器的緩衝中積累. 降低發送 窗口 。然而 CDG 算法與基於丟包的算法不兼容, 只有全球的設備都換上 CDG,但這是不可能的,目前市面上的設備不可能一下子都切換到 CDG,因此 Google 就不開心了,Google 的科學家們開發了一種過渡算法來解決這個問題,這個算法的名字就是 BBR(Bottleneck Bandwidth and RTT) ,它是一種全新的 擁塞控制算法,BBR 同 CDG 一致的思想是不以丟包作爲擁塞控制信號,但是和 CDG 不同的是,BBR 能和 cubic 和 reno 共存。

Google BBR是什麼?以及在 CentOS 7 上如何部署

使用BBR前後網絡吞吐量對比圖 / By Google

BBR 由 Google 開發,供 Linux 內核的 TCP 協議棧使用,有了 BBR 算法,Linux 服務器可以顯著提高吞吐量並減少連接延遲,簡單來說 BBR 能加速網絡傳輸速度。此外,部署 BBR 也很容易,因爲該算法只需要發送方,而不需要網絡或接收方的支持。

CentOS 7 服務器 實例上部署 BBR

下面我將向您分享我如何在 CentOS 7 KVM 服務器實例上部署 BBR。

步驟〇: 前置條件

  • CentOS 7 x64 服務器實例。

  • 一個 sudo 用戶

步驟 ① :使用 ELRepo RPM 倉庫升級內核

要使用BBR,您需要將CentOS 7機器的內核升級到4.9.0。您可以使用ELRepo RPM第三方倉庫輕鬆完成該操作。

在升級之前,您可以查看當前內核:

uname -r

此命令應可能輸出類似於以下字符串:

3.10.0-514.2.2.el7.x86_64

如您所見,當前內核爲3.10.0,因此我們需要更新內核。

更新內核之前,先安裝 ELRepo 倉庫:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgsudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

使用ELRepo repo安裝4.9.0內核:

sudo yum --enablerepo=elrepo-kernel install kernel-ml -y

確認結果:

rpm -qa | grep kernel

如果安裝成功,您應該看到類似於一下列,且 kernel-ml-4.18.5-1.el7.elrepo.x86_64 在輸出列表中看到:

kernel-ml-4.18.5-1.el7.elrepo.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-514.2.2.el7.x86_64
kernel-tools-3.10.0-514.2.2.el7.x86_64
kernel-3.10.0-514.2.2.el7.x86_64

現在,您需要通過設置默認引導爲 grub2 ,來啓用4.18.5內核。

顯示 grub2 菜單中的所有條目:

sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

結果應該類似於:

CentOS Linux 7 Rescue a0cbf86a6ef1416a8812657bb4f2b860 (4.18.5-1.el7.elrepo.x86_64)CentOS Linux (4.18.5-1.el7.elrepo.x86_64) 7 (Core)CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-bf94f46c6bd04792a6a42c91bae645f7) 7 (Core)

由於行計數開始於 0 ,且4.18.5內核條目位於第一行,因此將默認引導條目應設置爲 0 :

sudo grub2-set-default 0

重啓系統:

sudo shutdown -r now 
// 或 reboot

當服務器重新聯機時,請重新登錄並重新運行uname命令以確認您使用的是正確的內核:

uname -r

您應該看到如下結果:

4.18.5-1.el7.elrepo.x86_64

步驟 ②:啓用BBR

要啓用 BBR 算法,您需要修改 sysctl 配置,如下所示:

echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

現在,您可以使用以下命令,確認是否已經啓用了BBR:

sudo sysctl net.ipv4.tcp_available_congestion_control

正常情況下應輸出類似以下的字符串:

net.ipv4.tcp_available_congestion_control = bbr cubic reno

接下來,繼續驗證:

sudo sysctl -n net.ipv4.tcp_congestion_control

應該輸出類似以下字符串:

bbr

最後,檢查內核模塊是否已加載:

lsmod | grep bbr

應該輸出類似於:

tcp_bbr     20841  0

步驟 ③(可選):測試網絡性能是否增強

爲了測試BBR的網絡性能是否增強,您可以在Web服務器目錄中創建一個文件以供下載,然後從臺式機上的Web瀏覽器測試下載速度。

sudo yum install httpd -y
sudo systemctl start httpd.service
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
cd /var/www/html
sudo dd if=/dev/zero of=500mb.zip bs=1024k count=500

最後, http://[your-server-IP]/500mb.zip 從桌面計算機上的 Web 瀏覽器訪問 URL ,然後評估下載速度。

當然服務器在國外的話,也可以在 YouTube 上直接打開一個 4K 畫質視頻,進行感官速度測試,如下圖:

Google BBR是什麼?以及在 CentOS 7 上如何部署

使用BBR後的YouTube速度 © JANDOU

就這樣,盡情享受高速網絡帶來的新體驗。

步驟 ④ (可選):刪除無用的舊內核

升級內核之後,往往老舊的內核也保留下來了,執行以下命令,將自動篩選並刪除當前無用的系統內核版本。

yum remove $(rpm -qa | grep kernel | grep -v $(uname -r))

詳情請參考文章: CentOS 7 刪除無用的舊內核

非專業技術人員福利

如果您不是專業技術人員,可以採取一鍵安裝腳本進行安裝,執行以下命令:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

詳情請參考文章: 一鍵安裝最新內核並開啓 BBR 腳本

參考鏈接:

TCP BBR congestion control comes to GCP – your Internet just got faster

TCP擁塞控制算法 優缺點 適用環境 性能分析

How to Deploy Google BBR on CentOS 7 By ×××

TCP流量控制和擁塞控制機制

對 Google TCP BBR 的淺薄認識

技術致謝

Neal Cardwell,高級軟件工程師;

Yuchung Cheng,高級軟件工程師;

C. Stephen Gunn,高級職員可靠性工程師;

Soheil Hassas Yeganeh,高級軟件工程師;

Van Jacobson, 研究科學家;

Amin Vahdat, 谷歌研究員。


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持 碼農網

爲你推薦:

相關軟件推薦:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章