BBR 遭遇 CUBIC

Posted dog250

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BBR 遭遇 CUBIC相关的知识,希望对你有一定的参考价值。

BBR 动力学仅在纯 BBR 与模型匹配,否则需要各种技巧和其它算法共存,BBRv2 便是这种妥协。
本文着重说 BBR 之 ProbeRTT。

该状态有意思,它的收敛机制如此精致。以一大一小两流为例,大流指它侵入 buffer,足以影响 minrtt 采集:

  • 大流进入 ProbeRTT,清让 buffer,大流小流同时采到 minrtt。
  • 小流进入 ProbeRTT,采集到偏大 minrtt,待大流进入 ProbeRTT,两流同时采到 minrtt。

只要所有 BBR 流配置相同 ProbeRTT 窗口,收敛点就天然同步,就是 BBR 带宽/时间 图上向下凸起的那些小尖。

像高架桥面或铁轨上那些接缝,固定距离就要咯噔一下,BBR 对于一些流媒体也存在该问题,同步卡顿。随机化 ProbeBRR 窗口可解决,比如 5s~15s 内随机进入 ProbeRTT。

每条流 ProbeRTT 间隔随机,并不影响所有流依然在同一时间采到 minrtt,这是根本。

所有流采到 minrtt 那一刻开始,BBR 在 ProbeBW 状态收敛到公平,参见下文 “ProbeBW状态probe阶段BBR如何公平收敛” 一节:
The math behind dynamics of TCP BBR

走出理想,来到现实世界。

BBR 没有和 CUBIC 公平收敛的动力学,只能靠调参。

实践中发现与 CUBIC 共存,不抢 buffer,BBR 自己都立不稳,无法稳定维持状态机,此时带宽数据依然比 CUBIC 好,并非受益于 BBR 的模型,而是:

  • BBR 可以憋住 10 rounds 的 maxbw 不退让。
  • BBR 丢包状态依然试图稳住状态机并在恢复后 undo。

不过重传率也增加了,这已在透支资源维持状态机。至于 ProbeBW 中的 probe/drain,几乎完全乱套,因为 BDP 不再可信。

与 CUBIC 共存,ProbeRTT 将会给 BBR 带来厄运而不是机会,突然主动降低 inflight 给了其它流 buffer 依然未满的假象,等 BBR 退出 ProbeRTT 时,依然无法采集 minrtt,反而出让的带宽也让人给占了。

ProbeRTT 目标是采集 minrtt,当确认该目标无法达成,不再进 ProbeRTT 是良策,而不是将 4 inflight 改成 70%,后者依然无法采到 minrtt,又何必。

看起来有两个选择:

  • 降低 minrtt 的期望,维持 CUBIC 状态下 midrtt 作为 minrtt。
  • 依照 BBRv2 的做法,比例降低 inflight。

理想 BBR 的姿势很容易被现实的 buffer 打乱,它太依赖 pacing ,还是上文,看 “probe挤占导致的排队问题以及解法” 。

有 trick 可应对,长流有效。

在进入 ProbeRTT 前后分别测量 srtt 和 delivery rate,看结果是否有大改观,可区分 RTT 升高是否自己所为,若非自己所为,则记入链路画像。

若自己 ProbeRTT,RTT 依然居高不下,可判定自己未占 buffer,若一个窗口内采集到相仿的 minrtt,则对方同为 BBR,不进 ProbeRTT 概率减少,否则增加。每次进入 ProbeRTT 与否,全凭该概率决定,此举将 ProbeRTT 与 采集 minrtt 分离,不再依赖。

解释一下:

第一次 ProbeRTT 后,至少可保证自己 inflight 是 4(或者 10),此时的递增 RTT 肯定是别人所为,下次ProbeRTT,若 RTT 还高,大概率可说明还是别人造成,因为按照 BBR 规则不会占 buffer,既然不是我所为,再降 inflight 也无法采集 minrtt,纯吃亏,也就不再进入这次 ProbeRTT。
minrtt 不必每次都通过 inflight = 4 获得,确认 buffer 不是自己所为,可继承最近相对可信的 minrtt,或取两次 10s 间最小 RTT,把别人造成的排队延时都算进去。

总之,要在连接中持续刻画一幅链路画像,它将越来越准确。

CUBIC, BBR,25 Gbps,50 us 链路,无丢包,1000 pkts buffer,5v5,看下效果:

调参概率 10 倍增益,本意是 BBR 在 150 秒后吊打 CUBIC。修改偏好可以维持公平,但不吊打显示不出区别。

本准备去南汇赶海听潮,虽没法和深圳盐田大小梅沙,大鹏南澳杨梅坑比,但至少也是个海…无奈小小明天有个考试,就去不成了,本想今晚在酒店调试这个,就在这大热天的下午折腾完了。这次不放代码,因为不能总放,连 stap poc 也不放了。昨晚有朋友提示,跟那些长篇大论后面贴一个公众号二维码的作者相比,和那些大厂高 P 相比,我就是个 SB,他们拿了我太多输出,我却依然显得怡然自得。我回味无穷,也非常感谢🙏这位朋友的善意,我怡然自得,但也总被误会拿到了什么好处,可现实中我却连一场江浙沪旅行都要因为没钱让老婆孩子失望。但无论如何,在我看来交流是目的,反正自己不干这行当很久了,目前也不是靠这个吃饭,还是写点思路,和谁都没有冲突,SB 就 SB 吧。

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

以上是关于BBR 遭遇 CUBIC的主要内容,如果未能解决你的问题,请参考以下文章

BBR/CUBIC 共存时的 buffer 挤兑

BBR 会取代 CUBIC 吗?

TCP BBR 短评

从TCP拥塞本质看BBR算法及其收敛性(附CUBIC的改进/NCL机制)

在Wireshark的tcptrace图中看清TCP拥塞控制算法的细节(CUBIC/BBR算法为例)

拥塞算法