From: Douglas RAILLARD <douglas.raillard@arm.com>
To: linux-kernel@vger.kernel.org, rjw@rjwysocki.net,
viresh.kumar@linaro.org, peterz@infradead.org,
juri.lelli@redhat.com, vincent.guittot@linaro.org
Cc: douglas.raillard@arm.com, dietmar.eggemann@arm.com,
qperret@google.com, linux-pm@vger.kernel.org
Subject: [RFC PATCH v4 0/6] sched/cpufreq: Make schedutil energy aware
Date: Wed, 22 Jan 2020 17:35:32 +0000 [thread overview]
Message-ID: <20200122173538.1142069-1-douglas.raillard@arm.com> (raw)
Make schedutil cpufreq governor energy-aware.
- patch 1 introduces a function to retrieve a frequency given a base
frequency and an energy cost margin.
- patch 2 links Energy Model perf_domain to sugov_policy.
- patch 3 updates get_next_freq() to make use of the Energy Model.
- patch 4 adds sugov_cpu_ramp_boost() function.
- patch 5 updates sugov_update_(single|shared)() to make use of
sugov_cpu_ramp_boost().
- patch 6 introduces a tracepoint in get_next_freq() for
testing/debugging. Since it's not a trace event, it's not exposed to
userspace in a directly usable way, allowing for painless future
updates/removal.
The benefits of using the EM in schedutil are twofold:
1) Selecting the highest possible frequency for a given cost. Some
platforms can have lower frequencies that are less efficient than
higher ones, in which case they should be skipped for most purposes.
They can still be useful to give more freedom to thermal throttling
mechanisms, but not under normal circumstances.
note: the EM framework will warn about such OPPs "hertz/watts ratio
non-monotonically decreasing"
2) Driving the frequency selection with power in mind, in addition to
maximizing the utilization of the non-idle CPUs in the system.
Point 1) is implemented in "PM: Introduce em_pd_get_higher_freq()" and
enabled in schedutil by
"sched/cpufreq: Hook em_pd_get_higher_power() into get_next_freq()".
Point 2) is enabled in
"sched/cpufreq: Boost schedutil frequency ramp up". It allows using
higher frequencies when it is known that the true utilization of
currently running tasks is exceeding their previous stable point.
The benefits are:
* Boosting the frequency when the behavior of a runnable task changes,
leading to an increase in utilization. That shortens the frequency
ramp up duration, which in turns allows the utilization signal to
reach stable values quicker. Since the allowed frequency boost is
bounded in energy, it will behave consistently across platforms,
regardless of the OPP cost range.
* The boost is only transient, and should not impact a lot the energy
consumed of workloads with very stable utilization signals.
This has been ligthly tested with a rtapp task ramping from 10% to 75%
utilisation on a big core.
v1 -> v2:
* Split the new sugov_cpu_ramp_boost() from the existing
sugov_cpu_is_busy() as they seem to seek a different goal.
* Implement sugov_cpu_ramp_boost() based on CFS util_avg and
util_est_enqueued signals, rather than using idle calls count.
This makes the ramp boost much more accurate in finding boost
opportunities, and give a "continuous" output rather than a boolean.
* Add EM_COST_MARGIN_SCALE=1024 to represent the
margin values of em_pd_get_higher_freq().
v2 -> v3:
* Check util_avg >= sg_cpu->util_avg in sugov_cpu_ramp_boost_update()
to avoid boosting when the utilization is decreasing.
* Add a tracepoint for testing.
v3 -> v4:
* em_pd_get_higher_freq() now interprets the margin as absolute,
rather than relative to the cost of the base frequency.
* Modify misleading comment in em_pd_get_higher_freq() since min_freq
can actually be higher than the max available frequency in normal
operations.
Douglas RAILLARD (6):
PM: Introduce em_pd_get_higher_freq()
sched/cpufreq: Attach perf domain to sugov policy
sched/cpufreq: Hook em_pd_get_higher_power() into get_next_freq()
sched/cpufreq: Introduce sugov_cpu_ramp_boost
sched/cpufreq: Boost schedutil frequency ramp up
sched/cpufreq: Add schedutil_em_tp tracepoint
include/linux/energy_model.h | 56 ++++++++++++++
include/trace/events/power.h | 9 +++
kernel/sched/cpufreq_schedutil.c | 124 +++++++++++++++++++++++++++++--
3 files changed, 182 insertions(+), 7 deletions(-)
--
2.24.1
next reply other threads:[~2020-01-22 17:36 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-22 17:35 Douglas RAILLARD [this message]
2020-01-22 17:35 ` [RFC PATCH v4 1/6] PM: Introduce em_pd_get_higher_freq() Douglas RAILLARD
2020-01-22 17:35 ` [RFC PATCH v4 2/6] sched/cpufreq: Attach perf domain to sugov policy Douglas RAILLARD
2020-01-22 17:35 ` [RFC PATCH v4 3/6] sched/cpufreq: Hook em_pd_get_higher_power() into get_next_freq() Douglas RAILLARD
2020-01-23 16:16 ` Quentin Perret
2020-01-23 17:52 ` Douglas Raillard
2020-01-24 14:37 ` Quentin Perret
2020-01-24 14:58 ` Quentin Perret
2020-02-27 15:51 ` Douglas Raillard
2020-01-22 17:35 ` [RFC PATCH v4 4/6] sched/cpufreq: Introduce sugov_cpu_ramp_boost Douglas RAILLARD
2020-01-23 15:55 ` Rafael J. Wysocki
2020-01-23 17:21 ` Douglas Raillard
2020-01-23 21:02 ` Rafael J. Wysocki
2020-01-28 15:38 ` Douglas Raillard
2020-02-10 13:08 ` Peter Zijlstra
2020-02-13 10:49 ` Douglas Raillard
2020-01-22 17:35 ` [RFC PATCH v4 5/6] sched/cpufreq: Boost schedutil frequency ramp up Douglas RAILLARD
2020-01-22 17:35 ` [RFC PATCH v4 6/6] sched/cpufreq: Add schedutil_em_tp tracepoint Douglas RAILLARD
2020-01-22 18:14 ` [RFC PATCH v4 0/6] sched/cpufreq: Make schedutil energy aware Douglas Raillard
2020-02-10 13:21 ` Peter Zijlstra
2020-02-13 17:49 ` Douglas Raillard
2020-02-14 12:21 ` Peter Zijlstra
2020-02-14 12:52 ` Peter Zijlstra
2020-03-11 12:25 ` Douglas Raillard
2020-02-14 13:37 ` Peter Zijlstra
2020-03-11 12:40 ` Douglas Raillard
2020-01-23 15:43 ` Rafael J. Wysocki
2020-01-23 17:16 ` Douglas Raillard
2020-02-10 13:30 ` Peter Zijlstra
2020-02-13 11:55 ` Douglas Raillard
2020-02-13 13:20 ` Peter Zijlstra
2020-02-27 15:50 ` Douglas Raillard
2020-01-27 17:16 ` Vincent Guittot
2020-02-10 11:37 ` Douglas Raillard
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=20200122173538.1142069-1-douglas.raillard@arm.com \
--to=douglas.raillard@arm.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=qperret@google.com \
--cc=rjw@rjwysocki.net \
--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;
as well as URLs for NNTP newsgroup(s).