CoDel

来自mybots.org
Yiwang讨论 | 贡献2016年11月13日 (日) 01:24的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

CoDel的介绍: https://en.wikipedia.org/wiki/CoDel

在网络路由中,CoDel是一种为网络数据包调度器开发的降低延迟的调度算法,它由 Van Jacobson 和 Kathleen Nichols提出。

CoDel是为解决bufferbloat现象而提出的。通常,在一个网络中出现一种出现一种现象:过多的被缓冲的数据导致了网络响应的延迟,延迟抖动降低了网络的总的吞吐量。对一个响应时间敏感的网络而言,如果配置了一个过大的缓冲区,可能导致网络响应延迟加大。出现上述症状的原因往往是网络协议中按FIFO的时间优先顺序处理数据包,当响应敏感应用发出一个请求后,往往需要等待过长的时间,这个等待时间可能超过系统定义的网络最大延迟。当响应在超出网络最大延迟到来时,因为协议栈规则的问题,超过最大延迟的数据包往往被丢弃了。这时候,就会出现应用响应慢、性能差,甚至网络数据流量为0的情况,

bufferbloat现象不仅存在于路由器、交换机中,操作系统对接收和发送队列的处理也同样会导致该现象的出现。不同的操作系统有不同的解决策略:Windows XP将TCP连接数目限制在64KB,Windows 7以上的版本则提供了能够结束所有连接的限制,Linux在3.5的版本中增加了bufferbloat管理的相关代码。

CoDel算法则是一种更加智能的防止网络拥塞算法,它的核心思想是:当队列中的排队的数据包过多时开始丢弃数据包,但是丢弃的数据包是从队列的前面开始有选择的丢弃,而不是先处理直到不能处理了再把后面的丢弃。该思想是先查看每一个处理的数据包的等待时间,缺省5ms,如果等待超过5ms,那么说明队列可能拥堵了,这是会丢弃该数据包,继续查看下一个数据包的等待时间。由于拥塞的数据包被尽快的丢弃了,带来的好处之一是内核中的TCP拥塞控制部分的负荷的减轻。