From: David Daney <ddaney@caviumnetworks.com>
To: Jason Baron <jbaron@redhat.com>
Cc: peterz@infradead.org, hpa@zytor.com,
mathieu.desnoyers@polymtl.ca, rostedt@goodmis.org, mingo@elte.hu,
tglx@linutronix.de, andi@firstfloor.org, roland@redhat.com,
rth@redhat.com, masami.hiramatsu.pt@hitachi.com,
fweisbec@gmail.com, avi@redhat.com, davem@davemloft.net,
sam@ravnborg.org, michael@ellerman.id.au,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] jump label: introduce static_branch() interface
Date: Wed, 23 Feb 2011 09:12:13 -0800 [thread overview]
Message-ID: <4D653FED.5080202@caviumnetworks.com> (raw)
In-Reply-To: <201102222228.p1MMSxnT016454@int-mx10.intmail.prod.int.phx2.redhat.com>
On 02/22/2011 02:28 PM, Jason Baron wrote:
> Hi,
>
> API and core updates for jump labels. (I also included changes for mips,
> and sparc, (compile tested only), so hopefully the respective arch gurus,
> can ACK those bits). Applies on top of latest -tip tree.
>
> Introduce:
>
> static __always_inline bool static_branch(struct jump_label_key *key);
>
> instead of the old JUMP_LABEL(key, label) macro.
>
> In this way, jump labels become really easy to use:
>
> Define:
>
> struct jump_label_key jump_key;
>
> Can be used as:
>
> if (static_branch(&jump_key))
> do unlikely code
>
> enable/disale via:
>
> jump_label_enable(&jump_key);
> jump_label_disable(&jump_key);
>
> that's it!
>
> For the jump labels disabled case, the static_branch() becomes an
> atomic_read(), and jump_label_enable()/disable() are simply atomic_inc(),
> atomic_dec() operations. We show testing results for this change below.
> Thanks to H. Peter Anvin for suggesting the 'static_branch()' construct.
>
> Since we now require a 'struct jump_label_key *key', we can store a pointer into
> the jump table addresses. In this way, we can enable/disable jump labels, in
> basically constant time. This change allows us to completely remove the previous
> hashtable scheme. Thanks to Peter Zijlstra for this re-write.
>
> Testing:
>
> I ran a series of 'tbench 20' runs 5 times (with reboots) for 3
> configurations, where tracepoints were disabled.
>
> jump label configured in
> avg: 815.6
>
> jump label *not* configured in (using atomic reads)
> avg: 800.1
>
> jump label *not* configured in (regular reads)
> avg: 803.4
>
> thanks,
>
> -Jason
>
>
> Signed-off-by: Peter Zijlstra<a.p.zijlstra@chello.nl>
> Signed-off-by: Jason Baron<jbaron@redhat.com>
> Suggested-by: H. Peter Anvin<hpa@linux.intel.com>
Thanks Jason. I tested this patch on MIPS (mips64 Octeon to be exact),
and the code is looking good. The dynamic printk things are correctly
moved out of the main code path.
You can add:
Tested-by: David Daney <ddaney@caviumnetworks.com>
> ---
> arch/mips/include/asm/jump_label.h | 22 +-
> arch/mips/kernel/jump_label.c | 2 +-
> arch/sparc/include/asm/jump_label.h | 25 +-
> arch/x86/include/asm/alternative.h | 3 +-
> arch/x86/include/asm/jump_label.h | 26 +-
> arch/x86/kernel/alternative.c | 2 +-
> arch/x86/kernel/jump_label.c | 2 +-
> arch/x86/kernel/module.c | 1 +
> include/asm-generic/vmlinux.lds.h | 14 +-
> include/linux/dynamic_debug.h | 35 ++-
> include/linux/jump_label.h | 82 ++++---
> include/linux/jump_label_ref.h | 44 ---
> include/linux/perf_event.h | 26 +-
> include/linux/tracepoint.h | 8 +-
> kernel/jump_label.c | 532 ++++++++++++++---------------------
> kernel/perf_event.c | 4 +-
> kernel/tracepoint.c | 23 +-
> lib/dynamic_debug.c | 13 +-
> 18 files changed, 368 insertions(+), 496 deletions(-)
> delete mode 100644 include/linux/jump_label_ref.h
>
[...]
next prev parent reply other threads:[~2011-02-23 17:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-22 22:28 [PATCH] jump label: introduce static_branch() interface Jason Baron
2011-02-22 23:12 ` Andi Kleen
2011-02-23 10:08 ` Peter Zijlstra
2011-02-23 10:11 ` Peter Zijlstra
2011-02-23 13:45 ` Steven Rostedt
2011-02-23 15:48 ` Jason Baron
2011-02-23 15:40 ` Steven Rostedt
2011-02-23 15:42 ` Peter Zijlstra
2011-02-23 17:12 ` David Daney [this message]
2011-03-01 15:28 ` Mathieu Desnoyers
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=4D653FED.5080202@caviumnetworks.com \
--to=ddaney@caviumnetworks.com \
--cc=andi@firstfloor.org \
--cc=avi@redhat.com \
--cc=davem@davemloft.net \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=jbaron@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=michael@ellerman.id.au \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=roland@redhat.com \
--cc=rostedt@goodmis.org \
--cc=rth@redhat.com \
--cc=sam@ravnborg.org \
--cc=tglx@linutronix.de \
/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.