lkml.org 
[lkml]   [2012]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCHv3 5/5] cpuidle: coupled: add trace events
    From
    On Thu, May 3, 2012 at 2:00 PM, Steven Rostedt <rostedt@goodmis.org> wrote:
    > On Mon, 2012-04-30 at 13:09 -0700, Colin Cross wrote:
    >
    >> diff --git a/include/trace/events/cpuidle.h b/include/trace/events/cpuidle.h
    >> new file mode 100644
    >> index 0000000..9b2cbbb
    >> --- /dev/null
    >> +++ b/include/trace/events/cpuidle.h
    >> @@ -0,0 +1,243 @@
    >> +#undef TRACE_SYSTEM
    >> +#define TRACE_SYSTEM cpuidle
    >> +
    >> +#if !defined(_TRACE_CPUIDLE_H) || defined(TRACE_HEADER_MULTI_READ)
    >> +#define _TRACE_CPUIDLE_H
    >> +
    >> +#include <linux/atomic.h>
    >> +#include <linux/tracepoint.h>
    >> +
    >> +extern atomic_t cpuidle_trace_seq;
    >> +
    >> +TRACE_EVENT(coupled_enter,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_exit,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_spin,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_unspin,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_safe_enter,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_safe_exit,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_idle_enter,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_idle_exit,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_abort,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_detected_abort,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_poke,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >> +
    >> +TRACE_EVENT(coupled_poked,
    >> +
    >> +     TP_PROTO(unsigned int cpu),
    >> +
    >> +     TP_ARGS(cpu),
    >> +
    >> +     TP_STRUCT__entry(
    >> +             __field(unsigned int, cpu)
    >> +             __field(unsigned int, seq)
    >> +     ),
    >> +
    >> +     TP_fast_assign(
    >> +             __entry->cpu = cpu;
    >> +             __entry->seq = atomic_inc_return(&cpuidle_trace_seq);
    >> +     ),
    >> +
    >> +     TP_printk("%u %u", __entry->seq, __entry->cpu)
    >> +);
    >
    > Egad! Please use DECLARE_EVENT_CLASS() and DEFINE_EVENT() when adding
    > events that are basically the same. Every TRACE_EVENT() can bloat the
    > kernel by 5k, using the DEFINE_EVENT()s keeps each event around just a
    > few hundred bytes.
    >
    > See include/trace/events/ext4.h for examples.

    Thanks, I'll take a look. There is no mention in Documentation/ or
    samples/ of DECLARE_EVENT_CLASS() or DEFINE_EVENT(), nor any mention
    of the cost of TRACE_EVENT().

    Looking at the new power tracing code, I will also rework these events
    to be more similar to the existing ones.

    I suggest skipping this patch for 3.5, and I'll post an updated one for 3.6.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-05-03 23:41    [W:5.311 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site