diff options
author | Patrick Bellasi <patrick.bellasi@arm.com> | 2015-06-22 14:07:27 +0100 |
---|---|---|
committer | Juri Lelli <juri.lelli@arm.com> | 2015-10-05 12:21:21 +0100 |
commit | 5151c37242b8489d7ba23f235537de4b8dd67c4c (patch) | |
tree | e4861200284f5da0fb22e904883887d0a901bf4e | |
parent | 71a36f23aab0e94bf05c8c94bdc68e18d01685c3 (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.h | 28 | ||||
-rw-r--r-- | kernel/sched/tune.c | 28 |
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); |