diff options
author | Andy Lutomirski <luto@amacapital.net> | 2014-06-04 10:31:15 -0700 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2014-12-03 14:51:48 +0800 |
commit | 7f219d1ce0462bfc2757abffe608ad500988f9c8 (patch) | |
tree | bcff9afe3e387f4fe1b528b94c107af6876d4c00 | |
parent | 3dc597c976d92f0be83c3a1ee90fd3b3c13394ef (diff) |
sched, trace: Add a tracepoint for IPI-less remote wakeups
Remote wakeups of polling CPUs are a valuable performance
improvement; add a tracepoint to make it much easier to verify that
they're working.
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: nicolas.pitre@linaro.org
Cc: daniel.lezcano@linaro.org
Cc: umgwanakikbuti@gmail.com
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/16205aee116772aa686814f9b13bccb562108047.1401902905.git.luto@amacapital.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
(cherry picked from commit dfc68f29ae67f2a6e799b44e6a4eb3417dffbfcd)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
Conflicts:
include/trace/events/sched.h
-rw-r--r-- | include/trace/events/sched.h | 19 | ||||
-rw-r--r-- | kernel/sched/core.c | 4 |
2 files changed, 23 insertions, 0 deletions
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 2dee4ae666b..3f9e3e2f4a4 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h @@ -430,6 +430,25 @@ TRACE_EVENT(sched_pi_setprio, __entry->oldprio, __entry->newprio) ); +/* + * Tracepoint for waking a polling cpu without an IPI. + */ +TRACE_EVENT(sched_wake_idle_without_ipi, + + TP_PROTO(int cpu), + + TP_ARGS(cpu), + + TP_STRUCT__entry( + __field( int, cpu ) + ), + + TP_fast_assign( + __entry->cpu = cpu; + ), + + TP_printk("cpu=%d", __entry->cpu) +); #endif /* _TRACE_SCHED_H */ /* This part must be outside protection */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 15c6d6ad91a..588c4cc2cdb 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -565,6 +565,8 @@ void resched_task(struct task_struct *p) if (set_nr_and_not_polling(p)) smp_send_reschedule(cpu); + else + trace_sched_wake_idle_without_ipi(cpu); } void resched_cpu(int cpu) @@ -645,6 +647,8 @@ static void wake_up_idle_cpu(int cpu) smp_mb(); if (!tsk_is_polling(rq->idle)) smp_send_reschedule(cpu); + else + trace_sched_wake_idle_without_ipi(cpu); } static bool wake_up_full_nohz_cpu(int cpu) |