Messages in this thread | | | Date | Thu, 3 May 2012 14:13:27 -0700 | Subject | Re: [PATCHv3 5/5] cpuidle: coupled: add trace events | From | Colin Cross <> |
| |
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/
| |