(Translated by https://www.hiragana.jp/)
CoDel - 维基百科,自由的百科全书 とべ转到内容ないよう

CoDel

维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

ざい网络よしちゅうCoDel(Controlled Delay,英語えいご發音はつおん/ˈkɒdəl/これVan JacobsonKathleen NicholsえいKathleen Nichols开发てき网络调度えいNetwork schedulerちゅう使用しようてき调度算法さんぽう 。 它旨ざいどおり过设おけ缓冲ちゅう网络すうすえつつみてきのべ迟限せいらい克服こくふく网络かたけん(如みちよしちゅうてき缓冲膨胀改善かいぜんりょうずいつくえ早期そうき检测えいrandom early detection(RED)算法さんぽうてき整体せいたい性能せいのうかい决了Jacobson 开发 RED 时抱ゆうてきいち些误かい,设计じょう CoDel RED さら容易ようい管理かんり配置はいち

2012ねん,DaveTähtEric Dumazet为Linuxないかく编写りょうCoDelてき实现,并以GNU通用つうよう公共こうきょう许可证3じょう款BSD许可证そうじゅう许可发布。 DumazetてきCoDel变体しょう为fq_codel,代表だいひょう公平こうへい队列えいFair queuingひかえせいのべ迟”。它在OpenWrt版本はんぽん“ Barrier Breaker”ちゅう用作ようさく标准しゅ动队れつ管理かんりえいActive queue management(AQM)かずすえつつみ调度かい决方あん这之きさき,CoDelfq_codel 迁移いたりょうかく种下ゆう项目,れいTomatodd-wrtOPNsense

论基础

[编辑]

CoDelきさきてき论基于对缓冲かげ响下ぶん组交换网络なかかずすえつつみぎょう为的观察。 这些观察ちゅうてき一些与排队的基本性质和缓冲膨胀てき原因げんいんゆう关,另一些与队列管理算法的弱点有关。 CoDelてき开发むねざいかい缓冲膨胀问题。 [1]

缓冲膨胀

[编辑]

かずすえつつめざい快速かいそく网络慢速网络间的网络链路传输时速度会わたらい变慢,ゆう其是ざいTCPかい话开はじめ时,突然とつぜん现数すえつつみ激增げきぞう并且较慢てき网络可能かのう无法快速かいそく接受せつじゅ该突发时あし够。缓冲てき存在そんざい为了缓解这个问题,它给りょう快速かいそく网络一个存储数据包的地方,让慢そく网络以自己じこてき速度そくど读取すうすえつつみ[2] 。换句话说,缓冲てき作用さよう就像减震いち样,はた突发到达信ごう转换为平稳平稳的信号しんごうただし,缓冲てき容量ようりょう有限ゆうげん理想りそうてき缓冲大小だいしょう以处突发てき通信つうしん,并使突发てき速度そくどあずか较慢网络てき速度そくどしょうひきはい理想りそうじょう况下,冲击吸收きゅうしゅうじょう况的とくせいざい传输突发间缓冲器ちゅうてきぶん组的暂时のべ迟,これきさきのべ迟迅そく消失しょうしつ,并且网络ざい提供ていきょう处理ぶん组方めん达到平衡へいこう[2]

TCP拥塞ひかえせい算法さんぽう赖于すうすえつつみ丢弃らい确定两个通信つうしん设备间的可用かよう带宽 。 它可以加かいすうすえ传输速度そくどちょくいたかずすえつつみ开始丢失为止,しかきさきくだてい传输そくりつ理想りそうじょう况下,とう它在链接速度そくどじょう找到平衡へいこう时,它会继续加速かそく减速。 为此,必须及时发生丢包,以便算法さんぽう以响应地选择あい适的传输速度そくど。 如果すうすえつつみ保存ほぞんざい一个过大的缓冲区中,则数すえつつみはたいた达其目的もくてきただし具有ぐゆう较高てきのべ迟,ただしかい丢弃にんなんすうすえつつめいん此TCPかい减慢速度そくどざい这种じょう况下,TCP甚至可能かのう确定连接てきみちやめ更改こうかい,并重复搜索そうさくしんてき平衡へいこうてん[3] [4]

拥有一个大而不断的缓冲区,这会导致传输のべ增加ぞうか交互こうごせいくだていゆう其是ざい查看どう一通道上的两个或多个同时传输时,这种じょう况称为缓冲区膨胀。 可用かようてきどおりどう带宽也可能かのうさい终未使用しよういん为某些缓冲区可能かのう缓冲阻塞,とうまちすうすえ传送いた较慢てき目的もくてきいん可能かのう无法いた达某些快そくてき目的もくてき

こう队列坏队れつ

[编辑]

CoDel区分くぶん两种队列: [2] [5]

こう队列

てい义为显示缓冲膨胀てき队列。 通信つうしん突发ただかい导致队列のべ迟的暂时增加ぞうか。 网络链接利用りようりつ最大さいだい

坏队れつ

てい义为显示缓冲膨胀てき队列。 通信つうしん突发かい导致缓冲はま满并保持ほじはま满,从而导致利用りようりつてい缓冲のぶ不断ふだん增加ぞうか

为了有效ゆうこう防止ぼうし缓冲膨胀, しゅ动队れつ管理かんり (AQM)算法さんぽう形式けいしきてきかい决方あん必须のう够识别缓冲区膨胀てき发生并通过部しょ有效ゆうこうてき对策进行はん应。

范雅かくぬのもり(Van Jacobson)ざい2006ねん断言だんげん,现有算法さんぽう一直在使用错误的方法来识别缓冲区膨胀。 [6] 诸如REDこれ类的算法さんぽうかい测量平均へいきん队列长度,如果平均へいきん长度过大,则将其视为缓冲膨胀的じょう况。 まさかくぬのもり(Jacobson)ざい2006ねん证明,此度りょう一个好的指标,いん为在通信つうしん突发じょう况下,平均へいきん队列长度かいきゅう增加ぞうかしかきさき,队列以快そく消散しょうさんこう队列)ある变为站立队列(坏队れつ)。 网络流量りゅうりょうちゅうてき其他いんもと可能かのう导致误报ある误报,从而导致必要ひつよう部署ぶしょりょう对策。 Jacobsonけん议,平均へいきん队列长度实际上根本かみねもとつつみ含有がんゆう关数すえつつみ需求ある网络负载てきしんいき[2] [6] けん议,さらこのみてきゆび可能かのうすべり动时间窗口内こうないてき最小さいしょう队列长度。 [2]

算法さんぽう

[编辑]

すえ2006ねんJacobsonてき观点,CoDelむねざいしょうCoDel管理かんりてき缓冲队列ちゅうてきすうすえつつみのべ迟控せいざい最小さいしょうのべした标是はた最小さいしょうのべ保持ほじざい5毫秒以下いか。 如果最小さいしょうのべ迟上ますいた一个太大的值,则将すうすえつつみ从队れつちゅう丢弃,ちょくいたのべ迟降いたり最大さいだい级别以下いか[2]

NicholsJacobson引用いんようりょう使用しよう此度りょう标准てき几个优点: [2]

  • CoDel无参すうてき。 RED算法さんぽうすえJacobson)てき弱点じゃくてんいち,它太难配置はいちゆう其是ざい具有ぐゆう动态链接そくりつてき环境ちゅう。 CoDel根本こんぽんぼつゆうよう设置てきさんすう
  • CoDel区分くぶんこう队列坏队れつこのみてき队列ほん质上具有ぐゆう较低てきのべ迟,いん管理かんり算法さんぽう以忽りゃく它,而坏てき队列则受到丢包形式けいしきてき管理かんり预。
  • CoDelてき工作こうさく原理げんり完全かんぜんよし本地ほんじ决定てきいん此它与往返のべ迟,链接そくりつ流量りゅうりょう负载以及其他无法よし本地ほんじ缓冲ひかえせいある预测てきいんもと无关。
  • 本地ほんじ最小さいしょうのべ迟只のうざいすうすえつつみ离开缓冲时确じょういん此不需要じゅよう额外てきのべ迟来运行队列以收集しゅうしゅう统计しんいきらい管理かんり队列。
  • CoDel适应动态变化てき链路そくりつ,而不かい利用りようりつ产生负面影おもかげ响。
  • CoDel以相对简单地实现,いん此可以涵盖从ていはしようよしいたこうはしよしかい决方あんてきせい个范围。

如果缓冲まどこうてき最小さいしょうのべ迟低于最大さいだいまこと许值,则CoDel执行にんなん管理かんり缓冲てき操作そうさ。 如果缓冲しょう对为そら(如果缓冲ちゅうてき节数しょう于一个MTU),则它也不执行にんなん操作そうさ[2] 。如果满足这些条件じょうけん,则CoDel可能かのうかい丢弃すうすえつつみ[2]

算法さんぽうてき描述

[编辑]

该算ほうざい网络てきごと一跳上独立计算的。该算ほうざいいち间隔最初さいしょ为100毫秒)ない运行。 つう过跳监控ごと个数すえつつみてきはい队延迟えいQueuing delayまい个数すえつつみ队的时候かい转发。さき计算ごと个包てきはい队延迟かずすえつつめざい队列中等ちゅうとうまちりょう多少たしょう时间)。ざい这个时间间隔ないてき最小さいしょう はい队延迟 ようそん储下らいとう这个时间间隔内的ないてきさいきさき一个数据包出队时,如果该间隔てき最小さいしょう はい队延迟 だい于5毫秒,则会丢弃此单个数すえつつめ,并缩たんよう于下一组数据包的时间间隔。 如果该时间间隔てき最低さいていはい队延迟小于5毫秒,则转发数すえつつみ并将该时间间へだたじゅうおけ为100毫秒。

とう缩短间隔时,はたすえゆかり于过はい队延迟而丢包てき连续间隔すうてきたおせすう平方根へいほうこんらい执行此操作そうさ。 间隔てき顺序 ……

仿真结果

[编辑]

NicholsJacobsonやめざい不同ふどうてきMTU,链路そくりつ其他条件じょうけん变化てき拟测试中对CoDel进行りょう测试。 通常つうじょう,结果表明ひょうめい[7] [8]

  • あずかREDしょう,CoDelざいせい个带宽范围(从3いた100Mbit/s)ちゅう使つかいすうすえつつみのべ迟更接近せっきん标值。 测得てき链路利用りようりつはじめ接近せっきん链路带宽てき100%。
  • MTU较低时,すうすえつつみのべ迟比MTU较高时低。 MTUえつだか,链路利用りようりつ就越だか,而MTUこしてい,带宽こしてい,链路利用りようりつ就越このみ,从而くだていりょうだか带宽てき公平こうへい利用りようりつ

CableLabsえいCableLabsてき Greg WhiteJoey Padden也进ぎょうりょう仿真。 [9]

实现

[编辑]

CoDel 2012ねん5がつ就出现了かんせい实现,并已さく开源软件提供ていきょう[10] 它是ざいLinuxないかくちゅう实现てき(从3.5しゅ线开はじめ)。 [11] DaveTähtはたCoDel移植いしょくいたりょうCeroWrt目的もくてきLinuxないかく3.3ちゅう,这个项目わたる缓冲膨胀[12]CoDel ざい此进ぎょうりょう详尽てき测试。 2013ねん,CoDel开始ざいぼう专有软件/turnkey带宽管理かんり平台ひらだいちゅうさく为选けん现。 [13] FreeBSDざい2016ねんはたCoDel集成しゅうせいいた11.x [14]10.x [15] だい码分ささえなか[16] 从6.2はん开始,实现ずいOpenBSD一起かずきぶん发。 [17]

參考さんこう資料しりょう

[编辑]
  1. ^ Joe Brockmeier. Good News for Solving Bufferbloat: CoDel Provides "No Knobs" Solution. ReadWriteWeb. 2012-05-08 [2012-08-16]. (原始げんし内容ないようそん于2012-07-12). 
  2. ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Nichols, Kathleen. Controlling Queue Delay. ACM Queue. ACM Publishing. 6 May 2012 [12 August 2012]. doi:10.1145/2209249.2209264. (原始げんし内容ないようそん档于2020-02-27). 
  3. ^ Jacobson, Van; Karels, MJ. Congestion avoidance and control (PDF). ACM SIGCOMM Computer Communication Review. 1988, 18 (4) [2020-02-26]. (原始げんし内容ないよう (PDF)そん档于2004-06-22). 
  4. ^ Jacobson, Van. A rant on queues. A talk presented at MIT Lincoln Labs, Lexington, MA (PDF). 2006 [12 August 2012]. (原始げんし内容ないようそん (PDF)于2020-02-27). 
  5. ^ Iljitsch van Beijnum. CoDel buffer management could solve the Internet’s bufferbloat jams. Ars Technica. 2012-05-10 [2012-08-16]. (原始げんし内容ないようそん于2012-08-28). 
  6. ^ 6.0 6.1 Jacobson, Van. A rant on queues. A talk presented at MIT Lincoln Labs, Lexington, MA (PDF). 2006 [12 August 2012]. (原始げんし内容ないようそん (PDF)于2020-02-27). 
  7. ^ Nichols, Kathleen. Controlling Queue Delay. ACM Queue. ACM Publishing. 6 May 2012 [12 August 2012]. doi:10.1145/2209249.2209264. (原始げんし内容ないようそん于2020-02-27). 
  8. ^ Nichols, Kathleen. Controlled Delay (CoDel) Active Queue Management. Pollere Inc. July 2012 [12 August 2012]. (原始げんし内容ないようそん于2012-08-22). 
  9. ^ Greg White; Joey Padden. Preliminary Study of Codel AGM in a Docsis Network (PDF). November 2012 [2015-06-14]. (原始げんし内容ないようそん (PDF)于2015-09-23). 
  10. ^ Nichols, Kathleen. Controlling Queue Delay. ACM Queue. ACM Publishing. 6 May 2012 [12 August 2012]. doi:10.1145/2209249.2209264. (原始げんし内容ないようそん于2020-02-27). 
  11. ^ Gettys, Jim. A Milestone Reached: CoDel is in Linux!. jg's Ramblings. 22 May 2012 [12 August 2012]. (原始げんし内容ないようそん于2020-02-26). 
  12. ^ Cerowrt - Overview. Bufferbloat. [2014-01-24]. (原始げんし内容ないようそん于2014-01-19). 
  13. ^ Procera Packetlogic Changelog. proceranetworks.com. [2013-07-24]. (原始げんし内容ないようそん于2013-07-24). 
  14. ^ truckman. Import Dummynet AQM version 0.2.1 (CoDel, FQ-CoDel, PIE and FQ-PIE).. 2016-05-26 [2020-02-26]. (原始げんし内容ないようそん档于2021-02-25). 
  15. ^ truckman. MFC Import Dummynet AQM version 0.2.1 (CoDel, FQ-CoDel, PIE and FQ-PIE).. 2016-06-10 [2020-02-26]. (原始げんし内容ないようそん于2019-12-18). 
  16. ^ Al Saadi, Rasool. Implementing AQM in FreeBSD. [2020-02-26]. (原始げんし内容ないようそん于2020-02-28). 
  17. ^ OpenBSD 6.2. [13 October 2017]. (原始げんし内容ないようそん于2017-10-12). 


外部がいぶ連結れんけつ

[编辑]