ANDROID: sched: Add vendor hooks for override sugov behavior
Upstream moved the sugov to DEADLINE class which has higher prio than RT so it can potentially block many RT use case in Android. Also currently iowait doesn't distinguish background/foreground tasks and we have seen cases where device run to high frequency unnecessarily when running some background I/O. Bug: 297343949 Signed-off-by: Wei Wang <wvw@google.com> Change-Id: I21e9bfe9ef75a4178279574389e417c3f38e65ac
This commit is contained in:
parent
5762974151
commit
e08c5de06e
@ -394,7 +394,13 @@ DECLARE_HOOK(android_vh_mmput,
|
||||
TP_PROTO(struct mm_struct *mm),
|
||||
TP_ARGS(mm));
|
||||
|
||||
/* macro versions of hooks are no longer required */
|
||||
struct sched_attr;
|
||||
DECLARE_HOOK(android_vh_set_sugov_sched_attr,
|
||||
TP_PROTO(struct sched_attr *attr),
|
||||
TP_ARGS(attr));
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_set_iowait,
|
||||
TP_PROTO(struct task_struct *p, struct rq *rq, int *should_iowait_boost),
|
||||
TP_ARGS(p, rq, should_iowait_boost), 1);
|
||||
|
||||
#endif /* _TRACE_HOOK_SCHED_H */
|
||||
/* This part must be outside protection */
|
||||
|
@ -603,6 +603,7 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy)
|
||||
if (policy->fast_switch_enabled)
|
||||
return 0;
|
||||
|
||||
trace_android_vh_set_sugov_sched_attr(&attr);
|
||||
kthread_init_work(&sg_policy->work, sugov_work);
|
||||
kthread_init_worker(&sg_policy->worker);
|
||||
thread = kthread_create(kthread_worker_fn, &sg_policy->worker,
|
||||
|
@ -6130,6 +6130,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
|
||||
struct sched_entity *se = &p->se;
|
||||
int idle_h_nr_running = task_has_idle_policy(p);
|
||||
int task_new = !(flags & ENQUEUE_WAKEUP);
|
||||
int should_iowait_boost;
|
||||
|
||||
/*
|
||||
* The code below (indirectly) updates schedutil which looks at
|
||||
@ -6144,7 +6145,9 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
|
||||
* utilization updates, so do it here explicitly with the IOWAIT flag
|
||||
* passed.
|
||||
*/
|
||||
if (p->in_iowait)
|
||||
should_iowait_boost = p->in_iowait;
|
||||
trace_android_rvh_set_iowait(p, rq, &should_iowait_boost);
|
||||
if (should_iowait_boost)
|
||||
cpufreq_update_util(rq, SCHED_CPUFREQ_IOWAIT);
|
||||
|
||||
for_each_sched_entity(se) {
|
||||
|
@ -100,3 +100,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_post_init_entity_util_avg);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_effective_cpu_util);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmput);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_uclamp_validate);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait);
|
||||
|
Loading…
Reference in New Issue
Block a user