Thread (27 messages) 27 messages, 5 authors, 2012-05-04

[PATCHv3 5/5] cpuidle: coupled: add trace events

From: Colin Cross <hidden>
Date: 2012-05-03 21:13:30
Also in: linux-pm, lkml

On Thu, May 3, 2012 at 2:00 PM, Steven Rostedt [off-list ref] wrote:
On Mon, 2012-04-30 at 13:09 -0700, Colin Cross wrote:
quoted
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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help