Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752810AbdGSFhR (ORCPT ); Wed, 19 Jul 2017 01:37:17 -0400 Received: from mail-pg0-f45.google.com ([74.125.83.45]:32989 "EHLO mail-pg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751754AbdGSFhP (ORCPT ); Wed, 19 Jul 2017 01:37:15 -0400 Date: Wed, 19 Jul 2017 11:07:11 +0530 From: Viresh Kumar To: Juri Lelli Cc: Joel Fernandes , LKML , Patrick Bellasi , Andres Oportus , Dietmar Eggemann , Srinivas Pandruvada , Len Brown , "Rafael J . Wysocki" , Ingo Molnar , Peter Zijlstra Subject: Re: [PATCH RFC v5] cpufreq: schedutil: Make iowait boost more energy efficient Message-ID: <20170719053711.GA352@vireshk-i7> References: <20170716080407.28492-1-joelaf@google.com> <20170717080441.GM352@vireshk-i7> <20170718054558.GU352@vireshk-i7> <20170718140254.qfsxczbkvrcugrv3@e106622-lin> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170718140254.qfsxczbkvrcugrv3@e106622-lin> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1410 Lines: 37 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