[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <79c8fdcf7e875617935cfaba2ea1f2c2ae5ce62c.1754712565.git.tim.c.chen@linux.intel.com>
Date: Sat, 9 Aug 2025 13:07:59 +0800
From: Chen Yu <yu.c.chen@...el.com>
To: Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
K Prateek Nayak <kprateek.nayak@....com>,
"Gautham R . Shenoy" <gautham.shenoy@....com>
Cc: Vincent Guittot <vincent.guittot@...aro.org>,
Juri Lelli <juri.lelli@...hat.com>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Steven Rostedt <rostedt@...dmis.org>,
Ben Segall <bsegall@...gle.com>,
Mel Gorman <mgorman@...e.de>,
Valentin Schneider <vschneid@...hat.com>,
Libo Chen <libo.chen@...cle.com>,
Madadi Vineeth Reddy <vineethr@...ux.ibm.com>,
Hillf Danton <hdanton@...a.com>,
Shrikanth Hegde <sshegde@...ux.ibm.com>,
Jianyong Wu <jianyong.wu@...look.com>,
Yangyu Chen <cyy@...self.name>,
Tingyin Duan <tingyin.duan@...il.com>,
Vern Hao <vernhao@...cent.com>,
Len Brown <len.brown@...el.com>,
Tim Chen <tim.c.chen@...ux.intel.com>,
Aubrey Li <aubrey.li@...el.com>,
Zhao Liu <zhao1.liu@...el.com>,
Chen Yu <yu.chen.surf@...il.com>,
Chen Yu <yu.c.chen@...el.com>,
linux-kernel@...r.kernel.org
Subject: [RFC PATCH v4 22/28] sched: Turn EPOCH_PERIOD and EPOCH_OLD into tunnable debugfs
Convert EPOCH_PERIOD and EPOCH_OLD into tunable debugfs
entries. Users can adjust the decay rate as needed.
By default, occupancy decays by half every 10 ms.
Suggested-by: Shrikanth Hegde <sshegde@...ux.ibm.com>
Signed-off-by: Chen Yu <yu.c.chen@...el.com>
---
kernel/sched/debug.c | 2 ++
kernel/sched/fair.c | 9 ++++++---
kernel/sched/sched.h | 2 ++
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 682fd91a42a0..7a9ec03704b9 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -535,6 +535,8 @@ static __init int sched_init_debug(void)
#ifdef CONFIG_SCHED_CACHE
debugfs_create_u32("llc_aggr_cap", 0644, debugfs_sched, &sysctl_llc_aggr_cap);
debugfs_create_u32("llc_aggr_imb", 0644, debugfs_sched, &sysctl_llc_aggr_imb);
+ debugfs_create_u32("llc_period", 0644, debugfs_sched, &sysctl_llc_period);
+ debugfs_create_u32("llc_old", 0644, debugfs_sched, &sysctl_llc_old);
#endif
debugfs_create_file("debug", 0444, debugfs_sched, NULL, &sched_debug_fops);
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 194ec594561b..64f757ad39fc 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -1175,6 +1175,9 @@ static s64 update_curr_se(struct rq *rq, struct sched_entity *curr)
#define EPOCH_PERIOD (HZ/100) /* 10 ms */
#define EPOCH_OLD 5 /* 50 ms */
+__read_mostly unsigned int sysctl_llc_period = EPOCH_PERIOD;
+__read_mostly unsigned int sysctl_llc_old = EPOCH_OLD;
+
DEFINE_STATIC_KEY_FALSE(sched_cache_present);
static int llc_id(int cpu)
@@ -1283,9 +1286,9 @@ static inline void __update_mm_sched(struct rq *rq, struct mm_sched *pcpu_sched)
long delta = now - rq->cpu_epoch_next;
if (delta > 0) {
- n = (delta + EPOCH_PERIOD - 1) / EPOCH_PERIOD;
+ n = (delta + sysctl_llc_period - 1) / sysctl_llc_period;
rq->cpu_epoch += n;
- rq->cpu_epoch_next += n * EPOCH_PERIOD;
+ rq->cpu_epoch_next += n * sysctl_llc_period;
__shr_u64(&rq->cpu_runtime, n);
}
@@ -1346,7 +1349,7 @@ void account_mm_sched(struct rq *rq, struct task_struct *p, s64 delta_exec)
* has only 1 thread, invalidate
* it's preferred state.
*/
- if (epoch - READ_ONCE(mm->mm_sched_epoch) > EPOCH_OLD ||
+ if (epoch - READ_ONCE(mm->mm_sched_epoch) > sysctl_llc_old ||
get_nr_threads(p) <= 1) {
mm->mm_sched_cpu = -1;
pcpu_sched->occ = 0;
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 3e60618a88e9..d752d64d4acd 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -2858,6 +2858,8 @@ extern unsigned int sysctl_numa_balancing_hot_threshold;
extern unsigned int sysctl_llc_aggr_cap;
extern unsigned int sysctl_llc_aggr_imb;
extern struct static_key_false sched_cache_present;
+extern unsigned int sysctl_llc_period;
+extern unsigned int sysctl_llc_old;
#endif
#ifdef CONFIG_SCHED_HRTICK
--
2.25.1
Powered by blists - more mailing lists