From: Pavan Kondeti <pkondeti@codeaurora.org>
To: Quentin Perret <quentin.perret@arm.com>
Cc: peterz@infradead.org, rjw@rjwysocki.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-pm@vger.kernel.org, mingo@redhat.com,
dietmar.eggemann@arm.com, morten.rasmussen@arm.com,
chris.redpath@arm.com, patrick.bellasi@arm.com,
valentin.schneider@arm.com, vincent.guittot@linaro.org,
thara.gopinath@linaro.org, viresh.kumar@linaro.org,
tkjos@google.com, joelaf@google.com, smuckle@google.com,
adharmap@quicinc.com, skannan@quicinc.com, juri.lelli@redhat.com,
edubezval@gmail.com, srinivas.pandruvada@linux.intel.com,
currojerez@riseup.net, javi.merino@kernel.org
Subject: Re: [RFC PATCH v3 09/10] sched/fair: Select an energy-efficient CPU on task wake-up
Date: Tue, 19 Jun 2018 14:11:56 +0530 [thread overview]
Message-ID: <20180619084156.GC9208@codeaurora.org> (raw)
In-Reply-To: <20180619075723.GQ17720@e108498-lin.cambridge.arm.com>
On Tue, Jun 19, 2018 at 08:57:23AM +0100, Quentin Perret wrote:
> Hi Pavan,
>
> On Tuesday 19 Jun 2018 at 10:36:01 (+0530), Pavan Kondeti wrote:
> > On Mon, May 21, 2018 at 03:25:04PM +0100, Quentin Perret wrote:
> >
> > <snip>
> >
> > > + if (cpumask_test_cpu(prev_cpu, &p->cpus_allowed))
> > > + prev_energy = best_energy = compute_energy(p, prev_cpu);
> > > + else
> > > + prev_energy = best_energy = ULONG_MAX;
> > > +
> > > + for_each_freq_domain(sfd) {
> > > + unsigned long spare_cap, max_spare_cap = 0;
> > > + int max_spare_cap_cpu = -1;
> > > + unsigned long util;
> > > +
> > > + /* Find the CPU with the max spare cap in the freq. dom. */
> > > + for_each_cpu_and(cpu, freq_domain_span(sfd), sched_domain_span(sd)) {
> > > + if (!cpumask_test_cpu(cpu, &p->cpus_allowed))
> > > + continue;
> > > +
> > > + if (cpu == prev_cpu)
> > > + continue;
> > > +
> > > + /* Skip CPUs that will be overutilized */
> > > + util = cpu_util_wake(cpu, p) + task_util;
> > > + cpu_cap = capacity_of(cpu);
> > > + if (cpu_cap * 1024 < util * capacity_margin)
> > > + continue;
> > > +
> > > + spare_cap = cpu_cap - util;
> > > + if (spare_cap > max_spare_cap) {
> > > + max_spare_cap = spare_cap;
> > > + max_spare_cap_cpu = cpu;
> > > + }
> > > + }
> > > +
> > > + /* Evaluate the energy impact of using this CPU. */
> > > + if (max_spare_cap_cpu >= 0) {
> > > + cur_energy = compute_energy(p, max_spare_cap_cpu);
> > > + if (cur_energy < best_energy) {
> > > + best_energy = cur_energy;
> > > + best_energy_cpu = max_spare_cap_cpu;
> > > + }
> > > + }
> > > + }
> > > +
> > > + /*
> > > + * We pick the best CPU only if it saves at least 1.5% of the
> > > + * energy used by prev_cpu.
> > > + */
> > > + if ((prev_energy - best_energy) > (prev_energy >> 6))
> > > + return best_energy_cpu;
> > > +
> > > + return prev_cpu;
> > > +}
> >
> > We are comparing the best_energy_cpu against prev_cpu even when prev_cpu
> > can't accommodate the waking task. Is this intentional? Should not we
> > discard the prev_cpu if it can't accommodate the task.
> >
> > This can potentially make a BIG task run on a lower capacity CPU until
> > load balancer kicks in and corrects the situation.
>
> We shouldn't enter find_energy_efficient_cpu() in the first place if the
> system is overutilized, so that shouldn't too much of an issue in
> general.
>
With UTIL_EST enabled, the overutilization condtion may get turned off when
that 1 BIG task goes to sleep. When it wakes up again, we may place it on
the previous CPU due to the above mentioned issue.
It is not just an existing overutilization condition. By placing this task
on the prev_cpu, we may enter overutilization state.
> But yeah, there is one small corner case where prev_cpu is overutilized
> and the system has not been flagged as such yet (when the tasks wakes-up
> shortly before the tick for ex). I think it's possible to cover this case
> by extending the "if (cpumask_test_cpu(prev_cpu, &p->cpus_allowed))"
> condition at the top of the function with a check on capacity_margin.
>
LGTM.
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
next prev parent reply other threads:[~2018-06-19 8:42 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-21 14:24 [RFC PATCH v3 00/10] Energy Aware Scheduling Quentin Perret
2018-05-21 14:24 ` [RFC PATCH v3 01/10] sched: Relocate arch_scale_cpu_capacity Quentin Perret
2018-05-21 14:24 ` [RFC PATCH v3 02/10] sched/cpufreq: Factor out utilization to frequency mapping Quentin Perret
2018-05-21 14:24 ` [RFC PATCH v3 03/10] PM: Introduce an Energy Model management framework Quentin Perret
2018-06-06 13:12 ` Dietmar Eggemann
2018-06-06 14:37 ` Quentin Perret
2018-06-06 15:20 ` Juri Lelli
2018-06-06 15:29 ` Quentin Perret
2018-06-06 16:26 ` Quentin Perret
2018-06-07 15:58 ` Dietmar Eggemann
2018-06-08 13:39 ` Javi Merino
2018-06-08 15:47 ` Quentin Perret
2018-06-09 8:24 ` Javi Merino
2018-06-06 16:47 ` Juri Lelli
2018-06-06 16:59 ` Quentin Perret
2018-06-07 14:44 ` Juri Lelli
2018-06-07 15:19 ` Quentin Perret
2018-06-07 15:55 ` Dietmar Eggemann
2018-06-08 8:25 ` Quentin Perret
2018-06-08 9:36 ` Juri Lelli
2018-06-08 10:31 ` Quentin Perret
2018-06-08 12:39 ` Dietmar Eggemann
2018-06-08 13:11 ` Quentin Perret
2018-06-08 16:39 ` Dietmar Eggemann
2018-06-08 17:02 ` Quentin Perret
2018-06-07 16:04 ` Juri Lelli
2018-06-07 17:31 ` Quentin Perret
2018-06-09 8:13 ` Javi Merino
2018-06-19 11:07 ` Peter Zijlstra
2018-06-19 12:35 ` Quentin Perret
2018-06-19 11:31 ` Peter Zijlstra
2018-06-19 12:40 ` Quentin Perret
2018-06-19 11:34 ` Peter Zijlstra
2018-06-19 12:58 ` Quentin Perret
2018-06-19 13:23 ` Peter Zijlstra
2018-06-19 13:38 ` Quentin Perret
2018-06-19 14:16 ` Peter Zijlstra
2018-06-19 14:21 ` Peter Zijlstra
2018-06-19 14:30 ` Peter Zijlstra
2018-06-19 14:23 ` Quentin Perret
2018-05-21 14:24 ` [RFC PATCH v3 04/10] PM / EM: Expose the Energy Model in sysfs Quentin Perret
2018-06-19 12:16 ` Peter Zijlstra
2018-06-19 13:06 ` Quentin Perret
2018-05-21 14:25 ` [RFC PATCH v3 05/10] sched/topology: Reference the Energy Model of CPUs when available Quentin Perret
2018-06-07 14:44 ` Juri Lelli
2018-06-07 16:02 ` Quentin Perret
2018-06-07 16:29 ` Juri Lelli
2018-06-07 17:26 ` Quentin Perret
2018-06-19 12:26 ` Peter Zijlstra
2018-06-19 13:24 ` Quentin Perret
2018-06-19 16:20 ` Peter Zijlstra
2018-06-19 17:13 ` Quentin Perret
2018-06-19 18:42 ` Peter Zijlstra
2018-06-20 7:58 ` Quentin Perret
2018-05-21 14:25 ` [RFC PATCH v3 06/10] sched: Add over-utilization/tipping point indicator Quentin Perret
2018-06-19 7:01 ` Pavan Kondeti
2018-06-19 10:26 ` Dietmar Eggemann
2018-05-21 14:25 ` [RFC PATCH v3 07/10] sched/fair: Introduce an energy estimation helper function Quentin Perret
2018-06-08 10:30 ` Juri Lelli
2018-06-19 9:51 ` Pavan Kondeti
2018-06-19 9:53 ` Quentin Perret
2018-05-21 14:25 ` [RFC PATCH v3 08/10] sched: Lowest energy aware balancing sched_domain level pointer Quentin Perret
2018-05-21 14:25 ` [RFC PATCH v3 09/10] sched/fair: Select an energy-efficient CPU on task wake-up Quentin Perret
2018-06-08 10:24 ` Juri Lelli
2018-06-08 11:19 ` Quentin Perret
2018-06-08 11:59 ` Juri Lelli
2018-06-08 16:26 ` Quentin Perret
2018-06-19 5:06 ` Pavan Kondeti
2018-06-19 7:57 ` Quentin Perret
2018-06-19 8:41 ` Pavan Kondeti [this message]
2018-05-21 14:25 ` [RFC PATCH v3 10/10] arch_topology: Start Energy Aware Scheduling Quentin Perret
2018-06-19 9:18 ` Pavan Kondeti
2018-06-19 9:40 ` Quentin Perret
2018-06-19 9:47 ` Juri Lelli
2018-06-19 10:02 ` Quentin Perret
2018-06-19 10:19 ` Juri Lelli
2018-06-19 10:25 ` Quentin Perret
2018-06-19 10:31 ` Juri Lelli
2018-06-19 10:49 ` Quentin Perret
2018-06-01 9:29 ` [RFC PATCH v3 00/10] " Quentin Perret
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180619084156.GC9208@codeaurora.org \
--to=pkondeti@codeaurora.org \
--cc=adharmap@quicinc.com \
--cc=chris.redpath@arm.com \
--cc=currojerez@riseup.net \
--cc=dietmar.eggemann@arm.com \
--cc=edubezval@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=javi.merino@kernel.org \
--cc=joelaf@google.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=morten.rasmussen@arm.com \
--cc=patrick.bellasi@arm.com \
--cc=peterz@infradead.org \
--cc=quentin.perret@arm.com \
--cc=rjw@rjwysocki.net \
--cc=skannan@quicinc.com \
--cc=smuckle@google.com \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=thara.gopinath@linaro.org \
--cc=tkjos@google.com \
--cc=valentin.schneider@arm.com \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox