Linux系統手動更換核心
前言
一般而言,在雲端計算商那裡“租”了一臺伺服器之後,我一般會選擇
CentOS 7
系統,所以這篇文章,就以CentOS為例(似乎有一點標題黨的嫌疑?
基本不會介紹BBR的原理,需要詳細瞭解,可以訪問research,我技術並不夠優秀,很難解釋清楚,還請見諒!
先講講BBR吧!Wiki百科給出的解釋是Bottleneck Bandwidth and Round-trip propagation time (BBR)
,是Google在2016年開發的TCP擁塞控制演算法(開源了)。TCP擁塞控制演算法有很多,BBR是其中一種,但是由於它出色的效果,被很多人採用。至於linux核心什麼時候開始原生支援的,網上的說法真的是五花八門,很多人文章感覺就是互相抄,連2.6.*
4.9
。抱著不懂就差的態度,我去Google稍微搜了一下,不敢確定是不是一定是對的。Wiki百科的詳細說明,可以找到如下一條說明:
核心 |
初始發行日期 |
最新版本 |
維護者 |
支援狀態 |
備註 |
---|---|---|---|---|---|
4.9 |
2016年12月11日 |
4.9.148 |
葛雷格·克羅哈曼 |
長期支援版本,從2016年12月至2023年1月 |
開始支援 BBR congestion control。 |
更換/更新核心
這時候我們來更換核心吧,這裡我的測試機器是中國香港ECS。
- 當前的 Kernel 版本
$ uname -r
- 更新軟體包
$ yum update -y
ELRepo專案
這裡我們需要用到Repo專案Enterprise Linux軟體包的RPM儲存庫。
- 匯入ELRepo公鑰
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- 安裝ELRepo的 yum 源到系統
$ yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
安裝新核心啦
- 檢視ELRepo倉庫下,在當前系統支援的核心包 ELRepo會提供he Linux Kernel Archives用資源。
$ yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
- 安裝最新的主線穩定核心
$ yum --enablerepo=elrepo-kernel install kernel-ml
更改grub配置
在安裝完新的 Kernrl 之後,系統是不會幫你切換到新核心的,重啟也不行,需要我們自己設定,將新核心設定為預設啟動選項。
- 檢視所有的 Kernel
$ rpm -qa | grep kernel
- 檢視當前正在使用的 Kernrl
$ uname -r
- 檢視 Kernel 啟動順序
$ awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
我們可以看到,安裝完之後,核心沒有切換過去,通過檢視得知,新安裝的核心位於第一個位置,標記為 0
。這是我們需要修改/etc/default/grub
檔案,以便於讓系統在啟動時讓新核心成為預設選項。
$ vim /etc/default/grub
需要把圖中的GRUB_DEFAULT=saved
改成 GRUB_DEFAULT=0
,然後儲存。當然,你也可以在安裝其它版本的Kernel之後,更改GRUB_DEFAULT
的值。
- 重新生成 Kernrl 配置
$ grub2-mkconfig -o /boot/grub2/grub.cfg
- 然後重啟機器
$ reboot
- 重啟完畢後,檢查是否成功
$ uname -r
可以看到,已經成功啦!
刪除多餘核心
你可以在安裝新核心之後,選擇把其它核心刪掉,但是請注意千萬不要刪除正在執行的那個核心!!!
- 檢視所有的 Kernel
$ rpm -qa | grep kernel
- 刪除你想刪除的核心
$ yum remove kernel-[old_kernel_version]
# 舉個例子
$ yum remove kernel-3.10.0-957.el7.x86_64
- 重新生成 Kernrl 配置
$ grub2-mkconfig -o /boot/grub2/grub.cfg
開啟BBR
整了這麼半天,除了更新下核心,另一個重要的事情就是需要開啟BBR了。
- 編輯
/tec/sysctl.conf
檔案
$ vim /etc/sysctl.conf
- 新增如下內容:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
- 或者使用tee命令重定向追加到
/tec/sysctl.conf
檔案中:
$ 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
- 從配置檔案“/etc/sysctl.conf”載入核心引數設定
$ sysctl -p
- 驗證是否成功(是否開啟了BBR
$ sysctl net.ipv4.tcp_congestion_control
# 顯示如下內容即可:
# net.ipv4.tcp_congestion_control = bbr
$ sysctl net.ipv4.tcp_available_congestion_control
# 顯示如下內容即可:
# net.ipv4.tcp_available_congestion_control = reno cubic bbr
- 檢視核心模組是否載入
$ lsmod | grep bbr
到這裡,基本上就成功了!