TCP BBR - 一鍵安裝最新內核並開啟 TCP BBR


原文地址:

https://teddysun.com/489.html

最近,Google 開源了其 TCP BBR 擁塞控制算法,並提交到了 Linux 內核,從 4.9 開始,Linux 內核已經用上了該算法。根據以往的傳統,Google 總是先在自家的生產環境上線運用后,才會將代碼開源,此次也不例外。
根據實地測試,在部署了最新版內核並開啟了 TCP BBR 的機器上,網速甚至可以提升好幾個數量級。
於是我根據目前三大發行版的最新內核,開發了一鍵安裝最新內核並開啟 TCP BBR 腳本。

本腳本適用環境

系統支持:CentOS 6+,Debian 7+,Ubuntu 12+
虛擬技術:OpenVZ 以外的,比如 KVM、Xen、VMware 等
內存要求:≥128M
日期  :2018 年 06 月 09 日

 

關於本腳本

1、本腳本已在 Vultr 上的 VPS 全部測試通過。
2、當腳本檢測到 VPS 的虛擬方式為 OpenVZ 時,會提示錯誤,並自動退出安裝。
3、腳本運行完重啟發現開不了機的,打開 VPS 后台控制面板的 VNC, 開機卡在 grub 引導, 手動選擇內核即可。
4、由於是使用最新版系統內核,最好請勿在生產環境安裝,以免產生不可預測之后果。

使用方法

使用root用戶登錄,運行以下命令:

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

安裝完成后,腳本會提示需要重啟 VPS,輸入 y 並回車后重啟。
重啟完成后,進入 VPS,驗證一下是否成功安裝最新內核並開啟 TCP BBR,輸入以下命令:

 uname -r 

查看內核版本,顯示為最新版就表示 OK 了

 sysctl net.ipv4.tcp_available_congestion_control 

返回值一般為:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
或者為:
net.ipv4.tcp_available_congestion_control = reno cubic bbr

 sysctl net.ipv4.tcp_congestion_control 

返回值一般為:
net.ipv4.tcp_congestion_control = bbr

 sysctl net.core.default_qdisc 

返回值一般為:
net.core.default_qdisc = fq

 lsmod | grep bbr 

返回值有 tcp_bbr 模塊即說明 bbr 已啟動。注意:並不是所有的 VPS 都會有此返回值,若沒有也屬正常。

CentOS 下最新版內核 headers 安裝方法

本來打算在腳本里直接安裝 kernel-ml-headers,但會出現和原版內核 headers 沖突的問題。因此在這里添加一個腳本執行完后,手動安裝最新版內核 headers 之教程。
執行以下命令

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

根據 CentOS 版本的不同,此時一般會出現類似於以下的錯誤提示:

Error: kernel-ml-headers conflicts with kernel-headers-2.6.32-696.20.1.el6.x86_64
Error: kernel-ml-headers conflicts with kernel-headers-3.10.0-693.17.1.el7.x86_64

因此需要先卸載原版內核 headers ,然后再安裝最新版內核 headers。執行命令:

 yum remove kernel-headers 

確認無誤后,輸入 y,回車開始卸載。注意,有時候這么操作還會卸載一些對內核 headers 依賴的安裝包,比如 gcc、gcc-c++ 之類的。不過不要緊,我們可以在安裝完最新版內核 headers 后再重新安裝回來即可。
卸載完成后,再次執行上面給出的安裝命令。

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

成功安裝后,再把那些之前對內核 headers 依賴的安裝包,比如 gcc、gcc-c++ 之類的再安裝一次即可。

為什么要安裝最新版內核 headers 呢?
這是因為 shadowsocks-libev 版有個 tcp fast open 功能,如果不安裝的話,這個功能是無法開啟的。

內核升級方法

如果是 CentOS 系統,執行如下命令即可升級內核:

 yum -y install kernel-ml kernel-ml-devel 

如果你還手動安裝了新版內核 headers ,那么還需要以下命令來升級 headers :

 yum -y install kernel-ml-headers 

CentOS 6 的話,執行命令:

 sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf 

CentOS 7 的話,執行命令:

 grub2-set-default 0 

如果是 Debian/Ubuntu 系統,則需要手動下載最新版內核來安裝升級。
這里下載最新版的內核 deb 安裝包。
如果系統是 64 位,則下載 amd64 的 linux-image 中含有 generic 這個 deb 包;
如果系統是 32 位,則下載 i386 的 linux-image 中含有 generic 這個 deb 包;
安裝的命令如下(以最新版的 64 位 4.12.4 舉例而已,請替換為下載好的 deb 包):

 dpkg -i linux-image-4.12.4-041204-generic_4.12.4-041204.201707271932_amd64.deb 

安裝完成后,再執行命令:

 /usr/sbin/update-grub 

最后,重啟 VPS 即可。

特別說明

如果你使用的是 Google Cloud Platform (GCP)更換內核,有時會遇到重啟后,整個磁盤變為只讀的情況。只需執行以下命令即可恢復:

 mount -o remount rw / 

 

更新日志:

2018 年 06 月 09 日:
1、修正:在 CentOS 系統下將 elrepo-kernel 默認啟用,以解決在安裝新內核后執行 yum update 再次安裝舊內核的問題。

2018 年 05 月 12 日:
1、修正:在 Ubuntu 或 Debian 系統中某些情況下獲取不到某個編譯失敗的安裝包導致退出安裝的問題。並且現在可以手動選擇安裝從 4.14 到最新版本的內核。

2018 年 02 月 24 日:
1、新增:手動安裝最新版內核 headers 的教程。

2017 年 10 月 28 日:
1、更新:自動判斷內核版本。如果內核版本已經大於或等於 4.9 且沒有開啟 BBR,腳本會直接設置好 BBR;
2、新增:腳本執行時會在當前目錄下創建日志(install_bbr.log),方便查看及排錯。

2017 年 02 月 22 日:
1、更新:自動獲取最新版 4.10 內核。

2017 年 01 月 20 日:
1、新增:自動獲取並下載安裝最新版內核的功能。

2017 年 01 月 13 日:
1、更新:內核到 4.9.3。

2017 年 01 月 09 日:
1、更新:內核到 4.9.1。

參考鏈接:

https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md
http://elrepo.org/tiki/tiki-index.php
http://kernel.ubuntu.com/~kernel-ppa/mainline/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM