在Oracle Cloud美西机房Ubuntu 18.04LTS系统中开启Google BBR的正确姿势

Oracle美西地区机房线路本身并不差,但相比其日韩地区机房得天独厚的地理优势,在中国大陆用户眼中就不那么有竞争力了。要改善美西地区机房到中国大陆的网速表现,最佳实践就是启用Google BBR算法,从系统软层面的提升数据传输效率。Oracle云服务器免费提供的Ubuntu Linux操作系统最高版本是18.04LTS bionic,低于默认开启Google BBR的19版disco。网上现有的一些教程要么使用一键包,要么虽能成功但方法不合规范[1]。想要在Linux/UNIX环境下以正确的方式开启BBR就只能自己动手了。

常见的网络教程往往是在 /etc/sysctl.conf 配置文件中增加如下两行参数信息,再执行sysctl -p来更新配置。

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

在Linux操作系统中进行配置文件修改时,通常将不同功能配置组分开处理,在Oracle Cloud服务器上提供的内核为4.15版的Ubuntu 18.04LTS上,正确的做法是在 /etc/sysctl.d 下新建一个文件(见附A),如60-bbr.conf,并在这个文件中增加以上两行配置信息,随后用命令sudo service procps restartsudo service procps reload,或sudo invoke-rc.d procps restart来更新配置[2]。增加两行配置参数后,直接使用sudo sysctl -p是无效的,在这种情况下,应当添加具体文件的路径,如sudo sysctl -p /etc/sysctl.d/60-bbr.conf[3]

至此,给美西机房的Oracle云服务器[4]提速的工作完成,效果比网上介绍的还好。打开视频流数据信息查看连接速度,同一台机器之前只有500多,启用BBR算法后最高飙至13000+[5]

以下是Youtube上同一视频在启用前后的数据传输表现(上前下后,点击可查看大图)。

Oracle-Cloud-before-BBR.png

Oracle-Cloud-after-BBR.png

有兴趣的网友也可以用下面这段视频尝试一番。

8k or 4K 60fps HDR NATURE ultra hd for |Ghost Towns

要知道从前即便是用CN2GIA的线路也极少看到一万以上的数值,而现在Oracle的美西机房竟就能给出如此的表现,不得不佩服Google的算法研究人员了。

附A:/etc/sysctl.d 目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ubuntu@instance-20190924-1816:/etc/sysctl.d$ ls -lah
total 60K
drwxr-xr-x 2 root root 4.0K Sep 29 19:39 .
drwxr-xr-x 95 root root 4.0K Sep 24 09:13 ..
-rw-r--r-- 1 root root 77 Jan 17 2018 10-console-messages.conf
-rw-r--r-- 1 root root 490 Jan 17 2018 10-ipv6-privacy.conf
-rw-r--r-- 1 root root 726 Jan 17 2018 10-kernel-hardening.conf
-rw-r--r-- 1 root root 257 Jan 17 2018 10-link-restrictions.conf
-rw-r--r-- 1 root root 153 Nov 23 2018 10-lxd-inotify.conf
-rw-r--r-- 1 root root 1.2K Jan 17 2018 10-magic-sysrq.conf
-rw-r--r-- 1 root root 509 Jan 17 2018 10-network-security.conf
-rw-r--r-- 1 root root 1.3K Jan 17 2018 10-ptrace.conf
-rw-r--r-- 1 root root 506 Jan 17 2018 10-zeropage.conf
-rw-r--r-- 1 root root 62 Sep 29 19:39 60-bbr.conf
-rw-r--r-- 1 root root 185 Aug 14 01:02 99-cloudimg-ipv6.conf
lrwxrwxrwx 1 root root 14 Sep 4 20:59 99-sysctl.conf -> ../sysctl.conf
-rw-r--r-- 1 root root 519 Jan 17 2018 README
-rw-r--r-- 1 root root 168 Aug 14 01:28 scsi-log-level.conf

附B:README文件内容

1
2
3
4
5
6
7
8
9
This directory contains settings similar to those found in /etc/sysctl.conf.
In general, files in the 10-*.conf range come from the procps package and
serve as system defaults. Other packages install their files in the
30-*.conf range, to override system defaults. End-users can use 60-*.conf
and above, or use /etc/sysctl.conf directly, which overrides anything in
this directory.

After making any changes, please run "service procps start" (or, from
a Debian package maintainer script "invoke-rc.d procps start").

  1. Oracle Cloud的服务器系统模板据说与其它主机商提供的引导模式不太一样,全球主机交流论坛上报出过某些一键包执行完就造成内核损坏、无法启动的结果;一些国内国外的教程(如Rat’s BlogLinuxBabe)均通过直接修改 /etc/sysctl.conf 后再以一条sysctl -p来更新配置使BBR模块生效,却非Linux/UNIX下正确严谨的方法。 ↩︎

  2. 系统内的说明文档(见附B)指导用service procps start来更新配置,但据How do I reload sysctl from sysctl.d directory,正确的命令应当是sysctl -p /etc/sysctl.d/*.conf ↩︎

  3. Ubuntu 18.04LTS下sysctl的官方说明 ↩︎

  4. 有关申请Oracle Always Free云服务器可参考这里的图文指导 ↩︎

  5. 在这次测试中,达到13000以上的数据应存在较为明显的额外因素,比如同节点上其它主机和网络的影响,但从后来的几次测试来看,从网络状态较差情况下的数百到非高峰期的五千以上足以说明BBR算法的强劲之处了。 ↩︎