From: Eduardo Valentin <edubezval@gmail.com>
To: Javi Merino <javi.merino@arm.com>
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
punit.agrawal@arm.com, broonie@kernel.org,
Zhang Rui <rui.zhang@intel.com>
Subject: Re: [RFC PATCH v6 6/9] thermal: cpu_cooling: implement the power cooling device API
Date: Wed, 28 Jan 2015 01:23:33 -0400 [thread overview]
Message-ID: <20150128052330.GD29600@developer.hsd1.ca.comcast.net> (raw)
In-Reply-To: <1417806260-9264-7-git-send-email-javi.merino@arm.com>
[-- Attachment #1: Type: text/plain, Size: 3041 bytes --]
Hello Javi,
On Fri, Dec 05, 2014 at 07:04:17PM +0000, Javi Merino wrote:
> Add a basic power model to the cpu cooling device to implement the
> power cooling device API. The power model uses the current frequency,
> current load and OPPs for the power calculations. The cpus must have
> registered their OPPs using the OPP library.
>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Eduardo Valentin <edubezval@gmail.com>
> Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
> Signed-off-by: Javi Merino <javi.merino@arm.com>
<big cut>
> +
> +/**
> + * get_load() - get load for a cpu since last updated
> + * @cpufreq_device: &struct cpufreq_cooling_device for this cpu
> + * @cpu: cpu number
> + *
> + * Return: The average load of cpu @cpu in percentage since this
> + * function was last called.
> + */
> +static u32 get_load(struct cpufreq_cooling_device *cpufreq_device, int cpu)
> +{
> + u32 load;
> + u64 now, now_idle, delta_time, delta_idle;
> +
> + now_idle = get_cpu_idle_time(cpu, &now, 0);
> + delta_idle = now_idle - cpufreq_device->time_in_idle[cpu];
> + delta_time = now - cpufreq_device->time_in_idle_timestamp[cpu];
> +
> + if (delta_time <= delta_idle)
> + load = 0;
> + else
> + load = div64_u64(100 * (delta_time - delta_idle), delta_time);
> +
> + cpufreq_device->time_in_idle[cpu] = now_idle;
> + cpufreq_device->time_in_idle_timestamp[cpu] = now;
> +
> + return load;
> +}
<cut>
>
> +/**
> + * cpufreq_get_actual_power() - get the current power
> + * @cdev: &thermal_cooling_device pointer
> + *
> + * Return the current power consumption of the cpus in milliwatts.
> + */
> +static u32 cpufreq_get_actual_power(struct thermal_cooling_device *cdev)
> +{
> + unsigned long freq;
> + int cpu;
> + u32 static_power, dynamic_power, total_load = 0;
> + struct cpufreq_cooling_device *cpufreq_device = cdev->devdata;
> +
> + freq = cpufreq_quick_get(cpumask_any(&cpufreq_device->allowed_cpus));
> +
> + for_each_cpu(cpu, &cpufreq_device->allowed_cpus) {
> + u32 load;
> +
> + if (cpu_online(cpu))
> + load = get_load(cpufreq_device, cpu);
> + else
> + load = 0;
> +
> + total_load += load;
> + }
> +
> + cpufreq_device->last_load = total_load;
> +
> + static_power = get_static_power(cpufreq_device, freq);
> + dynamic_power = get_dynamic_power(cpufreq_device, freq);
> +
> + return static_power + dynamic_power;
> +}
With respect to load computation vs. frequency usage vs. power
estimation, while getting actual power for a given interval T. What if
in interval T, we have used, say, 3 different cpu frequencies, and the
load on the first was 50%, on the second 80%, and on the last frequency,
the load was 60%, what should be the right load value for computing the
actual power?
I mean, we are using the total idle time for a given interval, but 1 -
idle not always seams to reflect actual load on different opps, if opps
change over time within T time interval window.
BR,
BR,
Eduardo Valentin
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
next prev parent reply other threads:[~2015-01-28 5:23 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-05 19:04 [RFC PATCH v6 0/9] The power allocator thermal governor Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 1/9] tracing: Add array printing helpers Javi Merino
2014-12-08 14:39 ` Dave P Martin
2014-12-08 15:42 ` Steven Rostedt
2014-12-08 16:04 ` Dave P Martin
2014-12-10 10:52 ` Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 2/9] tools lib traceevent: Generalize numeric argument Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 3/9] tools lib traceevent: Add support for __print_u{8,16,32,64}_array() Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 4/9] thermal: let governors have private data for each thermal zone Javi Merino
2014-12-08 4:11 ` Zhang Rui
2015-01-23 14:33 ` Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 5/9] thermal: extend the cooling device API to include power information Javi Merino
2014-12-23 15:14 ` Eduardo Valentin
2015-01-05 15:37 ` Javi Merino
2015-01-05 21:04 ` Eduardo Valentin
2015-01-06 10:34 ` Javi Merino
2015-01-06 13:08 ` Eduardo Valentin
2014-12-05 19:04 ` [RFC PATCH v6 6/9] thermal: cpu_cooling: implement the power cooling device API Javi Merino
2014-12-08 5:49 ` Viresh Kumar
2014-12-08 12:50 ` Javi Merino
2014-12-08 13:31 ` Viresh Kumar
2014-12-08 14:22 ` Javi Merino
2014-12-09 1:59 ` Viresh Kumar
2014-12-09 10:32 ` Javi Merino
2014-12-09 10:36 ` Viresh Kumar
2014-12-09 11:00 ` Javi Merino
2014-12-09 11:06 ` Viresh Kumar
2014-12-09 11:23 ` Javi Merino
2015-01-02 14:37 ` Eduardo Valentin
2015-01-05 16:53 ` Javi Merino
2015-01-05 20:44 ` Eduardo Valentin
2015-01-06 11:01 ` Javi Merino
2015-01-28 5:23 ` Eduardo Valentin [this message]
2015-01-29 11:19 ` Punit Agrawal
2015-01-29 0:15 ` Eduardo Valentin
2015-01-29 19:06 ` Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 7/9] thermal: introduce the Power Allocator governor Javi Merino
2015-01-02 15:46 ` Eduardo Valentin
2015-01-06 13:23 ` Javi Merino
2015-01-06 14:18 ` Eduardo Valentin
2015-01-06 14:50 ` Javi Merino
2015-01-02 15:51 ` Eduardo Valentin
2014-12-05 19:04 ` [RFC PATCH v6 8/9] thermal: add trace events to the power allocator governor Javi Merino
2014-12-05 19:04 ` [RFC PATCH v6 9/9] of: thermal: Introduce sustainable power for a thermal zone Javi Merino
2015-01-02 15:53 ` Eduardo Valentin
2015-01-06 9:42 ` Javi Merino
2015-01-06 13:13 ` Eduardo Valentin
2015-01-06 13:29 ` Javi Merino
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=20150128052330.GD29600@developer.hsd1.ca.comcast.net \
--to=edubezval@gmail.com \
--cc=broonie@kernel.org \
--cc=javi.merino@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=punit.agrawal@arm.com \
--cc=rui.zhang@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.