From: Dave Taht <dave.taht@gmail.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: codel@lists.bufferbloat.net, cerowrt-devel@lists.bufferbloat.net,
Felix Fietkau <nbd@nbd.name>
Subject: Re: [Codel] coping with memory limitations and packet flooding in codel and fq_codel
Date: Sun, 26 Aug 2012 14:36:27 -0700 [thread overview]
Message-ID: <CAA93jw7XKwRtESqfiXsrkznoX2KRCkoHZifyjHMtZTJV1Yhzqg@mail.gmail.com> (raw)
In-Reply-To: <1345538298.5158.401.camel@edumazet-glaptop>
On Tue, Aug 21, 2012 at 1:38 AM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Mon, 2012-08-20 at 14:05 -0700, Dave Taht wrote:
>> We've had a raft of deployment questions regarding fq_codel, memory
>> use, and the impact of unresponsive flows
>> over on the cerowrt development list.
>>
>> sort of summary of the thread here, with some codel related ideas
>>
>> https://lists.bufferbloat.net/pipermail/cerowrt-devel/2012-August/000423.html
>>
>> some early data on wifi interactions here
>>
>> https://lists.bufferbloat.net/pipermail/cerowrt-devel/2012-August/000407.html
>>
>
> CC netdev
>
> codel / fq_codel have a packet limit per qdisc, like any other linux
> qdisc.
>
> DEFAULT_CODEL_LIMIT = 1000 packets
>
> fq_codel : 10240 packets
>
> For memory constrained boxes, it would be wise to add a 'truesize' limit
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.
> Not a bytes limit based on skb->len sum, because a skb->len = 60 bytes
> packet might consume far more memory (more than 2 Kbytes)
>
> ath9k driver is known to deliver very fat skbs (skb->truesize is too
> big)
>
> One 'other way' to limit bloat would be to reallocate skbs when one
> qdisc begins to use more than 25 % of its truesize limit
>
> enqueue(q, skb)
> {
> if (q->truesize_sum > q->truesize_limit / 4)
> skb = skb_reduce_truesize(skb, GFP_ATOMIC);
> ...
> }
This basically involves adding truesize accounting to the codel qdisc
and settling on the api proposed above, which differs from the
originally proposed patch. Is there a reason why we would
ever not try this atomically and is this form correct for 3.3 and
later kernels?
(am about to hack this into skbuff.h and codel.h as I write)
+/*
+ * Caller want to reduce memory needs before queueing skb
+ * The (expensive) copy should not be be done in fast path.
+ */
+static struct sk_buff *skb_reduce_truesize(struct sk_buff *skb)
+{
+ if (skb->truesize > 2 * SKB_TRUESIZE(skb->len)) {
+ struct sk_buff *nskb;
+
+ nskb = skb_copy_expand(skb, skb_headroom(skb), 0,
+ GFP_ATOMIC | __GFP_NOWARN);
+ if (nskb) {
+ __kfree_skb(skb);
+ skb = nskb;
+ }
+ }
+ return skb;
+}
> This is what some drivers already do in their rx handler (this is called
> copybreak), but this would do the copy (and extra cpu cost) only in
> stress situations.
>
> Note : we also have a very big struct skb_shared_info (320 bytes), we
> probably could shrink it for packets without fragments.
The ath9k allocator failing is at 19xx bytes.
--
Dave Täht
http://www.bufferbloat.net/projects/cerowrt/wiki - "3.3.8-17 is out
with fq_codel!"
next prev parent reply other threads:[~2012-08-26 21:36 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-20 21:05 Dave Taht
2012-08-21 8:38 ` Eric Dumazet
2012-08-21 10:27 ` Andrew McGregor
2012-08-21 10:50 ` Eric Dumazet
2012-08-26 21:36 ` Dave Taht [this message]
2012-08-27 11:37 ` Eric Dumazet
2012-08-27 15:12 ` Dave Taht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.bufferbloat.net/postorius/lists/codel.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAA93jw7XKwRtESqfiXsrkznoX2KRCkoHZifyjHMtZTJV1Yhzqg@mail.gmail.com \
--to=dave.taht@gmail.com \
--cc=cerowrt-devel@lists.bufferbloat.net \
--cc=codel@lists.bufferbloat.net \
--cc=eric.dumazet@gmail.com \
--cc=nbd@nbd.name \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox