On Wed, Sep 09, 2026 at 07:26:13PM +0530, Shrikanth Hegde wrote: > Add a new stat, > - nr_migrations_cpu_non_preferred: number of migrations happened since > a CPU was marked as non preferred due to high steal time. > > Signed-off-by: Shrikanth Hegde <[email protected]> > --- > include/linux/sched.h | 1 + > kernel/sched/core.c | 9 +++++++-- > kernel/sched/debug.c | 1 + > 3 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/include/linux/sched.h b/include/linux/sched.h > index d7cc77181ef9..48639b0c75d0 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -554,6 +554,7 @@ struct sched_statistics { > u64 nr_failed_migrations_running; > u64 nr_failed_migrations_hot; > u64 nr_forced_migrations; > + u64 nr_migrations_cpu_non_preferred; > > u64 nr_wakeups; > u64 nr_wakeups_sync; > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 458b8c6fd9af..fb8404bd47e2 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -11239,8 +11239,13 @@ static int sched_non_preferred_cpu_push_stop(void > *arg) > context_unsafe_alias(rq); > > if (task_rq(p) == rq && task_on_rq_queued(p) && > - !is_migration_disabled(p)) > - rq = __migrate_task(rq, &rf, p, cpu); > + !is_migration_disabled(p)) { > + struct rq *dest_rq = __migrate_task(rq, &rf, p, cpu); > + > + if (rq != dest_rq) > + schedstat_inc(p->stats.nr_migrations_cpu_non_preferred); > + rq = dest_rq; > + } > > rq_unlock(rq, &rf); > raw_spin_unlock_irq(&p->pi_lock); > diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c > index fda10b3fa249..e6a3b516c703 100644 > --- a/kernel/sched/debug.c > +++ b/kernel/sched/debug.c > @@ -1440,6 +1440,7 @@ void proc_sched_show_task(struct task_struct *p, struct > pid_namespace *ns, > P_SCHEDSTAT(nr_failed_migrations_running); > P_SCHEDSTAT(nr_failed_migrations_hot); > P_SCHEDSTAT(nr_forced_migrations); > + P_SCHEDSTAT(nr_migrations_cpu_non_preferred); > P_SCHEDSTAT(nr_wakeups); > P_SCHEDSTAT(nr_wakeups_sync); > P_SCHEDSTAT(nr_wakeups_migrate);
Should we not also bump the schedstat version? I forgot the rules, but you do change the output. And did we ever merge that perf schedstat thing, then that probably needs 'fixing' for the new format too.

