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 <[email protected]> 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. > > > > _______________________________________________ Bloat mailing list [email protected] https://lists.bufferbloat.net/listinfo/bloat
