text: 在網路路由中，CoDel演算法的整體效能，解決了Jacobson 開發 RED 時抱有的一些誤解，設計上 CoDel 比 RED 更容易管理和配置。2012年，DaveTäht和Eric Dumazet為Linux核心編寫了CoDel的實現，並以GNU通用公共許可證和3條款BSD許可證雙重許可釋出。 Dumazet的CoDel變體稱為fq_codel，代表“控制延遲”。它在OpenWrt版本“ Barrier Breaker”中被用作標準和資料包排程解決方案。自這之後，CoDel和fq_codel 遷移到了各種下游專案，例如Tomato ，dd-wrt和OPNsense 。理論基礎.CoDel背後的理論基於對緩衝區影響下分組交換網路中資料包行為的觀察。 這些觀察中的一些與排隊的基本性質和緩衝膨脹的原因有關，另一些與佇列管理演算法的弱點有關。 CoDel的開發旨在解決緩衝膨脹問題。緩衝膨脹.資料包在快速網路和慢速網路之間的網路鏈路傳輸時速度會變慢，尤其是在TCP會話開始時，突然出現數據包激增並且較慢的網路可能無法快速接受該突發時足夠。緩衝區的存在是為了緩解這個問題，它給了快速網路一個儲存資料包的地方，讓慢速網路以自己的速度讀取資料包。 。換句話說，緩衝區的作用就像減震器一樣，將突發到達訊號轉換為平穩平穩的訊號。但是，緩衝區的容量有限。理想的緩衝區大小可以處理突發的通訊，並使突發的速度與較慢網路的速度相匹配。理想情況下，衝擊吸收情況的特徵是在傳輸突發期間緩衝器中的分組的暫時延遲，之後延遲迅速消失，並且網路在提供和處理分組方面達到平衡。TCP擁塞控制演算法依賴於資料包丟棄來確定兩個通訊裝置之間的可用頻寬 。 它可以加快資料傳輸速度，直到資料包開始丟失為止，然後降低傳輸速率。 理想情況下，當它在連結速度上找到平衡時，它會繼續加速和減速。 為此，必須及時發生丟包，以便演算法可以響應地選擇合適的傳輸速度。 如果資料包儲存在一個過大的緩衝區中，則資料包將到達其目的地，但具有較高的延遲，但不會丟棄任何資料包，因此TCP不會減慢速度。 在這種情況下，TCP甚至可能確定連線的路徑已更改，並重復搜尋新的平衡點。擁有一個大而不斷的緩衝區，這會導致傳輸延遲增加和互動性降低，尤其是在檢視同一通道上的兩個或多個同時傳輸時，這種情況稱為緩衝區膨脹。 可用的通道頻寬也可能最終未被使用，因為某些緩衝區可能被緩衝區阻塞，等待資料傳送到較慢的目的地，因此可能無法到達某些快速的目的地。好佇列和壞佇列.CoDel區分兩種佇列：定義為不顯示緩衝膨脹的佇列。 通訊突發只會導致佇列延遲的暫時增加。 網路連結利用率最大化。定義為顯示緩衝區膨脹的佇列。 通訊突發會導致緩衝區填滿並保持填滿，從而導致利用率低和緩衝區延遲不斷增加。為了有效地防止緩衝區膨脹， 主動佇列管理 演算法形式的解決方案必須能夠識別緩衝區膨脹的發生並透過部署有效的對策進行反應。範雅各布森。 網路流量中的其他因素也可能導致誤報或誤報，從而導致不必要地部署了對策。 Jacobson建議，平均佇列長度實際上根本不包含有關資料包需求或網路負載的資訊。 他建議，更好的指標可能是滑動時間視窗內的最小佇列長度。演算法.根據2006年Jacobson的觀點，CoDel旨在將CoDel管理的緩衝區佇列中的資料包延遲控制在"最小延遲"下。目標是將此"最小延遲"保持在5毫秒以下。 如果最小延遲上升到一個太大的值，則將資料包從佇列中丟棄，直到延遲降至最大級別以下。Nichols和Jacobson引用了僅使用此度量標準的幾個優點：如果緩衝區視窗的最小延遲低於最大允許值，則CoDel不執行任何管理緩衝區的操作。 如果緩衝區相對為空，則它也不執行任何操作 。如果不滿足這些條件，則CoDel可能會丟棄資料包。演算法的描述.該演算法是在網路的每一跳上獨立計算的。該演算法在一個"間隔" 。在這個時間間隔內的最小 "排隊延遲" 要儲存下來。當這個時間間隔內的最後一個數據包出隊時，如果該間隔的最小 "排隊延遲" 大於5毫秒，則會丟棄此單個數據包，並縮短用於下一組資料包的時間間隔。 如果該時間間隔的最低排隊延遲小於5毫秒，則轉發資料包並將該時間間隔重置為100毫秒。當縮短間隔時，將根據由於過多排隊延遲而丟包的連續間隔數的倒數平方根來執行此操作。 間隔的順序是formula_1 ， formula_2 ， formula_3 ， formula_4 ， formula_5 ……模擬結果.Nichols和Jacobson已在不同的MTU，鏈路速率和其他條件變化的模擬測試中對CoDel進行了測試。 通常，結果表明：的 Greg White和Joey Padden也進行了模擬。實現.CoDel 2012年5月就出現了完整實現，並已作為開源軟體提供 。 它是在Linux核心中實現的。 DaveTäht將CoDel移植到了CeroWrt專案的Linux核心3.3中，這個專案涉及緩衝膨脹， CoDel 在此進行了詳盡的測試。 2013年，CoDel開始在某些專有軟體/turnkey頻寬管理平臺中作為選件出現。 FreeBSD在2016年將CoDel整合到11.x 和10.x 程式碼分支中。 從6.2版開始，實現隨OpenBSD一起分發。
metadata: erhwenkuo/wikipedia-zhtw
metadata: CoDel
metadata: https://zh.wikipedia.org/wiki?curid=6927031