| .TH CoDel 8 "23 May 2012" "iproute2" "Linux" |
| .SH NAME |
| CoDel \- Controlled-Delay Active Queue Management algorithm |
| .SH SYNOPSIS |
| .B tc qdisc ... codel |
| [ |
| .B limit |
| PACKETS ] [ |
| .B target |
| TIME ] [ |
| .B interval |
| TIME ] [ |
| .B ecn |
| | |
| .B noecn |
| ] |
| |
| .SH DESCRIPTION |
| CoDel (pronounced "coddle") is an adaptive "no-knobs" active queue management |
| algorithm (AQM) scheme that was developed to address the shortcomings of |
| RED and its variants. It was developed with the following goals |
| in mind: |
| o It should be parameterless. |
| o It should keep delays low while permitting bursts of traffic. |
| o It should control delay. |
| o It should adapt dynamically to changing link rates with no impact on |
| utilization. |
| o It should be simple and efficient and should scale from simple to |
| complex routers. |
| |
| .SH ALGORITHM |
| CoDel comes with three major innovations. Instead of using queue size or queue |
| average, it uses the local minimum queue as a measure of the standing/persistent queue. |
| Second, it uses a single state-tracking variable of the minimum delay to see where it |
| is relative to the standing queue delay. Third, instead of measuring queue size |
| in bytes or packets, it is measured in packet-sojourn time in the queue. |
| |
| CoDel measures the minimum local queue delay (i.e. standing queue delay) and |
| compares it to the value of the given acceptable queue delay |
| .B target. |
| As long as the minimum queue delay is less than |
| .B target |
| or the buffer contains fewer than MTU worth of bytes, packets are not dropped. |
| Codel enters a dropping mode when the minimum queue delay has exceeded |
| .B target |
| for a time greater than |
| .B interval. |
| In this mode, packets are dropped at different drop times which is set by a |
| control law. The control law ensures that the packet drops cause a linear change |
| in the throughput. Once the minimum delay goes below |
| .B target, |
| packets are no longer dropped. |
| |
| Additional details can be found in the paper cited below. |
| |
| .SH PARAMETERS |
| .SS limit |
| hard limit on the real queue size. When this limit is reached, incoming packets |
| are dropped. If the value is lowered, packets are dropped so that the new limit is |
| met. Default is 1000 packets. |
| |
| .SS target |
| is the acceptable minimum standing/persistent queue delay. This minimum delay |
| is identified by tracking the local minimum queue delay that packets experience. |
| Default and recommended value is 5ms. |
| |
| .SS interval |
| is used to ensure that the measured minimum delay does not become too stale. The |
| minimum delay must be experienced in the last epoch of length |
| .B interval. |
| It should be set on the order of the worst-case RTT through the bottleneck to |
| give endpoints sufficient time to react. Default value is 100ms. |
| |
| .SS ecn | noecn |
| can be used to mark packets instead of dropping them. If |
| .B ecn |
| has been enabled, |
| .B noecn |
| can be used to turn it off and vice-a-versa. By default, |
| .B ecn |
| is turned off. |
| |
| .SH EXAMPLES |
| # tc qdisc add dev eth0 root codel |
| # tc -s qdisc show |
| qdisc codel 801b: dev eth0 root refcnt 2 limit 1000p target 5.0ms |
| interval 100.0ms |
| Sent 245801662 bytes 275853 pkt (dropped 0, overlimits 0 requeues 24) |
| backlog 0b 0p requeues 24 |
| count 0 lastcount 0 ldelay 2us drop_next 0us |
| maxpacket 7306 ecn_mark 0 drop_overlimit 0 |
| |
| # tc qdisc add dev eth0 root codel limit 100 target 4ms interval 30ms ecn |
| # tc -s qdisc show |
| qdisc codel 801c: dev eth0 root refcnt 2 limit 100p target 4.0ms |
| interval 30.0ms ecn |
| Sent 237573074 bytes 268561 pkt (dropped 0, overlimits 0 requeues 5) |
| backlog 0b 0p requeues 5 |
| count 0 lastcount 0 ldelay 76us drop_next 0us |
| maxpacket 2962 ecn_mark 0 drop_overlimit 0 |
| |
| |
| .SH SEE ALSO |
| .BR tc (8), |
| .BR tc-red (8) |
| |
| .SH SOURCES |
| o Kathleen Nichols and Van Jacobson, "Controlling Queue Delay", ACM Queue, |
| http://queue.acm.org/detail.cfm?id=2209336 |
| |
| .SH AUTHORS |
| CoDel was implemented by Eric Dumazet and David Taht. This manpage was written |
| by Vijay Subramanian. Please reports corrections to the Linux Networking |
| mailing list <netdev@vger.kernel.org>. |