On Mon, 9 Mar 2009, Ingo Molnar wrote: > > tracing: optimize trace_printk() > > Impact: micro-optimization > > trace_printk() does this unconditionally: > > trace_printk_fmt = fmt; > > Where trace_printk_fmt is an entry into a global array. This is > very SMP-unfriendly. > > So only write it once per bootup. > > Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx> > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > LKML-Reference: <1236356510-8381-5-git-send-email-fweisbec@xxxxxxxxx> > Signed-off-by: Ingo Molnar <mingo@xxxxxxx> > > > --- > include/linux/kernel.h | 10 ++++++++-- > 1 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h > index 4e726b9..7742798 100644 > --- a/include/linux/kernel.h > +++ b/include/linux/kernel.h > @@ -454,7 +454,10 @@ do { \ > do { \ > static const char *trace_printk_fmt \ > __attribute__((section("__trace_printk_fmt"))); \ > - trace_printk_fmt = fmt; \ > + \ > + if (!trace_printk_fmt) \ > + trace_printk_fmt = fmt; \ > + \ But this is a static init. That is, it is done at initialization and not every time. The change actually slows down the system. > __trace_printk_check_format(fmt, ##args); \ > __trace_printk(_THIS_IP_, trace_printk_fmt, ##args); \ > } while (0) > @@ -467,7 +470,10 @@ __trace_printk(unsigned long ip, const char *fmt, ...) > do { \ > static const char *trace_printk_fmt \ > __attribute__((section("__trace_printk_fmt"))); \ > - trace_printk_fmt = fmt; \ > + \ > + if (!trace_printk_fmt) \ > + trace_printk_fmt = fmt; \ > + \ Same here. -- Steve > __ftrace_vprintk(_THIS_IP_, trace_printk_fmt, vargs); \ > } while (0) > > -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html