From: Morten Rasmussen <morten.rasmussen@arm.com>
To: Vincent Guittot <vincent.guittot@linaro.org>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
"rjw@rjwysocki.net" <rjw@rjwysocki.net>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Preeti U Murthy <preeti@linux.vnet.ibm.com>,
Dietmar Eggemann <Dietmar.Eggemann@arm.com>
Subject: Re: [RFC PATCH 01/16] sched: Documentation for scheduler energy cost model
Date: Thu, 5 Jun 2014 12:35:42 +0100 [thread overview]
Message-ID: <20140605113542.GT29593@e103034-lin> (raw)
In-Reply-To: <CAKfTPtB6fC76vtChMqAcrnrOaEsEM7pM411qW4VmGJh4TYgT8Q@mail.gmail.com>
On Thu, Jun 05, 2014 at 09:49:35AM +0100, Vincent Guittot wrote:
> Hi Morten,
>
> On 23 May 2014 20:16, Morten Rasmussen <morten.rasmussen@arm.com> wrote:
> > This documentation patch provide a brief overview of the experimental
> > scheduler energy costing model and associated data structures.
> >
> > Signed-off-by: Morten Rasmussen <morten.rasmussen@arm.com>
> > ---
> > Documentation/scheduler/sched-energy.txt | 66 ++++++++++++++++++++++++++++++
> > 1 file changed, 66 insertions(+)
> > create mode 100644 Documentation/scheduler/sched-energy.txt
> >
> > diff --git a/Documentation/scheduler/sched-energy.txt b/Documentation/scheduler/sched-energy.txt
> > new file mode 100644
> > index 0000000..c6896c0
> > --- /dev/null
> > +++ b/Documentation/scheduler/sched-energy.txt
> > @@ -0,0 +1,66 @@
> > +Energy cost model for energy-aware scheduling (EXPERIMENTAL)
> > +
> > +Introduction
> > +=============
> > +The basic energy model uses platform energy data stored in sched_energy data
> > +structures attached to the sched_groups in the sched_domain hierarchy. The
> > +energy cost model offers two function that can be used to guide scheduling
> > +decisions:
> > +
> > +1. energy_diff_util(cpu, util, wakeups)
>
> Could you give us mor edetails of what util and wakeups are ?
> util is a absolute value or a delta
> Is wakeups a boolean or does wakeups define a number of tasks/cpus
> that wake up ?
Good point... It is not clear at all. Improving the documentation is at
the top of my todo list.
cpu: The cpu in question.
util: Is a signed utilization delta. That is, the amount of utilization
we want to add or remove from the cpu. We don't have good metric for
utilization yet (I assume you have followed the thread on that topic
that started from your recent patch posting), so for now I have used
load_avg_contrib. energy_diff_task() just passes the task
load_avg_contrib as the utilization to energy_diff_load().
wakeups: Is the number of wakeups (task enqueues, not idle exits) caused
by the utilization we are about to add or remove from the cpu. We need
to pick some period to measure the wakeups over. For that I have
introduced task wakeup tracking, very similar to the existing load tracking.
The wakeup tracking gives us an indication of how often a task will
cause an idle exit if it ran alone on a cpu. For short but frequently
running tasks, the wakeup cost may be where the majority of the energy
is spent.
>
> > +2. energy_diff_task(cpu, task)
> > +
> > +Both return the energy cost delta caused by adding/removing utilization or a
> > +task to/from a specific cpu.
> > +
> > +CONFIG_SCHED_ENERGY needs to be defined in Kconfig to enable the energy cost
> > +model and associated data structures.
> > +
> > +The basic algorithm
> > +====================
> > +The basic idea is to determine the energy cost at each level in sched_domain
> > +hierarchy based on utilization:
> > +
> > + for_each_domain(cpu, sd) {
> > + sg = sched_group_of(cpu)
> > + energy_before = curr_util(sg) * busy_power(sg)
> > + + 1-curr_util(sg) * idle_power(sg)
> > + energy_after = new_util(sg) * busy_power(sg)
> > + + 1-new_util(sg) * idle_power(sg)
> > + + new_util(sg) * task_wakeups
> > + * wakeup_energy(sg)
> > + energy_diff += energy_before - energy_after
> > + }
> > +
> > + return energy_diff
>
> So this is the algorithm used in energy_diff_util and energy_diff_task ?
It is. energy_diff_task() is basically just a wrapper for
energy_diff_util().
> it's not straight foward for me to map the algorithm variable and the
> function argument
The pseudo-code above is very simplified. It is an attempt to show that
the algorithm goes up the sched_domain hierarhcy and estimates the
energy impact of adding/removing 'util' amount of utilization to/from
the cpu.
{curr, new}_util is the cpu utilization at the lowest level and
the overall non-idle time for the entire group for higher levels.
utilization is in the range 0.0 to 1.0.
busy_power is the power consumption of the group (for TC2, cpu at the
lowest level, cluster at the next).
idle_power is the power consumption of the group while idle (for TC2,
WFI at the lowest level, cluster power down at cluster level).
task_wakeups (should have been just 'wakeups' in the general case) is the
number of wakeups caused by the utilization we are adding/removing. To
predict how many of the wakeups that causes idle exits we scale the
number by the utilization (assuming that wakeups are uniformly
distributed). wakeup_energy is the energy consumed for an idle
exit/entry cycle for the group (for TC2, WFI at lowest level, cluster
power down at cluster level).
At each level we need to compute the energy before and after the change
to find the energy delta.
Does that answer your question?
>
> > +
> > +Platform energy data
> > +=====================
> > +struct sched_energy has the following members:
> > +
> > +cap_states:
> > + List of struct capacity_state representing the supported capacity states
> > + (P-states). struct capacity_state has two members: cap and power, which
> > + represents the compute capacity and the busy power of the state. The
> > + list must ordered by capacity low->high.
> > +
> > +nr_cap_states:
> > + Number of capacity states in cap_states.
> > +
> > +max_capacity:
> > + The highest capacity supported by any of the capacity states in
> > + cap_states.
>
> can't you directly use cap_states[nr_cap_states].cap has the array is ordered ?
Yes, indeed. max_capacity can be removed.
Morten
next prev parent reply other threads:[~2014-06-05 11:35 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-23 18:16 [RFC PATCH 00/16] sched: Energy cost model for energy-aware scheduling Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 01/16] sched: Documentation for scheduler energy cost model Morten Rasmussen
2014-06-05 8:49 ` Vincent Guittot
2014-06-05 11:35 ` Morten Rasmussen [this message]
2014-06-05 15:02 ` Vincent Guittot
2014-05-23 18:16 ` [RFC PATCH 02/16] sched: Introduce CONFIG_SCHED_ENERGY Morten Rasmussen
2014-06-08 6:03 ` Henrik Austad
2014-06-09 10:20 ` Morten Rasmussen
2014-06-10 9:39 ` Peter Zijlstra
2014-06-10 10:06 ` Morten Rasmussen
2014-06-10 10:23 ` Peter Zijlstra
2014-06-10 11:17 ` Henrik Austad
2014-06-10 12:19 ` Peter Zijlstra
2014-06-10 11:24 ` Morten Rasmussen
2014-06-10 12:24 ` Peter Zijlstra
2014-06-10 14:41 ` Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 03/16] sched: Introduce sd energy data structures Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 04/16] sched: Allocate and initialize sched energy Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 05/16] sched: Add sd energy procfs interface Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 06/16] arm: topology: Define TC2 sched energy and provide it to scheduler Morten Rasmussen
2014-05-30 12:04 ` Peter Zijlstra
2014-06-02 14:15 ` Morten Rasmussen
2014-06-03 11:41 ` Peter Zijlstra
2014-06-04 13:49 ` Morten Rasmussen
2014-06-03 11:44 ` Peter Zijlstra
2014-06-04 15:42 ` Morten Rasmussen
2014-06-04 16:16 ` Peter Zijlstra
2014-06-06 13:15 ` Morten Rasmussen
2014-06-06 13:43 ` Peter Zijlstra
2014-06-06 14:29 ` Morten Rasmussen
2014-06-12 15:05 ` Vince Weaver
2014-06-03 11:50 ` Peter Zijlstra
2014-06-04 16:02 ` Morten Rasmussen
2014-06-04 17:27 ` Peter Zijlstra
2014-06-04 21:56 ` Rafael J. Wysocki
2014-06-05 6:52 ` Peter Zijlstra
2014-06-05 15:03 ` Dirk Brandewie
2014-06-05 20:29 ` Yuyang Du
2014-06-06 8:05 ` Peter Zijlstra
2014-06-06 0:35 ` Yuyang Du
2014-06-06 10:50 ` Peter Zijlstra
2014-06-06 12:13 ` Ingo Molnar
2014-06-06 12:27 ` Ingo Molnar
2014-06-06 14:11 ` Morten Rasmussen
2014-06-07 2:33 ` Nicolas Pitre
2014-06-09 8:27 ` Morten Rasmussen
2014-06-09 13:22 ` Nicolas Pitre
2014-06-11 11:02 ` Eduardo Valentin
2014-06-11 11:42 ` Morten Rasmussen
2014-06-11 11:43 ` Eduardo Valentin
2014-06-11 13:37 ` Morten Rasmussen
2014-06-07 23:53 ` Yuyang Du
2014-06-07 23:26 ` Yuyang Du
2014-06-09 8:59 ` Morten Rasmussen
2014-06-09 2:15 ` Yuyang Du
2014-06-10 10:16 ` Peter Zijlstra
2014-06-10 17:01 ` Nicolas Pitre
2014-06-10 18:35 ` Yuyang Du
2014-06-06 16:27 ` Jacob Pan
2014-06-06 13:03 ` Morten Rasmussen
2014-06-07 2:52 ` Nicolas Pitre
2014-05-23 18:16 ` [RFC PATCH 07/16] sched: Introduce system-wide sched_energy Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 08/16] sched: Introduce SD_SHARE_CAP_STATES sched_domain flag Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 09/16] sched, cpufreq: Introduce current cpu compute capacity into scheduler Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 10/16] sched, cpufreq: Current compute capacity hack for ARM TC2 Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 11/16] sched: Energy model functions Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 12/16] sched: Task wakeup tracking Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 13/16] sched: Take task wakeups into account in energy estimates Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 14/16] sched: Use energy model in select_idle_sibling Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 15/16] sched: Use energy to guide wakeup task placement Morten Rasmussen
2014-05-23 18:16 ` [RFC PATCH 16/16] sched: Disable wake_affine to broaden the scope of wakeup target cpus Morten Rasmussen
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=20140605113542.GT29593@e103034-lin \
--to=morten.rasmussen@arm.com \
--cc=Dietmar.Eggemann@arm.com \
--cc=daniel.lezcano@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=preeti@linux.vnet.ibm.com \
--cc=rjw@rjwysocki.net \
--cc=vincent.guittot@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