BBR是由Google开发的新TCP拥塞控制算法,使TCP连接在恶劣的网络链路上有更好的带宽表现。通常被用来在翻墙的时候加速。

EC2上的Amazon Linux虽然目前内核已经是4.9,但是由于里面并没有BBR模块,所以无法直接使用,因此需要自己编译一个带BBR的内核来用。

1. 准备编译环境

使用如下命令准备编译环境

sudo yum groupinstall -y "Development Tools" xmlto asciidoc openssl-devel elfutils-devel zlib-devel binutils-devel newt-devel "perl(ExtUtils::Embed)" audit-libs-devel numactl-devel pciutils-devel

2. 下载并安装内核源码

先看一下目前自己内核是什么版本

uname -r

接下来执行如下命令,将后面的XX部分替换为刚才看到的你当前的内核版本。注意:后文所有命令中版本号里的XX-XX.XX都为你所使用的版本

get_reference_source -p kernel-4.9.XX-XX.XX

当出现Are these parameters correct? Please type 'yes' to continue:的提示时,确认一下内核的版本,无误的话,输入yes回车。开始下载内核源码。

下载完毕后解包(安装源代码)

sudo rpm -ivh /usr/src/srpm/debug/kernel-4.9.XX-XX.XX.amzn1.src.rpm

然后可以看一下我们要的版本的内核源代码是否正确安装了

ls /usr/src/rpm/SOURCES/
ls /usr/src/rpm/SPECS/

3. 修改编译配置,编译内核

修改/usr/src/rpm/SOURCES/config-generic文件,
将这一行

# CONFIG_TCP_CONG_BBR is not set

修改为

CONFIG_TCP_CONG_BBR=m

保存。

为了避免把原有内核覆盖掉,我们给编译的内核换个名字,修改/usr/src/rpm/SPECS/kernel.spec文件,将第一行定义版本号的

%define buildid XX.XX

改为

%define buildid XX.XX.bbr

保存。

然后使用命令

sudo rpmbuild -bb /usr/src/rpm/SPECS/kernel.spec

开始编译内核,编译过程比较漫长,请耐心等待。

4.安装内核,配置BBR

编译完成后,使用如下命令安装内核(记得把XX-XX.XX替换为你用的内核版本号)

sudo rpm -ivh /usr/src/rpm/RPMS/x86_64/kernel-4.9.XX-XX.XX.bbr.amzn1.x86_64.rpm

修改/etc/sysctl.conf文件,加入如下两行:

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

重启系统

sudo reboot

5. 检查是否成功开启BBR

重启好后通过如下命令检查是否已经开启BBR

cat /proc/sys/net/ipv4/tcp_congestion_control

开启成功的话,应该会有bbr的字样