From: Lukasz Luba <lukasz.luba@arm.com>
To: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: rui.zhang@intel.com, amit.kucheria@verdurent.com,
amit.kachhap@gmail.com, daniel.lezcano@linaro.org,
viresh.kumar@linaro.org, len.brown@intel.com, pavel@ucw.cz,
Pierre.Gondois@arm.com, ionela.voinescu@arm.com,
rostedt@goodmis.org, mhiramat@kernel.org,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
rafael@kernel.org
Subject: Re: [PATCH v2 06/17] PM: EM: Add update_power() callback for runtime modifications
Date: Mon, 3 Jul 2023 16:06:46 +0100 [thread overview]
Message-ID: <57a5dc82-f2c9-5190-e3fa-702b2eb2de5e@arm.com> (raw)
In-Reply-To: <70e630b8-e577-a148-0179-61aedf910c09@arm.com>
Hi Dietmar,
On 5/30/23 10:31, Dietmar Eggemann wrote:
> On 12/05/2023 11:57, Lukasz Luba wrote:
>> The Energy Model (EM) is going to support runtime modifications. This
>> new callback would be used in the upcoming EM changes. The drivers
>> or frameworks which want to modify the EM have to implement the
>> update_power() callback and provide it via EM API
>> em_dev_update_perf_domain(). The callback is then used by the EM
>> framework to get new power values for each frequency in existing EM.
>
> Do we have any numbers or feedback that the chosen design (i.e. update
> per performance state through update_power()) is performant enough for
> the anticipated use case on real devices?
>
Yes, we have. I have a testing kernel module which updates the EM
with queue_delayed_work() every 100ms. That update is for Little's EM
where we have 11 OPPs. We call the new callback for each OPP
in the em_dev_update_perf_domain(). I have measured that total function
time.
When we fix all CPUs freq to max freq on pixel6 and disable deep idle
states and leave only WFI, then we can run some tracing and capture the
results:
(The 4 CPUs from top are the little (1.8MHz), than 2 Mid (2.2GHz) and
then 2 big (2.8GHz))
------------------------------------
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 3104 51236.39 us 16.506
us 75.344 us
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 1264 20768.15 us 16.430
us 62.257 us
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 1166 18632.95 us 15.980
us 70.707 us
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 770 12334.43 us 16.018
us 66.337 us
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 101 920.613 us 9.114
us 21.380 us
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 20 211.830 us 10.591
us 23.998 us
Function Hit Time Avg
s^2
-------- --- ---- ---
---
Function Hit Time Avg
s^2
-------- --- ---- ---
---
em_dev_update_perf_domain 15 78.085 us 5.205
us 7.444 us
------------------------------------
As you can see in avg on Little CPUs it takes ~16us, on Mid ~10us and on
Big ~5us.
If such updating kernel module is implemented correctly, it would be
most often scheduled on the Littles as you can see based on 'Hit'
column.
Therefore, IMO this cost can be OK for the upstream. This EM runtime
change won't be triggered very often. If it would be e.g. every
100ms than the cost ~1.5us per 1 OPP is negligible.
Regards,
Lukasz
next prev parent reply other threads:[~2023-07-03 15:06 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-12 9:57 [PATCH v2 00/17] Introduce runtime modifiable Energy Model Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 01/17] PM: EM: Refactor em_cpufreq_update_efficiencies() arguments Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 02/17] PM: EM: Find first CPU online while updating OPP efficiency Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 03/17] PM: EM: Refactor em_pd_get_efficient_state() to be more flexible Lukasz Luba
2023-05-30 11:06 ` Dietmar Eggemann
2023-07-03 16:22 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 04/17] PM: EM: Create a new function em_compute_costs() Lukasz Luba
2023-05-30 9:51 ` Dietmar Eggemann
2023-07-03 15:09 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 05/17] trace: energy_model: Add trace event for EM runtime modifications Lukasz Luba
2023-05-30 10:03 ` Dietmar Eggemann
2023-07-03 15:53 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 06/17] PM: EM: Add update_power() callback for " Lukasz Luba
2023-05-30 9:31 ` Dietmar Eggemann
2023-07-03 15:06 ` Lukasz Luba [this message]
2023-05-12 9:57 ` [PATCH v2 07/17] PM: EM: Check if the get_cost() callback is present in em_compute_costs() Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 08/17] PM: EM: Introduce runtime modifiable table Lukasz Luba
2023-05-14 4:28 ` kernel test robot
2023-05-30 10:18 ` Dietmar Eggemann
2023-07-03 15:58 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 09/17] PM: EM: Add RCU mechanism which safely cleans the old data Lukasz Luba
2023-05-30 10:02 ` Dietmar Eggemann
2023-07-03 15:49 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 10/17] PM: EM: Add runtime update interface to modify EM power Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 11/17] PM: EM: Use runtime modified EM for CPUs energy estimation in EAS Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 12/17] PM: EM: Add argument to get_cost() for runtime modification Lukasz Luba
2023-05-30 9:53 ` Dietmar Eggemann
2023-07-03 15:30 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 13/17] PM: EM: Refactor struct em_perf_domain and add default_table Lukasz Luba
2023-05-30 10:23 ` Dietmar Eggemann
2023-07-03 16:00 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 14/17] Documentation: EM: Add a new section about the design Lukasz Luba
2023-05-30 10:33 ` Dietmar Eggemann
2023-07-03 16:09 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 15/17] Documentation: EM: Add a runtime modifiable EM design description Lukasz Luba
2023-05-30 10:42 ` Dietmar Eggemann
2023-07-03 16:13 ` Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 16/17] Documentation: EM: Add example with driver modifying the EM Lukasz Luba
2023-05-12 9:57 ` [PATCH v2 17/17] Documentation: EM: Describe the API of runtime modifications Lukasz Luba
2023-05-24 17:25 ` [PATCH v2 00/17] Introduce runtime modifiable Energy Model Rafael J. Wysocki
2023-07-03 11:08 ` Lukasz Luba
2023-05-30 11:07 ` Dietmar Eggemann
2023-07-03 16:35 ` Lukasz Luba
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=57a5dc82-f2c9-5190-e3fa-702b2eb2de5e@arm.com \
--to=lukasz.luba@arm.com \
--cc=Pierre.Gondois@arm.com \
--cc=amit.kachhap@gmail.com \
--cc=amit.kucheria@verdurent.com \
--cc=daniel.lezcano@linaro.org \
--cc=dietmar.eggemann@arm.com \
--cc=ionela.voinescu@arm.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=pavel@ucw.cz \
--cc=rafael@kernel.org \
--cc=rostedt@goodmis.org \
--cc=rui.zhang@intel.com \
--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
Powered by JetHome