BBR 真的抗丢包吗?

这篇具有很好参考价值的文章主要介绍了BBR 真的抗丢包吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

看 BBR 论文 展示的一幅猛图:
BBR 真的抗丢包吗?

很多人惊讶于 BBR 竟然对丢包无感,稍微近看一点,BBR 只是在 20% 以内的丢包率下对丢包无感,更深入探究,会发现抗 20% 丢包率与 pacing_gain = 1.25 有关。

但这个图还是欺骗了绝大多数人。

注意横轴标度,loss rate = 1% 之前采用 10 倍标度,1% 往后采用 2 倍标度,给人的观感是,描绘 BBR 的那条绿线是平的,哇,丢包无感。即使在 20% 的丢包率下,吞吐依然可以接近 100Mbps 而不是 80Mbps,从而产生广告效应。
幸亏还有一条黑色的 ideal 线揭穿了真相。对数横坐标下,黑色线事实上是一条 y = -x 线,它显示了理想情况下, throughout = 100 * (1 - loss_rate)

事实上,这幅图的真相如下:
BBR 真的抗丢包吗?

上面的图广告效应就不明显了。

简单计算一下 BBR 的抗丢包能力。

计算之前,必须按链路画像分类讨论,考虑以下的链路:
BBR 真的抗丢包吗?

设 loss rate = p,gain = g,由于 sender 侧不限带宽,它可以任意 pacing rate 发送,我们当然希望经过 p 损失后吞吐依然可以保持限速带宽 B,因此:

(g * B) * (1 - p) = B (式子右边的 B 是图右边的 B) x100*0.99 = 100

此时 g * B 作为整体,视为从 sender 网卡发出的 rate,经过 p 损失后,delivery rate 为 B,这就是一般意义上所谓的 “抗丢包” 神话,代价是 “从 sender 侧一直到丢包点” 需提供足够的余量发送带宽,用来包容丢包损失。
更严格的约束如下:
BBR 真的抗丢包吗?

这种情况下 sender 侧不再有余量带宽可供 probe 增益,因此:

g * (B * (1 - p)) = B (式子右边的 B 是图左边的 B)

和上一种情况相反,此时 B * (1 - p) 作为整体,表示经过 p 损失后的 delivery rate。这种情况很容易理解,单位时间内发 10 个包,50% 丢包率丢 5 个,receiver 永远只能收 5 个,p 的丢包率需要多发的 g * B - B 的数据来重传补偿。

第二种情况相当于从水管一端注水,水管是漏的,中间漏掉一部分,水管另一段不可能流出与注水等量的水。

设 p = 99%,B = 100,上述两种情况各举一例。

情况一,sender 发 g * 100 * 0.01 = 10000 个包,丢 99%,还剩 100 个,打满 100 带宽。

情况二,sender 只能发 g * (100 * 0.01) = 100 个包,丢 99%,还剩 1 个,只能打满 1% 带宽。

现实场景应是上述两者结合,如果 firstmile 丢包限速,就是后一种,若 lastmile 丢包限速,就是前一种。可能还有更复杂融合,理论上不矛盾。

同时,这两种情况提示了一种链路整形原则,loss 一定要离 sender 越近越好,坏事尽早发生,限速要离 receiver 越近越好,给补偿留足余量。lost 在前,限速在后,提高效能。

但现实中,BBR 的表现如何呢?设置 p = 20%,g = 1.25,得到接近 80% * B 的实际吞吐,但根据上述公式,考虑上面第二种情况,p = 40%,g = 1.7,却没有得到 B * 60% 的吞吐。Why?

周五早上起床很早,做了些测试和 fix,发了一则朋友圈:
BBR 真的抗丢包吗?
我来说说是怎么回事。

按照 BBR 算法逻辑,首先,连续两次 ProbeUP 必须在 10 round 以内才可能保持住 maxbw 以防止 maxbw 以 p 衰减下去,其次,每次 ProbeUP 必须探测到真实的上限才能获得真实的 maxbw,然而 BBR 却被 loss 打断:

/* A pacing_gain > 1.0 probes for bw by trying to raise inflight to at
 * least pacing_gain*BDP; this may take more than min_rtt if min_rtt is
 * small (e.g. on a LAN). We do not persist if packets are lost, since
 * a path with small buffers may not hold that much.
 */
if (bbr->pacing_gain > BBR_UNIT)
        return is_full_length &&
                (rs->losses ||  /* perhaps pacing_gain*BDP won't fit */
                inflight >= bbr_inflight(sk, bw, bbr->pacing_gain));

只要检测到 loss,就退出了 ProbeUP。BBR 的理由是 “We do not persist if packets are lost, since a path with small buffers may not hold that much.” 它害怕一些小 buffer 的链路兜不住 g * BDP 这么大的 inflight,所以才对 loss 进行反应。

我认为这个对 loss 反应的理由不伤大雅,挺合理,但这只是一个微小的假设,却放在 ProbeUP 的关键路径无条件执行,只要发生 loss,即便不是因为小 buffer 无法 hold that much,也会退出 ProbeUP,这让 ProbeUP 更容易违背 “raise inflight to at least pacing_gain*BDP” 的承诺。此其一不合理之处。

再看 bbr_set_cwnd_to_recover_or_restore,同样对 loss 进行反应,一旦检测到 loss 便进入数据包守恒,此时便失去了 cwnd_gain = 2 的 cwnd 增益,如果恰有 new-data 和 retrans-data 需要以 pacing_gain * delivery_rate 发送,数据包守恒可能导致 cwnd-limited。此其二不合理之处。

BBR 理论上对 new-data 和 retrans-data 一视同仁不 care 丢包,依赖 maxbw,minrtt 驱动发送,同时以 secondary controller cwnd 辅助限制 buffer 的侵占。但实际上这些几乎全部被违背。

BBR 不 care 丢包事实上只是在 loss 状态 “记住了 maxbw”,并且多流共存场景下 BBR 会逐渐侵占 buffer 直到 ProbeRTT。和 BBR 不 care 丢包的宣传相反,BBR 对丢包的反应过激,loss 状态下,BBR 无法进行完整周期的 ProbeUP,由于数据包守恒,它甚至没有足够的潜在 inflight 进行 ProbeUP。

如果 BBR 属实如宣传般那样名副其实,它不需要在 loss 状态如此谨慎。BBR 的拥塞自适应逻辑就像一个无级变速装置,早就内置其中,一旦发生拥塞,无需丢包指示,有效测量 delivery rate 会逐步滑跌,而 RTT 也总以 10s 内最小的采样值算数,BDP 在拥塞状态趋向变小,这本身就有拥塞控制的效果。

但仅从算法本身看,我们也能看得出,BBR 对事件反应非常迟钝,所以才需要加些催化剂,但不管怎么说,BBR 名不副实。我一直说 BBRv2 是妥协的产物,它确实是,它最终还是不得不回归 Reno/AIMD 那套逻辑,然而数据包守恒确实也是前 AIMD 时期的产物,如今在 BBR 依然有影子。

将 loss 判断全部忽略,完全靠 BBR 自身收敛,就是我朋友圈发的图了:
BBR 真的抗丢包吗?

预设 40% 丢包率,重传率完全一致,忽略 loss 反应的吞吐要大很多。

如果执念不忽略丢包,还有一种方法。loss 退出 ProbeUP 导致其未竟全功,保留这个逻辑,多几次 ProbeUP 也是等效的。ProbeUP 碰到 loss 的概率随丢包率增加而增加,在 8 round 中多次 ProbeUP 可以累加 ProbeUP 结果,低效 loss 提前退出 ProbeUP 的 inflight 损失:

static int bbr_pacing_gain[] = {
        BBR_UNIT * 5 / 4,       /* probe for more available bw */
        BBR_UNIT * 3 / 4,       /* drain queue and/or yield bw to other flows */
        BBR_UNIT * 5 / 4,       /* probe for more available bw */
        BBR_UNIT * 3 / 4,       /* drain queue and/or yield bw to other flows */
        BBR_UNIT * 5 / 4,       /* probe for more available bw */
        BBR_UNIT * 3 / 4,       /* drain queue and/or yield bw to other flows */
        BBR_UNIT * 5 / 4,       /* probe for more available bw */
        BBR_UNIT * 3 / 4,       /* drain queue and/or yield bw to other flows */
        //BBR_UNIT, BBR_UNIT, BBR_UNIT, /* cruise at 1.0*bw to utilize pipe, */
        //BBR_UNIT, BBR_UNIT, BBR_UNIT  /* without creating excess queue... */
};

但无论怎样,BBR 大开合的本质是改变不了的,这是它所有优势的根源,也是它固有的缺陷。多流共存场景,所有上述看起来合理的假设和更正全部失效,不管是 BBR 本身的假设还是我的假设,都将拉胯,唯一留下来的效果是比其它流高的实际吞吐,比其它流高的重传率,以及对 buffer 的侵占,而这里面成也萧何,败也萧何。

BBR 依赖 gain * delivery_rate 来探测余量带宽,但在丢包场景下,同样行为的语义便成了补偿丢包。delivery_rate 作为 pacing rate 随丢包率衰减,gain 作为增益系数增益补偿重传。可是至少 Linux Kernel TCP BBR 的实现却不是这样,相反,它对丢包反应太过激,以至于 BBR 未竟全功。然而修改却不容易,我们不能光考虑吞吐效率,更要考虑共存公平性,显然这二者对于 BBR 是一个得此失彼的矛盾双方,而 BBR 的大开合就在这两者之间伸展收缩。换句话说,BBR 是一个粗糙的算法。

浙江温州皮鞋湿,下雨进水不会胖。文章来源地址https://www.toymoban.com/news/detail-429111.html

到了这里,关于BBR 真的抗丢包吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • https 是否真的安全,https攻击该如何防护,https可以被抓包吗?如何防止呢?

    简单来说, https 是 http + ssl,对 http 通信内容进行加密,是HTTP的安全版,是使用TLS/SSL加密的HTTP协议 Https的作用: 内容加密 建立一个信息安全通道,来保证数据传输的安全; 身份认证 确认网站的真实性 数据完整性 防止内容被第三方冒充或者篡改 其次什么事SSL证书 SSL 由

    2024年02月03日
    浏览(50)
  • UDP分片与丢包,UDP真的比TCP高效吗?

    每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP 报文格式如图所示。 UDP 报文中每个字段的含义如下: 源端口:16bits,发送端的端口。 目的端口:16bits,即接收端的端口

    2024年02月04日
    浏览(38)
  • 3D模型拆分与合并展示,IVX真的可以简单实现

    随着IT行业的发展,低代码和无代码平台已成为未来的发展趋势,因为它们能够大大提高软件开发的效率。iVX作为其中的一员,具有非常显著的优势,如逻辑完备性、操作流畅性、面向对象设计、可独立作为编程语言等方面的特点。它简单易用、功能丰富、高效稳定,不仅可

    2024年02月02日
    浏览(32)
  • 2022数学建模国赛C题官网展示论文C155论文复现

    github查看完整论文复现过程 箱线图比对 国赛C155 复现内容: 文物采样点 二氧化硅(SiO2) 氧化钠(Na2O) 氧化钾(K2O) 氧化钙(CaO) 氧化镁(MgO) 氧化铝(Al2O3) 氧化铁(Fe2O3) 氧化铜(CuO) 氧化铅(PbO) 氧化钡(BaO) 五氧化二磷(P2O5) 氧化锶(SrO) 氧化锡(SnO2) 二氧化硫(SO2) 0 01 69.33 NaN 9.99 6.32 0.87 3.93

    2024年02月12日
    浏览(37)
  • ssm高校教师科研信息展示网站源码和论文

    ssm高校教师科研信息展示网站源码和论文095  开发工具:idea   数据库mysql5.7+  数据库链接工具:navcat,小海豚等   技术:ssm 摘  要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具

    2024年02月10日
    浏览(39)
  • BBR安装教程 一键安装脚本 BBR/魔改/暴力/BBRplus/锐速(Lotsever)

    BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟。 下面是一个五合一的TCP网络加速脚本,其包括了 BBR 原版、BBR 魔改版、暴力 BBR 魔改版、BBR plus、Lotsever(锐速)安装脚本。该脚本由 94ish.me 制作。可用于 KVMXen 架构,

    2024年02月11日
    浏览(45)
  • 农村农产品信息展示网站的设计与实现(论文+源码)_kaic

    摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容,通过计算机网络的开发技术,在互联网上进行展示,然后通过计算机网络技术,让全球网络

    2024年02月11日
    浏览(41)
  • 【计算机视觉】CVPR 2023 上的分割论文真的是神仙打架(介绍前12篇,图像分割,全景分割,语义分割,实例分割)

    AutoFocusFormer:网格外的图像分割 论文地址: 真实世界的图像通常具有高度不平衡的内容密度。 有些区域非常均匀,例如大片蓝天,而其他区域则散布着许多小物体。 然而,卷积深度网络中常用的连续网格下采样策略平等对待所有区域。 因此,小对象在很少的空间位置表示

    2024年02月12日
    浏览(51)
  • udx大带宽大延迟网络与xquic bbr, tcp bbr实测比较

    quic在其白皮书中声称可以在大延迟大带宽网络中表现良好,为此我对比过目前xq,lsq,pq,tq几种实现,因为这些都是开源项目通过不断的折腾,向这方面研究的同学索取不同版本的实现进行实际测试。 经过,对不同国家的主机,到国内的实测总结出 其实quic说是在大代宽,高延迟

    2024年02月17日
    浏览(41)
  • 【计算机论文指导】基于微信小程序的商品展示系统小程序

    商品展示系统 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序被用户普遍使用,为方便用户能够可以随时进行小程序的相应信息内容的管理

    2024年02月03日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包