怎样升级Linux内核并开启BBR

2016年7月27日 | 分类: 【技术】

【介绍】

BBR是Google在2016年提交的对于TCP中拥塞算法的修改,有效地加快了网络速度。
BBR算法已经在Linux内核4.9及以后的版本包含,但是并没有默认开启。所以内核版本得大于4.9。
BBR算法的目的是要尽量跑满带宽, 并且尽量不要有排队的情况。
因为大多数人用的是 TCP Cubic (Linux) / Compound TCP (Windows),在有一定丢包率的情况下,TCP BBR 更加激进,抢占了更多的公网带宽

【升级】

安装grub2:

有些系统并未预装grub2,需要安装:

yum install grub2

查验当前内核:

查验:

uname -r

输出:

3.10.0-693.2.2.el7.x86_64

使用ELRepo安装Linux最新内核:

参考:http://elrepo.org/tiki/tiki-index.php

CentOS 8 环境,安装ELRepo:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm

CentOS 7 环境,安装ELRepo:

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

安装当前最新的Linux内核版本:

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

查验:

rpm -qa | grep kernel

输出:

kernel-tools-3.10.0-957.10.1.el7.x86_64
kernel-3.10.0-957.10.1.el7.x86_64
kernel-3.10.0-957.el7.x86_64
kernel-ml-5.0.7-1.el7.elrepo.x86_64
kernel-headers-3.10.0-957.10.1.el7.x86_64
texlive-l3kernel-svn29409.SVN_4469-43.el7.noarch
kernel-3.10.0-957.5.1.el7.x86_64
kernel-devel-3.10.0-957.5.1.el7.x86_64
kernel-tools-libs-3.10.0-957.10.1.el7.x86_64
kernel-devel-3.10.0-957.10.1.el7.x86_64

显示grub2菜单:

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

输出:

CentOS Linux (5.0.7-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-20190215172108590907433256076310) 7 (Core)

因为0是起始数字,而5.0.7内核位列第1行,所以需要设置默认root为0:

sudo grub2-set-default 0

重启系统:

sudo shutdown -r now

查验:

uname -r

输出:

5.3.8-1.el8.elrepo.x86_64

至此,系统内核已升级到Linux5.3.8。

开启BBR:

修改sysctl配置:

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

输出:

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

输出:

net.ipv4.tcp_congestion_control=bbr
sudo sysctl -p

输出:

net.ipv6.conf.all.accept_ra = 2
net.ipv6.conf.eth0.accept_ra = 2
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

查验BBR是否已经启用:

sudo sysctl net.ipv4.tcp_available_congestion_control

输出:

net.ipv4.tcp_available_congestion_control = reno cubic bbr

然后查验:

sudo sysctl -n net.ipv4.tcp_congestion_control

输出:

bbr

最后查验内核模块是否已加载:

lsmod | grep bbr

输出:

tcp_bbr                20480  4

测试BBR启用后的网络速度:

方法:在服务器中放置一个文件供本地浏览器下载,测试下载速度。

实测增加一倍。

参考:https://www.zhihu.com/question/53559433/answer/135903103
参考:https://segmentfault.com/a/1190000008395823

删除用不到的Linux内核:

更新内核后,旧内核还留在boot目录里,便于还原。

查看现运行的内核版本:

uname -r

输出:

4.18.0-1.el7.elrepo.x86_64

列出所有的内核文件:

rpm -qa | grep kernel

列出所有的内核文件:

texlive-l3kernel-svn29409.SVN_4469-38.el7.noarch
kernel-tools-libs-3.10.0-862.9.1.el7.x86_64
kernel-3.10.0-862.9.1.el7.x86_64
kernel-3.10.0-514.21.2.el7.x86_64
kernel-3.10.0-514.26.1.el7.x86_64
kernel-ml-4.15.9-1.el7.elrepo.x86_64
kernel-tools-3.10.0-862.9.1.el7.x86_64
kernel-3.10.0-514.26.2.el7.x86_64
kernel-3.10.0-693.21.1.el7.x86_64
kernel-headers-3.10.0-862.9.1.el7.x86_64
kernel-ml-4.18.0-1.el7.elrepo.x86_64

删除所有旧的内核文件(注意不要删除当前系统正在运行的内核文件):

rpm -e kernel-3.10.0-862.9.1.el7.x86_64
rpm -e kernel-3.10.0-514.21.2.el7.x86_64
rpm -e kernel-3.10.0-514.26.1.el7.x86_64
rpm -e kernel-ml-4.15.9-1.el7.elrepo.x86_64
rpm -e kernel-3.10.0-514.26.2.el7.x86_64
rpm -e kernel-3.10.0-693.21.1.el7.x86_64

注意留下所需系统及其devel版本:

kernel-ml-devel-4.19.7-1.el7.elrepo.x86_64
kernel-ml-4.19.7-1.el7.elrepo.x86_64

否则报删除devel版本时报错:

error: Failed dependencies:
        kernel-devel-uname-r is needed by (installed) systemtap-devel-3.x86_64

内核清理完成。

参考:http://www.wangxianfeng.cn/wordpress/2019/01/14/%e5%8d%87%e7%ba%a7centos7-linux%e5%86%85%e6%a0%b8/