Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: [PATCH 1/2] sched: cpufreq: ignore SMT when determining max cpu capacity | Date | Wed, 31 Aug 2016 03:27:30 +0200 |
| |
On Friday, August 26, 2016 11:40:47 AM Steve Muckle wrote: > PELT does not consider SMT when scaling its utilization values via > arch_scale_cpu_capacity(). The value in rq->cpu_capacity_orig does > take SMT into consideration though and therefore may be smaller than > the utilization reported by PELT. > > On an Intel i7-3630QM for example rq->cpu_capacity_orig is 589 but > util_avg scales up to 1024. This means that a 50% utilized CPU will show > up in schedutil as ~86% busy. > > Fix this by using the same CPU scaling value in schedutil as that which > is used by PELT. > > Signed-off-by: Steve Muckle <smuckle@linaro.org>
This is fine by me.
Peter, any objections?
> --- > kernel/sched/cpufreq_schedutil.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c > index 60d985f4dc47..cb8a77b1ef1b 100644 > --- a/kernel/sched/cpufreq_schedutil.c > +++ b/kernel/sched/cpufreq_schedutil.c > @@ -147,7 +147,9 @@ static unsigned int get_next_freq(struct sugov_cpu *sg_cpu, unsigned long util, > static void sugov_get_util(unsigned long *util, unsigned long *max) > { > struct rq *rq = this_rq(); > - unsigned long cfs_max = rq->cpu_capacity_orig; > + unsigned long cfs_max; > + > + cfs_max = arch_scale_cpu_capacity(NULL, smp_processor_id()); > > *util = min(rq->cfs.avg.util_avg, cfs_max); > *max = cfs_max; >
Thanks, Rafael
| |