Re: [PATCH 3/3] PM: EM: Increase energy calculation precision
From: Lukasz Luba <lukasz.luba@arm.com>
Date: 2021-07-06 19:51:07
Also in:
lkml
On 7/5/21 1:45 PM, Dietmar Eggemann wrote:
On 25/06/2021 17:26, Lukasz Luba wrote:quoted
The Energy Model (EM) provides useful information about device power in each performance state to other subsystems like: Energy Aware Scheduler (EAS). The energy calculation in EAS does arithmetic operation based on the EM em_cpu_energy(). Current implementation of that function uses em_perf_state::cost as a pre-computed cost coefficient equal to: cost = power * max_frequency / frequency. The 'power' is expressed in milli-Watts (or in abstract scale). There are corner cases then the EAS energy calculation for two Performance^^^^^^^^^^^^ Again, an easy to understand example to describe in which situation this change would bring a benefit would help.quoted
Domains (PDs) return the same value, e.g. 10mW. The EAS compares these values to choose smaller one. It might happen that this values are equal due to rounding error. In such scenario, we need better precision, e.g. 10000 times better. To provide this possibility increase the precision on the em_perf_state::cost. This patch allows to avoid the rounding to milli-Watt errors, which might occur in EAS energy estimation for each Performance Domains (PD). The rounding error is common for small tasks which have small utilization values.What's the influence of the CPU utilization 'cpu_util_next()' here? compute_energy() em_cpu_energy() return ps->cost * sum_util / scale_cpu ^^^^^^^^
This is the place where the rounding error triggers. If sum_util is small and scale_cpu is e.g. 1024, then we have a small fraction here. It depends on the EM 'cost', but for most platforms we have small power and cost values, so we suffer this rounding. The example that I gave in my response in patch 2/3 shows this.
quoted
The rest of the EM code doesn't change, em_perf_state::power is still expressed in milli-Watts (or in abstract scale). Thus, all existing platforms don't have to change their reported power. The same applies toNot only existing platforms since there are no changes. So why highlighting `existing` here.?
I just wanted to be clear that it doesn't affect existing platforms at all. We don't require to report power in better resolution e.g. micro-Watts. Also, the clients in the kernel won't be affected, since they use EM 'power' filed, not 'cost'.