Messages in this thread | | | From | Michael Turquette <> | Subject | Re: [RFCv5 PATCH 44/46] sched/fair: jump to max OPP when crossing UP threshold | Date | Wed, 08 Jul 2015 09:40:34 -0700 |
| |
Quoting Morten Rasmussen (2015-07-07 11:24:27) > From: Juri Lelli <juri.lelli@arm.com> > > Since the true utilization of a long running task is not detectable while > it is running and might be bigger than the current cpu capacity, create the > maximum cpu capacity head room by requesting the maximum cpu capacity once > the cpu usage plus the capacity margin exceeds the current capacity. This > is also done to try to harm the performance of a task the least. > > cc: Ingo Molnar <mingo@redhat.com> > cc: Peter Zijlstra <peterz@infradead.org> > > Signed-off-by: Juri Lelli <juri.lelli@arm.com> > --- > kernel/sched/fair.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 323331f..c2d6de4 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -8586,6 +8586,25 @@ static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued) > > if (!rq->rd->overutilized && cpu_overutilized(task_cpu(curr))) > rq->rd->overutilized = true; > + > + /* > + * To make free room for a task that is building up its "real" > + * utilization and to harm its performance the least, request a > + * jump to max OPP as soon as get_cpu_usage() crosses the UP > + * threshold. The UP threshold is built relative to the current > + * capacity (OPP), by using same margin used to tell if a cpu > + * is overutilized (capacity_margin). > + */ > + if (sched_energy_freq()) { > + int cpu = cpu_of(rq); > + unsigned long capacity_orig = capacity_orig_of(cpu); > + unsigned long capacity_curr = capacity_curr_of(cpu); > + > + if (capacity_curr < capacity_orig && > + (capacity_curr * SCHED_LOAD_SCALE) < > + (get_cpu_usage(cpu) * capacity_margin))
As I stated in a previous patch, I wonder if the multiplications can be removed by assuming equivalent units for load and capacity and simply adding the 256 (25%) margin to the valued returned by get_cpu_usage?
Regards, Mike
> + cpufreq_sched_set_cap(cpu, capacity_orig); > + } > } > > /* > -- > 1.9.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
| |