Commit 9533ac62 authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'tip/perf/core' of...

Merge branch 'tip/perf/core' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/core
parents fe612672 75ec29ab
...@@ -280,6 +280,12 @@ static inline void tracepoint_synchronize_unregister(void) ...@@ -280,6 +280,12 @@ static inline void tracepoint_synchronize_unregister(void)
* TRACE_EVENT_FN to perform any (un)registration work. * TRACE_EVENT_FN to perform any (un)registration work.
*/ */
#define TRACE_EVENT_TEMPLATE(name, proto, args, tstruct, assign, print)
#define DEFINE_EVENT(template, name, proto, args) \
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
#define DEFINE_EVENT_PRINT(template, name, proto, args, print) \
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
#define TRACE_EVENT(name, proto, args, struct, assign, print) \ #define TRACE_EVENT(name, proto, args, struct, assign, print) \
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
#define TRACE_EVENT_FN(name, proto, args, struct, \ #define TRACE_EVENT_FN(name, proto, args, struct, \
......
...@@ -31,6 +31,14 @@ ...@@ -31,6 +31,14 @@
assign, print, reg, unreg) \ assign, print, reg, unreg) \
DEFINE_TRACE_FN(name, reg, unreg) DEFINE_TRACE_FN(name, reg, unreg)
#undef DEFINE_EVENT
#define DEFINE_EVENT(template, name, proto, args) \
DEFINE_TRACE(name)
#undef DEFINE_EVENT_PRINT
#define DEFINE_EVENT_PRINT(template, name, proto, args, print) \
DEFINE_TRACE(name)
#undef DECLARE_TRACE #undef DECLARE_TRACE
#define DECLARE_TRACE(name, proto, args) \ #define DECLARE_TRACE(name, proto, args) \
DEFINE_TRACE(name) DEFINE_TRACE(name)
...@@ -63,6 +71,9 @@ ...@@ -63,6 +71,9 @@
#undef TRACE_EVENT #undef TRACE_EVENT
#undef TRACE_EVENT_FN #undef TRACE_EVENT_FN
#undef TRACE_EVENT_TEMPLATE
#undef DEFINE_EVENT
#undef DEFINE_EVENT_PRINT
#undef TRACE_HEADER_MULTI_READ #undef TRACE_HEADER_MULTI_READ
/* Only undef what we defined in this file */ /* Only undef what we defined in this file */
......
...@@ -83,7 +83,7 @@ TRACE_EVENT(sched_wait_task, ...@@ -83,7 +83,7 @@ TRACE_EVENT(sched_wait_task,
* (NOTE: the 'rq' argument is not used by generic trace events, * (NOTE: the 'rq' argument is not used by generic trace events,
* but used by the latency tracer plugin. ) * but used by the latency tracer plugin. )
*/ */
TRACE_EVENT(sched_wakeup, TRACE_EVENT_TEMPLATE(sched_wakeup_template,
TP_PROTO(struct rq *rq, struct task_struct *p, int success), TP_PROTO(struct rq *rq, struct task_struct *p, int success),
...@@ -110,38 +110,19 @@ TRACE_EVENT(sched_wakeup, ...@@ -110,38 +110,19 @@ TRACE_EVENT(sched_wakeup,
__entry->success, __entry->target_cpu) __entry->success, __entry->target_cpu)
); );
DEFINE_EVENT(sched_wakeup_template, sched_wakeup,
TP_PROTO(struct rq *rq, struct task_struct *p, int success),
TP_ARGS(rq, p, success));
/* /*
* Tracepoint for waking up a new task: * Tracepoint for waking up a new task:
* *
* (NOTE: the 'rq' argument is not used by generic trace events, * (NOTE: the 'rq' argument is not used by generic trace events,
* but used by the latency tracer plugin. ) * but used by the latency tracer plugin. )
*/ */
TRACE_EVENT(sched_wakeup_new, DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
TP_PROTO(struct rq *rq, struct task_struct *p, int success), TP_PROTO(struct rq *rq, struct task_struct *p, int success),
TP_ARGS(rq, p, success));
TP_ARGS(rq, p, success),
TP_STRUCT__entry(
__array( char, comm, TASK_COMM_LEN )
__field( pid_t, pid )
__field( int, prio )
__field( int, success )
__field( int, target_cpu )
),
TP_fast_assign(
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
__entry->pid = p->pid;
__entry->prio = p->prio;
__entry->success = success;
__entry->target_cpu = task_cpu(p);
),
TP_printk("comm=%s pid=%d prio=%d success=%d target_cpu=%03d",
__entry->comm, __entry->pid, __entry->prio,
__entry->success, __entry->target_cpu)
);
/* /*
* Tracepoint for task switches, performed by the scheduler: * Tracepoint for task switches, performed by the scheduler:
...@@ -216,10 +197,7 @@ TRACE_EVENT(sched_migrate_task, ...@@ -216,10 +197,7 @@ TRACE_EVENT(sched_migrate_task,
__entry->orig_cpu, __entry->dest_cpu) __entry->orig_cpu, __entry->dest_cpu)
); );
/* TRACE_EVENT_TEMPLATE(sched_process_template,
* Tracepoint for freeing a task:
*/
TRACE_EVENT(sched_process_free,
TP_PROTO(struct task_struct *p), TP_PROTO(struct task_struct *p),
...@@ -242,29 +220,19 @@ TRACE_EVENT(sched_process_free, ...@@ -242,29 +220,19 @@ TRACE_EVENT(sched_process_free,
); );
/* /*
* Tracepoint for a task exiting: * Tracepoint for freeing a task:
*/ */
TRACE_EVENT(sched_process_exit, DEFINE_EVENT(sched_process_template, sched_process_free,
TP_PROTO(struct task_struct *p), TP_PROTO(struct task_struct *p),
TP_ARGS(p));
TP_ARGS(p),
TP_STRUCT__entry( /*
__array( char, comm, TASK_COMM_LEN ) * Tracepoint for a task exiting:
__field( pid_t, pid ) */
__field( int, prio ) DEFINE_EVENT(sched_process_template, sched_process_exit,
), TP_PROTO(struct task_struct *p),
TP_ARGS(p));
TP_fast_assign(
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
__entry->pid = p->pid;
__entry->prio = p->prio;
),
TP_printk("comm=%s pid=%d prio=%d",
__entry->comm, __entry->pid, __entry->prio)
);
/* /*
* Tracepoint for a waiting task: * Tracepoint for a waiting task:
...@@ -348,12 +316,7 @@ TRACE_EVENT(sched_signal_send, ...@@ -348,12 +316,7 @@ TRACE_EVENT(sched_signal_send,
* XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
* adding sched_stat support to SCHED_FIFO/RR would be welcome. * adding sched_stat support to SCHED_FIFO/RR would be welcome.
*/ */
TRACE_EVENT_TEMPLATE(sched_stat_template,
/*
* Tracepoint for accounting wait time (time the task is runnable
* but not actually running due to scheduler contention).
*/
TRACE_EVENT(sched_stat_wait,
TP_PROTO(struct task_struct *tsk, u64 delay), TP_PROTO(struct task_struct *tsk, u64 delay),
...@@ -379,97 +342,68 @@ TRACE_EVENT(sched_stat_wait, ...@@ -379,97 +342,68 @@ TRACE_EVENT(sched_stat_wait,
(unsigned long long)__entry->delay) (unsigned long long)__entry->delay)
); );
/* /*
* Tracepoint for accounting runtime (time the task is executing * Tracepoint for accounting wait time (time the task is runnable
* on a CPU). * but not actually running due to scheduler contention).
*/ */
TRACE_EVENT(sched_stat_runtime, DEFINE_EVENT(sched_stat_template, sched_stat_wait,
TP_PROTO(struct task_struct *tsk, u64 delay),
TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime), TP_ARGS(tsk, delay));
TP_ARGS(tsk, runtime, vruntime),
TP_STRUCT__entry(
__array( char, comm, TASK_COMM_LEN )
__field( pid_t, pid )
__field( u64, runtime )
__field( u64, vruntime )
),
TP_fast_assign(
memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
__entry->pid = tsk->pid;
__entry->runtime = runtime;
__entry->vruntime = vruntime;
)
TP_perf_assign(
__perf_count(runtime);
),
TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
__entry->comm, __entry->pid,
(unsigned long long)__entry->runtime,
(unsigned long long)__entry->vruntime)
);
/* /*
* Tracepoint for accounting sleep time (time the task is not runnable, * Tracepoint for accounting sleep time (time the task is not runnable,
* including iowait, see below). * including iowait, see below).
*/ */
TRACE_EVENT(sched_stat_sleep, DEFINE_EVENT_PRINT(sched_stat_template, sched_stat_sleep,
TP_PROTO(struct task_struct *tsk, u64 delay), TP_PROTO(struct task_struct *tsk, u64 delay),
TP_ARGS(tsk, delay), TP_ARGS(tsk, delay),
TP_printk("task: %s:%d sleep: %Lu [ns]",
TP_STRUCT__entry(
__array( char, comm, TASK_COMM_LEN )
__field( pid_t, pid )
__field( u64, delay )
),
TP_fast_assign(
memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
__entry->pid = tsk->pid;
__entry->delay = delay;
)
TP_perf_assign(
__perf_count(delay);
),
TP_printk("comm=%s pid=%d delay=%Lu [ns]",
__entry->comm, __entry->pid, __entry->comm, __entry->pid,
(unsigned long long)__entry->delay) (unsigned long long)__entry->delay));
);
/* /*
* Tracepoint for accounting iowait time (time the task is not runnable * Tracepoint for accounting iowait time (time the task is not runnable
* due to waiting on IO to complete). * due to waiting on IO to complete).
*/ */
TRACE_EVENT(sched_stat_iowait, DEFINE_EVENT_PRINT(sched_stat_template, sched_stat_iowait,
TP_PROTO(struct task_struct *tsk, u64 delay), TP_PROTO(struct task_struct *tsk, u64 delay),
TP_ARGS(tsk, delay), TP_ARGS(tsk, delay),
TP_printk("task: %s:%d iowait: %Lu [ns]",
__entry->comm, __entry->pid,
(unsigned long long)__entry->delay));
/*
* Tracepoint for accounting runtime (time the task is executing
* on a CPU).
*/
TRACE_EVENT(sched_stat_runtime,
TP_PROTO(struct task_struct *tsk, u64 runtime, u64 vruntime),
TP_ARGS(tsk, runtime, vruntime),
TP_STRUCT__entry( TP_STRUCT__entry(
__array( char, comm, TASK_COMM_LEN ) __array( char, comm, TASK_COMM_LEN )
__field( pid_t, pid ) __field( pid_t, pid )
__field( u64, delay ) __field( u64, runtime )
__field( u64, vruntime )
), ),
TP_fast_assign( TP_fast_assign(
memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN); memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
__entry->pid = tsk->pid; __entry->pid = tsk->pid;
__entry->delay = delay; __entry->runtime = runtime;
__entry->vruntime = vruntime;
) )
TP_perf_assign( TP_perf_assign(
__perf_count(delay); __perf_count(runtime);
), ),
TP_printk("comm=%s pid=%d delay=%Lu [ns]", TP_printk("comm=%s pid=%d runtime=%Lu [ns] vruntime=%Lu [ns]",
__entry->comm, __entry->pid, __entry->comm, __entry->pid,
(unsigned long long)__entry->delay) (unsigned long long)__entry->runtime,
(unsigned long long)__entry->vruntime)
); );
#endif /* _TRACE_SCHED_H */ #endif /* _TRACE_SCHED_H */
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment