配置启用 BBR 拥塞控制算法
摘要 TL;DR
近期重新配置了 Google Cloud 的服务器,安装了 Ubuntu 18.04 LTS,由于 Linux Kernel 4.9 以上版本就已经加入了对 BBR (Bottleneck Bandwidth and RTT) 的支持,因此整体配置过程相较以前就更为简单了。因此做一个简单的记述。
对于由 Google 公布的 BBR1 已经为人熟知。一般在使用的拥塞控制算法多为 CUBIC 和 Reno,这些算法更多的是基于拥塞检测,在拥塞出现后进行补救,会导致网络流量出现瓶颈,相较而言,BBR 基于主动探测和预防,更充分地使用带宽资源,提高网络吞吐量并降低延迟。Google 称 BBR 帮助 YouTube 的网络吞吐量提升了 4%,在某些国家更是超过了 14%。2
想要详细了解有关 BBR 的技术文档和算法细节,可以查看 IETF 的文档 “draft-cardwell-iccrg-bbr-congestion-control-00” 和发表在 ACM Queue 上的研究论文 “BBR: Congestion-Based Congestion Control”。
在启用 BBR 之前,再次确认 Linux Kernel 版本高于 4.9。
> uname -r
在我的服务器上,显示结果为 4.15.0-1028-gcp
,可以进行接下来的操作。
首先,修改内核参数,将默认的队列机制更改为 fq
,将 TCP 拥塞控制算法设置为 bbr
,并保存。
> sudo echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
> sudo echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
> sudo sysctl -p
接下来,检查并确认该修改已生效。
> sudo sysctl net.core.default_qdisc
net.core.default_qdisc = fq
> sudo sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
当输出中 net.core.default_qdisc
为 fq
且 net.ipv4.tcp_available_congestion_control
包含 bbr
即表示内核已启用 BBR 算法。
最后验证 BBR 是否已经启动。结果应如下。
> lsmod | grep bbr
tcp_bbr 20480 7
-
google/bbr on GitHub: https://github.com/google/bbr ↩
-
TCP BBR congestion control comes to GCP – your Internet just got faster: https://cloud.google.com/blog/products/gcp/tcp-bbr-congestion-control-comes-to-gcp-your-internet-just-got-faster ↩