From: Ingo Molnar <mingo@elte.hu>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Tejun Heo <tj@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>,
Brian Gerst <brgerst@gmail.com>,
ebiederm@xmission.com, cl@linux-foundation.org, travis@sgi.com,
linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
steiner@sgi.com, hugh@veritas.com
Subject: Re: [patch] add optimized generic percpu accessors
Date: Fri, 16 Jan 2009 22:24:15 +0100 [thread overview]
Message-ID: <20090116212415.GC10063@elte.hu> (raw)
In-Reply-To: <200901170748.53734.rusty@rustcorp.com.au>
* Rusty Russell <rusty@rustcorp.com.au> wrote:
> On Thursday 15 January 2009 22:08:26 Tejun Heo wrote:
> > Hello,
> >
> > Ingo Molnar wrote:
> > > The new ops are a pretty nice and clean solution i think.
> > >
> > > Firstly, accessing the current CPU is the only safe shortcut anyway (there
> > > is where we can do %fs/%gs / rip-relative addressing modes), and the
> > > generic per_cpu() APIs dont really provide that guarantee for us. We might
> > > be able to hook into __get_cpu_var() but those both require to be an
> > > lvalue and are also relatively rarely used.
> > >
> > > So introducing the new, rather straightforward APIs and using them
> > > wherever they matter for performance is good. Your patchset already shaved
> > > off an instruction from ordinary per_cpu() accesses, so it's all moving
> > > rather close to the most-optimal situation already.
> >
> > Yeah, I don't think we can do much better than those ops. I have two
> > issues tho.
> >
> > 1. percpu_and() is missing. I added it for completeness's sake.
> >
> > 2. The generic percpu_op() should be local to the cpu, so it should
> > expand to...
> >
> > do { get_cpu_var(var) OP (val); put_cpu_var(var) } while (0)
> >
> > as the original x86_OP_percpu() did. Right?
> >
> > Thanks.
>
> No no no no. This is a crapload of infrastructure noone will use.
>
> Please just start by adding read_percpu like so (this won't apply since
> there's lots of other per-cpu things going on, but you get the idea).
>
> We don't need a whole set of operators for a handful of
> non-arch-specific cases. Reading a var is fairly common, the other ops
> are diminishing returns and we already have local_t for some of these
> cases (and we're reviewing that, too).
Actually, the percpu_add()/sub() ops are useful for statistics. (can be
done without preempt disable/enable) percpu_write() is also obviously
useful. The others are common arithmetic operators, for completeness of
the API.
Ingo
next prev parent reply other threads:[~2009-01-16 21:25 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-13 10:38 [PATCHSET linux-2.6-x86:tip] x86: make percpu offsets zero-based on SMP Tejun Heo
2009-01-13 10:38 ` [PATCH 01/13] x86_64: fix pda_to_op() Tejun Heo
2009-01-13 10:38 ` [PATCH 02/13] x86: make early_per_cpu() a lvalue and use it Tejun Heo
2009-01-13 11:43 ` [PATCH 02/13 UPDATED] " Tejun Heo
2009-01-13 10:38 ` [PATCH 03/13] x86_64: Cleanup early setup_percpu references Tejun Heo
2009-01-13 10:38 ` [PATCH 04/13] x86_32: make vmlinux_32.lds.S use PERCPU() macro Tejun Heo
2009-01-13 10:38 ` [PATCH 05/13] x86_64: make percpu symbols zerobased on SMP Tejun Heo
2009-01-13 10:38 ` [PATCH 06/13] x86_64: load pointer to pda into %gs while brining up a CPU Tejun Heo
2009-01-13 10:38 ` [PATCH 07/13] x86_64: use static _cpu_pda array Tejun Heo
2009-01-13 10:38 ` [PATCH 08/13] x86_64: fold pda into percpu area on SMP Tejun Heo
2009-01-13 10:38 ` [PATCH 09/13] x86_64: merge 64 and 32 SMP percpu handling Tejun Heo
2009-01-13 10:38 ` [PATCH 10/13] x86_64: make pda a percpu variable Tejun Heo
2009-01-13 10:38 ` [PATCH 11/13] x86_64: convert pda ops to wrappers around x86 percpu accessors Tejun Heo
2009-01-13 10:38 ` [PATCH 12/13] x86_64: misc clean up after the percpu update Tejun Heo
2009-01-13 10:38 ` [PATCH 13/13] x86_32: make percpu symbols zerobased on SMP Tejun Heo
2009-01-14 0:18 ` Rusty Russell
2009-01-14 2:03 ` Tejun Heo
2009-01-13 10:48 ` [PATCHSET linux-2.6-x86:tip] x86: make percpu offsets zero-based " Tejun Heo
2009-01-13 13:27 ` Brian Gerst
2009-01-13 14:05 ` Tejun Heo
2009-01-13 14:26 ` Brian Gerst
2009-01-13 14:37 ` Tejun Heo
2009-01-14 6:57 ` H. Peter Anvin
2009-01-14 9:38 ` [patch] add optimized generic percpu accessors Ingo Molnar
2009-01-14 9:45 ` Ingo Molnar
[not found] ` <200901151253.44016.rusty@rustcorp.com.au>
2009-01-15 9:55 ` Ingo Molnar
2009-01-15 10:27 ` Tejun Heo
2009-01-15 10:04 ` roel kluin
2009-01-15 10:26 ` Tejun Heo
2009-01-15 11:32 ` Ingo Molnar
2009-01-15 11:36 ` Tejun Heo
2009-01-15 12:22 ` Ingo Molnar
2009-01-15 13:09 ` Tejun Heo
2009-01-15 13:32 ` Ingo Molnar
2009-01-15 13:33 ` Ingo Molnar
2009-01-15 13:39 ` Ingo Molnar
2009-01-15 21:54 ` Tejun Heo
2009-01-16 1:28 ` [PATCH x86/percpu] x86: fix build bug introduced during merge Tejun Heo
2009-01-16 3:25 ` [PATCH x86/percpu] x86_64: initialize this_cpu_off to __per_cpu_load Tejun Heo
2009-01-16 13:16 ` Ingo Molnar
2009-01-16 13:47 ` Tejun Heo
[not found] ` <20090116221651.GA32736@elte.hu>
[not found] ` <20090116223828.GA9294@elte.hu>
[not found] ` <49716F0E.7060605@gmail.com>
[not found] ` <49716FBF.7080203@kernel.org>
2009-01-17 6:29 ` [PATCH core/percpu REPOST] linker script: add missing VMLINUX_SYMBOL Tejun Heo
2009-01-17 6:32 ` [PATCH] linker script: add missing .data.percpu.page_aligned Tejun Heo
2009-01-17 8:21 ` Ingo Molnar
2009-01-21 23:46 ` Christoph Lameter
2009-01-21 23:45 ` [PATCH core/percpu REPOST] linker script: add missing VMLINUX_SYMBOL Christoph Lameter
2009-01-15 22:34 ` [patch] add optimized generic percpu accessors Ingo Molnar
2009-01-15 20:31 ` Christoph Lameter
2009-01-16 9:41 ` Tejun Heo
2009-01-16 13:23 ` Ingo Molnar
2009-01-16 13:49 ` Tejun Heo
2009-01-15 10:26 ` Tejun Heo
2009-01-15 11:30 ` Ingo Molnar
2009-01-15 11:38 ` Tejun Heo
2009-01-15 12:26 ` Ingo Molnar
2009-01-15 13:04 ` Tejun Heo
2009-01-15 13:07 ` Ingo Molnar
2009-01-15 13:23 ` [PATCH] percpu: " Tejun Heo
2009-01-15 13:36 ` Ingo Molnar
2009-01-15 17:30 ` Andrew Morton
2009-01-15 18:02 ` Ingo Molnar
2009-01-15 18:34 ` Andrew Morton
2009-01-15 18:39 ` Ingo Molnar
2009-01-15 21:53 ` Tejun Heo
2009-01-16 0:12 ` Herbert Xu
2009-01-16 0:15 ` Ingo Molnar
2009-01-16 0:18 ` Herbert Xu
[not found] ` <200901170827.33729.rusty@rustcorp.com.au>
2009-01-16 22:08 ` Ingo Molnar
[not found] ` <200901201328.24605.rusty@rustcorp.com.au>
2009-01-20 6:25 ` Tejun Heo
2009-01-20 10:36 ` Ingo Molnar
[not found] ` <200901271213.18605.rusty@rustcorp.com.au>
2009-01-27 2:24 ` Tejun Heo
2009-01-27 13:13 ` Ingo Molnar
2009-01-27 23:07 ` Tejun Heo
2009-01-28 3:36 ` Tejun Heo
2009-01-28 8:12 ` Tejun Heo
2009-01-27 20:08 ` Christoph Lameter
2009-01-27 21:47 ` David Miller
2009-01-27 22:47 ` Rick Jones
2009-01-27 22:47 ` Rick Jones
2009-01-28 0:17 ` Luck, Tony
2009-01-28 0:17 ` Luck, Tony
2009-01-28 16:48 ` Christoph Lameter
2009-01-28 16:48 ` Christoph Lameter
2009-01-28 17:15 ` Luck, Tony
2009-01-28 17:15 ` Luck, Tony
2009-01-28 16:45 ` Christoph Lameter
2009-01-28 20:47 ` David Miller
2009-01-28 10:38 ` Rusty Russell
2009-01-28 10:56 ` Tejun Heo
2009-01-29 2:06 ` Rusty Russell
2009-01-31 6:11 ` Tejun Heo
2009-01-28 16:50 ` Christoph Lameter
2009-01-28 18:07 ` Mathieu Desnoyers
2009-01-29 18:33 ` Christoph Lameter
2009-01-29 18:48 ` H. Peter Anvin
2009-01-20 10:40 ` Ingo Molnar
2009-01-21 5:52 ` Tejun Heo
2009-01-21 10:05 ` Ingo Molnar
2009-01-21 11:21 ` Eric W. Biederman
2009-01-21 12:45 ` Stephen Hemminger
2009-01-21 14:13 ` Eric W. Biederman
2009-01-21 20:34 ` David Miller
2009-01-16 1:09 ` H. Peter Anvin
[not found] ` <200901170804.18622.rusty@rustcorp.com.au>
2009-01-16 21:59 ` Ingo Molnar
2009-01-16 22:09 ` Ingo Molnar
2009-01-16 14:10 ` Mark Lord
2009-01-15 18:46 ` Ingo Molnar
2009-01-31 10:36 ` Jeremy Fitzhardinge
2009-01-15 13:59 ` [patch] " roel kluin
2009-01-15 21:51 ` Tejun Heo
[not found] ` <200901170748.53734.rusty@rustcorp.com.au>
2009-01-16 21:24 ` Ingo Molnar [this message]
2009-01-31 10:30 ` Jeremy Fitzhardinge
2009-01-31 16:00 ` Ingo Molnar
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=20090116212415.GC10063@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@linux-foundation.org \
--cc=brgerst@gmail.com \
--cc=cl@linux-foundation.org \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=hugh@veritas.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=steiner@sgi.com \
--cc=tj@kernel.org \
--cc=travis@sgi.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 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.