From: Matthias Kaehlcke <mka@chromium.org>
To: Vincent Donnefort <vincent.donnefort@arm.com>
Cc: peterz@infradead.org, rjw@rjwysocki.net, viresh.kumar@linaro.org,
vincent.guittot@linaro.org, qperret@google.com,
linux-pm@vger.kernel.org, ionela.voinescu@arm.com,
lukasz.luba@arm.com, dietmar.eggemann@arm.com
Subject: Re: [PATCH v3 2/6] PM / EM: Mark inefficient states
Date: Fri, 4 Jun 2021 11:12:43 -0700 [thread overview]
Message-ID: <YLptG5LfKAHlLSkn@google.com> (raw)
In-Reply-To: <1622804761-126737-3-git-send-email-vincent.donnefort@arm.com>
On Fri, Jun 04, 2021 at 12:05:57PM +0100, Vincent Donnefort wrote:
> Some SoCs, such as the sd855 have OPPs within the same performance domain,
> whose cost is higher than others with a higher frequency. Even though
> those OPPs are interesting from a cooling perspective, it makes no sense
> to use them when the device can run at full capacity. Those OPPs handicap
> the performance domain, when choosing the most energy-efficient CPU and
> are wasting energy. They are inefficient.
>
> Hence, add support for such OPPs to the Energy Model. The table can now
> be read skipping inefficient performance states (and by extension,
> inefficient OPPs).
>
> Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com>
>
> diff --git a/include/linux/energy_model.h b/include/linux/energy_model.h
> index 757fc60..2531325 100644
> --- a/include/linux/energy_model.h
> +++ b/include/linux/energy_model.h
> @@ -17,13 +17,25 @@
> * device). It can be a total power: static and dynamic.
> * @cost: The cost coefficient associated with this level, used during
> * energy calculation. Equal to: power * max_frequency / frequency
> + * @flags: see "em_perf_state flags" description below.
> */
> struct em_perf_state {
> unsigned long frequency;
> unsigned long power;
> unsigned long cost;
> + unsigned long flags;
> };
>
> +/*
> + * em_perf_state flags:
> + *
> + * EM_PERF_STATE_INEFFICIENT: The performance state is inefficient. There is
> + * in this em_perf_domain, another performance state with a higher frequency
> + * but a lower or equal power cost. Such inefficient states are ignored when
> + * using em_pd_get_efficient_*() functions.
> + */
> +#define EM_PERF_STATE_INEFFICIENT BIT(0)
> +
> /**
> * em_perf_domain - Performance domain
> * @table: List of performance states, in ascending order
> diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
> index c4871a8..30ab73a 100644
> --- a/kernel/power/energy_model.c
> +++ b/kernel/power/energy_model.c
> @@ -2,7 +2,7 @@
> /*
> * Energy Model of devices
> *
> - * Copyright (c) 2018-2020, Arm ltd.
> + * Copyright (c) 2018-2021, Arm ltd.
> * Written by: Quentin Perret, Arm ltd.
> * Improvements provided by: Lukasz Luba, Arm ltd.
> */
> @@ -42,6 +42,7 @@ static void em_debug_create_ps(struct em_perf_state *ps, struct dentry *pd)
> debugfs_create_ulong("frequency", 0444, d, &ps->frequency);
> debugfs_create_ulong("power", 0444, d, &ps->power);
> debugfs_create_ulong("cost", 0444, d, &ps->cost);
> + debugfs_create_ulong("inefficient", 0444, d, &ps->flags);
> }
>
> static int em_debug_cpus_show(struct seq_file *s, void *unused)
> @@ -160,6 +161,7 @@ static int em_create_perf_table(struct device *dev, struct em_perf_domain *pd,
> table[i].cost = div64_u64(fmax * table[i].power,
> table[i].frequency);
> if (table[i].cost >= prev_cost) {
> + table[i].flags = EM_PERF_STATE_INEFFICIENT;
> dev_dbg(dev, "EM: OPP:%lu is inefficient\n",
> table[i].frequency);
> } else {
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
Please ignore my nit about the curly braces on patch [1/6].
next prev parent reply other threads:[~2021-06-04 18:14 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-04 11:05 [PATCH v3 0/6] EM / PM: Inefficient OPPs Vincent Donnefort
2021-06-04 11:05 ` [PATCH v3 1/6] PM / EM: Fix inefficient states detection Vincent Donnefort
2021-06-04 18:09 ` Matthias Kaehlcke
2021-06-04 11:05 ` [PATCH v3 2/6] PM / EM: Mark inefficient states Vincent Donnefort
2021-06-04 18:12 ` Matthias Kaehlcke [this message]
2021-06-04 11:05 ` [PATCH v3 3/6] cpufreq: Add an interface to mark inefficient frequencies Vincent Donnefort
2021-06-04 18:19 ` Matthias Kaehlcke
2021-06-14 13:40 ` Vincent Donnefort
2021-06-07 5:02 ` Viresh Kumar
2021-06-07 10:14 ` Lukasz Luba
2021-06-14 7:28 ` Viresh Kumar
2021-06-14 13:35 ` Vincent Donnefort
2021-06-15 5:02 ` Viresh Kumar
2021-06-15 8:44 ` Vincent Donnefort
2021-06-15 10:17 ` Viresh Kumar
2021-06-15 17:15 ` Vincent Donnefort
2021-06-16 7:35 ` Viresh Kumar
2021-06-16 9:03 ` Lukasz Luba
2021-06-16 9:31 ` Viresh Kumar
2021-06-16 10:33 ` Lukasz Luba
2021-06-16 10:53 ` Viresh Kumar
2021-06-16 12:45 ` Lukasz Luba
2021-07-02 14:21 ` Lukasz Luba
2021-07-02 15:46 ` Rafael J. Wysocki
2021-07-02 16:04 ` Rafael J. Wysocki
2021-07-02 16:08 ` Lukasz Luba
2021-07-02 17:53 ` Rafael J. Wysocki
2021-07-02 19:04 ` Lukasz Luba
2021-07-02 19:17 ` Vincent Donnefort
2021-07-05 14:09 ` Rafael J. Wysocki
2021-07-06 8:12 ` Vincent Donnefort
2021-07-06 8:37 ` Viresh Kumar
2021-07-06 8:43 ` Vincent Donnefort
2021-07-06 8:50 ` Viresh Kumar
2021-07-06 12:11 ` Rafael J. Wysocki
2021-07-02 16:13 ` Vincent Donnefort
2021-07-02 17:38 ` Rafael J. Wysocki
2021-06-22 9:01 ` Quentin Perret
2021-06-22 9:25 ` Viresh Kumar
2021-06-04 11:05 ` [PATCH v3 4/6] cpufreq: Skip inefficient frequencies in cpufreq_driver_resolve_freq() Vincent Donnefort
2021-06-04 18:25 ` Matthias Kaehlcke
2021-06-04 11:06 ` [PATCH v3 5/6] cpufreq: Mark inefficient frequencies using the Energy Model Vincent Donnefort
2021-06-04 18:35 ` Matthias Kaehlcke
2021-06-04 11:06 ` [PATCH v3 6/6] PM / EM: Skip inefficient states Vincent Donnefort
2021-06-04 18:49 ` Matthias Kaehlcke
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=YLptG5LfKAHlLSkn@google.com \
--to=mka@chromium.org \
--cc=dietmar.eggemann@arm.com \
--cc=ionela.voinescu@arm.com \
--cc=linux-pm@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=peterz@infradead.org \
--cc=qperret@google.com \
--cc=rjw@rjwysocki.net \
--cc=vincent.donnefort@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;
as well as URLs for NNTP newsgroup(s).