BBR 与 queuing

BBR 为何无法兑现 no queuing 的承诺?

首先明确一个事实:

  • 很多条不同算法的流混部在现代高带宽异构网络上,单流行为几乎改变不了多流复用带宽的统计特征。

BBR 突然采集到的小 bandwidth,它 10 rounds 的 max-filter 轮子足够大,很容易越过这个坑,BBR 针对凹面的减震效果很不错。但 BBR 有个问题,如果突然采集到大 bandwidth,它就记住了,即使是个噪点,也要维持 10 rounds,该时间段内 BBR 将持续 overestimate bandwidth,从而持续 queuing。

多算法混部,多流复用带宽的场景,突然采集到大 bandwidth 的概率非常大,至少和突然采集到小 bandwidth 的概率相同,比如突然有大象流退出,该流将出让很大带宽,但这些带宽又会瞬间被多条流淹没,跟突然间的短突发会瞬间消耗大量 buffer 一样。

无论凹面噪点,还是凸面噪点,都应被平滑。BBR 有平滑凹面噪点的能力,却没有平滑凸面噪点的能力。因此 BBR 在多算法多流统计复用场景下,会持续反直觉 queuing,和 BBR paper 上描述的并不一致。

在 BBR 单流或者 BBR 多流场景,paper 描述的 BBR 动力学完全可确保最终的收敛点 no queuing,但多算法多流场景, BBR 不但不能越过反而会记住凸面噪点,overestimate bandwidth 会叠加。

比如噪点 A 被 max-filter 记住,BBR 将以 overestimate 的 A 作为基准 pacing rate,如果又采集到了噪声 A + d,则 A + d 将会成为新的基准 pacing rate,至少在 10 rounds 内有效,以此类推,因此 BBR 的 overestimate 是可叠加的。这很无奈。

怎么办?比较了然的两点:

  • 用采集 bandwidth 的移指平均作为 max-filter 的输入,或用 max-filter 的输出与当前采集 bandwidth 做移指平均。移指平均可平滑噪点,probe 带宽虽慢,但稳一些。
  • ProbeBW 状态下,不是 probe 到的带宽,即使它更大,也不输入 max-filter,只有 up probe 获得的额外带宽才做 maxbw 更新。外部噪声输入很容易打乱内部状态机判定。

再次看到,BBR 也是一个 paper 算法,只是它恰好在大多数实际场景下吞吐表现比 CUBIC 好,它才好。所有针对 BBR 的二次优化,也都是 paper 算法,没有一个能够逃脱 Why We Don’t Know How To Simulate The Internet 的魔咒。

不要指望调整一条流的 cwnd 或者 pacing rate,就能对整条链路的拥塞状态产生影响,这并不是你调整的这条流在和另一条流竞争,而是千百条流在博弈,所有流的整体行为只能产生一个统计分布的效果。

当然,也不要对实施任何算法的任何流的任何行为做假设,无论该行为是合理的,还是不合理的,是意料中的,还是意料外的。所有的策略都要基于统计特征,而不是算法的假设。

现在的网络带宽比十几年前以及更早时候高几个量级,对于拥塞控制的理解需做如下改变:

  • 单流很难填满带宽,绝大多数流量都是 app-limited 或 rwnd-limited,不再 cwnd-limited。
  • 延时抖动几乎不是单流造成,单流拥塞控制策略调整对整体统计数据的平均分布影响微乎其微。
  • 通过激进发送挤兑带宽的收益越来越小。
  • 高带宽可能是 bufferbloat 挤兑出来的高延时不良带宽,好像通货膨胀都取不到钱,谁发动的人多,取到的钱就多,但代价也大。

浙江温州皮鞋湿,下雨进水不会胖。

原文链接: https://blog.csdn.net/dog250/article/details/125921782

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    BBR 与 queuing

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/405439

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午9:12
下一篇 2023年4月26日 上午9:12

相关推荐