Re: [PATCH v13 09/13] sched/debug: Add migration stats due to non preferred CPUs
From: Shrikanth Hegde
Date: Fri Sep 25 2026 - 12:31:08 EST
Hi Peter.
On 9/25/26 9:15 PM, Peter Zijlstra wrote:
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 <sshegde@xxxxxxxxxxxxx>
---
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.
This doesn't change /proc/schedstat. Tt does rather change in /proc/<pid>/sched
which isn't defined by version number IIRC.
Also i don't recollect that perf sched stat using anything from /proc/<pid>/sched
I skimmed through this.
https://lore.kernel.org/all/20260119175833.340369-1-swapnil.sapkal@xxxxxxx/
So I don't think we need to update the version.