mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Chen, Yu C" <yu.c.chen@intel.com>
To: Tingyin Duan <tingyin.duan@gmail.com>
Cc: <aubrey.li@intel.com>, <bsegall@google.com>, <cyy@cyyself.name>,
	<dietmar.eggemann@arm.com>, <gautham.shenoy@amd.com>,
	<hdanton@sina.com>, <jianyong.wu@outlook.com>,
	<juri.lelli@redhat.com>, <kprateek.nayak@amd.com>,
	<len.brown@intel.com>, <libo.chen@oracle.com>,
	<linux-kernel@vger.kernel.org>, <mgorman@suse.de>,
	<mingo@redhat.com>, <peterz@infradead.org>, <rostedt@goodmis.org>,
	<sshegde@linux.ibm.com>, <tim.c.chen@linux.intel.com>,
	<vernhao@tencent.com>, <vincent.guittot@linaro.org>,
	<vineethr@linux.ibm.com>, <vschneid@redhat.com>,
	<yu.chen.surf@gmail.com>, <zhao1.liu@intel.com>
Subject: Re: [RFC PATCH v4 25/28] sched: Skip cache aware scheduling if the process has many active threads
Date: Tue, 2 Sep 2025 14:14:14 +0800	[thread overview]
Message-ID: <d6a19a7d-e435-4a27-9725-b2fb802a52fd@intel.com> (raw)
In-Reply-To: <20250902051608.4733-1-tingyin.duan@gmail.com>

On 9/2/2025 1:16 PM, Tingyin Duan wrote:
> Several different test cases with mysql and sysbench shows that this patch
> causes about 10% performance regressions on my computer with 256 cores.
> Perf-top shows exceed_llc_nr is high. Could you help to address this problems?

Thanks for bringing this to public for discussion. As we synced offline, the
performance regression is likely to be caused by the cache contention 
introduced
by the [25/28] patch:

The 1st issue:Multiple threads within the same process try to read the 
mm_struct->nr_running_avg
while the task_cache_work() modifies the mm_struct->mm_sched_cpu from 
time to time.
Since the mm_sched_cpu and nr_running_avg are in the same cacheline, 
this update
turns the cacheline into "Modified" and the read triggers the costly 
"HITM" event.
We should move nr_running_avg and mm_sched_cpu to different cachelines.

The 2nd issue:
If nr_running_avg remains consistently above the threshold in your test 
case,
exceed_llc_nr() will always return true. This might cause the frequent 
write of -1
to mm->mm_sched_cpu, even if mm->mm_sched_cpu is already -1. This causes 
another
cache contention that threads on other CPUs trying to read the 
mm->mm_sched_cpu.
We should update the mm_struct's mm_sched_cpu field only if the value 
has been
changed.

That is to say, the following patch should fix the regression:

diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 2cca039d6e4f..3c1c50134647 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -1032,7 +1032,11 @@ struct mm_struct {
  		raw_spinlock_t mm_sched_lock;
  		unsigned long mm_sched_epoch;
  		int mm_sched_cpu;
-		u64 nr_running_avg;
+		/*
+		 * mm_sched_cpu and nr_running_avg are put into seperate
+		 * cachelines to avoid cache contention.
+		 */
+		u64 nr_running_avg ____cacheline_aligned_in_smp;
  #endif

  #ifdef CONFIG_MMU
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 026013c826d9..4ef28db57a37 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -1428,7 +1428,8 @@ void account_mm_sched(struct rq *rq, struct 
task_struct *p, s64 delta_exec)
  	    get_nr_threads(p) <= 1 ||
  	    exceed_llc_nr(mm, cpu_of(rq)) ||
  	    exceed_llc_capacity(mm, cpu_of(rq))) {
-		mm->mm_sched_cpu = -1;
+		if (mm->mm_sched_cpu != -1)
+			mm->mm_sched_cpu = -1;
  		pcpu_sched->occ = 0;
  	}

-- 
2.25.1


With above change, the regression I mentioned in the cover letter, when
running multiple instances of hackbench on AMD Milan has disappeared.
And max latency improvement of sysbench+MariaDB are observed on Milan:
transactions per sec.: -0.72%
min latency: -0.00%
avg latency: -0.00%
max latency: +78.90%
95th percentile: -0.00%
events avg: -0.72%
events stddev: +50.72%

thanks,
Chenyu




  reply	other threads:[~2025-09-02  6:14 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-09  4:57 [RFC PATCH v4 00/28] Cache aware load-balancing Chen Yu
2025-08-09  5:00 ` [RFC PATCH v4 01/28] sched: " Chen Yu
2025-08-12  1:30   ` kernel test robot
2025-08-12  3:26     ` Chen, Yu C
2025-08-09  5:01 ` [RFC PATCH v4 02/28] sched: Several fixes for cache aware scheduling Chen Yu
2025-08-09  5:01 ` [RFC PATCH v4 03/28] sched: Avoid task migration within its preferred LLC Chen Yu
2025-08-09  5:02 ` [RFC PATCH v4 04/28] sched: Avoid calculating the cpumask if the system is overloaded Chen Yu
2025-08-09  5:02 ` [RFC PATCH v4 05/28] sched: Add hysteresis to switch a task's preferred LLC Chen Yu
2025-09-29 13:44   ` Peter Zijlstra
2025-09-30  4:31     ` Chen, Yu C
2025-08-09  5:02 ` [RFC PATCH v4 06/28] sched: Save the per LLC utilization for better cache aware scheduling Chen Yu
2025-09-29 14:09   ` Peter Zijlstra
2025-09-30  4:34     ` Chen, Yu C
2025-08-09  5:03 ` [RFC PATCH v4 07/28] sched: Add helper function to decide whether to allow " Chen Yu
2025-10-01 13:17   ` Peter Zijlstra
2025-10-02 11:31     ` Chen, Yu C
2025-10-02 11:50       ` Peter Zijlstra
2025-10-02 12:51         ` Chen, Yu C
2025-10-02 17:46         ` Tim Chen
2025-08-09  5:03 ` [RFC PATCH v4 08/28] sched: Set up LLC indexing Chen Yu
2025-09-26  6:14   ` Adam Li
2025-09-26 13:51     ` Chen, Yu C
2025-09-29 10:43       ` Adam Li
2025-09-30  2:54         ` Chen, Yu C
2025-08-09  5:03 ` [RFC PATCH v4 09/28] sched: Introduce task preferred LLC field Chen Yu
2025-08-09  5:04 ` [RFC PATCH v4 10/28] sched: Calculate the number of tasks that have LLC preference on a runqueue Chen Yu
2025-08-09  5:04 ` [RFC PATCH v4 11/28] sched: Introduce per runqueue task LLC preference counter Chen Yu
2025-08-09  5:04 ` [RFC PATCH v4 12/28] sched: Calculate the total number of preferred LLC tasks during load balance Chen Yu
2025-08-09  5:05 ` [RFC PATCH v4 13/28] sched: Tag the sched group as llc_balance if it has tasks prefer other LLC Chen Yu
2025-08-09  5:05 ` [RFC PATCH v4 14/28] sched: Introduce update_llc_busiest() to deal with groups having preferred LLC tasks Chen Yu
2025-08-09  5:06 ` [RFC PATCH v4 15/28] sched: Introduce a new migration_type to track the preferred LLC load balance Chen Yu
2025-08-09  5:06 ` [RFC PATCH v4 16/28] sched: Consider LLC locality for active balance Chen Yu
2025-08-09  5:06 ` [RFC PATCH v4 17/28] sched: Consider LLC preference when picking tasks from busiest queue Chen Yu
2025-08-09  5:07 ` [RFC PATCH v4 18/28] sched: Do not migrate task if it is moving out of its preferred LLC Chen Yu
2025-08-09  5:07 ` [RFC PATCH v4 19/28] sched: Introduce SCHED_CACHE_LB to control cache aware load balance Chen Yu
2025-08-09  5:07 ` [RFC PATCH v4 20/28] sched: Introduce SCHED_CACHE_WAKE to control LLC aggregation on wake up Chen Yu
2025-08-09  5:07 ` [RFC PATCH v4 21/28] sched: Introduce a static key to enable cache aware only for multi LLCs Chen Yu
2025-08-09  5:07 ` [RFC PATCH v4 22/28] sched: Turn EPOCH_PERIOD and EPOCH_OLD into tunnable debugfs Chen Yu
2025-08-09  5:08 ` [RFC PATCH v4 23/28] sched: Scan a task's preferred node for preferred LLC Chen Yu
2025-08-12  1:59   ` kernel test robot
2025-08-12  3:36     ` Chen, Yu C
2025-08-09  5:08 ` [RFC PATCH v4 24/28] sched: Record average number of runninhg tasks per process Chen Yu
2025-08-09  5:08 ` [RFC PATCH v4 25/28] sched: Skip cache aware scheduling if the process has many active threads Chen Yu
2025-09-02  3:52   ` Tingyin Duan
2025-09-02  5:16   ` Tingyin Duan
2025-09-02  6:14     ` Chen, Yu C [this message]
2025-09-02  7:56       ` Duan Tingyin
2025-08-09  5:08 ` [RFC PATCH v4 26/28] sched: Do not enable cache aware scheduling for process with large RSS Chen Yu
2025-09-26  8:48   ` Adam Li
2025-09-26 14:30     ` Chen, Yu C
2025-08-09  5:09 ` [RFC PATCH v4 27/28] sched: Allow the user space to tune the scale factor for RSS comparison Chen Yu
2025-08-09  5:09 ` [RFC PATCH v4 28/28] sched: Add ftrace to track cache aware load balance and hottest CPU changes Chen Yu

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=d6a19a7d-e435-4a27-9725-b2fb802a52fd@intel.com \
    --to=yu.c.chen@intel.com \
    --cc=aubrey.li@intel.com \
    --cc=bsegall@google.com \
    --cc=cyy@cyyself.name \
    --cc=dietmar.eggemann@arm.com \
    --cc=gautham.shenoy@amd.com \
    --cc=hdanton@sina.com \
    --cc=jianyong.wu@outlook.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=len.brown@intel.com \
    --cc=libo.chen@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sshegde@linux.ibm.com \
    --cc=tim.c.chen@linux.intel.com \
    --cc=tingyin.duan@gmail.com \
    --cc=vernhao@tencent.com \
    --cc=vincent.guittot@linaro.org \
    --cc=vineethr@linux.ibm.com \
    --cc=vschneid@redhat.com \
    --cc=yu.chen.surf@gmail.com \
    --cc=zhao1.liu@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®