[Cerowrt-devel] [Codel] coping with memory limitations and packet flooding in codel and fq_codel

Dave Taht dave.taht at gmail.com
Mon Aug 27 11:12:47 EDT 2012

On Mon, Aug 27, 2012 at 4:37 AM, Eric Dumazet <eric.dumazet at gmail.com> wrote:
> On Sun, 2012-08-26 at 14:36 -0700, Dave Taht wrote:
>> From looking over the history of this idea, it does seem to be a good
>> idea for small devices with potentially big queues.
>> http://www.spinics.net/lists/netdev/msg176967.html
>> That said I do tend to agree with davem's summary in fixing the
>> wifi drivers in the first place. The current allocation in the ath9k driver
>> doesn't make any sense in the first place, which (to me) implies magic
>> lies underneath that I'm reluctant to fiddle with, without deep knowledge
>> of how the ath9k driver behaves with wep/wpa/ampdus, etc.
> Problem is some hardware cannot do this in a smart way, without paying
> the price of a sometime expensive copy.
> Thats why I refined this idea to actually trigger only if current
> memory needs are above a threshold.

Concur. However, rather than implement truesize +/- accounting in the
qdisc, which seemed potentially hairy, I just did a:

static int codel_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
        struct codel_sched_data *q = qdisc_priv(sch);
        int qlen;
        if (likely((qlen = qdisc_qlen(sch)) < sch->limit)) {
                if (qlen > sch->limit / 8)
                        skb = skb_reduce_truesize(skb);

As I am also typically lowering the fq_codel limit to 1024 or 1200
from the default of 10k, this will kick in at a pretty appropriate
time, there too,
after I add the code...

And that said this stuff is totally unneeded on bigger iron. Last year
we were safely stuffing 10s and 100s of MB into the tx queue rings
without issues... ( :)

> If packets are received and immediately consumed, without potentially
> staying a long time in a queue, it doesnt really matter they use 200 or
> 400% more ram than the rightly sized packets.


Dave Täht
http://www.bufferbloat.net/projects/cerowrt/wiki - "3.3.8-17 is out
with fq_codel!"

More information about the Cerowrt-devel mailing list