关于博客《BBR evaluation at a large CDN》和 《When to use and not use BBR》的理解

《BBR evaluation at a large CDN》

解决的问题

通过在 (CDN) ((Content Delivery Network)) 的环境中对 (BBR) 算法进行评估,量化其带来的好处以及对网络流量的影响,从而帮助内容提供商选择正确的拥塞控制算法。

方法

使用多个策略对 (BBR) 进行评估,先在一个 (POP) ((Points of Presence))上进行一个小规模的 (BBR) 测试(a large wireless provider, a large wireline provider, PoP-to-PoP and intra-PoP traffic),最后进行了一个全面的 (POP) 测试。

该作者使用了两个评测指标,一个是吞吐量,一个是 (TCP) 流的完成时间,之所以采用两个评估指标,是由于在发送目标数据大小很小的时候,再去用吞吐量去评估,可能不够精确,存在很多噪声。因此,作者定量当发送数据大小小于3(MB) 时候,追踪流的完成时间,是更好的指标;当发送数据大小大于3(MB) 时候,使用吞吐量进行衡量。

A large wireless provider
img

在无线提供商的环境中,启用 (BBR) 算法有了一个明显的提高(6%-8%),如上图所示,(test) 蓝线代表 (BBR)(control) 红线代表 (CUBIC) 。对于左图,我们可以发现,当在垂直蓝线时刻,激活 (BBR) 算法之后,(BBR) 算法的吞吐量很明显高于 (CUBIC) 算法的吞吐量。对于右图,在当 (CDF) ((cumulative distribution function))概率相同的时候,即同一纵坐标时,(BBR) 算法的吞吐大于 (CUBIC) 算法的吞吐量。

不过作者认为,由于无线环境中,丢包率较高,因此并不能确定该包的丢失是由于拥塞所引起的,从而对 (BBR) 算法的实验结果也有一定的质疑。

A large wireline provider
img

作者在有线环境中,根据不同发送数据的大小下所完成传输的时间对 (BBR) 做了评估,如上图所示,我们可以看见 (BBR) 在发送同等大小的数据时,抖动很小,并且完成的时间相比于 $CUBIC $ 算法也更短。不过,也会存在和 (CUBIC) 算法类似的抖动。总体而言,(BBR) 的性能是很好的。

不过作者认为,(BBR) 算法的增益,是从 (POP-to-Client) 的聚合视图所得出来的,无法确定该算法是否对所有的(TCP) 流都有增益。因此,进行了更加细化的评估。

PoP-to-PoP and intra-PoP traffic
img

作者更为细致的在 (poP-to-poP and intra-poP) 中使用 (BBR) 算法进行了实验评估,从上图我们可以发现,当在垂直蓝线时刻处激活 (BBR) 算法后,(BBR) 的吞吐量远不如 (CUBIC) 算法的吞吐量。

为什么在(POP-to-Client)(poP-to-poP and intra-poP) 中,(BBR) 算法的性能会有如此大的差异呢?

作者后面通过服务器日志发现,(BBR) 在较高 (RTT) 和 重传率下会有很好的性能表现,而 (poP-to-poP and intra-poP) 中,由于是低 (RTT) 和低 重传率,因而比较适合 (CUBIC)

Full PoP test
img

作者最后进行了一次完整的 (PoP) 测试,使用了两个 (ASes) ((Autonomous Systems)),如上右图所示,两个网络的 (RTT) 都比较高,其中 (ASN1) 的重传率较高,(ASN2) 的重传率较低。从上图左边两幅 关于(throughput)(CDF) 可知,在关于 (ASN1)(CDF) 图中,(BBR) 的性能较好,而在关于 (ASN2)(CDF) 图中,(CUBIC) 的性能较好。因此,可以发现,即便在 (RTT) 较高的环境中,(BBR)也只适用于 重传率较高的情况下,才能有较好的性能表现。

接下来作者想要评测在(ASN1)(BBR) 是否对于所有的连接都有吞吐量的提升。

img

从上图分析可知,(BBR) 算法也只有刚开始的时候,性能优于 $CUBIC $ 算法。

结果分析

作者认为原因还是归根于 (BBR) 的公平性问题上。

  1. (CUBIC)(BBR)

    在一个高缓存的情况下,中间设备(路由器等)可能会存在排队的情况,而 (BBR) 的的估计的(RTT) 可能会增加。而 (CUBIC) 则是基于丢包来判断拥塞,因此会倾向于填满缓存,导致 (CUBIC)能够抢占更多的带宽,从而表现较好。而在一个浅缓存的情况下,缓存容易被填满,导致缓存溢出,从而容易丢包,(CUBIC) 算法会轻易去降低自己的拥塞窗口,因此 (BBR) 能够获得更多带宽。

  2. (BBR)(BBR)

    当两个不同 (RTT) 的 流竞争共享带宽时,(RTT) 较高的流可能会估量得到更高的最小 (RTprop),因此会获得更大的 (BDP),从而占有更多的带宽份额。

在实验室中去复现结果

img

作者在虚拟机上搭建了测试平台环境,在边缘服务器上去模拟不同流量类别(Client、P2P、Intra-PoP)的方法。

img

作者重现了 (BBR) 在不同类别下的行为表现,在 (client-smallbw) 情况下 (BBR) 流完成的时间比 (CUBIC) 流所完成的时间更短;由于 (client) 环境为 较高延迟,丢包率较高,因此 (BBR) 性能表现更好。

所以在(CDN) 上进行 (BBR) 的任何部署都必须意识到它可能对混合流类型产生更广泛的影响。

结论

(BBR)(poP-to-poP and intra-poP) 这种低重传率的环境下,会存在降低吞吐量的风险。但是在客户端表现良好,所以可以从 (wireless providers) 开始去启用 (BBR) 拥塞控制算法,因为无线环境中存在浅缓存和丢包率较高的情况,所以(BBR) 算法会很有优势。

首先CUBIC与BBR共存于共享链路,在瓶颈带宽被占满之后,CUBIC会继续发包填充队列,造成BBR被动排队。由于BBR的被动排队,所以rtt也会显著上升。但是这在短时间内不会影响BBR的发包,因为BBR的测量RTT的是10秒内的最小RTT。也就是说,只要BBR能够坚持10s不划走,CUBIC一旦丢包就会出现乘性减窗。BBR在回复到干净状态的同时也可以迅速占据空闲的带宽,从而达到压制CUBIC的效果。而相反在另一种情况,如果队列足够深,rtt足够长,足以让CUBIC填充10s还不满时,CUBIC丢包前BBR就退到4个包发送速度了,这反而说CUBIC压制了BBR。

所以这里可以顺理成章地得出结论结论是,浅队列时,CUBIC受BBR的影响比较小,深队列时,BBR会受到CUBIC的影响。

《When to use and not use BBR》

这一篇博客主要也是分析了 (BBR) 地公平性问题,同样认为 (BBR) 算法比较适用于浅缓存,重传率较高地情况下,不过作者对丢包率做了定量分析。

image-20200924143144110

当丢包率超过20%的时候,(BBR)算法的吞吐量有一个断崖式的下跌,而右边的图说明了这个断崖点是与 (pacing\_gain)有密切关系的,所以作者认为(BBR) 的性能对参数是非常敏感的,可以使用参数的自动调整,以应对不同的网络环境。

原文

《When to use and not use BBR》

《BBR evaluation at a large CDN》

原文地址:https://www.cnblogs.com/huang-xiang/p/13847440.html