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.

My reading of the below code ends up with something like:

 - nr_migrations_cpu_non_preferred: number of push migrations while the
   CPU is non-preferred.

Hmm?

> 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);
> -- 
> 2.52.0
> 

Reply via email to