lkml.org 
[lkml]   [2011]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 17/20] tracing: Add a counter clock for those that do not trust clocks
    From: Steven Rostedt <srostedt@redhat.com>

    When debugging tight race conditions, it can be helpful to have a
    synchronized tracing method. Although in most cases the global clock
    provides this functionality, if timings is not the issue, it is more
    comforting to know that the order of events really happened in a precise
    order.

    Instead of using a clock, add a "counter" that is simply an incrementing
    atomic 64bit counter that orders the events as they are perceived to
    happen.

    The trace_clock_counter() is added from the attempt by Peter Zijlstra
    trying to convert the trace_clock_global() to it. I took Peter's counter
    code and made trace_clock_counter() instead, and added it to the choice
    of clocks. Just echo counter > /debug/tracing/trace_clock to activate
    it.

    Requested-by: Thomas Gleixner <tglx@linutronix.de>
    Requested-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Reviewed-By: Valdis Kletnieks <valdis.kletnieks@vt.edu>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    include/linux/trace_clock.h | 1 +
    kernel/trace/trace.c | 1 +
    kernel/trace/trace_clock.c | 12 ++++++++++++
    3 files changed, 14 insertions(+), 0 deletions(-)

    diff --git a/include/linux/trace_clock.h b/include/linux/trace_clock.h
    index 7a81303..4eb4902 100644
    --- a/include/linux/trace_clock.h
    +++ b/include/linux/trace_clock.h
    @@ -15,5 +15,6 @@
    extern u64 notrace trace_clock_local(void);
    extern u64 notrace trace_clock(void);
    extern u64 notrace trace_clock_global(void);
    +extern u64 notrace trace_clock_counter(void);

    #endif /* _LINUX_TRACE_CLOCK_H */
    diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
    index b419070..4b8df0d 100644
    --- a/kernel/trace/trace.c
    +++ b/kernel/trace/trace.c
    @@ -435,6 +435,7 @@ static struct {
    } trace_clocks[] = {
    { trace_clock_local, "local" },
    { trace_clock_global, "global" },
    + { trace_clock_counter, "counter" },
    };

    int trace_clock_id;
    diff --git a/kernel/trace/trace_clock.c b/kernel/trace/trace_clock.c
    index 6302747..3947835 100644
    --- a/kernel/trace/trace_clock.c
    +++ b/kernel/trace/trace_clock.c
    @@ -113,3 +113,15 @@ u64 notrace trace_clock_global(void)

    return now;
    }
    +
    +static atomic64_t trace_counter;
    +
    +/*
    + * trace_clock_counter(): simply an atomic counter.
    + * Use the trace_counter "counter" for cases where you do not care
    + * about timings, but are interested in strict ordering.
    + */
    +u64 notrace trace_clock_counter(void)
    +{
    + return atomic64_add_return(1, &trace_counter);
    +}
    --
    1.7.6.3

    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2011-10-10 15:45    [W:0.023 / U:275.384 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site