BBR、BBR2、BBRPLUS、FQ、CAKE如何选择

网上有不少BBR版本和测试文章,到底该选择哪个BBR是挺纠结。测试文章也都不严谨,弄个国外VPS+一键bbr脚本+一键测速脚本完事,这样测试结果肯定不准。VPS是虚拟机和共享带宽,本身性能就受到物理机资源分配的波动影响,以及VPS到本机这么远的不可控网络链接;一键测速脚本是点对点传输,而实际应用不管是网站还是提供什么服务,都是一对多,场景差别就很大。

较科学专业的文章,有:

BBR、BBR2、BBRPLUS、FQ、CAKE如何选择插图

Table of Contents

拥塞控制算法

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显示了以下特性:

  1. 对于网速较低的用户来说,带宽可以与CUBIC媲美。
  2. 对于网速较高的用户来说,带宽可以与BBRv1媲美。
  3. 丢包率比BBRv1低4倍;但仍然比CUBIC高2倍。
  4. 传输中的数据比BBRv1低3倍;但略低于CUBIC。
  5. RTTs较BBRv1低;但仍然比CUBIC高。
  6. 与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