aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Bellasi <patrick.bellasi@arm.com>2015-06-22 14:07:27 +0100
committerJuri Lelli <juri.lelli@arm.com>2015-10-05 12:21:21 +0100
commit5151c37242b8489d7ba23f235537de4b8dd67c4c (patch)
treee4861200284f5da0fb22e904883887d0a901bf4e
parent71a36f23aab0e94bf05c8c94bdc68e18d01685c3 (diff)
DEBUG: schedtune: add tracepoint on P-E space filtering
Change-Id: I2947dd97573a41a8a7cac8a6f6467f3341f8009f Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
-rw-r--r--include/trace/events/sched.h28
-rw-r--r--kernel/sched/tune.c28
2 files changed, 52 insertions, 4 deletions
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index b5e8cf5c955d..32ce2e7f864e 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -823,6 +823,34 @@ TRACE_EVENT(sched_tune_tasks_update,
__entry->boost, __entry->max_boost)
);
+/*
+ * Tracepoint for schedtune_tasks_update
+ */
+TRACE_EVENT(sched_tune_filter,
+
+ TP_PROTO(int nrg_delta, int cap_delta, int nrg_payoff, int region),
+
+ TP_ARGS(nrg_delta, cap_delta, nrg_payoff, region),
+
+ TP_STRUCT__entry(
+ __field( int, nrg_delta )
+ __field( int, cap_delta )
+ __field( int, nrg_payoff )
+ __field( int, region )
+ ),
+
+ TP_fast_assign(
+ __entry->nrg_delta = nrg_delta;
+ __entry->cap_delta = cap_delta;
+ __entry->nrg_payoff = nrg_payoff;
+ __entry->region = region;
+ ),
+
+ TP_printk("nrg_delta=%d cap_delta=%d nrg_payoff=%d region=%d",
+ __entry->nrg_delta, __entry->cap_delta,
+ __entry->nrg_payoff, __entry->region)
+);
+
#endif /* _TRACE_SCHED_H */
/* This part must be outside protection */
diff --git a/kernel/sched/tune.c b/kernel/sched/tune.c
index 4274e711266e..9760a3f0b5cd 100644
--- a/kernel/sched/tune.c
+++ b/kernel/sched/tune.c
@@ -137,6 +137,12 @@ __schedtune_accept_deltas(int nrg_delta, int cap_delta,
*/
energy_payoff = cap_delta * threshold_gains[perf_boost_idx].nrg_gain;
energy_payoff -= nrg_delta * threshold_gains[perf_boost_idx].cap_gain;
+
+ trace_sched_tune_filter(
+ threshold_gains[perf_boost_idx].nrg_gain,
+ threshold_gains[perf_boost_idx].cap_gain,
+ energy_payoff, 8);
+
return energy_payoff;
}
@@ -150,6 +156,12 @@ __schedtune_accept_deltas(int nrg_delta, int cap_delta,
*/
energy_payoff = nrg_delta * threshold_gains[perf_constrain_idx].cap_gain;
energy_payoff -= cap_delta * threshold_gains[perf_constrain_idx].nrg_gain;
+
+ trace_sched_tune_filter(
+ threshold_gains[perf_constrain_idx].nrg_gain,
+ threshold_gains[perf_constrain_idx].cap_gain,
+ energy_payoff, 6);
+
return energy_payoff;
}
@@ -220,12 +232,16 @@ schedtune_accept_deltas(int nrg_delta, int cap_delta, struct task_struct *task)
int perf_constrain_idx;
/* Optimal (O) region */
- if (nrg_delta < 0 && cap_delta > 0)
+ if (nrg_delta < 0 && cap_delta > 0) {
+ trace_sched_tune_filter(0, 0, 1, 0);
return INT_MAX;
+ }
/* Suboptimal (S) region */
- if (nrg_delta > 0 && cap_delta < 0)
+ if (nrg_delta > 0 && cap_delta < 0) {
+ trace_sched_tune_filter(0, 0, -1, 5);
return -INT_MAX;
+ }
/* Get task specific perf Boost/Constraints indexes */
rcu_read_lock();
@@ -620,12 +636,16 @@ int
schedtune_accept_deltas(int nrg_delta, int cap_delta) {
/* Optimal (O) region */
- if (nrg_delta < 0 && cap_delta > 0)
+ if (nrg_delta < 0 && cap_delta > 0) {
+ trace_printk("schedtune_filter: region=O ngain=0 pgain=0 nrg_payoff=-1");
return INT_MAX;
+ }
/* Suboptimal (S) region */
- if (nrg_delta > 0 && cap_delta < 0)
+ if (nrg_delta > 0 && cap_delta < 0) {
+ trace_printk("schedtune_filter: region=S ngain=0 pgain=0 nrg_payoff=1");
return -INT_MAX;
+ }
return __schedtune_accept_deltas(nrg_delta, cap_delta,
perf_boost_idx, perf_constrain_idx);