All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <yury.norov@gmail.com>
To: Shrikanth Hegde <sshegde@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	peterz@infradead.org, juri.lelli@redhat.com,
	vincent.guittot@linaro.org, yury.norov@gmail.com,
	kprateek.nayak@amd.com, iii@linux.ibm.com, tglx@kernel.org,
	gregkh@linuxfoundation.org, pbonzini@redhat.com,
	seanjc@google.com, vschneid@redhat.com, huschle@linux.ibm.com,
	rostedt@goodmis.org, dietmar.eggemann@arm.com, mgorman@suse.de,
	bsegall@google.com, maddy@linux.ibm.com, srikar@linux.ibm.com,
	hdanton@sina.com, chleroy@kernel.org, vineeth@bitbyteword.org,
	frederic@kernel.org, arighi@nvidia.com, pauld@redhat.com,
	christian.loehle@arm.com, tj@kernel.org,
	tommaso.cucinotta@gmail.com, maz@kernel.org, rafael@kernel.org
Subject: Re: [PATCH v4 16/20] sched/core: Introduce default arch handling code for inc/dec preferred CPUs
Date: Thu, 18 Jun 2026 00:15:07 -0400	[thread overview]
Message-ID: <ajNwy25WYg45AQJX@yury> (raw)
In-Reply-To: <20260617174139.155540-17-sshegde@linux.ibm.com>

On Wed, Jun 17, 2026 at 11:11:35PM +0530, Shrikanth Hegde wrote:
> Define default handlers for high/low steal time. If arch has better
> decision logic, may override the default implementation.
> 
> - If the steal time higher than threshold, reduce the number of preferred
>   CPUs by 1 core. The last core in the intersection of active and
>   preferred CPUs will be marked as non-preferred.
>   Ensure at least one core is left as preferred always.
> 
> - If the steal time lower than threshold, increase the number of preferred
>   CPUs by 1 core. First active core which is not in cpu_preferred_mask will
>   be marked as preferred.
>   If all cores are already set to preferred, bail out.

And the code below does nothing of that.
 
> Increase/Decrease may need to modify the splicing across NUMA nodes. It is
> being kept simple for now.
> 
> Signed-off-by: Shrikanth Hegde <sshegde@linux.ibm.com>
> ---
> v3->v4:
> - active instead of online
> - added comment for enabling tick for nohz_full.
> 
>  include/linux/sched.h |  2 ++
>  kernel/sched/core.c   | 61 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 63 insertions(+)
> 
> diff --git a/include/linux/sched.h b/include/linux/sched.h
> index 5b15353ed7ef..e435f3073ffc 100644
> --- a/include/linux/sched.h
> +++ b/include/linux/sched.h
> @@ -2529,5 +2529,7 @@ struct steal_monitor_t {
>  };
>  
>  extern struct steal_monitor_t steal_mon;
> +void arch_dec_preferred_cpus(struct steal_monitor_t *sm, u64 steal_ratio);
> +void arch_inc_preferred_cpus(struct steal_monitor_t *sm, u64 steal_ratio);
>  #endif
>  #endif
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index f1a91021e357..c77045055604 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -11400,6 +11400,67 @@ void sched_init_steal_monitor(void)
>  	steal_mon.sampling_period_ms  = 1000;		/* once per second */
>  }
>  
> +/*
> + * Default implementation of decrementing the preferred CPUs based on steal
> + * time. This is simple logic and decrease the preferred CPUs by 1 core.
> + * It takes out the last core in the active & preferred.
> + *
> + * Ensure at least one housekeeping core is always kept as preferred
> + *
> + * Could be overwritten by arch specific handling.
> + */
> +#ifndef arch_dec_preferred_cpus
> +void arch_dec_preferred_cpus(struct steal_monitor_t *sm, u64 steal_ratio)
> +{
> +	int last_cpu, tmp_cpu;
> +	int this_cpu = raw_smp_processor_id();
> +
> +	last_cpu = cpumask_last(cpu_preferred_mask);
> +
> +	/*
> +	 * If the core belongs to the housekeeping CPUs, no action is
> +	 * taken. This leaves at least one core preferred always.
> +	 * This ensures at least some CPUs are available to run
> +	 */
> +	if (cpumask_equal(cpu_smt_mask(last_cpu), cpu_smt_mask(this_cpu)))
> +		return;
> +
> +	/*
> +	 * set tick bit for nohz_full CPU to push the task out. Once the tasks
> +	 * are pushed out, bit will be cleared
> +	 */
> +	for_each_cpu_and(tmp_cpu, cpu_smt_mask(last_cpu), cpu_active_mask) {
> +		set_cpu_preferred(tmp_cpu, false);
> +		if (tick_nohz_full_cpu(tmp_cpu))
> +			tick_nohz_dep_set_cpu(tmp_cpu, TICK_DEP_BIT_SCHED);
> +	}
> +}
> +#endif
> +
> +/*
> + * Default implementation of incrementing preferred CPUs based on steal
> + * time. This is simple logic and increases the preferred CPUs by 1 core.
> + * It adds the first core in active & !preferred
> + *
> + * Nothing to do if active == preferred
> + *
> + * Could be overwritten by arch specific handling.
> + */
> +#ifndef arch_inc_preferred_cpus
> +void arch_inc_preferred_cpus(struct steal_monitor_t *sm, u64 steal_ratio)
> +{
> +	int first_cpu, tmp_cpu;
> +
> +	first_cpu = cpumask_first_andnot(cpu_active_mask, cpu_preferred_mask);
> +	/* All CPUs are preferred. Nothing to increase further */
> +	if (first_cpu >= nr_cpu_ids)
> +		return;
> +
> +	for_each_cpu_and(tmp_cpu, cpu_smt_mask(first_cpu), cpu_active_mask)
> +		set_cpu_preferred(tmp_cpu, true);
> +}
> +#endif
> +
>  /* This is only a skeleton. Subsequent patches introduce more of it */
>  void sched_steal_detection_work(struct work_struct *work)
>  {
> -- 
> 2.47.3

  reply	other threads:[~2026-06-18  4:15 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-17 17:41 [PATCH v4 00/20] sched: Introduce cpu_preferred_mask and steal-driven vCPU backoff Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 01/20] sched/debug: Remove unused schedstats Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 02/20] sched/docs: Document cpu_preferred_mask and Preferred CPU concept Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 03/20] kconfig: Provide PREFERRED_CPU option Shrikanth Hegde
2026-06-18  0:51   ` Yury Norov
2026-06-18  3:44     ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 04/20] cpumask: Introduce cpu_preferred_mask Shrikanth Hegde
2026-06-18  1:29   ` Yury Norov
2026-06-18  3:53     ` Shrikanth Hegde
2026-06-18  8:27       ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 05/20] sysfs: Add preferred CPU file Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 06/20] sched/core: allow only preferred CPUs in is_cpu_allowed Shrikanth Hegde
2026-06-18  3:32   ` Yury Norov
2026-06-18  4:17     ` Shrikanth Hegde
2026-06-18  4:49       ` Yury Norov
2026-06-18  5:14         ` Shrikanth Hegde
2026-06-18  3:49   ` K Prateek Nayak
2026-06-18  4:22     ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 07/20] sched/fair: Select preferred CPU at wakeup when possible Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 08/20] sched/fair: load balance only among preferred CPUs Shrikanth Hegde
2026-06-18  3:03   ` K Prateek Nayak
2026-06-18  3:54     ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 09/20] sched/core: Keep tick on non-preferred CPUs until tasks are out Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 10/20] sched/core: Push current task from non preferred CPU Shrikanth Hegde
2026-06-18  4:09   ` K Prateek Nayak
2026-06-18  6:05     ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 11/20] sched/debug: Add migration stats due to non preferred CPUs Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 12/20] sched/debug: Create debugfs folder steal monitor Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 13/20] sched/debug: Provide debugfs to enable/disable " Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 14/20] sched/core: Introduce a simple " Shrikanth Hegde
2026-06-18  4:30   ` Yury Norov
2026-06-18  4:44     ` Shrikanth Hegde
2026-06-18  5:32       ` K Prateek Nayak
2026-06-18  6:01         ` Shrikanth Hegde
2026-06-18  6:39           ` Yury Norov
2026-06-18  6:45             ` Shrikanth Hegde
2026-06-18  7:16               ` Yury Norov
2026-06-17 17:41 ` [PATCH v4 15/20] sched/core: Compute steal values at regular intervals Shrikanth Hegde
2026-06-18  4:04   ` Yury Norov
2026-06-18  5:39     ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 16/20] sched/core: Introduce default arch handling code for inc/dec preferred CPUs Shrikanth Hegde
2026-06-18  4:15   ` Yury Norov [this message]
2026-06-18  4:42     ` Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 17/20] sched/core: Handle steal values and mark CPUs as preferred Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 18/20] sched/core: Mark the direction of steal values to avoid oscillations Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 19/20] sched/debug: Add debug knobs for steal monitor Shrikanth Hegde
2026-06-17 17:41 ` [PATCH v4 20/20] sched/core: Add a few check for valid CPU in inc/dec of preferred CPUs Shrikanth Hegde
2026-06-18  4:21   ` Yury Norov
2026-06-18  4:40     ` Shrikanth Hegde

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ajNwy25WYg45AQJX@yury \
    --to=yury.norov@gmail.com \
    --cc=arighi@nvidia.com \
    --cc=bsegall@google.com \
    --cc=chleroy@kernel.org \
    --cc=christian.loehle@arm.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=frederic@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdanton@sina.com \
    --cc=huschle@linux.ibm.com \
    --cc=iii@linux.ibm.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maddy@linux.ibm.com \
    --cc=maz@kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@kernel.org \
    --cc=pauld@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rafael@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=seanjc@google.com \
    --cc=srikar@linux.ibm.com \
    --cc=sshegde@linux.ibm.com \
    --cc=tglx@kernel.org \
    --cc=tj@kernel.org \
    --cc=tommaso.cucinotta@gmail.com \
    --cc=vincent.guittot@linaro.org \
    --cc=vineeth@bitbyteword.org \
    --cc=vschneid@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.