Re: [PATCH 1/2 v2] tracing/function-graph-tracer: various fixes andfeatures

From: Steven Rostedt
Date: Fri Jan 23 2009 - 09:54:17 EST



On Fri, 23 Jan 2009, Ingo Molnar wrote:

>
> * Fr?d?ric Weisbecker <fweisbec@xxxxxxxxx> wrote:
>
> > > Still needs a solution - if we do cross-CPU traces we want to have a
> > > global trace clock with 'seemless' transition between CPUs.
> >
> > So it doesn't only need a monotonic clock. It needs a global consistent
> > clock like ktime for example? Unfortunately this one uses seq_locks and
> > would add some drawbacks like verifying if the traced function doesn't
> > hold the write seq_lock and it will bring some more ftrace recursion...
>
> using ktime_get() is indeed out of question - GTOD callpaths are too
> complex (and also too slow).
>
> I'd not change anything in the current logic, but i was thinking of a new
> trace_option, which can be set optionally. If that trace option is set
> then this bit of ring_buffer_time_stamp():
>
> time = sched_clock() << DEBUG_SHIFT;
>
> gets turned into:
>
> time = cpu_clock(cpu) << DEBUG_SHIFT;
>
> This way we default to sched_clock(), but also gain some 'global'
> properties if the trace_option is set.

I would like to keep the ring buffer agnostic to ftrace, or any other
user. What we could do is add an interface to the ring buffer that will
allow the time keeping interface to be set by the buffer.

typedef u64 (*ring_buffer_time_stamp_func)(int cpu);
typedef void(*ring_buffer_normalize_func)(int cpu, u64 *ts);

void ring_buffer_add_time_source(ring_buffer_time_stamp_func *tsfunc,
ring_buffer_normalize_func *norfunc);

Then the ftrace tracer could pass in its own function to keep time.

This way we could also make several different tracers that use different
timesources to test them out and compare, without needing to reboot.

-- Steve

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/