Re: [PATCH] tracing/markers: make markers select tracepoints

Frederic Weisbecker
2009-02-20T17:31:13Z

On Fri, Feb 20, 2009 at 06:22:41PM +0100, Ingo Molnar wrote:
>
> * Randy Dunlap <randy.dunlap@oracle.com> wrote:
>
> > > This is what happens on the following build error:
> > >
> > > kernel/built-in.o: In function `marker_update_probe_range':
> > > (.text+0x52f64): undefined reference to `tracepoint_probe_register_noupdate'
> > > kernel/built-in.o: In function `marker_update_probe_range':
> > > (.text+0x52f74): undefined reference to `tracepoint_probe_unregister_noupdate'
> > > kernel/built-in.o: In function `marker_update_probe_range':
> > > (.text+0x52fb9): undefined reference to `tracepoint_probe_unregister_noupdate'
> > > kernel/built-in.o: In function `marker_update_probes':
> > > marker.c:(.text+0x530ba): undefined reference to `tracepoint_probe_update_all'
> > >
> > > CONFIG_KVM_TRACE will select CONFIG_MARKER, but the latter
> > > depends on CONFIG_TRACEPOINTS which will not be selected.
> > >
> > > A temporary fix is to make CONFIG_MARKER select
> > > CONFIG_TRACEPOINTS, though it doesn't fix the source KConfig
> > > dependency handling problem.
> > >
> > > Reported-by: Ingo Molnar <mingo@elte.hu>
> > > Cc: Roman Zippel <zippel@linux-m68k.org>
> > > Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> > > ---
> > > init/Kconfig | 2 +-
> > > 1 files changed, 1 insertions(+), 1 deletions(-)
> > >
> > > diff --git a/init/Kconfig b/init/Kconfig
> > > index b6400a5..a93f957 100644
> > > --- a/init/Kconfig
> > > +++ b/init/Kconfig
> > > @@ -975,7 +975,7 @@ config TRACEPOINTS
> > >
> > > config MARKERS
> > > bool "Activate markers"
> > > - depends on TRACEPOINTS
> > > + select TRACEPOINTS
> > > help
> > > Place an empty function call at each marker site. Can be
> > > dynamically changed for a probe function.
> >
> > but using "select" instead of "depends on" just causes the
> > kind of problem that you described, whereas using "depends on"
> > does follow dependency chains.
>
> Well, as long as the secondary selects are 'expanded' along the
> line of dependencies, it should still be fine. With an
> increasing number of dependencies it quickly becomes ugly
> though. This might be one of the cases where it works.
>
> Eventually we should eliminate markers, their uses can either be
> converted to new-style tracepoints, or to ftrace_printk().
>
> Ingo

ftrace_printk adds more overhead if not used since it inconditionally
send the trace, unless the related TRACE_ITER_PRINTK flag on ftrace is unset.

I don't know how markers work, but the documentation describes that a single branch
check is done in case the probe is disabled.

With ftrace_printk, even if TRACE_ITER_PRINTK is unset, this is still
one call and one branch check. So for hot callsite it's unappropriate.

IMHO, tracepoints are more suited to replace markers if they have to.