[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