> On 25 Feb, 2015, at 21:25, Hal Murray <hmur...@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 _______________________________________________ Bloat mailing list Bloat@lists.bufferbloat.net https://lists.bufferbloat.net/listinfo/bloat