From: Chen Yu <yu.c.chen@intel.com>
To: Jianyong Wu <wujianyong@hygon.cn>
Cc: <mingo@redhat.com>, <peterz@infradead.org>,
<juri.lelli@redhat.com>, <vincent.guittot@linaro.org>,
<tim.c.chen@linux.intel.com>, <dietmar.eggemann@arm.com>,
<rostedt@goodmis.org>, <bsegall@google.com>, <mgorman@suse.de>,
<vschneid@redhat.com>, <kprateek.nayak@amd.com>,
<linux-kernel@vger.kernel.org>, <jianyong.wu@outlook.com>,
<liuyibin@hygon.cn>, <zhongyuan@hygon.cn>
Subject: Re: [PATCH] sched/cache: Fix group_llc_balance being unreachable above the first NUMA level
Date: Thu, 5 Nov 2026 11:04:16 +0800 [thread overview]
Message-ID: <auvyMJU02aAFRB6P@chenyu-dev> (raw)
In-Reply-To: <20261104141313.185433-1-wujianyong@hygon.cn>
Hi Jianyong,
On Wed, Nov 04, 2026 at 10:13:13PM +0800, Jianyong Wu wrote:
> sched_balance_find_src_group() only considers group_llc_balance when
> sds.prefer_sibling is set:
>
> if (sds.prefer_sibling && local->group_type == group_has_spare &&
> (busiest->group_type == group_llc_balance ||
> sibling_imbalance(env, &sds, busiest, local) > 1))
> goto force_balance;
>
> sds.prefer_sibling mirrors SD_PREFER_SIBLING of the busiest group's child
> sched domain, and sd_init() clears that flag on every SD_NUMA domain.
> So on any domain whose child is itself a NUMA domain, i.e. on systems
> with more than one NUMA level such as multiple nodes per socket, groups
> tagged with group_llc_balance by llc_balance() can never take the
> force_balance path, and the group_llc_balance test there is dead code.
>
> Such a group falls into the !group_overloaded branch below and in the
> common case ends up in out_balanced, so a task that was placed beyond
> the first NUMA level is never pulled into its preferred LLC.
>
> On a 2-socket Hygon system (8 nodes, 32 LLCs, 4 cores per LLC), with
> "spin 3"/"spin 4" (3/4 busy threads of one process), all threads were
> in one LLC in only 41/140 and 0/142 samples; every failing case had a
> straggler on the other socket. With this patch: 195/196 and 180/196.
>
> Only require sds.prefer_sibling for the sibling_imbalance() case, which
> is what it was originally introduced for.
>
> Fixes: f38cc2f0d8a3 ("sched/cache: Prioritize tasks preferring destination LLC during balancing")
This patch looks reasonable. Is this an enhancement rather than a fix? Before this patch,
NUMA node task aggregation is disabled and task aggregation across SNC nodes (Intel) or
level1 Nodes (AMD, Hygon with NPS2/3...) is enabled. After this patch, both the NUMA level and the
SNC level enable task aggregation. Maybe some benchmark results in the next version would
be helpful to indicate that no regression is found while there is benefit on multi-node
domain systems (NUMA balancing enabled/disabled, etc.).
thanks,
Chenyu
> Reported-by: Yibin Liu <liuyibin@hygon.cn>
> Signed-off-by: Jianyong Wu <wujianyong@hygon.cn>
> ---
> kernel/sched/fair.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 57360f5cdde4..205a0891b0a0 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -13294,9 +13294,10 @@ static struct sched_group *sched_balance_find_src_group(struct lb_env *env)
> * Try to move all excess tasks to a sibling domain of the busiest
> * group's child domain.
> */
> - if (sds.prefer_sibling && local->group_type == group_has_spare &&
> + if (local->group_type == group_has_spare &&
> (busiest->group_type == group_llc_balance ||
> - sibling_imbalance(env, &sds, busiest, local) > 1))
> + (sds.prefer_sibling &&
> + sibling_imbalance(env, &sds, busiest, local) > 1)))
> goto force_balance;
>
> if (busiest->group_type != group_overloaded) {
> --
> 2.43.0
>
>
next prev parent reply other threads:[~2026-11-05 3:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 14:13 Jianyong Wu
2026-11-04 19:02 ` Tim Chen
2026-11-05 2:48 ` Jianyong Wu
2026-11-05 3:04 ` Chen Yu [this message]
2026-11-05 4:50 ` Jianyong Wu
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=auvyMJU02aAFRB6P@chenyu-dev \
--to=yu.c.chen@intel.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=jianyong.wu@outlook.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=liuyibin@hygon.cn \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tim.c.chen@linux.intel.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=wujianyong@hygon.cn \
--cc=zhongyuan@hygon.cn \
/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®