From: Eric Dumazet <dada1@cosmosbay.com>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Hideo AOKI <haoki@redhat.com>, netdev <netdev@vger.kernel.org>,
David Miller <davem@davemloft.net>,
Satoshi Oshima <satoshi.oshima.fk@hitachi.com>,
Bill Fink <billfink@mindspring.com>,
Andi Kleen <andi@firstfloor.org>,
Evgeniy Polyakov <johnpol@2ka.mipt.ru>,
Stephen Hemminger <shemminger@linux-foundation.org>,
yoshfuji@linux-ipv6.org,
Yumiko Sugita <yumiko.sugita.yf@hitachi.com>
Subject: Re: [PATCH 4/4] udp: memory accounting in IPv4
Date: Sat, 01 Dec 2007 14:08:31 +0100 [thread overview]
Message-ID: <47515CCF.3030009@cosmosbay.com> (raw)
In-Reply-To: <20071201122120.GB14368@gondor.apana.org.au>
Herbert Xu a écrit :
> On Wed, Nov 28, 2007 at 01:53:36PM -0500, Hideo AOKI wrote:
>> +/**
>> + * __skb_queue_purge_and_sub_memory_allocated
>> + * - empty a list and subtruct memory allocation counter
>> + * @sk: sk
>> + * @list: list to empty
>> + * Delete all buffers on an &sk_buff list and subtruct the
>> + * truesize of the sk_buff for memory accounting. Each buffer
>> + * is removed from the list and one reference dropped. This
>> + * function does not take the list lock and the caller must
>> + * hold the relevant locks to use it.
>> + */
>> +static inline void __skb_queue_purge_and_sub_memory_allocated(struct sock *sk,
>> + struct sk_buff_head *list)
>> +{
>> + struct sk_buff *skb;
>> + int purged_skb_size = 0;
>> + while ((skb = __skb_dequeue(list)) != NULL) {
>> + purged_skb_size += sk_datagram_pages(skb->truesize);
>> + kfree_skb(skb);
>> + }
>> + atomic_sub(purged_skb_size, sk->sk_prot->memory_allocated);
>> +}
>
> Thanks, this is a lot better than before!
>
> However, I'm still a little concerned about the effect of two more
> atomic op's per packet that we're adding here. Hang on a sec, that
> should've been Dave's line since atomic ops are cheap on x86 :)
>
> But seriously, it's not so much that we have two more atomic op's
> per packet, but we have two more writes to a single global counter
> for each packet. This is going to really suck on SMP.
>
> So what I'd like to see is a scheme that's similar to sk_forward_alloc.
> The idea is that each socket allocates memory using mem_schedule and
> then stores it in sk_forward_alloc. Each packet then only has to
> add to/subtract from sk_forward_alloc.
>
> There is one big problem with this though, UDP is not serialised like
> TCP. So you can't just use sk_forward_alloc since it's not an atomic_t.
>
> We'll need to think about this one a bit more.
I agree adding yet another atomics ops is a big problem.
Another idea, coupled with recent work on percpu storage done by Christoph
Lameter, would be to use kind of a percpu_counter :
We dont really need strong and precise memory accounting (UDP , but TCP as
well), just some kind of limit to avoid memory to be too much used.
That is, updating a percpu variable, and doing some updates to a global
counter only when this percpu variable escapes from a given range.
Lot of contended cache lines could benefit from this relaxing (count of
sockets...)
I would wait first that Christoph work is done, so that we dont need atomic
ops on local cpu storage (and no need to disable preemption too).
next prev parent reply other threads:[~2007-12-01 13:12 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-28 18:48 [PATCH 0/4] UDP memory accounting and limitation (take 9) Hideo AOKI
2007-11-28 18:52 ` [PATCH 1/4] udp: fix send buffer check Hideo AOKI
2007-11-28 18:52 ` [PATCH 2/4] datagram: mem_scheudle functions Hideo AOKI
2007-12-01 12:09 ` Herbert Xu
2007-12-04 0:10 ` Hideo AOKI
2007-12-15 14:45 ` Herbert Xu
2007-12-18 17:02 ` Hideo AOKI
2007-11-28 18:53 ` [PATCH 3/4] udp: add udp_mem, udp_rmem_min and udp_wmem_min Hideo AOKI
2007-11-28 18:53 ` [PATCH 4/4] udp: memory accounting in IPv4 Hideo AOKI
2007-12-01 12:21 ` Herbert Xu
2007-12-01 13:08 ` Eric Dumazet [this message]
2007-12-01 13:16 ` Herbert Xu
2007-12-04 0:14 ` Hideo AOKI
2007-12-04 0:26 ` Herbert Xu
2007-12-06 4:28 ` Hideo AOKI
2007-12-10 9:22 ` Herbert Xu
2007-12-11 1:28 ` Hideo AOKI
-- strict thread matches above, loose matches on Subject: below --
2007-12-15 5:07 [PATCH 0/4] [UDP]: memory accounting and limitation (take 10) Hideo AOKI
2007-12-15 5:15 ` [PATCH 4/4] [UDP]: memory accounting in IPv4 Hideo AOKI
2007-12-18 2:33 [PATCH 0/4] [UDP]: memory accounting and limitation (take 11) Hideo AOKI
2007-12-18 2:38 ` [PATCH 4/4] [UDP]: memory accounting in IPv4 Hideo AOKI
2007-12-20 11:44 ` David Miller
2007-12-21 3:58 ` Hideo AOKI
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47515CCF.3030009@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=andi@firstfloor.org \
--cc=billfink@mindspring.com \
--cc=davem@davemloft.net \
--cc=haoki@redhat.com \
--cc=herbert@gondor.apana.org.au \
--cc=johnpol@2ka.mipt.ru \
--cc=netdev@vger.kernel.org \
--cc=satoshi.oshima.fk@hitachi.com \
--cc=shemminger@linux-foundation.org \
--cc=yoshfuji@linux-ipv6.org \
--cc=yumiko.sugita.yf@hitachi.com \
/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;
as well as URLs for NNTP newsgroup(s).