> On 26 Nov, 2018, at 9:08 pm, Pete Heist <[email protected]> wrote:
> 
> So I just thought to continue the discussion- when does the CoDel part of 
> fq_codel actually help in the real world?

Fundamentally, without Codel the only limits on the congestion window would be 
when the sender or receiver hit configured or calculated rwnd and cwnd limits 
(the rwnd is visible on the wire and usually chosen to be large enough to be a 
non-factor), or when the queue overflows.  Large windows require buffer memory 
in both sender and receiver, increasing costs on the sender in particular (who 
typically has many flows to manage per machine).

Queue overflow tends to result in burst loss and head-of-line blocking in the 
receiver, which is visible to the user as a pause and subsequent jump in the 
progress of their download, accompanied by a major fluctuation in the estimated 
time to completion.  The lost packets also consume capacity upstream of the 
bottleneck which does not contribute to application throughput.  These effects 
are independent of whether overflow dropping occurs at the head or tail of the 
bottleneck queue, though recovery occurs more quickly (and fewer packets might 
be lost) if dropping occurs from the head of the queue.

From a pure throughput-efficiency standpoint, Codel allows using ECN for 
congestion signalling instead of packet loss, potentially eliminating packet 
loss and associated lead-of-line blocking entirely.  Even without ECN, the 
actual cwnd is kept near the minimum necessary to satisfy the BDP of the path, 
reducing memory requirements and significantly shortening the recovery time of 
each loss cycle, to the point where the end-user may not notice that delivery 
is not perfectly smooth, and implementing accurate completion time estimators 
is considerably simplified.

An important use-case is where two sequential bottlenecks exist on the path, 
the upstream one being only slightly higher capacity but lacking any queue 
management at all.  This is presently common in cases where home CPE implements 
inbound shaping on a generic ISP last-mile link.  In that case, without Codel 
running on the second bottleneck, traffic would collect in the first 
bottleneck's queue as well, greatly reducing the beneficial effects of FQ 
implemented on the second bottleneck.  In this topology, the overall effect is 
inter-flow as well as intra-flow.

The combination of Codel with FQ is done in such a way that a separate instance 
of Codel is implemented for each flow.  This means that congestion signals are 
only sent to flows that require them, and non-saturating flows are unmolested.  
This makes the combination synergistic, where each component offers an 
improvement to the behaviour of the other.

 - Jonathan Morton

_______________________________________________
Bloat mailing list
[email protected]
https://lists.bufferbloat.net/listinfo/bloat

Reply via email to