From: Rusty Russell <rusty@rustcorp.com.au>
To: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Andrew Morton <akpm@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
David Miller <davem@davemloft.net>,
Paul Mackerras <paulus@samba.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Christoph Lameter <christoph@lameter.com>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Martin Bligh <mbligh@google.com>
Subject: Re: local_add_return
Date: Wed, 17 Dec 2008 21:53:04 +1030 [thread overview]
Message-ID: <200812172153.05303.rusty@rustcorp.com.au> (raw)
In-Reply-To: <20081216162532.GA7575@Krystal>
On Wednesday 17 December 2008 02:55:32 Mathieu Desnoyers wrote:
> Specifically on this comment :
>
> +/* There are three obvious ways to implement local_t on an arch which
> + * can't do single-instruction inc/dec etc.
> + * 1) atomic_long
> + * 2) irq_save/irq_restore
> + * 3) multiple counters.
>
> Option 3) is not workable for tracers, because it's not safe against
> some exceptions (e.g. some hardware errors) nor NMIs.
Hmm, nor is option 2. Now I understand where you were coming from and
I sympathize with your dilemna, but I don't think that non-x86 archs should
pay for it where local_t is used as intended, so I don't think local_t should
be (have been) hijacked for this. nmi_safe_t?
> Also, local_t
> operations must have preemption disabled before playing on per-cpu data,
> which I don't see in your test. This has to be taken into account in the
> runtime cost.
atomic_long_t implementations don't have to. local_irq_save does it
as a side effect. You're right about multiple counters tho. We can
either do it conditionally or unconditionally, but I think unconditional
makes sense (CONFIG_PREEMPT=y seems to be less popular than it was).
> the CPU_OPS work done by Christoph Lameter which use
> segments to address the per-cpu data, which effectively removes the need
> for disabling preemption around local_t operations because the CPU ID
> becomes encoded in a cpu register.
Well, we did this for 32-bit x86 some time ago, so that works today.
64-bit was delayed because of the stack protection code, which needs
a fixed offset for the canary so needs zero-based percpu, but IIRC
that's orthogonal to the CPU_OPS work itself.
Here's the timing diff when trivalue is fixed here (preempt on)
Before:
local_inc=45 local_add=45 cpu_local_inc=6 local_read=21 local_add_return=127
After:
local_inc=47 local_add=47 cpu_local_inc=6 local_read=41 local_add_return=127
Since sparc64 has CONFIG_PREEMPT=n in its defconfig, I think it is still
ahead with trivalue.
Thanks,
Rusty.
prev parent reply other threads:[~2008-12-17 11:23 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-15 13:47 local_add_return Steven Rostedt
2008-12-16 6:33 ` local_add_return Rusty Russell
2008-12-16 6:57 ` local_add_return David Miller
2008-12-16 7:13 ` local_add_return David Miller
2008-12-16 22:38 ` local_add_return Rusty Russell
2008-12-16 22:50 ` local_add_return Rusty Russell
2008-12-16 23:25 ` local_add_return Luck, Tony
2008-12-16 23:25 ` local_add_return Luck, Tony
2008-12-16 23:43 ` local_add_return Heiko Carstens
2008-12-16 23:43 ` local_add_return Heiko Carstens
2008-12-16 23:59 ` local_add_return Eric Dumazet
2008-12-16 23:59 ` local_add_return Eric Dumazet
2008-12-17 0:01 ` local_add_return Mathieu Desnoyers
2008-12-17 0:01 ` local_add_return Mathieu Desnoyers
2008-12-18 22:52 ` local_add_return Rusty Russell
2008-12-18 22:53 ` local_add_return Rusty Russell
2008-12-19 3:35 ` local_add_return Mathieu Desnoyers
2008-12-19 3:35 ` local_add_return Mathieu Desnoyers
2008-12-19 5:54 ` local_add_return Rusty Russell
2008-12-19 5:54 ` local_add_return Rusty Russell
2008-12-19 17:06 ` local_add_return Mathieu Desnoyers
2008-12-19 17:06 ` local_add_return Mathieu Desnoyers
2008-12-20 1:33 ` local_add_return Rusty Russell
2008-12-20 1:45 ` local_add_return Rusty Russell
2008-12-20 1:33 ` local_add_return Rusty Russell
2008-12-22 18:43 ` local_add_return Mathieu Desnoyers
2008-12-22 18:43 ` local_add_return Mathieu Desnoyers
2008-12-24 11:42 ` local_add_return Rusty Russell
2008-12-24 11:54 ` local_add_return Rusty Russell
2008-12-24 18:53 ` local_add_return Mathieu Desnoyers
2008-12-24 18:53 ` local_add_return Mathieu Desnoyers
2008-12-16 16:25 ` local_add_return Mathieu Desnoyers
2008-12-17 11:23 ` Rusty Russell [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=200812172153.05303.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=christoph@lameter.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mbligh@google.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=rostedt@goodmis.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.