On 18-07-17, 15:02, Juri Lelli wrote: > Mmm, seems to make sense to me. :/ > > Would the following work (on top of Joel's v5)? Rationale being that > only in sugov_set_iowait_boost we might bump freq up (if no iowait_boost > was set) or start from policy->min. In sugov_iowait_boost (consumer) > instead we do the decay (if no boosting was pending). > > --- > kernel/sched/cpufreq_schedutil.c | 29 +++++++++++++++++++---------- > 1 file changed, 19 insertions(+), 10 deletions(-) > > diff --git a/kernel/sched/cpufreq_schedutil.c > b/kernel/sched/cpufreq_schedutil.c > index 46b2479641cc..b270563c15a5 100644 > --- a/kernel/sched/cpufreq_schedutil.c > +++ b/kernel/sched/cpufreq_schedutil.c > @@ -171,8 +171,14 @@ static void sugov_set_iowait_boost(struct sugov_cpu > *sg_cpu, u64 time, > { > if (flags & SCHED_CPUFREQ_IOWAIT) { > sg_cpu->iowait_boost_pending = true; > - sg_cpu->iowait_boost = max(sg_cpu->iowait_boost, > - sg_cpu->sg_policy->policy->min); > + if (sg_cpu->iowait_boost) { > + /* Bump up 2*current_boost until hitting max */ > + sg_cpu->iowait_boost = max(sg_cpu->iowait_boost << 1, > + sg_cpu->iowait_boost_max);
And we are back at where we started :) This wouldn't work because sugov_set_iowait_boost() gets called a lot. Maybe 10 times within a rate_limit_us period. The thumb rule is, never double/half the boost from sugov_set_iowait_boost() :) -- viresh