From: Eric Dumazet <dada1@cosmosbay.com>
To: Matt Mackall <mpm@selenic.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Linux kernel <linux-kernel@vger.kernel.org>,
Adrian Bunk <bunk@kernel.org>
Subject: Re: [RANDOM] Move two variables to read_mostly section to save memory
Date: Sun, 16 Dec 2007 18:56:55 +0100 [thread overview]
Message-ID: <476566E7.3090606@cosmosbay.com> (raw)
In-Reply-To: <20071216173416.GW19691@waste.org>
Matt Mackall a écrit :
> On Sun, Dec 16, 2007 at 12:45:01PM +0100, Eric Dumazet wrote:
>> While examining vmlinux namelist on i686, I noticed :
>>
>> c0581300 D random_table
>> c0581480 d input_pool
>> c0581580 d random_read_wakeup_thresh
>> c0581584 d random_write_wakeup_thresh
>> c0581600 d blocking_pool
>>
>> That means that the two integers random_read_wakeup_thresh and
>> random_write_wakeup_thresh use a full cache entry (128 bytes).
>
> But why did that happen?
>
> Probably because of this:
>
> spinlock_t lock ____cacheline_aligned_in_smp;
>
> in struct entropy_store.
>
> And that comes from here:
>
> http://git.kernel.org/?p=linux/kernel/git/tglx/history.git;a=commitdiff;h=47b54fbff358a1d5ee4738cec8a53a08bead72e4;hp=ce334bb8f0f084112dcfe96214cacfa0afba7e10
>
> So we could save more memory by just dropping that alignment.
>
> The trick is to improve the scalability without it. Currently, for
> every 10 bytes read, we hash the whole output pool and do three
> feedback cycles, each grabbing the lock briefly and releasing it. We
> also need to grab the lock every 128 bytes to do some accounting. So
> we do 40 locks every 128 output bytes! Also, the output pool itself
> gets bounced back and forth like mad too.
>
> I'm actually in the middle of redoing some patches that will reduce
> this to one lock per 10 bytes, or 14 locks per 128 bytes.
>
> But we can't do much better than that without some fairly serious
> restructuring. Like switching to SHA-512, which would take us to one
> lock for every 32 output bytes, or 5 locks per 128 bytes with accounting.
>
> We could also switch to per-cpu output pools for /dev/urandom, which
> would add 128 bytes of data per CPU, but would eliminate the lock
> contention and the pool cacheline bouncing. Is it worth the added
> complexity? Probably not.
>
Yes, this reminds me the prefetch_range(r->pool, wordmask); is wrong (should
be prefetch_range(r->pool, wordmask*4) , so I am not sure how it could help
David to get better performance.... :(
prev parent reply other threads:[~2007-12-16 17:57 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-16 11:45 Eric Dumazet
2007-12-16 13:00 ` Adrian Bunk
2007-12-16 14:44 ` Eric Dumazet
2007-12-16 16:53 ` Adrian Bunk
2007-12-16 17:42 ` Eric Dumazet
2007-12-16 18:14 ` Adrian Bunk
2007-12-16 18:38 ` Eric Dumazet
2007-12-16 19:17 ` Adrian Bunk
2007-12-17 0:33 ` Matt Mackall
2007-12-16 17:34 ` Matt Mackall
2007-12-16 17:56 ` Eric Dumazet [this message]
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=476566E7.3090606@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=akpm@linux-foundation.org \
--cc=bunk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mpm@selenic.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
all inboxes | Powered by JetHome®