Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Thu, 29 Feb 2024 19:26:24 -0800 | Subject | [PATCH v2] sched: Add trace_sched_waking() tracepoint to sched_ttwu_pending() | From | John Stultz <> |
| |
Zimuzo reported seeing occasional cases in perfetto traces where tasks went from sleeping directly to trace_sched_wakeup() without always seeing a trace_sched_waking().
Looking at the code, trace_sched_wakeup() is only called in ttwu_do_wakeup()
The call paths that get you to ttwu_do_wakeup() are: try_to_wake_up() -> ttwu_do_wakeup() try_to_wake_up() -> ttwu_runnable() -> ttwu_do_wakeup() try_to_wake_up() -> ttwu_queue() -> ttwu_do_activate() -> ttwu_do_wakeup() sched_ttwu_pending() -> ttwu_do_activate() -> ttwu_do_wakeup()
where trace_sched_waking() is currently called only in try_to_wake_up().
So add a trace_sched_waking() call to sched_ttwu_pending(), so we see the same state machine transitions.
With this change, the number of unexpected state transitions in perfetto was greatly reduced.
Cc: Ingo Molnar <mingo@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Vincent Guittot <vincent.guittot@linaro.org> Cc: Dietmar Eggemann <dietmar.eggemann@arm.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Ben Segall <bsegall@google.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Daniel Bristot de Oliveira <bristot@redhat.com> Cc: Phil Auld <pauld@redhat.com> Cc: Valentin Schneider <vschneid@redhat.com> Cc: kernel-team@android.com Reviewed-by: Phil Auld <pauld@redhat.com> Reported-by: Zimuzo Ezeozue <zezeozue@google.com> Signed-off-by: John Stultz <jstultz@google.com> --- v2: * Minor commit message fix suggested by Phil Auld --- kernel/sched/core.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 9116bcc90346..233f06360d6a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3894,6 +3894,7 @@ void sched_ttwu_pending(void *arg) if (WARN_ON_ONCE(task_cpu(p) != cpu_of(rq))) set_task_cpu(p, cpu_of(rq)); + trace_sched_waking(p); ttwu_do_activate(rq, p, p->sched_remote_wakeup ? WF_MIGRATED : 0, &rf); } -- 2.44.0.rc1.240.g4c46232300-goog
| ![\](/images/icornerr.gif) |