TCP BBR 相信大家都不陌生了,这是一套由 Google 所设计并发布的 TCP 拥塞控制算法。由于锐速迟迟没有提供对新内核的支持,再加上自 Linux 4.9内核开始默认支持 TCP BBR,它开始逐渐成为服务器单边加速的首选。而 BBRplus 则是 CSDN 网友 dog250 针对原版 BBR 进行修改而来的加强版。而 BBRv2 则是原版 BBR 的后续迭代版本,目前仍然处于测试阶段。

不过面对种类繁多的 BBR 衍生版本,网络上却很少能够看到对他们的横向对比评测。现有的一些评价也往往都基于经验和主观印象,或是变量不可控的异地测试。于是 reizhi 决定抽空对 BBR BBRplus 和 BBR2 进行本地横向测试一探究竟。

**

  1. 测试环境

**
使用 VMware workstation 开启两台 Debian 虚拟机,其中 A 机为服务器,通过 Nginx 架设 Web 服务并放置 100mb 文件供下载测速;B 机为客户机,使用 wget 进行下载。两台虚拟机通过虚拟内部网络连通,且均位于 SSD 固态硬盘上。

**

  1. 测试方法

**
通过 tc 命令将 A 机网卡设置为延迟 150ms ± 15ms(随机波动),丢包8%用于模拟一般化的网络环境。安装不同 BBR 分支加速后,在 B 机通过 wget 下载 100MB 的测试文件若干次(≥5次),并取最快3次的平均速度。

**

  1. 测试结果

**
2020-03-24_001332.png

我们直接来看测试结果,目前仍处于测试版本的 BBRv2 是本次测试中最慢的,速度与4.19内核默认的 cubic 算法几乎相同。而令人意外的是,BBRplus 虽然显著快于原版 BBR,却被5.5内核的 BBR 远远甩在身后。
测试中让人非常意外的是,BBRplus 分支在启动下载后速度攀升非常迅速。但不知何种原因,在下载进行到50% ~ 60%左右时,速度会骤然回落。下图完整的记录了 BBRplus 4.14.129 的速度变化情况。
129bbrplus.gif

起初 reizhi 以为是测试误差或其他原因,但经过了重启,重装系统,重装内核,手动编译内核开启 BBRplus 等操作后均未改善。在同等测试环境下,BBR 5.5 的速度表现就要稳定得多。
5.5bbr.gif

虽然 BBR 5.5.10 起步加速和峰值速度都不如 BBRplus,但在下载全程中均保持了非常不错的速度,最终整体耗时远低于 BBRplus。这是否意味着 BBRplus 更适合于突发小流量而 BBR 则擅长大流量持续吞吐呢?

**

  1. 附注

**
在本次测试中同样也尝试了锐速及 Net-speeder,不过与 BBR2 类似的,他们的全程速度均只有2位数,在此便没有将结果包纳进来。

bbr2.gif
以上是 BBR2 的速度情况,由于速度过慢未进行完整下载。

作者:https://roov.org/2020/03/bbr-bbrplus-bbr2/