启用TCP BBR 拥塞控制算法

发布 : 2019-04-26 分类 : 杂类 浏览 :

BBR 是谷歌在2016年提出的一种新的拥塞控制算法,已经在Youtube服务器和谷歌跨数据中心广域网上部署,据Youtube官方数据称,部署BBR后,在全球范围内访问Youtube的延迟降低了53%,在时延较高的发展中国家,延迟降低了80%。目前BBR已经集成到Linux 4.9以上版本的内核中。

BBR算法不将出现丢包或时延增加作为拥塞的信号,而是认为当网络上的数据包总量大于瓶颈链路带宽和时延的乘积时才出现了拥塞,所以BBR也称为基于拥塞的拥塞控制算法(Congestion-Based Congestion Control)。
BBR算法周期性地探测网络的容量,交替测量一段时间内的带宽极大值和时延极小值,将其乘积作为作为拥塞窗口大小(交替测量的原因是极大带宽和极小时延不可能同时得到,带宽极大时网络被填满造成排队,时延必然极大,时延极小时需要数据包不被排队直接转发,带宽必然极小),使得拥塞窗口始的值始终与网络的容量保持一致。
由于BBR的拥塞窗口是精确测量出来的,不会无限的增加拥塞窗口,也就不会将网络设备的缓冲区填满,避免了出现Bufferbloat问题,使得时延大大降低。

开启 TCP BBR 拥塞控制算法

下载更换内核

1
2
3
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

查看内核是否安装成功

1
rpm -qa | grep kernel

删除旧内核(可选)

1
rpm -ev 旧内核

更新 grub 系统引导文件并重启

1
2
3
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0
reboot

开机后 uname -r 看看是不是内核 >= 4.9

执行 lsmod | grep bbr,如果结果中没有 tcp_bbr 的话就先执行:

1
2
sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee --append /etc/modules-load.d/modules.conf

执行:

1
2
echo "net.core.default_qdisc=fq" | sudo tee --append /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee --append /etc/sysctl.conf

保存生效

1
sudo sysctl -p

执行

1
2
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

执行 lsmod | grep bbr,看到有 tcp_bbr 模块即说明 BBR 已启动

本文作者 : zhouinfo
原文链接 : http://blog.zhouinfo.site/2019/04/26/%E5%90%AF%E7%94%A8TCP-BBR-%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95/
版权声明 : 本博客所有文章除特别声明外,均采用 CC Apache License 2.0 许可协议。转载请注明出处!
留下足迹