linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Quentin Perret <quentin.perret@arm.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: peterz@infradead.org, linux-kernel@vger.kernel.org,
	linux-pm@vger.kernel.org, gregkh@linuxfoundation.org,
	mingo@redhat.com, dietmar.eggemann@arm.com,
	morten.rasmussen@arm.com, chris.redpath@arm.com,
	patrick.bellasi@arm.com, valentin.schneider@arm.com,
	vincent.guittot@linaro.org, thara.gopinath@linaro.org,
	viresh.kumar@linaro.org, tkjos@google.com,
	joel@joelfernandes.org, smuckle@google.com,
	adharmap@codeaurora.org, skannan@codeaurora.org,
	pkondeti@codeaurora.org, juri.lelli@redhat.com,
	edubezval@gmail.com, srinivas.pandruvada@linux.intel.com,
	currojerez@riseup.net, javi.merino@kernel.org
Subject: Re: [PATCH v6 03/14] PM: Introduce an Energy Model management framework
Date: Mon, 10 Sep 2018 11:38:05 +0100	[thread overview]
Message-ID: <20180910103802.l4zhewxgskchflsa@queper01-lin> (raw)
In-Reply-To: <1866195.ZKEIBQluJJ@aspire.rjw.lan>

On Monday 10 Sep 2018 at 11:44:33 (+0200), Rafael J. Wysocki wrote:
> A kerneldoc comment would be useful here IMO.

OK

> > +struct em_cap_state {
> > +	unsigned long frequency; /* Kilo-hertz */
> 
> I wonder if the "frequency" field here could be changed into something a bit
> more abstract like "level" or similar?
> 
> The reason why is because in some cases we may end up with somewhat artificial
> values of "frequency" like when the intel_pstate driver is in use (it uses
> abstract "p-state" values internally and only produces "frequency" numbers for
> the cpufreq core and the way they are derived from the "p-states" is not always
> entirely clean).
> 
> The "level" could just be frequency on systems where cpufreq drivers operate on
> frequencies directly or something else on the other systems.

I see your point (and TBH we start to have same sort of problems on
Arm) but at this stage I would rather keep this field coherent with
what CPUFreq manages, that is, KHz. The only reason for that is because
the thermal subsystem (IPA) will look at this table to apply a max freq
capping on CPUFreq policies, so things need to be aligned.

I agree that even if the unit of this field wasn't specified we could
still build a system that works just fine. However if things are too
loosely specified, problems are allowed to happen, so they will.

Now, if the CPUFreq core is modified to manipulate abstract performance
levels one day, I'll be happy to change the EM framework the same way :-)

> 
> > +	unsigned long power; /* Milli-watts */
> > +	unsigned long cost; /* power * max_frequency / frequency */
> > +};
> > +
> 
> Like above, a kerneldoc comment documenting the structure below would be useful.

OK for that one too.

> > +struct em_perf_domain {
> > +	struct em_cap_state *table; /* Capacity states, in ascending order. */
> > +	int nr_cap_states;
> > +	unsigned long cpus[0]; /* CPUs of the frequency domain. */
> > +};
> > +
> > +#define EM_CPU_MAX_POWER 0xFFFF
> > +
> > +struct em_data_callback {
> > +	/**
> > +	 * active_power() - Provide power at the next capacity state of a CPU
> > +	 * @power	: Active power at the capacity state in mW (modified)
> > +	 * @freq	: Frequency at the capacity state in kHz (modified)
> > +	 * @cpu		: CPU for which we do this operation
> > +	 *
> > +	 * active_power() must find the lowest capacity state of 'cpu' above
> > +	 * 'freq' and update 'power' and 'freq' to the matching active power
> > +	 * and frequency.
> > +	 *
> > +	 * The power is the one of a single CPU in the domain, expressed in
> > +	 * milli-watts. It is expected to fit in the [0, EM_CPU_MAX_POWER]
> > +	 * range.
> > +	 *
> > +	 * Return 0 on success.
> > +	 */
> > +	int (*active_power)(unsigned long *power, unsigned long *freq, int cpu);
> > +};
> > +#define EM_DATA_CB(_active_power_cb) { .active_power = &_active_power_cb }
> > +
> > +struct em_perf_domain *em_cpu_get(int cpu);
> > +int em_register_perf_domain(cpumask_t *span, unsigned int nr_states,
> > +						struct em_data_callback *cb);
> > +
> > +/**
> > + * em_pd_energy() - Estimates the energy consumed by the CPUs of a perf. domain
> > + * @pd		: performance domain for which energy has to be estimated
> > + * @max_util	: highest utilization among CPUs of the domain
> > + * @sum_util	: sum of the utilization of all CPUs in the domain
> > + *
> > + * Return: the sum of the energy consumed by the CPUs of the domain assuming
> > + * a capacity state satisfying the max utilization of the domain.
> 
> Well, this confuses energy with power AFAICS.  The comment talks about energy,
> but the return value is in the units of power.
> 
> I guess this assumes constant power over the next scheduling interval, which is
> why energy and power can be treated as equivalent here, but that needs to be
> clarified as it is somewhat confusing right now.

That's right, manipulating power or energy is equivalent here (as in, it
leads to the same conclusions).

I can explain that better in the comment.

Thanks,
Quentin

  reply	other threads:[~2018-09-10 10:38 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-20  9:44 [PATCH v6 00/14] Energy Aware Scheduling Quentin Perret
2018-08-20  9:44 ` [PATCH v6 01/14] sched: Relocate arch_scale_cpu_capacity Quentin Perret
2018-08-20  9:44 ` [PATCH v6 02/14] sched/cpufreq: Factor out utilization to frequency mapping Quentin Perret
2018-09-10  9:29   ` Rafael J. Wysocki
2018-08-20  9:44 ` [PATCH v6 03/14] PM: Introduce an Energy Model management framework Quentin Perret
2018-08-29 10:04   ` Patrick Bellasi
2018-08-29 13:28     ` Quentin Perret
2018-08-31  9:04       ` Patrick Bellasi
2018-09-11  9:34       ` Andrea Parri
2018-09-11 12:32         ` Quentin Perret
2018-09-11 13:31           ` Andrea Parri
2018-09-10  9:44   ` Rafael J. Wysocki
2018-09-10 10:38     ` Quentin Perret [this message]
2018-09-10 10:40       ` Rafael J. Wysocki
2018-08-20  9:44 ` [PATCH v6 04/14] PM / EM: Expose the Energy Model in sysfs Quentin Perret
2018-09-06  6:56   ` Dietmar Eggemann
2018-09-06 14:09     ` Quentin Perret
2018-09-07  0:14       ` Dietmar Eggemann
2018-08-20  9:44 ` [PATCH v6 05/14] sched/topology: Reference the Energy Model of CPUs when available Quentin Perret
2018-08-29 16:22   ` Patrick Bellasi
2018-08-29 16:56     ` Quentin Perret
2018-08-30 10:00       ` Patrick Bellasi
2018-08-30 10:47         ` Quentin Perret
2018-08-30 12:50           ` Patrick Bellasi
2018-08-20  9:44 ` [PATCH v6 06/14] sched/topology: Lowest CPU asymmetry sched_domain level pointer Quentin Perret
2018-08-20  9:44 ` [PATCH v6 07/14] sched/topology: Introduce sched_energy_present static key Quentin Perret
2018-08-29 16:50   ` Patrick Bellasi
2018-08-29 17:20     ` Quentin Perret
2018-08-30  9:23       ` Patrick Bellasi
2018-08-30  9:57         ` Quentin Perret
2018-08-30 10:18           ` Patrick Bellasi
2018-09-06  6:06   ` Dietmar Eggemann
2018-09-06  9:29     ` Quentin Perret
2018-09-06 23:49       ` Dietmar Eggemann
2018-09-07  8:24         ` Quentin Perret
2018-08-20  9:44 ` [PATCH v6 08/14] sched/fair: Clean-up update_sg_lb_stats parameters Quentin Perret
2018-08-20  9:44 ` [PATCH v6 09/14] sched: Add over-utilization/tipping point indicator Quentin Perret
2018-08-20  9:44 ` [PATCH v6 10/14] sched/cpufreq: Refactor the utilization aggregation method Quentin Perret
2018-09-10  9:53   ` Rafael J. Wysocki
2018-09-10 10:07     ` Quentin Perret
2018-09-10 10:25       ` Rafael J. Wysocki
2018-08-20  9:44 ` [PATCH v6 11/14] sched/fair: Introduce an energy estimation helper function Quentin Perret
2018-08-20  9:44 ` [PATCH v6 12/14] sched/fair: Select an energy-efficient CPU on task wake-up Quentin Perret
2018-08-20  9:44 ` [PATCH v6 13/14] sched/topology: Make Energy Aware Scheduling depend on schedutil Quentin Perret
2018-09-04 10:59   ` Quentin Perret
2018-09-06  9:18     ` Rafael J. Wysocki
2018-09-06 14:38       ` Quentin Perret
2018-09-07  8:52         ` Rafael J. Wysocki
2018-09-07  8:56           ` Rafael J. Wysocki
2018-09-07  9:02             ` Quentin Perret
2018-09-07 15:29           ` Quentin Perret
2018-09-09 20:13             ` Rafael J. Wysocki
2018-09-10  8:24               ` Quentin Perret
2018-09-10  8:55                 ` Rafael J. Wysocki
2018-09-10  9:43                   ` Quentin Perret
2018-08-20  9:44 ` [PATCH v6 14/14] OPTIONAL: cpufreq: dt: Register an Energy Model Quentin Perret
2018-09-10  9:12 ` [PATCH v6 00/14] Energy Aware Scheduling Rafael J. Wysocki

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=20180910103802.l4zhewxgskchflsa@queper01-lin \
    --to=quentin.perret@arm.com \
    --cc=adharmap@codeaurora.org \
    --cc=chris.redpath@arm.com \
    --cc=currojerez@riseup.net \
    --cc=dietmar.eggemann@arm.com \
    --cc=edubezval@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=javi.merino@kernel.org \
    --cc=joel@joelfernandes.org \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=morten.rasmussen@arm.com \
    --cc=patrick.bellasi@arm.com \
    --cc=peterz@infradead.org \
    --cc=pkondeti@codeaurora.org \
    --cc=rjw@rjwysocki.net \
    --cc=skannan@codeaurora.org \
    --cc=smuckle@google.com \
    --cc=srinivas.pandruvada@linux.intel.com \
    --cc=thara.gopinath@linaro.org \
    --cc=tkjos@google.com \
    --cc=valentin.schneider@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).