[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250603120755.1028396-1-lukasz.luba@arm.com>
Date: Tue, 3 Jun 2025 13:07:14 +0100
From: Lukasz Luba <lukasz.luba@....com>
To: linux-kernel@...r.kernel.org
Cc: lukasz.luba@....com,
rostedt@...dmis.org,
mhiramat@...nel.org,
mathieu.desnoyers@...icios.com,
mingo@...hat.com,
peterz@...radead.org,
juri.lelli@...hat.com,
vincent.guittot@...aro.org,
dietmar.eggemann@....com,
bsegall@...gle.com,
mgorman@...e.de,
vschneid@...hat.com,
andrii@...nel.org,
linux-trace-kernel@...r.kernel.org,
rafael@...nel.org
Subject: [PATCH] sched/tp: Add new tracepoint for tracking uclamp set from user-space
The user-space can set uclamp value for a given task. It impacts task
placement decisions made by the task scheduler. The user-space services
can dynamically change the uclamp values for tasks. Tracking the uclamp
changes is a very useful information and helps to understand the system
behavior. It allows to track improvements in the OS middleware and
applications which start using uclamp mechanisms and report test results.
This tracepoint is going to help in the further development of combined
kernel and middleware solutions.
Signed-off-by: Lukasz Luba <lukasz.luba@....com>
---
Hi all,
This patch is an attempt to refresh a bit my previous attempt in this
area, which can be found here [1]. It's a smaller version than the
previous one.
It's based on next-20250530.
Regards,
Lukasz Luba
[1] https://lore.kernel.org/lkml/20230509122246.1702397-1-lukasz.luba@arm.com/
include/trace/events/sched.h | 3 +++
kernel/sched/core.c | 1 +
kernel/sched/syscalls.c | 4 ++++
3 files changed, 8 insertions(+)
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index 4e6b2910cec3f..1b14d5bbc9e2a 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -894,6 +894,9 @@ DECLARE_TRACE_CONDITION(sched_set_state,
TP_ARGS(tsk, state),
TP_CONDITION(!!(tsk->__state) != !!state));
+DECLARE_TRACE(uclamp_update_task,
+ TP_PROTO(struct task_struct *p, int uclamp_id, unsigned int value),
+ TP_ARGS(p, uclamp_id, value));
#endif /* _TRACE_SCHED_H */
/* This part must be outside protection */
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index dce50fa57471d..2c3bf0b6830fa 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -116,6 +116,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(sched_util_est_cfs_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(sched_util_est_se_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(sched_update_nr_running_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(sched_compute_energy_tp);
+EXPORT_TRACEPOINT_SYMBOL_GPL(uclamp_update_task_tp);
DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c
index 547c1f05b667e..e8dbc7fbe99d5 100644
--- a/kernel/sched/syscalls.c
+++ b/kernel/sched/syscalls.c
@@ -430,12 +430,16 @@ static void __setscheduler_uclamp(struct task_struct *p,
attr->sched_util_min != -1) {
uclamp_se_set(&p->uclamp_req[UCLAMP_MIN],
attr->sched_util_min, true);
+ trace_uclamp_update_task_tp(p, UCLAMP_MIN,
+ attr->sched_util_min);
}
if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP_MAX &&
attr->sched_util_max != -1) {
uclamp_se_set(&p->uclamp_req[UCLAMP_MAX],
attr->sched_util_max, true);
+ trace_uclamp_update_task_tp(p, UCLAMP_MAX,
+ attr->sched_util_max);
}
}
--
2.48.1
Powered by blists - more mailing lists