All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Chen <tim.c.chen@linux.intel.com>
To: Li kunyu <likunyu@open-hieco.net>,
	mingo@redhat.com, peterz@infradead.org, 	juri.lelli@redhat.com,
	vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
		rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de,
	vschneid@redhat.com, 	kprateek.nayak@amd.com
Cc: linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 0/6] sched/fair: Introduce the SMT_BUDDY_ASSIST feature
Date: Tue, 27 Oct 2026 13:59:50 -0700	[thread overview]
Message-ID: <6b637582edf72e2e013136be0ac979095fd5faed.camel@linux.intel.com> (raw)
In-Reply-To: <709db04c-eec7-db96-acca-81cb2ed7265f@open-hieco.net>

On Tue, 2026-10-27 at 18:44 +0800, Li kunyu wrote:
> Hi Tim,
> 
> On 2026/10/23 4:25, Tim Chen wrote:
> > On Tue, 2026-10-20 at 16:37 +0800, Li kunyu wrote:
> > > [Background]
> > > 
> > > In high-performance computing (HPC) and cloud computing scenarios,
> > > maximizing overall compute throughput and sustaining peak CPU capacity
> > > remain critical optimization goals. Within the scheduling domain, the
> > > primary optimization focuses include:
> > > 
> > > 1. Timely responsiveness for task wakeup and execution startup.
> > > 
> > > 2. Fast and balanced distribution of CPU utilization across cores.
> > > 
> > > 3. Preferring task migration within shared-cache domains (e.g., L3)
> > > before burst workloads arrive, so as to reduce cross-die or
> > > cross-node overhead.
> > > 
> > > During development, the following issues were encountered. The above
> > > approach ultimately yielded measurable performance improvements.
> > > 
> > > 
> > > [Problem]
> > > 
> > > It was found that on servers equipped with the Hygon 7447v CPU (Model 7,
> > > 384 logical cores), migrating tasks across LLC scheduling domains during
> > > load balancing caused significant performance degradation:
> > > 
> > > 1. A low L3 cache hitting rate (due to factors such as non-shared L3
> > > caches).
> > > 
> > > 2. The traversal overhead of higher-level scheduling domains (e.g.,
> > > cross-NUMA scheduling domains).
> > > 
> > > Similar issues were also observed on CPUs from other vendors during
> > > testing, though the degree of memory bandwidth increase and other
> > > latency effects varied. Consequently, a series of patches was developed
> > > to address and improve these issues.
> > > 
> > > 
> > > [Solution]
> > > 
> > > This RFC patch series introduces the SMT_BUDDY_ASSIST scheduling
> > > feature. The main work is as follows:
> > > 
> > > 1. Push CFS tasks to SMT sibling CPUs during periodic load balancing.
> > > 
> > > 2. Skip SMT-domain balancing after a successful push and avoid pulling
> > > the pushed task back.
> > > 
> > > 3. Restrict newidle balancing so it does not pull from higher-level
> > > scheduling domains.
> > Kunyu,
> > 
> > Have you tried to set relax_domain_level= in boot parameter to
> > prevent new idle balance across NUMA nodes?
> > 
> > grep . /sys/kernel/debug/sched/domains/cpu0/domain*/{name,level,flags}
> > 
> > to find the right level for NUMA and also if the SD_BALANCE_NEWIDLE
> > is turned off for NUMA after you set relax_domain_level.
> > 
> > Wonder how much this will improve things for you.
> 
> 
> I conducted a comparative test between patch4 and relax_domain_level=4
> (scheduling domain levels 3, SMT, LLC, and node). Their effective scheduling
> levels were the same, and their overall averages were quite close (+3.28%). The
> trends for each item were consistent.

Kunyu,

Thanks for running this quickly.

> 
> At present, relax_domain_level has not solved the problems encountered. It
> merely serves as a reference for patch4. Subsequent versions of patch4 will be
> optimized following the style of relax_domain_level.
> 
> I would like to seek your opinion on the modification of patch4. Please review
> the following:
> 
> 1. If relax_domain_level is set, patch4 is disabled.
> 
> 2. If relax_domain_level is not set and the feature is enabled, patch4 takes effect.
> 
> The overall average values and the data for each test are shown below. Here,
> smt_buddy denotes the patch4 code, and relax denotes the relax_domain_level = 4
> code:
> 
> 
> type           smt_buddy_pct  relax_pct
> hackbench	-14.94%	       -17.65%
> tbench	        +12.54%	       +8.70%
> schbench	-4.27%	       +0.48%
> STREAM	        +21.80%	       +23.29%
> unixBench	+1.19%	       +1.58%
> overall average	+3.27%	       +3.28%
> 
> 

From the data below, relax_domain_level=4 and the buddy patches give
similar results, including the STREAM gain and the hackbench
regression. To me patch4 duplicates what relax_domain_level
is trying to do, preventing new idle balance across NUMA
so I would drop it rather than add a mode that switches between the two.
That is also what Peter suggested about tweaking SD_BALANCE_NEWIDLE.

If this restriction should be the default on the Hygon 7447v
platform, that can be proposed separately as a topology/flags change
for it.

I am not convinced that patches 1-3, 5 are helpful.

The scenarios targeted by patch 1 should be handled mostly
by newidle balance at SMT and nohz-idle balance. That is
fairly frequent (~sd_weight or 2*sd_weight , i.e. 2ms-4ms for SMT2).
While patch1's task push fires at the frequency of SMT domain balance, which
is ~31 msec from get_sd_balance_interval() with busy factor and
8x to 16x less frequent than idle balance.

Please try Vincent's push task implementation
that is a more comprehensive implementation to quickly
send tasks that need to be run to available CPU:
https://lore.kernel.org/all/20261002154415.2270586-8-vincent.guittot@linaro.org/

patch 2-3 are mostly to prevent patch 1 from being undone,
and do not improve performance on their own.

On patch 5: the burst wakeup problem is real, but I think Peter's
idea (track average rq depth in periodic balance, and spread with
cpumask_any_distribute() when the local depth is well above it) is a
better direction than scanning nohz.idle_cpus_mask in the wakeup
path. That scan ignores LLC/NUMA locality, which goes against what
the series wants to achieve. It may be worth doing as a standalone
patch to deal with this issue.

Thanks.

Tim

> hackbench:
> group   base  smt_buddy relax   smt_buddy_pct  relax_pct
> g1	0.262	0.215	0.202	+17.79%	        +22.82%
> g2	0.288	0.322	0.334	-11.81%	        -16.12%
> g4	0.407	0.421	0.494	-3.29%	        -21.26%
> g8	0.567	0.613	0.756	-7.97%	        -33.17%
> g16	0.836	1.100	1.103	-31.61%	        -31.99%
> g32	1.411	1.907	1.646	-35.15%	        -16.63%
> g64	2.473	3.077	3.204	-24.44%	        -29.58%
> g128	4.502	5.538	5.190	-23.01%	        -15.28%
> 
> 
> tbench:
> clients   base        smt_buddy         relax      smt_buddy_pct  relax_pct
> 1	475.97	       493.30	        489.21	        +3.64%	  +2.78%
> 2	714.48	       680.53	        853.52	        -4.75%	  +19.46%
> 4	1349.73	       1569.21	        1493.59	        +16.26%	  +10.66%
> 8	2059.00	       2240.22	        2285.86	        +8.80%	  +11.02%
> 16	4364.25	       4326.11	        3381.46	        -0.87%	  -22.52%
> 32	8325.17	       7740.42	        7052.11	        -7.02%	  -15.29%
> 64	12614.20       12955.47	        14898.40	+2.71%	  +18.11%
> 128	15845.07       22412.27	        19323.67	+41.45%	  +21.95%
> 256	20837.93       30456.97	        29053.70	+46.16%	  +39.43%
> 512	29820.67       32227.33	        28809.13	+8.07%	  -3.39%
> 1024	25969.93       32078.90	        29487.20	+23.52%	  +13.54%
> 
> 
> schbench:
> threads   base        smt_buddy         relax      smt_buddy_pct  relax_pct
> t1	10.75	      9.20	        9.20	       +14.42%	  +14.42%
> t2	11.20	      13.00	        10.80	       -16.07%	  +3.57%
> t4	12.80	      14.80	        13.00	       -15.63%	  -1.56%
> t8	13.80	      14.20	        15.60	       -2.90%	  -13.04%
> t16	14.80	      16.20	        14.80	       -9.46%	  0.00%
> t32	17.00	      17.00	        16.60	       0.00%	  +2.35%
> t64	27.20	      1713.20	        1139.00	       abnormal   abnormal
> t128	2844.00	      2855.20	        2856.80	       -0.39%	  -0.45%
> t256	5656.00	      5668.80	        5672.00	       -0.23%	  -0.28%
> t512	9680.00	      10467.20	        9744.00	       -8.13%	  -0.66%
> 
> 
> STREAM-10:
> operation base        smt_buddy         relax      smt_buddy_pct  relax_pct
> Copy	  103034.5	114194.9	120734.5	+10.83%	   +17.18%
> Scale	  100012.0	113639.7	119969.1	+13.63%	   +19.96%
> Add	  128469.0	134292.8	140613.4	+4.53%	   +9.45%
> Triad	  114401.2	138207.1	138510.9	+20.81%	   +21.07%
> 
> 
> STREAM-100:
> operation base        smt_buddy         relax      smt_buddy_pct  relax_pct
> Copy	  122156.6	176227.5	167672.5	+44.26%	   +37.26%
> Scale	  127074.8	167997.0	158140.2	+32.20%	   +24.45%
> Add	  140021.5	165604.5	175501.2	+18.27%	   +25.34%
> Triad	  136455.4	177236.9	179608.7	+29.89%	   +31.63%
> 
> 
> unixbench:
> cpu     base        smt_buddy   relax      smt_buddy_pct  relax_pct
> 1	1808.3	    1835.5	1854.8	    +1.50%	   +2.57%
> 384     113834.2    114835.7	114505.4    +0.88%	   +0.59%
> 

  reply	other threads:[~2026-10-27 20:59 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-20  8:37 [RFC PATCH 0/6] sched/fair: Introduce the SMT_BUDDY_ASSIST feature Li kunyu
2026-10-20  8:37 ` [RFC PATCH 1/6] sched/fair: Add SMT sibling push in periodic load balance Li kunyu
2026-10-21 12:34   ` Peter Zijlstra
2026-10-27 11:10     ` Li kunyu
2026-10-20  8:37 ` [RFC PATCH 2/6] sched/fair: Add is_smt_buddy_run() to skip SMT domain Li kunyu
2026-10-21 12:35   ` Peter Zijlstra
2026-10-27 11:13     ` Li kunyu
2026-10-20  8:37 ` [RFC PATCH 3/6] sched/fair: SMT sibling exclusion after successful push Li kunyu
2026-10-21 12:39   ` Peter Zijlstra
2026-10-27 11:18     ` Li kunyu
2026-10-20  8:37 ` [RFC PATCH 4/6] sched/fair: Restrict newidle balance to LLC domain Li kunyu
2026-10-21 12:42   ` Peter Zijlstra
2026-10-28  2:16     ` Li kunyu
2026-10-20  8:37 ` [RFC PATCH 5/6] sched/fair: Add task burst threshold for large-scale bursts Li kunyu
2026-10-21 12:54   ` Peter Zijlstra
2026-10-28  2:54     ` Li kunyu
2026-10-20  8:37 ` [RFC PATCH 6/6] sched/docs: Add documentation for SMT Buddy Assist feature Li kunyu
2026-10-21 12:55   ` Peter Zijlstra
2026-10-21 12:44 ` [RFC PATCH 0/6] sched/fair: Introduce the SMT_BUDDY_ASSIST feature Kayra Cizmeci
2026-10-27 10:05   ` Li kunyu
2026-10-22  7:40 ` Peter Zijlstra
2026-10-22 10:08   ` [RFC PATCH 0/6] sched/fair: Introduce the SMT BUDDY ASSIST feature Li kunyu
2026-10-22 10:08 ` Li kunyu
2026-10-22 16:02   ` Chen Yu
2026-10-28  1:58     ` Li kunyu
2026-10-22 20:25 ` [RFC PATCH 0/6] sched/fair: Introduce the SMT_BUDDY_ASSIST feature Tim Chen
2026-10-27 10:44   ` Li kunyu
2026-10-27 20:59     ` Tim Chen [this message]
2026-10-28  3:39       ` Li kunyu

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=6b637582edf72e2e013136be0ac979095fd5faed.camel@linux.intel.com \
    --to=tim.c.chen@linux.intel.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=likunyu@open-hieco.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=vincent.guittot@linaro.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.