知識庫
BBR 之前,主流的 TCP 拥塞控制算法都是基于丢包(loss-based)设计的, 这一假设最早可追溯到上世纪八九十年代,那时的链路带宽和内存容量分别以 Mbps 和 KB 计,链路质量(以今天的标准来说)也很差。
三十年多后,这两个物理容量都已经增长了至少六个数量级,链路质量也不可同日而语。特别地,在现代基础设施中, 丢包和延迟不一定表示网络发生了拥塞,因此原来的假设已经不再成立。 Google 的网络团队从这一根本问题出发,(在前人工作的基础上) 设计并实现了一个基于拥塞本身而非基于丢包或延迟的拥塞控制新算法,缩写为 BBR。
简单来说,BBR 通过应答包(ACK)中的 RTT 信息和已发送字节数来计算 真实传输速率(delivery rate),然后根据后者来调节客户端接下来的 发送速率(sending rate),通过保持合理的 inflight 数据量来使 传输带宽最大、传输延迟最低。另外,它完全运行在发送端,无需协议、 接收端或网络的改动,因此落地相对容易。
Google 的全球广域网(B4)在 2016 年就已经将全部 TCP 流量从 CUBIC 切换到 BBR, 吞吐提升了 2~25 倍;在做了一些配置调优之后,甚至进一步提升到了 133 倍(文中有详细介绍)。
Centos 7 如何安装BBR
安装elrepo并升级内核
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
安装完成后使用下面命令查看当前已安装的内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
返回
0 : CentOS Linux (5.13.2-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.25.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-1cfc3bd119f34aa79df425015ceaaeee) 7 (Core)
把CentOS Linux (5.13.2-1.el7.elrepo.x86_64) 7 (Core)内核设置为默认
grub2-set-default 0
重启
reboot
查询内核版本
uname -r
输出 4.9以上内核即可 我的是 5.13.2-1.el7.elrepo.x86_64
设置BBR
echo 'net.core.default_qdisc=fq'| sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr'| sudo tee -a /etc/sysctl.conf
sudo sysctl -p
验证bbr是否已经开启
lsmod | grep bbr
返回形如如下形式的信息即成功
tcp_bbr 20480 2
- 0 Users Found This Useful