CoDel

✍ dations ◷ 2024-12-23 13:37:59 #计算机编程

在网络路由中,CoDel(Controlled Delay,发音为“ coddle ”)是Van Jacobson和Kathleen Nichols开发的网络调度程序中使用的调度算法 。 它旨在通过设置缓冲区中网络数据包的延迟限制来克服网络硬件(如路由器)中的 缓冲膨胀 ,改善了随机早期检测(random early detection(英语:random early detection),RED)算法的整体性能,解决了Jacobson 开发 RED 时抱有的一些误解,设计上 CoDel 比 RED 更容易管理和配置。

2012年,DaveTäht和Eric Dumazet为Linux内核编写了CoDel的实现,并以GNU通用公共许可证和3条款BSD许可证双重许可发布。 Dumazet的CoDel变体称为fq_codel,代表“ 公平排队控制延迟”。它在OpenWrt版本“ Barrier Breaker”中被用作标准活动队列管理 (AQM)和数据包调度解决方案。自这之后,CoDel和fq_codel 迁移到了各种下游项目,例如Tomato , dd-wrt和OPNsense 。

CoDel背后的理论基于对缓冲区影响下分组交换网络中数据包行为的观察。 这些观察中的一些与排队的基本性质和缓冲膨胀的原因有关,另一些与队列管理算法的弱点有关。 CoDel的开发旨在解决缓冲膨胀问题。

数据包在快速网络和慢速网络之间的网络链路传输时速度会变慢,尤其是在TCP会话开始时,突然出现数据包激增并且较慢的网络可能无法快速接受该突发时足够。缓冲区的存在是为了缓解这个问题,它给了快速网络一个存储数据包的地方,让慢速网络以自己的速度读取数据包。 。换句话说,缓冲区的作用就像减震器一样,将突发到达信号转换为平稳平稳的信号。但是,缓冲区的容量有限。理想的缓冲区大小可以处理突发的通信,并使突发的速度与较慢网络的速度相匹配。理想情况下,冲击吸收情况的特征是在传输突发期间缓冲器中的分组的暂时延迟,之后延迟迅速消失,并且网络在提供和处理分组方面达到平衡。

TCP拥塞控制算法依赖于数据包丢弃来确定两个通信设备之间的可用带宽 。 它可以加快数据传输速度,直到数据包开始丢失为止,然后降低传输速率。 理想情况下,当它在链接速度上找到平衡时,它会继续加速和减速。 为此,必须及时发生丢包,以便算法可以响应地选择合适的传输速度。 如果数据包保存在一个过大的缓冲区中,则数据包将到达其目的地,但具有较高的延迟,但不会丢弃任何数据包,因此TCP不会减慢速度。 在这种情况下,TCP甚至可能确定连接的路径已更改,并重复搜索新的平衡点。

拥有一个大而不断的缓冲区,这会导致传输延迟增加和交互性降低,尤其是在查看同一通道上的两个或多个同时传输时,这种情况称为缓冲区膨胀。 可用的通道带宽也可能最终未被使用,因为某些缓冲区可能被缓冲区阻塞,等待数据传送到较慢的目的地,因此可能无法到达某些快速的目的地。

CoDel区分两种队列:

定义为不显示缓冲膨胀的队列。 通信突发只会导致队列延迟的暂时增加。 网络链接利用率最大化。

定义为显示缓冲区膨胀的队列。 通信突发会导致缓冲区填满并保持填满,从而导致利用率低和缓冲区延迟不断增加。

为了有效地防止缓冲区膨胀, 主动队列管理 (AQM)算法形式的解决方案必须能够识别缓冲区膨胀的发生并通过部署有效的对策进行反应。

范雅各布森(Van Jacobson)在2006年断言,现有算法一直在使用错误的方法来识别缓冲区膨胀。 诸如RED之类的算法会测量平均队列长度,如果平均长度过大,则将其视为缓冲膨胀的情况。 雅各布森(Jacobson)在2006年证明,此度量不是一个好的指标,因为在通信突发情况下,平均队列长度会急剧增加。 然后,队列可以快速消散(好队列)或变为站立队列(坏队列)。 网络流量中的其他因素也可能导致误报或误报,从而导致不必要地部署了对策。 Jacobson建议,平均队列长度实际上根本不包含有关数据包需求或网络负载的信息。 他建议,更好的指标可能是滑动时间窗口内的最小队列长度。

根据2006年Jacobson的观点,CoDel旨在将CoDel管理的缓冲区队列中的数据包延迟控制在下。目标是将此保持在5毫秒以下。 如果最小延迟上升到一个太大的值,则将数据包从队列中丢弃,直到延迟降至最大级别以下。

Nichols和Jacobson引用了仅使用此度量标准的几个优点:

如果缓冲区窗口的最小延迟低于最大允许值,则CoDel不执行任何管理缓冲区的操作。 如果缓冲区相对为空(如果缓冲区中的字节数少于一个MTU),则它也不执行任何操作 。如果不满足这些条件,则CoDel可能会丢弃数据包。

该算法是在网络的每一跳上独立计算的。该算法在一个 (最初为100毫秒)内运行。 通过跳监控每个数据包的排队延迟。 每个数据包出队的时候会被转发。先计算每个包的(数据包在队列中等待了多少时间)。在这个时间间隔内的最小 要存储下来。当这个时间间隔内的最后一个数据包出队时,如果该间隔的最小 大于5毫秒,则会丢弃此单个数据包,并缩短用于下一组数据包的时间间隔。 如果该时间间隔的最低排队延迟小于5毫秒,则转发数据包并将该时间间隔重置为100毫秒。

当缩短间隔时,将根据由于过多排队延迟而丢包的连续间隔数的倒数平方根来执行此操作。 间隔的顺序是 100 {\displaystyle 100} 100 2 {\displaystyle {100 \over {\sqrt {2}}}} 100 3 {\displaystyle {100 \over {\sqrt {3}}}} 100 4 {\displaystyle {100 \over {\sqrt {4}}}} 100 5 {\displaystyle {100 \over {\sqrt {5}}}} ……

Nichols和Jacobson已在不同的MTU,链路速率和其他条件变化的模拟测试中对CoDel进行了测试。 通常,结果表明:

CableLabs的 Greg White和Joey Padden也进行了仿真。

CoDel 2012年5月就出现了完整实现,并已作为开源软件提供 。 它是在Linux内核中实现的(从3.5主线开始)。 DaveTäht将CoDel移植到了CeroWrt项目的Linux内核3.3中,这个项目涉及缓冲膨胀, CoDel 在此进行了详尽的测试。 2013年,CoDel开始在某些专有软件/turnkey带宽管理平台中作为选件出现。 FreeBSD在2016年将CoDel集成到11.x 和10.x 代码分支中。 从6.2版开始,实现随OpenBSD一起分发。



相关

  • 潮间带潮间带(intertidal zone; foreshore; seashore)是在潮汐大潮期的绝对高潮和绝对低潮间露出的海岸。海水涨潮到最高位(高潮线)和退潮时退至最低位(低潮线)之间,会曝露在空气中的海岸
  • 绸缎丝绸是用蚕丝编制而成的纺织品。丝绸著名的光泽外表来自于蚕丝三棱镜般的纤维结构,这令布料能够以不同的角度折射入射光,并将光线散射出去。在中国,丝绸一词也指代人造的、具有
  • 太阳系的假设天体列表假设的太阳系天体是在我们太阳系中,已经从观测的科学中推断出,但不知道它们是否存在的一颗行星、天然卫星或类似的天体。多年来已经提出一些假设的行星,但很多已经被排除掉。然
  • 联合国大会181号决议联合国大会181号决议 (分治决议),即联合国巴勒斯坦分割方案,于1947年11月29日在联合国大会通过。该决议提出了两个临时国家的建立,一个是犹太国,另一个是阿拉伯国。该决议也建议了
  • 安幼琪安幼琪(1967年1月21日-),台湾新闻主播、主持人,毕业于辅仁大学统计学系。现为年代新闻台谈话节目《突发琪想》主持人。曾任中华职篮宏国象篮球队行销公关处处长,至2000年宏国象篮
  • 楚留香《楚留香》(英文:Clans of Intrigue)是1977年邵氏电影公司出品,楚原执导的电影。改编自古龙著名武侠小说楚留香系列血海飘香一书。续集有《楚留香之蝙蝠传奇》及《楚留香之幽灵
  • 撒马利亚救援会撒马利亚救援会(Samaritan's Purse),或译普善施,是一个总部位于美国北卡罗来纳州布恩的基督教福音派国际慈善机构。现任会长是葛福临。该组织的名称来自《新约》中好撒马利亚人
  • 宾汉谷铜矿场宾汉谷铜矿场(Bingham Canyon Mine)是位于美国犹他州的一个大型铜矿矿山,由力拓集团所有。宾汉谷铜矿场自1906年就开始开采,现在仍在开采,在1966年被列入美国国家历史名胜。
  • 维德马尔·博罗夫斯基维德马尔·博罗夫斯基(立陶宛语:Valdemar Borovskij;1984年5月2日-)是一位立陶宛足球运动员。在场上的位置是右后卫。他现在效力于保加利亚足球甲级联赛球队旧扎戈拉贝罗足球俱乐
  • 日兰高速铁路.mw-parser-output .RMbox{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)}.mw-parser-output .RMinline{float:none