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 挤兑出来的高延时不良带宽,好像通货膨胀都取不到钱,谁发动的人多,取到的钱就多,但代价也大。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值