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