From: Zoltan Menyhart <Zoltan.Menyhart@bull.net>
To: Christoph Lameter <clameter@sgi.com>
Cc: akpm@osdl.org, ak@suse.de, linux-kernel@vger.kernel.org,
linux-ia64@vger.kernel.org
Subject: Re: light weight counters: race free through local_t?
Date: Wed, 14 Jun 2006 18:05:04 +0200 [thread overview]
Message-ID: <449033B0.1020206@bull.net> (raw)
In-Reply-To: <Pine.LNX.4.64.0606092212200.4875@schroedinger.engr.sgi.com>
Christoph Lameter wrote:
> One way of making the light weight counters race free for x86_64 and
> i386 is to use local_t. With that those two platforms are fine.
>
> However, the others fall back to atomic operations.
>
> Maybe we could deal with that on per platform basis? Some platforms may
> want to switch the local_t implementation away from atomics to regular
> integers if preemption is not configured. Most commercial Linux distros
> ship with preempt off. So this would preserve the speed of light weight
> counters, while holding off the worst races. But it still could allow
> interrupts while the counter is being incremented and so it would not
> be race free. This would no longer allow the use of local_t for
> refcounts but I think those uses are not that performance critical
> and we may just switch to atomic. Maybe I am just off in fantasyland.
>
> Andi?
>
> Another thing to investigate (at least on ia64) is how significant the
> impact of a fetchadd instruction is if none of the results are used. Maybe
> it is tolerable and we can stay with the existing implementation.
>
> On IA64 we we would trade an interrupt disable/ load / add / store /interrupt
> enable against one fetchadd instruction with this patch. How bad/good a
> trade is that?
On one hand, switching to local counters can be a good idea if they are not
evicted from the caches by the usual NRU/LRU cache replacement...
On the other hand, I do not think the ia64's fetchadd instruction is
expensive.
If your data is in L2, then it takes 11 clock cycles.
I do not think the counters have got much chance to stay in L1.
Anyway, L1 is write through, you'll need to copy the updated value
back into L2.
As the shortest L2 access takes 5 clock cycles...
You need 2 of them. (Assuming a counter is always in L2.)
And add interrupt disable/enable time...
Regards,
Zoltan Menyhart
next prev parent reply other threads:[~2006-06-14 16:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-10 5:30 light weight counters: race free through local_t? Christoph Lameter
2006-06-14 16:05 ` Zoltan Menyhart [this message]
2006-06-14 16:33 ` Christoph Lameter
2006-06-15 12:22 ` Zoltan Menyhart
2006-06-15 15:56 ` Christoph Lameter
2006-06-15 16:46 ` Zoltan Menyhart
2006-06-15 18:14 ` Christoph Lameter
2006-06-16 9:14 ` Zoltan Menyhart
2006-06-15 16:06 ` Christoph Lameter
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=449033B0.1020206@bull.net \
--to=zoltan.menyhart@bull.net \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=clameter@sgi.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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