mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
To: 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>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
	 Andrea Righi <arighi@nvidia.com>, Len Brown <lenb@kernel.org>,
	 ricardo.neri@intel.com, linux-kernel@vger.kernel.org,
	 Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Subject: [PATCH v5 6/6] sched/topology: Do not clear SD_PREFER_SIBLING in domains with clusters
Date: Mon, 22 Jun 2026 17:05:56 -0700	[thread overview]
Message-ID: <20260622-rneri-fix-cas-clusters-v5-6-19968f2d1497@linux.intel.com> (raw)
In-Reply-To: <20260622-rneri-fix-cas-clusters-v5-0-19968f2d1497@linux.intel.com>

Some topologies have scheduling domains that contain CPUs of asymmetric
capacity, grouped into two or more clusters of equal-capacity CPUs
sharing an L2 cache. When CONFIG_SCHED_CLUSTER is enabled, load must be
balanced across these clusters.

Do not clear SD_PREFER_SIBLING in the child domains to indicate to the
load balancer that it should spread load among cluster siblings.

Checks for capacity in update_sd_pick_busiest(),
sched_balance_find_src_group(), and sched_balance_find_src_rq() prevent
migrations from high- to low-capacity CPUs if the busiest group is not
overloaded.

CPUs with spare capacity, big or small, have always helped overloaded
groups. Once the overloading condition disappears, misfit load will still
be used to move high-utilization tasks to bigger CPUs if they have spare
capacity.

Adding the SD_PREFER_SIBLING flag shifts load balancing in shared-LLC
domains from equalizing the number of idle CPUs to equalizing the number
of running tasks. This also enables migrations among clusters from newly-
idle load balance, where the outgoing task is already dequeued but the CPU
has not yet transitioned to idle.

Reviewed-by: Tim Chen <tim.c.chen@linux.intel.com>
Tested-by: Christian Loehle <christian.loehle@arm.com>
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
---
Changes in v5:
 * Improved inline comments for accuracy.
 * Added Tested-by tag from Christian. Thanks!

Changes in v4:
 * Added Reviewed-by tag from Tim. Thanks!

Changes in v3:
 * Updated documentation of SD_PREFER_SIBLING.
 * Expanded the patch description to explain the behavior when overloaded
   groups are involved.

Changes in v2:
 * Reworded the patch description for clarity.
 * Kept parentheses around bitwise operators for clarity.
---
 include/linux/sched/sd_flags.h |  3 ++-
 kernel/sched/topology.c        | 14 ++++++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/include/linux/sched/sd_flags.h b/include/linux/sched/sd_flags.h
index 42839cfa2778..f9a46fb8cacf 100644
--- a/include/linux/sched/sd_flags.h
+++ b/include/linux/sched/sd_flags.h
@@ -147,7 +147,8 @@ SD_FLAG(SD_ASYM_PACKING, SDF_NEEDS_GROUPS)
  * Prefer to place tasks in a sibling domain
  *
  * Set up until domains start spanning NUMA nodes. Close to being a SHARED_CHILD
- * flag, but cleared below domains with SD_ASYM_CPUCAPACITY.
+ * flag, but cleared below domains with SD_ASYM_CPUCAPACITY unless those child
+ * domains have clusters of CPUs sharing cache.
  *
  * NEEDS_GROUPS: Load balancing flag.
  */
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index 622e2e01974c..261b407d0936 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -1995,8 +1995,18 @@ sd_init(struct sched_domain_topology_level *tl,
 	/*
 	 * Convert topological properties into behaviour.
 	 */
-	/* Don't attempt to spread across CPUs of different capacities. */
-	if ((sd->flags & SD_ASYM_CPUCAPACITY) && sd->child)
+	/*
+	 * Don't attempt to spread across CPUs of different capacities.
+	 *
+	 * If the child domain has clusters of CPUs sharing L2 cache, keep the
+	 * flag to spread tasks across clusters of identical capacity. Checks in
+	 * the load balancer prevent task migrations from high- to low-capacity
+	 * CPUs unless the source group is overloaded. Migrations to a lower-
+	 * capacity CPU can happen if a higher-capacity group is overloaded and
+	 * a lower-capacity CPU has spare capacity.
+	 */
+	if ((sd->flags & SD_ASYM_CPUCAPACITY) && sd->child &&
+	    !(sd->child->flags & SD_CLUSTER))
 		sd->child->flags &= ~SD_PREFER_SIBLING;
 
 	if (sd->flags & SD_SHARE_CPUCAPACITY) {

-- 
2.43.0


  parent reply	other threads:[~2026-06-22 23:55 UTC|newest]

Thread overview: 30+ 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-29 15:35               ` Vincent Guittot
2026-06-29 15:54                 ` Rafael J. Wysocki (Intel)
2026-06-29 15:58                   ` Vincent Guittot
2026-06-29 16:32                     ` Ricardo Neri
2026-06-30  7:00                       ` Vincent Guittot
2026-06-26 15:20       ` Vincent Guittot
2026-06-27 19:07   ` Andrea Righi
2026-06-29 16:22     ` Ricardo Neri
2026-06-23  0:05 ` Ricardo Neri [this message]
2026-06-23  7:26   ` [PATCH v5 6/6] sched/topology: Do not clear SD_PREFER_SIBLING in domains with clusters Vincent Guittot
2026-06-24  5:14     ` Ricardo Neri
2026-06-26  0:19       ` Ricardo Neri
2026-06-26 14:54         ` Vincent Guittot
2026-06-29 13:10 ` [PATCH v5 0/6] sched: Fix cluster scheduling in the presence of asymmetric capacity Andrea Righi
2026-06-29 16:24   ` Ricardo Neri

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=20260622-rneri-fix-cas-clusters-v5-6-19968f2d1497@linux.intel.com \
    --to=ricardo.neri-calderon@linux.intel.com \
    --cc=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@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®