CentOS 7 启动 BBR 教程

BBR 的全称是 Bottleneck Bandwidth and RTT congestion control。该技术的目的是通过优化和控制 TCP 的拥塞,充分利用带宽并降低延迟,起到神奇般的加速效果 —— 通俗来讲就是对 Linux 内核 TCP 协议的优化从而达到提速的目的。一些受制于特殊网络环境的网民,近年来一直在寻找各种提速的方法。不论是之前流行的锐速(后开始收费),还是 FinalSpeed 等都曾备受大家的爱戴。BBR 则提供了一个全新的加速方式,自 Google 于 2016 年 9 月宣布将 BBR 开源起,这一全新的加速方案便受到了广泛的关注。在内核较新的 Linux 系统,例如 Ubuntu 18.04 上,它可以方便的开启;而一些较旧的系统,则需要先升级内核才能启用。
这篇文章将介绍在 CentOS 7 上,启动 BBR 的方法。文中使用的是 yum 包管理工具。如果你的系统环境不同,本文可能并不适用。

yum 系统更新

将 CentOS 系统版本更新到 7.3 或更高:

1
2
yum update
yum upgrade

查看系统版本

1
cat /etc/redhat-release

输出如下,则表示已升级到 7.3

1
CentOS Linux release 7.3.1611 (Core)

安装 elrepo 并升级内核

执行 uname -r 查看内核版本,例如:

1
4.9.0-1.el7.elrepo.x86_64

如果内核版本低于 4.9,需要升级内核;否则可以跳过这一步,直接到「开启 BBR」部分。

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

这时,执行 yum repolist all 可以看到所有安装的源,可以启用 elrepo-kernal

1
2
yum-config-manager --enable elrepo-kernel
yum install kernel-ml -y

如果只是执行一次,也可以使用:

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

正常情况下这个命令将输出如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Transaction Summary
================================================================================
Install 1 Package

Total download size: 39 M
Installed size: 169 M
Downloading packages:
kernel-ml-4.9.0-1.el7.elrepo.x86_64.rpm | 39 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : kernel-ml-4.9.0-1.el7.elrepo.x86_64 1/1
Verifying : kernel-ml-4.9.0-1.el7.elrepo.x86_64 1/1

Installed:
kernel-ml.x86_64 0:4.9.0-1.el7.elrepo

Complete!

随后更新 grub 文件并重启。执行:

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

或者

1
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

这时,所有可用的内核会被输出。记下新内核所在的行数,第一行为 0,第二行为 1,以此类推。
执行以下命令来启用最新内核,需要把 0 替换成上一步得到的新内核所在的行数:

1
2
grub2-set-default 0
reboot

重启后,ssh 会断开,稍等一会儿重新连接。可以再次查看内核版本,检查更新是否成功。如果一切顺利,下一步就是启动 bbr 了。

开启 BBR

执行

1
vim /etc/sysctl.conf

追加如下内容:

1
2
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

然后重新加载这些参数,如果没问题的话,会输出之前加入的内容:

1
sysctl -p

注:如果提示未找到命令,请确保 SELinux 已关闭,方法是编辑 /etc/selinux/config
除此之外,一些 VPS 主机由于虚拟化技术的限制,可能会在执行这一步时提示文件找不到:

1
sysctl: cannot stat /proc/sys/net/core/default_qdisc: No such file or directory

这不是大问题,参考:How to get fully options at /proc/sys/net in docker's ubuntu

确定 BBR 已经开启

通过 sysctl

若执行

1
sysctl net.ipv4.tcp_available_congestion_control

输出

1
net.ipv4.tcp_available_congestion_control = reno cubic bbr

则表明成功。

通过 lsmod

若执行

1
lsmod | grep bbr

返回形如

1
tcp_bbr                16384  1

则表明成功。


参考文章:#为 VPS 加速度# CentOS 7 安装 bbr 教程

拓展阅读:KcpRun 服务端一键安装脚本

本文更新于 2018 年 6 月:
BBR 的效果是非常显著的,只要带宽足够,流畅播放 YouTube 上 4320p 的视频毫无压力。可以通过 Timestorm Films 发布的超高分辨率视频测试效果~