All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrea Righi <arighi@nvidia.com>
To: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Valentin Schneider <vschneid@redhat.com>,
	Tim C Chen <tim.c.chen@linux.intel.com>,
	Chen Yu <yu.c.chen@intel.com>,
	Christian Loehle <christian.loehle@arm.com>,
	K Prateek Nayak <kprateek.nayak@amd.com>,
	Barry Song <baohua@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Len Brown <lenb@kernel.org>,
	ricardo.neri@intel.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 5/6] sched/fair: Allow load balancing between CPUs of identical capacity
Date: Sat, 27 Jun 2026 21:07:19 +0200	[thread overview]
Message-ID: <akAfZ_5n2AIp-XzA@gpd4> (raw)
In-Reply-To: <20260622-rneri-fix-cas-clusters-v5-5-19968f2d1497@linux.intel.com>

Hi Ricardo,

On Mon, Jun 22, 2026 at 05:05:55PM -0700, Ricardo Neri wrote:
> sched_balance_find_src_rq() avoids selecting a runqueue with a single
> running task as busiest if doing so results in migrating the task to a
> CPU with less than ~5% of extra capacity. It also unintentionally
> prevents migrations between CPUs of identical capacity.
> 
> When CONFIG_SCHED_CLUSTER is enabled, load should be balanced across
> clusters of CPUs with the same capacity. Allowing migration between CPUs
> of identical capacity is necessary to meet this goal.
> 
> Use arch_scale_cpu_capacity() to reflect architectural capacity, excluding
> runtime reductions due to side activity or thermal pressure. Guard this
> check with the sched_cluster_active static key so that systems without
> cluster topology are unaffected.
> 
> Tested-by: Christian Loehle <christian.loehle@arm.com>
> Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
> ---
> Changes in v5:
>  * Optimized logic to identify same-arch clusters only when needed.
>  * Added Tested-by tag from Christian. Thanks!
> 
> Changes in v4:
>  * Implemented the check for cluster with a local variable for improved
>    readability.
> 
> Changes in v3:
>  * Reverted the inverted capacity check; the inverted form incorrectly
>    allows migrations to CPUs of slightly less capacity.
>  * Guarded the check for architectural capacity with the
>    sched_cluster_active static key.
> 
> Changes in v2:
>  * Used arch_scale_cpu_capacity() instead of capacity_of() to ignore
>    runtime variability.
>  * Inverted the check for runtime capacity. (Christian)
>  * Reworded patch description for clarity.
> ---
>  kernel/sched/fair.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index e55eb019d2c9..f4eb55cad54d 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -12992,13 +12992,20 @@ static struct rq *sched_balance_find_src_rq(struct lb_env *env,
>  		 */
>  		if (env->sd->flags & SD_ASYM_CPUCAPACITY &&
>  		    nr_running == 1) {
> +			bool same_arch_cluster = static_branch_unlikely(&sched_cluster_active) &&
> +						 (arch_scale_cpu_capacity(env->dst_cpu) ==
> +						  arch_scale_cpu_capacity(i));

I find same_arch_cluster a bit misleading. It sounds like "these two CPUs belong
to the same cluster", while what it actually checks is whether a cluster
topology exists somewhere in the root domain and the two CPUs have exactly the
same architectural capacity. Am I understanding it correctly?

If so, would something like same_arch_capacity or cluster_equal_capacity be a
better name? I think either would make the intent of the code a bit clearer.

Thanks,
-Andrea

>  			bool smt_degraded_cap = sched_smt_active() && !is_core_idle(i);
>  
>  			/*
>  			 * Busy SMT siblings reduce the capacity of CPU @i. Do
>  			 * not skip it in this case.
> +			 *
> +			 * CONFIG_SCHED_CLUSTER requires balancing load across clusters
> +			 * of identical capacity. Use architectural capacity to ignore
> +			 * runtime variability.
>  			 */
> -			if (!smt_degraded_cap &&
> +			if (!smt_degraded_cap && !same_arch_cluster &&
>  			    !capacity_greater(capacity_of(env->dst_cpu), capacity))
>  				continue;
>  		}
> 
> -- 
> 2.43.0
> 

  parent reply	other threads:[~2026-06-27 19:07 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-23  0:05 [PATCH v5 0/6] sched: Fix cluster scheduling in the presence of asymmetric capacity Ricardo Neri
2026-06-23  0:05 ` [PATCH v5 1/6] sched/fair: Do not skip CPUs of similar capacity with busy SMT siblings Ricardo Neri
2026-06-23  7:13   ` Vincent Guittot
2026-06-24  5:25     ` Ricardo Neri
2026-06-23  0:05 ` [PATCH v5 2/6] sched/fair: Also gate overloaded status update for SD_ASYM_CPUCAPACITY Ricardo Neri
2026-06-23  7:14   ` Vincent Guittot
2026-06-23  0:05 ` [PATCH v5 3/6] sched/fair: Check CPU capacity before comparing group types during load balance Ricardo Neri
2026-06-23  0:05 ` [PATCH v5 4/6] sched/fair: Skip misfit load accounting when the destination CPU cannot help Ricardo Neri
2026-06-23  0:05 ` [PATCH v5 5/6] sched/fair: Allow load balancing between CPUs of identical capacity Ricardo Neri
2026-06-23  7:20   ` Vincent Guittot
2026-06-23  7:45     ` Christian Loehle
2026-06-24  5:25       ` Ricardo Neri
2026-06-26  0:11         ` Ricardo Neri
2026-06-26 14:50           ` Vincent Guittot
2026-06-27  2:02             ` Ricardo Neri
2026-06-26 15:20       ` Vincent Guittot
2026-06-27 19:07   ` Andrea Righi [this message]
2026-06-23  0:05 ` [PATCH v5 6/6] sched/topology: Do not clear SD_PREFER_SIBLING in domains with clusters Ricardo Neri
2026-06-23  7:26   ` Vincent Guittot
2026-06-24  5:14     ` Ricardo Neri
2026-06-26  0:19       ` Ricardo Neri
2026-06-26 14:54         ` Vincent Guittot

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=akAfZ_5n2AIp-XzA@gpd4 \
    --to=arighi@nvidia.com \
    --cc=baohua@kernel.org \
    --cc=bsegall@google.com \
    --cc=christian.loehle@arm.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rafael@kernel.org \
    --cc=ricardo.neri-calderon@linux.intel.com \
    --cc=ricardo.neri@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=tim.c.chen@linux.intel.com \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=yu.c.chen@intel.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.