From mboxrd@z Thu Jan 1 00:00:00 1970 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 Message-ID: <20150708164034.9112.35895@quantum> References: <1436293469-25707-1-git-send-email-morten.rasmussen@arm.com> <1436293469-25707-45-git-send-email-morten.rasmussen@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8BIT Return-path: In-Reply-To: <1436293469-25707-45-git-send-email-morten.rasmussen@arm.com> Sender: linux-kernel-owner@vger.kernel.org To: Morten Rasmussen , peterz@infradead.org, mingo@redhat.com Cc: vincent.guittot@linaro.org, daniel.lezcano@linaro.org, Dietmar Eggemann , yuyang.du@intel.com, rjw@rjwysocki.net, Juri Lelli , sgurrappadi@nvidia.com, pang.xunlei@zte.com.cn, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Juri Lelli List-Id: linux-pm@vger.kernel.org Quoting Morten Rasmussen (2015-07-07 11:24:27) > From: Juri Lelli > > 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 > cc: Peter Zijlstra > > Signed-off-by: Juri Lelli > --- > 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