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 | sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
安装完成后,查看已安装的内核:
1 | rpm -qa | grep kernel |
输出结果大致如下:
1 | [root@host ~]# rpm -qa | grep kernel |
如果有看到类似 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 | [root@host ~]# sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \' |
输出的项目从 0 开始编号。以上面的结果为例,4.10 的内核版本位于第一个,那么就设置默认启动项为 0:
1 | sudo grub2-set-default 0 |
然后 reboot
重启系统!重启后,再次执行 uname -r
检查内核版本是否顺利升级。
BBR, Get Daze~!
执行如下命令来启用 BBR:
1 | echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf |
可用如下命令检查当前可用的 TCP 拥塞控制算法:
1 | [root@host ~]# sudo sysctl net.ipv4.tcp_available_congestion_control |
执行如下命令检查 BBR 是否启动:
1 | [root@host ~]# sudo sysctl -n net.ipv4.tcp_congestion_control |
如果返回的模块中有 tcp_bbr
,那么就顺利启用了 BBR!