什么是BBR
TCP BBR是谷歌出品的TCP拥塞控制算法,BBR目的是要尽量跑满带宽,并且尽量不要有排队的情况。BBR可以起到单边加速TCP连接的效果。替代锐速再合适不过,毕竟免费。
Google提交到Linux主线并发表在ACM queue期刊上的TCP-BBR拥塞控制算法。继承了Google“先在生产环境上部署,再开源和发论文”的研究传统。TCP-BBR已经再YouTube服务器和Google跨数据中心的内部广域网(B4)上部署。由此可见出该算法的前途。
TCP-BBR的目标就是最大化利用网络上瓶颈链路的带宽。一条网络链路就像一条水管,要想最大化利用这条水管,最好的办法就是给这跟水管灌满水。
BBR解决了两个问题:
- 再有一定丢包率的网络链路上充分利用带宽。非常适合高延迟,高带宽的网络链路。
- 降低网络链路上的buffer占用率,从而降低延迟。非常适合慢速接入网络的用户。
项目地址:https://github.com/google/bbr
安装BBR
BBR是内嵌在Linux内核中的,目前Linux Kernel 4.9已加入了该算法,所以安装新版本内核开启BBR即可享用。
- Debian/Ubuntu
下面简单讲述如何在Debian/Ubuntu 64bit系统中升级kernel开启TCP BBR拥塞控制算法。
下载最新内核
最新内核查看这里:http://kernel.ubuntu.com/~kernel-ppa/mainline/
1 | $ cd ~;mkdir linux49; cd linux49 |
开始安装
1 | $ dpkg -i *.deb |
以上用于64位系统,其它可以自行下载Index of /~kernel-ppa/mainline/v4.9 对应版本。
删除其余内核(非必需)
1 | $ dpkg -l|grep linux-image |
更新grub系统引导文件并重启
1 | $ update-grub |
重启系统并查看内核
1 | $ reboot |
- Centos/RHEL
通过使用ELRepo源的方式在CentOS中安装最新版kernel。
CentOS 6
下载内核并安装
1 | $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
查看内核是否安装成功
1 | $ rpm -qa | grep kernel |
更新grub系统引导文件并重启
1 | $ sed -i 's:default=.*:default=0:g' /etc/grub.conf |
CentOS 7
下载内核并安装
1 | $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
查看内核是否安装成功
1 | $ rpm -qa | grep kernel |
更新grub系统引导文件并重启
1 | $ egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \' #删除其余内核(非必需) |
Google TCP BBR一键安装脚本
- 适用于Centos6 32位和64位
1 | $ wget --no-check-certificate https://github.com/52fancy/GooGle-BBR/raw/master/BBR.sh && sh BBR.sh |
- 适用于Centos 6/7 仅适用64位)
1 | $ wget -O- http://soft.wellphp.com/scripts/install_bbr_centos.sh | bash |
开启BBR
安装内核后从刚安装的内核启动,然后执行
1 | $ echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf |
保存生效
1 | $ sysctl -p |
验证是否安装成功
执行以下命令,如果结果中有bbr则证明你的内核已开启bbr。
1 | $ sysctl net.ipv4.tcp_available_congestion_control |
开启BBR后效果图
关闭bbr
1 | $ sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf |
执行完上面的代码,使用reboot
重启后才能关闭bbr,重启后再用下面的查看bbr状态代码,查看是否关闭了。
1 | $ lsmod | grep bbr |
如果结果中没有bbr, 则证明你的内核已关闭bbr
参考文档
http://www.google.com
https://zhuanlan.zhihu.com/p/24418274
http://blog.flydust.space/tcp-bbr/