On 22-Dec 13:10, Peter Zijlstra wrote: > On Fri, Dec 22, 2017 at 12:46:18PM +0100, Peter Zijlstra wrote: > > Blergh that'd make a mess of things again. > > Something like so then.. > > --- a/kernel/sched/cpufreq_schedutil.c > +++ b/kernel/sched/cpufreq_schedutil.c > @@ -187,11 +187,16 @@ static void sugov_get_util(struct sugov_ > > static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu) > { > - unsigned long util = sg_cpu->util_cfs + sg_cpu->util_dl; > struct rq *rq = cpu_rq(sg_cpu->cpu); > + unsigned long util; > > - if (rq->rt.rt_nr_running) > + 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;
Since sugov_aggregate_util always follow sugov_get_util, maybe we can move these checks into the latter and remove the first one? That way, sg_cpu->util_{dl,rt,cfs} will always report exactly the requests of each class considering also which tasks are RUNNABLE at sugov_get_util time. Still the observation of Juri is valid: do we wanna really disregard all the CFS blocked load as soon as there are not CFS tasks? > + } > > /* > * Ideally we would like to set util_dl as min/guaranteed freq and -- #include <best/regards.h> Patrick Bellasi