From mboxrd@z Thu Jan 1 00:00:00 1970 From: Patrick Bellasi Subject: Re: [PATCH v3 1/2] sched/cpufreq: always consider blocked FAIR utilization Date: Wed, 30 May 2018 17:50:10 +0100 Message-ID: <20180530165010.GK30654@e110439-lin> References: <20180524141023.13765-1-patrick.bellasi@arm.com> <20180524141023.13765-2-patrick.bellasi@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: "Rafael J. Wysocki" Cc: Linux Kernel Mailing List , Linux PM , Ingo Molnar , Peter Zijlstra , "Rafael J . Wysocki" , Viresh Kumar , Vincent Guittot , Dietmar Eggemann , Morten Rasmussen , Juri Lelli , Joel Fernandes , Steve Muckle List-Id: linux-pm@vger.kernel.org On 27-May 11:50, Rafael J. Wysocki wrote: > On Thu, May 24, 2018 at 4:10 PM, Patrick Bellasi > wrote: > > Since the refactoring introduced by: > > > > commit 8f111bc357aa ("cpufreq/schedutil: Rewrite CPUFREQ_RT support") > > > > we aggregate FAIR utilization only if this class has runnable tasks. > > This was mainly due to avoid the risk to stay on an high frequency just > > because of the blocked utilization of a CPU not being properly decayed > > while the CPU was idle. > > > > However, since: > > > > commit 31e77c93e432 ("sched/fair: Update blocked load when newly idle") > > > > the FAIR blocked utilization is properly decayed also for IDLE CPUs. > > > > This allows us to use the FAIR blocked utilization as a safe mechanism > > to gracefully reduce the frequency only if no FAIR tasks show up on a > > CPU for a reasonable period of time. > > > > Moreover, we also reduce the frequency drops of CPUs running periodic > > tasks which, depending on the task periodicity and the time required > > for a frequency switch, was increasing the chances to introduce some > > undesirable performance variations. > > > > Reported-by: Vincent Guittot > > Signed-off-by: Patrick Bellasi > > Acked-by: Viresh Kumar > > Acked-by: Vincent Guittot > > Tested-by: Vincent Guittot > > Cc: Ingo Molnar > > Cc: Peter Zijlstra > > Cc: Rafael J. Wysocki > > Cc: Vincent Guittot > > Cc: Viresh Kumar > > Cc: Joel Fernandes > > Cc: linux-kernel@vger.kernel.org > > Cc: linux-pm@vger.kernel.org > > Reviewed-by: Rafael J. Wysocki > > Or please let me know if you want me to apply this one. Hi Rafael, seems this patch has already been applied in tip/sched/core. However is missing your tag above. :/ Dunno if I have / I can to do something about that. > > --- > > Changes in v3: > > - add "Tested-by" and "Acked-by" Vincent tags > > > > Changes in v2: > > - add "Acked-by" Viresh tag > > --- > > kernel/sched/cpufreq_schedutil.c | 17 ++++++++--------- > > 1 file changed, 8 insertions(+), 9 deletions(-) > > > > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c > > index e13df951aca7..28592b62b1d5 100644 > > --- a/kernel/sched/cpufreq_schedutil.c > > +++ b/kernel/sched/cpufreq_schedutil.c > > @@ -183,22 +183,21 @@ static void sugov_get_util(struct sugov_cpu *sg_cpu) > > static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu) > > { > > struct rq *rq = cpu_rq(sg_cpu->cpu); > > - unsigned long util; > > > > - if (rq->rt.rt_nr_running) { > > - util = sg_cpu->max; > > - } else { > > - util = sg_cpu->util_dl; > > - if (rq->cfs.h_nr_running) > > - util += sg_cpu->util_cfs; > > - } > > + if (rq->rt.rt_nr_running) > > + return sg_cpu->max; > > > > /* > > + * Utilization required by DEADLINE must always be granted while, for > > + * FAIR, we use blocked utilization of IDLE CPUs as a mechanism to > > + * gracefully reduce the frequency when no tasks show up for longer > > + * periods of time. > > + * > > * Ideally we would like to set util_dl as min/guaranteed freq and > > * util_cfs + util_dl as requested freq. However, cpufreq is not yet > > * ready for such an interface. So, we only do the latter for now. > > */ > > - return min(util, sg_cpu->max); > > + return min(sg_cpu->max, (sg_cpu->util_dl + sg_cpu->util_cfs)); > > } > > > > static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, unsigned int flags) > > -- > > 2.15.1 > > -- #include Patrick Bellasi