From: "Chen, Yu C" <yu.c.chen@intel.com>
To: Aaron Lu <ziqianlu@bytedance.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
"K Prateek Nayak" <kprateek.nayak@amd.com>,
"Gautham R . Shenoy" <gautham.shenoy@amd.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
"Juri Lelli" <juri.lelli@redhat.com>,
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>,
"Madadi Vineeth Reddy" <vineethr@linux.ibm.com>,
Hillf Danton <hdanton@sina.com>,
Shrikanth Hegde <sshegde@linux.ibm.com>,
Jianyong Wu <jianyong.wu@outlook.com>,
Yangyu Chen <cyy@cyyself.name>,
Tingyin Duan <tingyin.duan@gmail.com>,
Vern Hao <vernhao@tencent.com>, Vern Hao <haoxing990@gmail.com>,
Len Brown <len.brown@intel.com>, Aubrey Li <aubrey.li@intel.com>,
Zhao Liu <zhao1.liu@intel.com>, Chen Yu <yu.chen.surf@gmail.com>,
Adam Li <adamli@os.amperecomputing.com>,
Tim Chen <tim.c.chen@intel.com>, <linux-kernel@vger.kernel.org>,
Tim Chen <tim.c.chen@linux.intel.com>
Subject: Re: [PATCH v2 23/23] -- DO NOT APPLY!!! -- sched/cache/debug: Display the per LLC occupancy for each process via proc fs
Date: Wed, 17 Dec 2025 21:01:05 +0800 [thread overview]
Message-ID: <9d6dbc7e-19bd-4b41-896f-1307470adb7a@intel.com> (raw)
In-Reply-To: <20251217095912.GB2073381@bytedance.com>
On 12/17/2025 5:59 PM, Aaron Lu wrote:
> On Wed, Dec 03, 2025 at 03:07:42PM -0800, Tim Chen wrote:
>> From: Chen Yu <yu.c.chen@intel.com>
>>
>> Debug patch only.
>>
>> Show the per-LLC occupancy in /proc/{PID}/schedstat, with each column
>> corresponding to one LLC. This can be used to verify if the cache-aware
>> load balancer works as expected by aggregating threads onto dedicated LLCs.
>>
>> Suppose there are 2 LLCs and the sampling duration is 10 seconds:
>>
>> Enable the cache aware load balance:
>> 0 12281 <--- LLC0 residency delta is 0, LLC1 is 12 seconds
>> 0 18881
>> 0 16217
>>
>> disable the cache aware load balance:
>> 6497 15802
>> 9299 5435
>> 17811 8278
>>
>> Signed-off-by: Chen Yu <yu.c.chen@intel.com>
>> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
>> ---
>> fs/proc/base.c | 22 ++++++++++++++++++++++
>> include/linux/mm_types.h | 19 +++++++++++++++++--
>> include/linux/sched.h | 3 +++
>> kernel/sched/fair.c | 40 ++++++++++++++++++++++++++++++++++++++--
>> 4 files changed, 80 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/proc/base.c b/fs/proc/base.c
>> index 6299878e3d97..f4be96f4bd01 100644
>> --- a/fs/proc/base.c
>> +++ b/fs/proc/base.c
>> @@ -518,6 +518,28 @@ static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
>> (unsigned long long)task->se.sum_exec_runtime,
>> (unsigned long long)task->sched_info.run_delay,
>> task->sched_info.pcount);
>> +#ifdef CONFIG_SCHED_CACHE
>> + if (sched_cache_enabled()) {
>> + struct mm_struct *mm = task->mm;
>> + u64 *llc_runtime;
>> +
>> + if (!mm)
>> + return 0;
>> +
>> + llc_runtime = kcalloc(max_llcs, sizeof(u64), GFP_KERNEL);
>> + if (!llc_runtime)
>> + return 0;
>> +
>> + if (get_mm_per_llc_runtime(task, llc_runtime))
>> + goto out;
>> +
>> + for (int i = 0; i < max_llcs; i++)
>> + seq_printf(m, "%llu ", llc_runtime[i]);
>
> I feel it is better to also mark the current preferred LLC of this
> process so that I can know how well it works.
>
Sure.
>> + seq_puts(m, "\n");
>> +out:
>> + kfree(llc_runtime);
>> + }
>> +#endif
>>
>> return 0;
>> }
>
> BTW, is there a way to tell if a process is being taken care of by
> 'cache aware scheduling' or it's blocked due to its huge rss or having
> too many threads?
>
> I used below debug code to get these info through schedstat, but maybe I
> missed something and there is a simpler method?
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index f4be96f4bd015..c709a1a1bd867 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -505,6 +505,7 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns,
> #endif
>
> #ifdef CONFIG_SCHED_INFO
> +DECLARE_PER_CPU(int, sd_llc_id);
> /*
> * Provides /proc/PID/schedstat
> */
> @@ -522,6 +523,7 @@ static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
> if (sched_cache_enabled()) {
> struct mm_struct *mm = task->mm;
> u64 *llc_runtime;
> + int mm_sched_llc;
>
> if (!mm)
> return 0;
> @@ -533,8 +535,17 @@ static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns,
> if (get_mm_per_llc_runtime(task, llc_runtime))
> goto out;
>
> + if (mm->mm_sched_cpu == -1)
> + mm_sched_llc = -1;
> + else
> + mm_sched_llc = per_cpu(sd_llc_id, mm->mm_sched_cpu);
We can use llc_id(mm->mm_sched_cpu).
> +
> + seq_printf(m, "%llu 0x%x\n", mm->nr_running_avg, mm->mm_sched_flags);
> for (int i = 0; i < max_llcs; i++)
> - seq_printf(m, "%llu ", llc_runtime[i]);
> + seq_printf(m, "%s%s%llu ",
> + i == task->preferred_llc ? "*" : "",
> + i == mm_sched_llc ? "?" : "",
> + llc_runtime[i]);
> seq_puts(m, "\n");
> out:
> kfree(llc_runtime);
> diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
> index 255c22be7312f..06bb106d1b724 100644
> --- a/include/linux/mm_types.h
> +++ b/include/linux/mm_types.h
> @@ -1048,6 +1048,7 @@ struct mm_struct {
> raw_spinlock_t mm_sched_lock;
> unsigned long mm_sched_epoch;
> int mm_sched_cpu;
> + int mm_sched_flags;
> u64 nr_running_avg ____cacheline_aligned_in_smp;
> #endif
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 205208f061bb3..ab1cdba65d389 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -1237,12 +1237,20 @@ static inline int get_sched_cache_scale(int mul)
> return (1 + (llc_aggr_tolerance - 1) * mul);
> }
>
> +#define MM_SCHED_EXCEED_LLC_CAPACITY 1
> +#define MM_SCHED_NO_CACHE_INFO 2
> +#define MM_SCHED_EXCEED_LLC_NR 4
> +#define MM_SCHED_NR_THREADS 8
> +
> static bool exceed_llc_capacity(struct mm_struct *mm, int cpu)
> {
> unsigned int llc, scale;
> struct cacheinfo *ci;
> unsigned long rss;
>
> + mm->mm_sched_flags &= ~MM_SCHED_NO_CACHE_INFO;
> + mm->mm_sched_flags &= ~MM_SCHED_EXCEED_LLC_CAPACITY;
> +
Maybe we can do some read-comparison before writing the flags, previously
we found that writing the per-process mm struct is very expensive, so
maybe avoid writing to it as much as possible.
I'll fold your changes and do the test. Thanks!
Thanks,
Chenyu
next prev parent reply other threads:[~2025-12-17 13:01 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-03 23:07 [PATCH v2 00/23] Cache aware scheduling Tim Chen
2025-12-03 23:07 ` [PATCH v2 01/23] sched/cache: Introduce infrastructure for cache-aware load balancing Tim Chen
2025-12-09 11:12 ` Peter Zijlstra
2025-12-09 21:39 ` Tim Chen
2025-12-10 9:37 ` Peter Zijlstra
2025-12-10 13:57 ` Chen, Yu C
2025-12-10 15:11 ` Peter Zijlstra
2025-12-11 9:03 ` Vern Hao
2025-12-16 6:12 ` Chen, Yu C
2025-12-17 1:17 ` Vern Hao
2026-01-15 21:47 ` Tim Chen
[not found] ` <fbf52d91-0605-4608-b9cc-e8cc56115fd5@gmail.com>
2025-12-16 22:30 ` Tim Chen
2025-12-03 23:07 ` [PATCH v2 02/23] sched/cache: Record per-LLC utilization to guide cache-aware scheduling decisions Tim Chen
2025-12-09 11:21 ` Peter Zijlstra
2025-12-10 14:02 ` Chen, Yu C
2025-12-10 15:13 ` Peter Zijlstra
2025-12-10 23:58 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 03/23] sched/cache: Introduce helper functions to enforce LLC migration policy Tim Chen
2026-01-22 18:13 ` Yangyu Chen
2026-01-22 20:43 ` Tim Chen
2025-12-03 23:07 ` [PATCH v2 04/23] sched/cache: Make LLC id continuous Tim Chen
2025-12-09 11:58 ` Peter Zijlstra
2025-12-15 20:49 ` Tim Chen
2025-12-16 5:31 ` Chen, Yu C
2025-12-16 19:53 ` Tim Chen
2025-12-17 5:25 ` Chen, Yu C
2025-12-23 5:31 ` K Prateek Nayak
2025-12-24 7:08 ` Chen, Yu C
2025-12-24 8:19 ` K Prateek Nayak
2025-12-24 9:46 ` Chen, Yu C
2025-12-26 3:17 ` K Prateek Nayak
2025-12-03 23:07 ` [PATCH v2 05/23] sched/cache: Assign preferred LLC ID to processes Tim Chen
2025-12-09 12:11 ` Peter Zijlstra
2025-12-09 22:34 ` Tim Chen
2025-12-12 3:34 ` Vern Hao
2025-12-15 19:32 ` Tim Chen
2025-12-19 4:01 ` Vern Hao
2025-12-24 10:20 ` Chen, Yu C
2026-01-07 4:49 ` Jianyong Wu
2026-01-07 8:38 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 06/23] sched/cache: Track LLC-preferred tasks per runqueue Tim Chen
2025-12-09 12:16 ` Peter Zijlstra
2025-12-09 22:55 ` Tim Chen
2025-12-10 9:42 ` Peter Zijlstra
2025-12-16 0:20 ` Chen, Yu C
2025-12-17 10:04 ` Vern Hao
2025-12-17 12:37 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 07/23] sched/cache: Introduce per runqueue task LLC preference counter Tim Chen
2025-12-09 13:06 ` Peter Zijlstra
2025-12-09 23:17 ` Tim Chen
2025-12-10 12:43 ` Peter Zijlstra
2025-12-10 18:36 ` Tim Chen
2025-12-10 12:51 ` Peter Zijlstra
2025-12-10 18:49 ` Tim Chen
2025-12-11 10:31 ` Peter Zijlstra
2025-12-15 19:21 ` Tim Chen
2025-12-16 22:45 ` Tim Chen
2025-12-03 23:07 ` [PATCH v2 08/23] sched/cache: Calculate the per runqueue task LLC preference Tim Chen
2025-12-03 23:07 ` [PATCH v2 09/23] sched/cache: Count tasks prefering destination LLC in a sched group Tim Chen
2025-12-10 12:52 ` Peter Zijlstra
2025-12-10 14:05 ` Chen, Yu C
2025-12-10 15:16 ` Peter Zijlstra
2025-12-10 19:00 ` Tim Chen
2025-12-10 23:50 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 10/23] sched/cache: Check local_group only once in update_sg_lb_stats() Tim Chen
2025-12-03 23:07 ` [PATCH v2 11/23] sched/cache: Prioritize tasks preferring destination LLC during balancing Tim Chen
2025-12-03 23:07 ` [PATCH v2 12/23] sched/cache: Add migrate_llc_task migration type for cache-aware balancing Tim Chen
2025-12-10 13:32 ` Peter Zijlstra
2025-12-16 0:52 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 13/23] sched/cache: Handle moving single tasks to/from their preferred LLC Tim Chen
2025-12-03 23:07 ` [PATCH v2 14/23] sched/cache: Consider LLC preference when selecting tasks for load balancing Tim Chen
2025-12-10 15:58 ` Peter Zijlstra
2025-12-03 23:07 ` [PATCH v2 15/23] sched/cache: Respect LLC preference in task migration and detach Tim Chen
2025-12-10 16:30 ` Peter Zijlstra
2025-12-16 7:30 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 16/23] sched/cache: Introduce sched_cache_present to enable cache aware scheduling for multi LLCs NUMA node Tim Chen
2025-12-10 16:32 ` Peter Zijlstra
2025-12-10 16:52 ` Peter Zijlstra
2025-12-16 7:36 ` Chen, Yu C
2025-12-16 7:31 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 17/23] sched/cache: Record the number of active threads per process for cache-aware scheduling Tim Chen
2025-12-10 16:51 ` Peter Zijlstra
2025-12-16 7:40 ` Chen, Yu C
2025-12-17 9:40 ` Aaron Lu
2025-12-17 12:51 ` Chen, Yu C
2025-12-19 3:32 ` Aaron Lu
2025-12-03 23:07 ` [PATCH v2 18/23] sched/cache: Disable cache aware scheduling for processes with high thread counts Tim Chen
2025-12-03 23:07 ` [PATCH v2 19/23] sched/cache: Avoid cache-aware scheduling for memory-heavy processes Tim Chen
2025-12-18 3:59 ` Vern Hao
2025-12-18 8:32 ` Chen, Yu C
2025-12-18 9:42 ` Vern Hao
2025-12-19 3:14 ` K Prateek Nayak
2025-12-19 12:55 ` Chen, Yu C
2025-12-22 2:49 ` Vern Hao
2025-12-22 2:19 ` Vern Hao
2025-12-03 23:07 ` [PATCH v2 20/23] sched/cache: Add user control to adjust the parameters of cache-aware scheduling Tim Chen
2025-12-10 17:02 ` Peter Zijlstra
2025-12-16 7:42 ` Chen, Yu C
2025-12-19 4:14 ` Vern Hao
2025-12-19 13:21 ` Chen, Yu C
2025-12-19 13:39 ` Chen, Yu C
2025-12-23 12:12 ` Yangyu Chen
2025-12-23 16:44 ` Yangyu Chen
2025-12-24 3:28 ` Yangyu Chen
2025-12-24 7:51 ` Chen, Yu C
2025-12-24 12:15 ` Yangyu Chen
2026-01-15 10:03 ` Jianyong Wu
2026-01-15 12:13 ` Chen, Yu C
2026-01-21 15:21 ` Yangyu Chen
2026-01-21 15:38 ` Chen, Yu C
2025-12-03 23:07 ` [PATCH v2 21/23] -- DO NOT APPLY!!! -- sched/cache/stats: Add schedstat for cache aware load balancing Tim Chen
2025-12-19 5:03 ` Yangyu Chen
2025-12-19 14:41 ` Chen, Yu C
2025-12-19 14:48 ` Yangyu Chen
2025-12-03 23:07 ` [PATCH v2 22/23] -- DO NOT APPLY!!! -- sched/cache/debug: Add ftrace to track the load balance statistics Tim Chen
2025-12-03 23:07 ` [PATCH v2 23/23] -- DO NOT APPLY!!! -- sched/cache/debug: Display the per LLC occupancy for each process via proc fs Tim Chen
2025-12-17 9:59 ` Aaron Lu
2025-12-17 13:01 ` Chen, Yu C [this message]
2025-12-19 3:19 ` [PATCH v2 00/23] Cache aware scheduling Aaron Lu
2025-12-19 13:04 ` Chen, Yu C
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=9d6dbc7e-19bd-4b41-896f-1307470adb7a@intel.com \
--to=yu.c.chen@intel.com \
--cc=adamli@os.amperecomputing.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=haoxing990@gmail.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=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@intel.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 \
--cc=ziqianlu@bytedance.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
Powered by JetHome