网上有不少BBR版本和测试文章,到底该选择哪个BBR是挺纠结。测试文章也都不严谨,弄个国外VPS+一键bbr脚本+一键测速脚本完事,这样测试结果肯定不准。VPS是虚拟机和共享带宽,本身性能就受到物理机资源分配的波动影响,以及VPS到本机这么远的不可控网络链接;一键测速脚本是点对点传输,而实际应用不管是网站还是提供什么服务,都是一对多,场景差别就很大。
较科学专业的文章,有:
- 《[译] [论文] BBR:基于拥塞(而非丢包)的拥塞控制(ACM, 2017)》https://arthurchiao.art/blog/bbr-paper-zh
- 《从流量控制算法谈网络优化 – 从 CUBIC 到 BBRv2 算法》https://aws.amazon.com/cn/blogs/china/talking-about-network-optimization-from-the-flow-control-algorithm/
- 《测试 TCP BBR 对网络丢包的改善效果》https://blog.inkuang.com/2020/322/
拥塞控制算法
cubic
linux自带默认拥塞控制算法。
BBR
BBR(Bottleneck Bandwidth and Round-trip propagation time),是谷歌开发的一种TCP拥塞控制算法。简单粗暴的理解就是数据流量的交通管理:当公路不再塞车的时候,每辆车自然就能保持较快的车速了。
BBR2
谷歌未正式发布,仍处于预览版。TCP BBR v2 Alpha/Preview Release: https://github.com/google/bbr/tree/v2alpha
随着BBRv2的出现,Dropbox 已经在其Dropbox Edge Network上进行了试用。在这篇博客中深入讨论了BBRv2的实践,值得一读。
Evaluating BBRv2 on the Dropbox Edge Network
这篇文章的结论对于BBRv2有很高的评价,特摘录出来:
“在我们的测试中,BBRv2显示了以下特性:
- 对于网速较低的用户来说,带宽可以与CUBIC媲美。
- 对于网速较高的用户来说,带宽可以与BBRv1媲美。
- 丢包率比BBRv1低4倍;但仍然比CUBIC高2倍。
- 传输中的数据比BBRv1低3倍;但略低于CUBIC。
- RTTs较BBRv1低;但仍然比CUBIC高。
- 与BBRv1相比,RTT具有更高的公平性。
总的来说,BBRv2在BBRv1基础上有了很大的改进,而且在需要更高带宽的情况下,它更接近于成为Reno/CUBIC的完全替代品。添加实验性的ECN支持,我们甚至可以看到他可以成为Datacenter TCP (DCTCP)的完全替代者。”
https://aws.amazon.com/cn/blogs/china/talking-about-network-optimization-from-the-flow-control-algorithm/
BBRPLUS
CSDN 网友 dog250 针对原版 BBR 进行修改而来的加强版。他的github最后更新是2021.08.21。
队列算法
pfifo_fast
linux系统自带默认先进先出队列算法。
CAKE
“CAKE (Common Applications Kept Enhanced) is a shaping queue discipline which uses both AQM and FQ. It combines COBALT, which is an AQM algorithm combining Codel and BLUE, a shaper which operates in deficit mode, and a variant of DRR for flow isolation.
https://portal.productboard.com/4khnb1asz4x5zdcj5edstax8/c/31-cake-and-fq-pie
“CAKE(Common Applications Kept Enhanced)是一种同时使用 AQM 和 FQ 的整形队列规则。它结合了 COBALT,COBALT 是一种结合了 Codel 和 BLUE 的 AQM 算法,一种以赤字模式运行的整形器,以及一种用于流隔离的 DRR 变体.
cake适合用在路由器上,会尽量抢占宽带,也会用队列系统帮路由器上的应用分配宽带,比如平衡下载与流媒体。
https://la4ji.blogspot.com/2020/12/xamod58-cakefq-pie.html
PIE
“Proportional Integral controller-Enhanced (PIE) is a control theoretic active queue management scheme. It is based on the proportional integral controller but aims to control delay.
The main design goals are
- Low latency control
- High link utilization
- Simple implementation
- Guaranteed stability and fast responsiveness”
https://portal.productboard.com/4khnb1asz4x5zdcj5edstax8/c/31-cake-and-fq-pie
“Proportional Integral controller-Enhanced (PIE) 是一种控制理论主动队列管理方案。它基于比例积分控制器,但旨在控制延迟。
主要设计目标是
低延迟控制
链路利用率高
简单实现
保证稳定性和快速响应”
FQ-PIE
FQ-PIE (Flow Queuing with Proportional Integral controller Enhanced) is a queuing discipline that combines Flow Queuing with the PIE AQM scheme. FQ-PIE uses a Jenkins hash function to classify incoming packets into different flows and is used to provide a fair share of the bandwidth to all the flows using the qdisc. Each such flow is managed by the PIE algorithm.
https://man7.org/linux/man-pages/man8/tc-fq_pie.8.html
FQ-PIE(Flow Queuing with Proportional Integral controller Enhanced)是一种将流队列与 PIE AQM 方案相结合的排队规则。 FQ-PIE 使用 Jenkins 哈希函数将传入的数据包分类到不同的流中,并用于为使用 qdisc 的所有流提供公平的带宽份额。每个这样的流都由 PIE 算法管理。
到底选哪个
追求稳定:BBR+FQ
追求性能:BBR2+FQ_PIE