lkml.org 
[lkml]   [2008]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/2] tracing/function-return-tracer: Make the function return tracer lockless
    2008/11/13 Ingo Molnar <mingo@elte.hu>:
    > yeah - and it would be all means by a global entity in the beginning -
    > i.e. we'd just generalize the code around ring_buffer_time_stamp() to
    > listen to the "globally coherent" flag, and allow it to be used for
    > callgraph cost measurement code too.
    >
    > If the "globally coherent" flag is set, then the implementation would
    > be something like:
    >
    > A simple "last global timestamp" value combined with a "last local
    > timestamp" value, and the global timestamp is only ever moved forward.
    > It is updated via cmpxchg loop. This gives coherency and a monotonic
    > clock. The local timestamp would be taken from cpu_clock(cpu), and a
    > global timestamp would be constructed out of it. Or something like
    > that.
    >
    > Would that work? [ Would you be interested in sending patches? :-) ]
    >
    > Ingo
    >


    Ok, so correct me if I'm wrong.
    Global timestamp would be captured by using sched_clock().
    That's what is done currently in ring_buffer_time_stamp()
    And the global timestamp would be combination of a last global
    timestamp and a relative position from now to this last at
    each insertion in the ring-buffer (or tracing time capture). Am I right?
    I don't really understand why you want to update with a cmpxchg loop...

    And the local timestamp would be built through cpu_clock() with
    absolute values at each captures? Because we can't consider
    relative values since this is loosing sense between cpu. Unless we
    have per_cpu relative values.....

    Then, depending of the current_tracer, ring_buffer_time_stamp would
    act as a wrapper:
    if (current_tracer->time_flag == TIME_GLOBAL_COHERENT)
    return ring_buffer_global_timestamp();
    else
    return ring_buffer_local_timestamp();

    Or more efficient with a function pointer set at the same we change
    the time flag for the current tracer.


    \
     
     \ /
      Last update: 2008-11-13 13:39    [W:4.067 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site