CentOS 7 开启 Google BBR

BBR(Bottleneck Bandwidth and RTT)是一个 Google 发布的拥塞控制算法。

上世纪 80 年代以来,我们的互联网大多采用 Reno 或 CUBIC 这样基于丢包的拥塞控制策略。它们根据数据的丢包情况,来决定是否应该降低速度。虽然这么多年来,它们都表现得不错,但对于今天的互联网而言,就显得有些过时了。

BBR 则通过持续地探测当前网络的最大带宽和 RTT,建立一个当前网络的显式模型,并借助这个模型,控制当前网络的出站数据。同时,能减少 buffer 在链路中的占用率。

当 Google 在其内部的骨干网,Google.com 和 Youtube 部署了 BBR 后,发现 BBR 能显著地提高网络的吞吐量,并降低延迟。

开启 BBR 要求 4.10 以上版本的内核。如果嫌麻烦,就用 @teddysun 大佬的一键脚本吧:

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

Obtain Kernel with BBR

可先用如下命令查看当前内核版本:

1
uname -r

如果内核版本低于 4.10,可使用 ELRepo 的源进行更新:

1
2
3
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
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y

安装完成后,查看已安装的内核:

1
rpm -qa | grep kernel

输出结果大致如下:

1
2
3
4
5
[[email protected] ~]# rpm -qa | grep kernel
kernel-ml-4.10.4-1.el7.elrepo.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-tools-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-514.el7.x86_64

如果有看到类似 kernel-ml-4.10.4-1.el7.elrepo.x86_64 版本大于 4.10 的内核,说明安装成功。

Configure GRUB

运行如下命令来查看 GRUB 的启动项:

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

输出结果大致如下:

1
2
3
4
[[email protected] ~]# sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
CentOS Linux (4.10.4-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 7 (Core)

输出的项目从 0 开始编号。以上面的结果为例,4.10 的内核版本位于第一个,那么就设置默认启动项为 0:

1
sudo grub2-set-default 0

然后 reboot 重启系统!重启后,再次执行 uname -r 检查内核版本是否顺利升级。

BBR, Get Daze~!

执行如下命令来启用 BBR:

1
2
3
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

可用如下命令检查当前可用的 TCP 拥塞控制算法:

1
2
[[email protected] ~]# sudo sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

执行如下命令检查 BBR 是否启动:

1
2
3
4
[[email protected] ~]# sudo sysctl -n net.ipv4.tcp_congestion_control
bbr
[[email protected] ~]# lsmod | grep bbr
tcp_bbr 16384 8

如果返回的模块中有 tcp_bbr,那么就顺利启用了 BBR!

参考链接

[1] Linux TCP BBR commit
[2] CentOS7 开启Google BBR加速 让你的VPS更快