[Bloat] RED against bufferbloat

Jonathan Morton chromatix99 at gmail.com
Wed Feb 25 15:00:28 EST 2015


> On 25 Feb, 2015, at 21:25, Hal Murray <hmurray at megapathdsl.net> wrote:
> 
>> That's easy enough. You can fit an awful lot of linked list pointers into
>> the space of a single IP packet. Even if you're only assigning 64KB per
>> subscriber, you can store 43 full packets and still have pointers to spare.
>> A properly functioning AQM should mostly keep the queue smaller than that. 
> 
> Is a slot for the head-of-list pointer all the information you need to 
> remember for an empty queue?  Or do you need some memory of recent traffic?

The Linux implementation of fq_codel uses DRR for the FQ bit.

For that, you need a head pointer (for fast dequeue), a tail pointer (for fast enqueue), and a deficit counter (to implement the fairness) per flow.  With some granularity in the pointers, or else with a fixed queue arena of some tens of megabytes maximum, you can squeeze all that into 8 bytes per flow quite comfortably.

You also need a set of codel variables per flow (these are not large), a free-list of spaces to put new packets, and a ‘next’ pointer per enqueued packet.  The latter two might already be present in some form, depending on the FIFO implementation - that is, if it’s not just a ring buffer.

With these taken into account, I think we’re still looking at 40+ full-size packets in a 64KB arena, or a larger number if smaller packets are mixed in.  DRR will tend to service flows with smaller packets more often, leading to bandwidth fairness.

 - Jonathan Morton




More information about the Bloat mailing list