DEBUG: sched/tune: add tracepoint on P-E space filtering

Change-Id: I31dfed67c0486713b88efb75df767329f2802e06
Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
This commit is contained in:
Patrick Bellasi 2016-01-20 14:06:05 +00:00 committed by Amit Pundir
parent 486c7afa76
commit 13a60dc148
2 changed files with 61 additions and 4 deletions

View file

@ -900,6 +900,41 @@ TRACE_EVENT(sched_energy_diff,
__entry->nrgn, __entry->nrgp)
);
/*
* Tracepoint for schedtune_tasks_update
*/
TRACE_EVENT(sched_tune_filter,
TP_PROTO(int nrg_delta, int cap_delta,
int nrg_gain, int cap_gain,
int payoff, int region),
TP_ARGS(nrg_delta, cap_delta, nrg_gain, cap_gain, payoff, region),
TP_STRUCT__entry(
__field( int, nrg_delta )
__field( int, cap_delta )
__field( int, nrg_gain )
__field( int, cap_gain )
__field( int, payoff )
__field( int, region )
),
TP_fast_assign(
__entry->nrg_delta = nrg_delta;
__entry->cap_delta = cap_delta;
__entry->nrg_gain = nrg_gain;
__entry->cap_gain = cap_gain;
__entry->payoff = payoff;
__entry->region = region;
),
TP_printk("nrg_delta=%d cap_delta=%d nrg_gain=%d cap_gain=%d payoff=%d region=%d",
__entry->nrg_delta, __entry->cap_delta,
__entry->nrg_gain, __entry->cap_gain,
__entry->payoff, __entry->region)
);
#endif /* _TRACE_SCHED_H */
/* This part must be outside protection */

View file

@ -70,6 +70,13 @@ __schedtune_accept_deltas(int nrg_delta, int cap_delta,
*/
payoff = nrg_delta * threshold_gains[perf_boost_idx].cap_gain;
payoff -= cap_delta * threshold_gains[perf_boost_idx].nrg_gain;
trace_sched_tune_filter(
nrg_delta, cap_delta,
threshold_gains[perf_boost_idx].nrg_gain,
threshold_gains[perf_boost_idx].cap_gain,
payoff, 8);
return payoff;
}
@ -84,6 +91,13 @@ __schedtune_accept_deltas(int nrg_delta, int cap_delta,
*/
payoff = cap_delta * threshold_gains[perf_constrain_idx].nrg_gain;
payoff -= nrg_delta * threshold_gains[perf_constrain_idx].cap_gain;
trace_sched_tune_filter(
nrg_delta, cap_delta,
threshold_gains[perf_constrain_idx].nrg_gain,
threshold_gains[perf_constrain_idx].cap_gain,
payoff, 6);
return payoff;
}
@ -155,12 +169,16 @@ schedtune_accept_deltas(int nrg_delta, int cap_delta,
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(nrg_delta, cap_delta, 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(nrg_delta, cap_delta, 0, 0, -1, 5);
return -INT_MAX;
}
/* Get task specific perf Boost/Constraints indexes */
rcu_read_lock();
@ -531,12 +549,16 @@ schedtune_accept_deltas(int nrg_delta, int cap_delta,
struct task_struct *task)
{
/* Optimal (O) region */
if (nrg_delta < 0 && cap_delta > 0)
if (nrg_delta < 0 && cap_delta > 0) {
trace_sched_tune_filter(nrg_delta, cap_delta, 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(nrg_delta, cap_delta, 0, 0, -1, 5);
return -INT_MAX;
}
return __schedtune_accept_deltas(nrg_delta, cap_delta,
perf_boost_idx, perf_constrain_idx);