[Bloat] [Codel] The challenge

Jonathan Morton chromatix99 at gmail.com
Wed May 16 04:15:19 EDT 2012


I managed to run some quick tests this morning. Biggest factor was figuring out that ECN wasn't enabled on my Mac. This makes a significant difference to being able to observe it. 

So far all of the nice properties of SFQ seem to be intact (so at 128K I can still easily use SSH over a heavily loaded link), and furthermore I got to see ECN marking being performed and echoed on connections to real Internet servers. I think that led to zero packet loss but I need to inspect more before concluding that. 

So far, then, it seems to be working fine with no knobs set. That has to be a first. 

The key to knowledge is not to rely on others to teach you it. 

On 16 May 2012, at 09:31, Eric Dumazet <eric.dumazet at gmail.com> wrote:

> On Tue, 2012-05-15 at 23:09 -0700, Dave Taht wrote:
> 
>> I would certainly like more folk to analyse fq_codel, particularly in
>> the context of TCP mice and what we call ANTs these days. It seems to
>> be really excellent, but I too haven't had much time to look at it,
>> yet. It certainly does an even better job than codel of allowing
>> sparse streams through in my own testing, and I run it by default on
>> my laptops, wireless gear, routers and desktop at present. Under heavy
>> load things like cerowrt and ssh and other stuff like mosh, remain
>> incredibly responsive.
> 
> fq_codel is like SFQ but has following new features :
> 
> 1) More modern code :
>  - Less hardcoded limits
>    The only one remaining is the 65536 max flows limit, a linux qdisc
> limit. (uses u32 splitted in 16:16 for class ids)
>  - Easy to add new params in future (nested attributes)
> 
> 2) head drops. Give to TCP chance to react faster to congestions.
> 
> 3) Codel included (instead of pfifo)
> 
> 4) New flows have priority against old ones : Their first quantum (or
> first packet will be sent _before_ packets of old flows)
> 
> 5) More efficient code (less cache misses in high end configurations)
> 
> But if traffic consist of transient flows (one packet per flow, think of
> DDOS), your interactive traffic will suffer, there is no magic
> inside ;) 
> 
> Definition of a new flow :
> 
> A) enqueue() time : Packet is classified and map to an empty flow X (a
> flow that is not in a list (new or old)
>   Flow added at tail of 'new_flows' list. Initialize flow X quantum to
> 1514 (or configured quantum for fq_codel)
> 
> B) dequeue() time. Packet dequeued. flow moved to tail of 'old flows'
> list (if flow quantum exhausted)
> 
> C) if all flows present in 'old_flows' list are examined by dequeue(),
> we notice empty flows and they are removed from list.
> 
> If a packet comes for flow X :
> - If flow X still in a old/new queue, we let X in the list, and only
> add packet to the current list of packet for flow X.
> 
> 
> 
> 



More information about the Bloat mailing list