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的字样