From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Linux PM list <linux-pm@vger.kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/3] intel_pstate: Clean up get_target_pstate_use_performance()
Date: Mon, 09 May 2016 18:24:49 -0700 [thread overview]
Message-ID: <1462843489.4224.17.camel@linux.intel.com> (raw)
In-Reply-To: <6021838.4PBIxTzBzu@vostro.rjw.lan>
On Sat, 2016-05-07 at 01:47 +0200, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> The way the code in get_target_pstate_use_performance() is arranged
> and the comments in there are totally confusing, so modify them to
> reflect what's going on.
>
> The results of the computations should be the same as before.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> ---
> drivers/cpufreq/intel_pstate.c | 32 +++++++++++++-----------------
> --
> 1 file changed, 13 insertions(+), 19 deletions(-)
>
> Index: linux-pm/drivers/cpufreq/intel_pstate.c
> ===================================================================
> --- linux-pm.orig/drivers/cpufreq/intel_pstate.c
> +++ linux-pm/drivers/cpufreq/intel_pstate.c
> @@ -1241,43 +1241,37 @@ static inline int32_t get_target_pstate_
>
> static inline int32_t get_target_pstate_use_performance(struct
> cpudata *cpu)
> {
> - int32_t core_busy, max_pstate, current_pstate, sample_ratio;
> + int32_t perf_scaled, sample_ratio;
> u64 duration_ns;
>
> /*
> - * core_busy is the ratio of actual performance to max
> - * max_pstate is the max non turbo pstate available
> - * current_pstate was the pstate that was requested during
> - * the last sample period.
> - *
> - * We normalize core_busy, which was our actual percent
> - * performance to what we requested during the last sample
> - * period. The result will be a percentage of busy at a
> - * specified pstate.
> + * perf_scaled is the average performance during the last
> sampling
> + * period (in percent) scaled by the ratio of the P-state
> requested
> + * last time to the maximum P-state. That measures the
> system's
> + * response to the previous P-state selection.
> */
> - core_busy = 100 * cpu->sample.core_avg_perf;
> - max_pstate = cpu->pstate.max_pstate_physical;
> - current_pstate = cpu->pstate.current_pstate;
> - core_busy = mul_fp(core_busy, div_fp(max_pstate,
> current_pstate));
> + perf_scaled = div_fp(cpu->pstate.max_pstate_physical,
> + cpu->pstate.current_pstate);
> + perf_scaled = mul_fp(perf_scaled, 100 * cpu-
> >sample.core_avg_perf);
>
> /*
> * Since our utilization update callback will not run unless
> we are
> * in C0, check if the actual elapsed time is significantly
> greater (3x)
> * than our sample interval. If it is, then we were idle
> for a long
> - * enough period of time to adjust our busyness.
> + * enough period of time to adjust our performance metric.
> */
> duration_ns = cpu->sample.time - cpu->last_sample_time;
> if ((s64)duration_ns > pid_params.sample_rate_ns * 3) {
> sample_ratio = div_fp(pid_params.sample_rate_ns,
> duration_ns);
> - core_busy = mul_fp(core_busy, sample_ratio);
> + perf_scaled = mul_fp(perf_scaled, sample_ratio);
> } else {
> sample_ratio = div_fp(100 * cpu->sample.mperf, cpu-
> >sample.tsc);
> if (sample_ratio < int_tofp(1))
> - core_busy = 0;
> + perf_scaled = 0;
> }
>
> - cpu->sample.busy_scaled = core_busy;
> - return cpu->pstate.current_pstate - pid_calc(&cpu->pid,
> core_busy);
> + cpu->sample.busy_scaled = perf_scaled;
> + return cpu->pstate.current_pstate - pid_calc(&cpu->pid,
> perf_scaled);
> }
>
> static inline void intel_pstate_update_pstate(struct cpudata *cpu,
> int pstate)
>
next prev parent reply other threads:[~2016-05-10 1:25 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-06 23:42 [PATCH 0/3] intel_pstate: Improvements related to the APERF/MPERF computation Rafael J. Wysocki
2016-05-06 23:44 ` [PATCH 1/3] intel_pstate: Clarify average performance computation Rafael J. Wysocki
2016-05-10 1:18 ` Srinivas Pandruvada
2016-05-10 19:21 ` Rafael J. Wysocki
2016-05-10 19:58 ` Srinivas Pandruvada
2016-05-10 20:57 ` Rafael J. Wysocki
2016-05-11 5:01 ` Srinivas Pandruvada
2016-05-11 13:46 ` Rafael J. Wysocki
2016-05-06 23:45 ` [PATCH 2/3] intel_pstate: Use sample.core_avg_perf in get_avg_pstate() Rafael J. Wysocki
2016-05-06 23:47 ` [PATCH 3/3] intel_pstate: Clean up get_target_pstate_use_performance() Rafael J. Wysocki
2016-05-10 1:24 ` Srinivas Pandruvada [this message]
2016-05-11 17:06 ` [PATCH v2, 0/3] intel_pstate: Improvements related to the APERF/MPERF computation Rafael J. Wysocki
2016-05-11 17:09 ` [PATCH v2, 1/3] intel_pstate: Clarify average performance computation Rafael J. Wysocki
2016-05-11 17:10 ` [PATCH v2, 2/3] intel_pstate: Use sample.core_avg_perf in get_avg_pstate() Rafael J. Wysocki
2016-05-11 17:11 ` [PATCH v2, 3/3] intel_pstate: Clean up get_target_pstate_use_performance() Rafael J. Wysocki
2016-05-13 0:34 ` [PATCH v2, 0/3] intel_pstate: Improvements related to the APERF/MPERF computation Srinivas Pandruvada
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=1462843489.4224.17.camel@linux.intel.com \
--to=srinivas.pandruvada@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
/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.