[Codel] [Bloat] The challenge

Eric Dumazet eric.dumazet at gmail.com
Wed May 16 02:31:46 EDT 2012


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 Codel mailing list