Messages in this thread | | | Date | Mon, 9 Mar 2009 13:23:12 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [tip:tracing/printk] tracing: optimize trace_printk() |
| |
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@gmail.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Peter Zijlstra <peterz@infradead.org> > LKML-Reference: <1236356510-8381-5-git-send-email-fweisbec@gmail.com> > Signed-off-by: Ingo Molnar <mingo@elte.hu> > > > --- > 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) > >
| |