EN
Back to the archive

The encyclopedia · Engineering & Operations · Technical decision · 2012–2018

CoDel killed bufferbloat by measuring delay, not buffer fullness

CoDel watches how long a packet has waited rather than queue length, and self-tunes to hold delay near 5 ms with no configuration.

Pollere / Google

the move

Bufferbloat happens when network buffers are too deep: queues absorb bursts, keep packets sitting for hundreds of milliseconds, and interactive traffic like calls and games degrades even though throughput looks fine. Queue length alone tells you little because it depends on link speed.

CoDel reverses the perspective. It does not care how full the queue is; it cares how long a packet has been waiting. When that sojourn time exceeds a target around 5 ms, it drops one packet and backs off the drop interval as the condition persists.

Because it is driven by a directly measured delay rather than a hardcoded threshold, the controller is self-tuning and needs no per-link parameters, which is what makes it deployable in normal networks without an engineer in the loop.

why it works

  • Queue depth is a proxy; perceived delay is the actual problem.
  • A target delay creates a self-tuning control loop.
  • No per-link configuration means it works across mixed speeds.
the payoffControl felt delay, not buffer occupancyclever

what transfers

When a metric is the real problem, measure that metric directly instead of a proxy; a self-tuning controller that tracks perceived delay avoids configuring every link by hand.

what came after

CoDel and its per-flow variant FQ-CoDel became the reference mitigations for bufferbloat, were documented in RFC 8289 and 8290, and were widely implemented in routers and the Linux kernel.

references

spotted an error? The archive wants to know.

same kind of clever