From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Juri Lelli <juri.lelli@arm.com>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Steve Muckle <steve.muckle@linaro.org>,
Vincent Guittot <vincent.guittot@linaro.org>,
Linux PM list <linux-pm@vger.kernel.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
Viresh Kumar <viresh.kumar@linaro.org>,
Michael Turquette <mturquette@baylibre.com>,
Ingo Molnar <mingo@redhat.com>
Subject: Re: [PATCH 6/6] cpufreq: schedutil: New governor based on scheduler utilization data
Date: Thu, 10 Mar 2016 22:01:53 +0100 [thread overview]
Message-ID: <7014450.lrfeLQYxYB@vostro.rjw.lan> (raw)
In-Reply-To: <20160310043034.GB26402@pablo>
On Thursday, March 10, 2016 11:30:34 AM Juri Lelli wrote:
> On 10/03/16 00:41, Rafael J. Wysocki wrote:
> > On Wed, Mar 9, 2016 at 11:15 AM, Juri Lelli <juri.lelli@arm.com> wrote:
> > > Hi,
> > >
> > > sorry if I didn't reply yet. Trying to cope with jetlag and
> > > talks/meetings these days :-). Let me see if I'm getting what you are
> > > discussing, though.
> > >
> > > On 08/03/16 21:05, Rafael J. Wysocki wrote:
> > >> On Tue, Mar 8, 2016 at 8:26 PM, Peter Zijlstra <peterz@infradead.org> wrote:
> > >> > On Tue, Mar 08, 2016 at 07:00:57PM +0100, Rafael J. Wysocki wrote:
> > >> >> On Tue, Mar 8, 2016 at 12:27 PM, Peter Zijlstra <peterz@infradead.org> wrote:
> > >
> > > [...]
> > >
> > >> a = max_freq gives next_freq = max_freq for x = 1, but with that
> > >> choice of a you may never get to x = 1 with frequency invariant
> > >> because of the feedback effect mentioned above, so the 1/n produces
> > >> the extra boost needed for that (n is a positive integer).
> > >>
> > >> Quite frankly, to me it looks like linear really is a better
> > >> approximation for "raw" utilization. That is, for frequency invariant
> > >> x we should take:
> > >>
> > >> next_freq = a * x * max_freq / current_freq
> > >>
> > >> (and if x is not frequency invariant, the right-hand side becomes a *
> > >> x). Then, the extra boost needed to get to x = 1 for frequency
> > >> invariant is produced by the (max_freq / current_freq) factor that is
> > >> greater than 1 as long as we are not running at max_freq and a can be
> > >> chosen as max_freq.
> > >>
> > >
> > > Expanding terms again, your original formula (without the 1.1 factor of
> > > the last version) was:
> > >
> > > next_freq = util / max_cap * max_freq
> > >
> > > and this doesn't work when we have freq invariance since util won't go
> > > over curr_cap.
> >
> > Can you please remind me what curr_cap is?
> >
>
> The capacity at current frequency.
I see, thanks!
> > > What you propose above is to add another factor, so that we have:
> > >
> > > next_freq = util / max_cap * max_freq / curr_freq * max_freq
> > >
> > > which should give us the opportunity to reach max_freq also with freq
> > > invariance.
> > >
> > > This should actually be the same of doing:
> > >
> > > next_freq = util / max_cap * max_cap / curr_cap * max_freq
> > >
> > > We are basically scaling how much the cpu is busy at curr_cap back to
> > > the 0..1024 scale. And we use this to select next_freq. Also, we can
> > > simplify this to:
> > >
> > > next_freq = util / curr_cap * max_freq
> > >
> > > and we save some ops.
> > >
> > > However, if that is correct, I think we might have a problem, as we are
> > > skewing OPP selection towards higher frequencies. Let's suppose we have
> > > a platform with 3 OPPs:
> > >
> > > freq cap
> > > 1200 1024
> > > 900 768
> > > 600 512
> > >
> > > As soon a task reaches an utilization of 257 we will be selecting the
> > > second OPP as
> > >
> > > next_freq = 257 / 512 * 1200 ~ 602
> > >
> > > While the cpu is only 50% busy in this case. And we will go at max OPP
> > > when reaching ~492 (~64% of 768).
> > >
> > > That said, I guess this might work as a first solution, but we will
> > > probably need something better in the future. I understand Rafael's
> > > concerns regardin margins, but it seems to me that some kind of
> > > additional parameter will be probably needed anyway to fix this.
> > > Just to say again how we handle this in schedfreq, with a -20% margin
> > > applied to the lowest OPP we will get to the next one when utilization
> > > reaches ~410 (80% busy at curr OPP), and so on for the subsequent ones,
> > > which is less aggressive and might be better IMHO.
> >
> > Well, Peter says that my idea is incorrect, so I'll go for
> >
> > next_freq = C * current_freq * util_raw / max
> >
> > where C > 1 (and likely C < 1.5) instead.
> >
> > That means C has to be determined somehow or guessed. The 80% tipping
> > point condition seems reasonable to me, though, which leads to C =
> > 1.25.
> >
>
> Right. So, when using freq. invariant util we have:
>
> next_freq = C * curr_freq * util / curr_cap
>
> as
>
> util_raw = util * max / curr_cap
>
> What Vincent is saying makes sense, though. If we use
> arch_scale_freq_capacity() as denominator instead of max, we can use a
> single formula for both cases.
I'm not convinced about that yet, but let me think about it some more. :-)
Thanks,
Rafael
next prev parent reply other threads:[~2016-03-10 21:00 UTC|newest]
Thread overview: 158+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-02 1:56 [PATCH 0/6] cpufreq: schedutil governor Rafael J. Wysocki
2016-03-02 2:04 ` [PATCH 1/6] cpufreq: Reduce cpufreq_update_util() overhead a bit Rafael J. Wysocki
2016-03-03 5:48 ` Viresh Kumar
2016-03-03 11:47 ` Juri Lelli
2016-03-03 13:04 ` Peter Zijlstra
2016-03-02 2:05 ` [PATCH 2/6][Resend] cpufreq: acpi-cpufreq: Make read and write operations more efficient Rafael J. Wysocki
2016-03-02 2:08 ` [PATCH 3/6] cpufreq: governor: New data type for management part of dbs_data Rafael J. Wysocki
2016-03-03 5:53 ` Viresh Kumar
2016-03-03 19:26 ` Rafael J. Wysocki
2016-03-04 5:49 ` Viresh Kumar
2016-03-02 2:10 ` [PATCH 4/6] cpufreq: governor: Move abstract gov_tunables code to a seperate file Rafael J. Wysocki
2016-03-03 6:03 ` Viresh Kumar
2016-03-02 2:12 ` [PATCH 5/6] cpufreq: Support for fast frequency switching Rafael J. Wysocki
2016-03-03 6:00 ` Viresh Kumar
2016-03-04 2:15 ` Rafael J. Wysocki
2016-03-03 11:16 ` Peter Zijlstra
2016-03-03 20:56 ` Rafael J. Wysocki
2016-03-03 21:12 ` Peter Zijlstra
2016-03-03 11:18 ` Peter Zijlstra
2016-03-03 19:39 ` Rafael J. Wysocki
2016-03-02 2:27 ` [PATCH 6/6] cpufreq: schedutil: New governor based on scheduler utilization data Rafael J. Wysocki
2016-03-02 17:10 ` Vincent Guittot
2016-03-02 17:58 ` Rafael J. Wysocki
2016-03-02 22:49 ` Rafael J. Wysocki
2016-03-03 12:20 ` Peter Zijlstra
2016-03-03 12:32 ` Juri Lelli
2016-03-03 16:24 ` Rafael J. Wysocki
2016-03-03 16:37 ` Peter Zijlstra
2016-03-03 16:47 ` Peter Zijlstra
2016-03-04 1:14 ` Rafael J. Wysocki
2016-03-03 16:55 ` Juri Lelli
2016-03-03 16:56 ` Peter Zijlstra
2016-03-03 17:14 ` Juri Lelli
2016-03-03 14:01 ` Vincent Guittot
2016-03-03 15:38 ` Peter Zijlstra
2016-03-03 16:28 ` Peter Zijlstra
2016-03-03 16:42 ` Peter Zijlstra
2016-03-03 17:28 ` Dietmar Eggemann
2016-03-03 18:26 ` Peter Zijlstra
2016-03-03 19:14 ` Dietmar Eggemann
2016-03-08 13:09 ` Peter Zijlstra
2016-03-03 18:58 ` Rafael J. Wysocki
2016-03-03 13:07 ` Vincent Guittot
2016-03-03 20:06 ` Steve Muckle
2016-03-03 20:20 ` Rafael J. Wysocki
2016-03-03 21:37 ` Steve Muckle
2016-03-07 2:41 ` Rafael J. Wysocki
2016-03-08 11:27 ` Peter Zijlstra
2016-03-08 18:00 ` Rafael J. Wysocki
2016-03-08 19:26 ` Peter Zijlstra
2016-03-08 20:05 ` Rafael J. Wysocki
2016-03-09 10:15 ` Juri Lelli
2016-03-09 23:41 ` Rafael J. Wysocki
2016-03-10 4:30 ` Juri Lelli
2016-03-10 21:01 ` Rafael J. Wysocki [this message]
2016-03-10 23:19 ` Michael Turquette
2016-03-09 16:39 ` Peter Zijlstra
2016-03-09 23:28 ` Rafael J. Wysocki
2016-03-10 3:44 ` Vincent Guittot
2016-03-10 10:07 ` Peter Zijlstra
2016-03-10 10:26 ` Vincent Guittot
[not found] ` <CAKfTPtCbjgbJn+68NJPCnmPFtcHD0wGmZRYaw37zSqPXNpo_Uw@mail.gmail.com>
2016-03-10 10:30 ` Peter Zijlstra
2016-03-10 10:56 ` Peter Zijlstra
2016-03-10 22:28 ` Rafael J. Wysocki
2016-03-10 8:43 ` Peter Zijlstra
2016-03-04 2:56 ` [PATCH v2 0/10] cpufreq: schedutil governor Rafael J. Wysocki
2016-03-04 2:58 ` [PATCH v2 1/10] cpufreq: Reduce cpufreq_update_util() overhead a bit Rafael J. Wysocki
2016-03-09 12:39 ` Peter Zijlstra
2016-03-09 14:17 ` Rafael J. Wysocki
2016-03-09 15:29 ` Peter Zijlstra
2016-03-09 21:35 ` Rafael J. Wysocki
2016-03-10 9:19 ` Peter Zijlstra
2016-03-04 2:59 ` [PATCH v2 2/10][Resend] cpufreq: acpi-cpufreq: Make read and write operations more efficient Rafael J. Wysocki
2016-03-04 3:01 ` [PATCH v2 3/10] cpufreq: governor: New data type for management part of dbs_data Rafael J. Wysocki
2016-03-04 5:52 ` Viresh Kumar
2016-03-04 3:03 ` [PATCH v2 4/10] cpufreq: governor: Move abstract gov_attr_set code to seperate file Rafael J. Wysocki
2016-03-04 5:52 ` Viresh Kumar
2016-03-04 3:05 ` [PATCH v2 5/10] cpufreq: Move governor attribute set headers to cpufreq.h Rafael J. Wysocki
2016-03-04 5:53 ` Viresh Kumar
2016-03-04 3:07 ` [PATCH v2 6/10] cpufreq: Support for fast frequency switching Rafael J. Wysocki
2016-03-04 22:18 ` Steve Muckle
2016-03-04 22:32 ` Rafael J. Wysocki
2016-03-04 22:40 ` Rafael J. Wysocki
2016-03-04 23:18 ` Rafael J. Wysocki
2016-03-04 23:56 ` Steve Muckle
2016-03-05 0:18 ` Rafael J. Wysocki
2016-03-05 11:58 ` Ingo Molnar
2016-03-05 16:49 ` Peter Zijlstra
2016-03-06 2:17 ` Rafael J. Wysocki
2016-03-07 8:00 ` Peter Zijlstra
2016-03-07 13:15 ` Rafael J. Wysocki
2016-03-07 13:32 ` Peter Zijlstra
2016-03-07 13:42 ` Rafael J. Wysocki
2016-03-04 22:58 ` Rafael J. Wysocki
2016-03-04 23:59 ` Steve Muckle
2016-03-04 3:12 ` [PATCH v2 7/10] cpufreq: Rework the scheduler hooks for triggering updates Rafael J. Wysocki
2016-03-04 3:14 ` [PATCH v2 8/10] cpufreq: Move scheduler-related code to the sched directory Rafael J. Wysocki
2016-03-04 3:18 ` [PATCH v2 9/10] cpufreq: sched: Re-introduce cpufreq_update_util() Rafael J. Wysocki
2016-03-04 10:50 ` Juri Lelli
2016-03-04 12:58 ` Rafael J. Wysocki
2016-03-04 13:30 ` [PATCH v3 " Rafael J. Wysocki
2016-03-04 21:21 ` Steve Muckle
2016-03-04 21:27 ` Rafael J. Wysocki
2016-03-04 21:36 ` Rafael J. Wysocki
2016-03-04 3:35 ` [PATCH v2 10/10] cpufreq: schedutil: New governor based on scheduler utilization data Rafael J. Wysocki
2016-03-04 11:26 ` Juri Lelli
2016-03-04 13:19 ` Rafael J. Wysocki
2016-03-04 15:56 ` Srinivas Pandruvada
2016-03-08 2:23 ` [PATCH v3 0/7] cpufreq: schedutil governor Rafael J. Wysocki
2016-03-08 2:25 ` [PATCH v3 1/7][Resend] cpufreq: Rework the scheduler hooks for triggering updates Rafael J. Wysocki
2016-03-09 13:41 ` Peter Zijlstra
2016-03-09 14:02 ` Rafael J. Wysocki
2016-03-08 2:26 ` [PATCH v3 2/7][Resend] cpufreq: Move scheduler-related code to the sched directory Rafael J. Wysocki
2016-03-08 2:28 ` [PATCH v3 3/7][Resend] cpufreq: governor: New data type for management part of dbs_data Rafael J. Wysocki
2016-03-08 2:29 ` [PATCH v3 4/7][Resend] cpufreq: governor: Move abstract gov_attr_set code to seperate file Rafael J. Wysocki
2016-03-08 2:38 ` [PATCH v3 5/7] cpufreq: Support for fast frequency switching Rafael J. Wysocki
2016-03-08 2:41 ` [PATCH v3 6/7] cpufreq: sched: Re-introduce cpufreq_update_util() Rafael J. Wysocki
2016-03-08 2:50 ` [PATCH v3 7/7] cpufreq: schedutil: New governor based on scheduler utilization data Rafael J. Wysocki
2016-03-16 14:41 ` [PATCH v4 0/7] cpufreq: schedutil governor Rafael J. Wysocki
2016-03-16 14:43 ` [PATCH v4 1/7] cpufreq: sched: Helpers to add and remove update_util hooks Rafael J. Wysocki
2016-03-16 14:44 ` [PATCH v4 2/7] cpufreq: governor: New data type for management part of dbs_data Rafael J. Wysocki
2016-03-16 14:45 ` [PATCH v4 3/7] cpufreq: governor: Move abstract gov_attr_set code to seperate file Rafael J. Wysocki
2016-03-16 14:46 ` [PATCH v4 4/7] cpufreq: Move governor attribute set headers to cpufreq.h Rafael J. Wysocki
2016-03-16 14:47 ` [PATCH v4 5/7] cpufreq: Move governor symbols " Rafael J. Wysocki
2016-03-16 14:52 ` [PATCH v4 6/7] cpufreq: Support for fast frequency switching Rafael J. Wysocki
2016-03-16 15:35 ` Peter Zijlstra
2016-03-16 16:58 ` Rafael J. Wysocki
2016-03-16 15:43 ` Peter Zijlstra
2016-03-16 16:58 ` Rafael J. Wysocki
2016-03-16 14:59 ` [PATCH v4 7/7] cpufreq: schedutil: New governor based on scheduler utilization data Rafael J. Wysocki
2016-03-16 17:35 ` Peter Zijlstra
2016-03-16 21:42 ` Rafael J. Wysocki
2016-03-16 17:36 ` Peter Zijlstra
2016-03-16 21:34 ` Rafael J. Wysocki
2016-03-16 17:52 ` Peter Zijlstra
2016-03-16 21:38 ` Rafael J. Wysocki
2016-03-16 22:39 ` Peter Zijlstra
2016-03-16 17:53 ` Peter Zijlstra
2016-03-16 21:48 ` Rafael J. Wysocki
2016-03-16 18:14 ` Peter Zijlstra
2016-03-16 21:38 ` Rafael J. Wysocki
2016-03-16 22:40 ` Peter Zijlstra
2016-03-16 22:53 ` Rafael J. Wysocki
2016-03-16 15:27 ` [PATCH v4 0/7] cpufreq: schedutil governor Peter Zijlstra
2016-03-16 16:20 ` Rafael J. Wysocki
2016-03-16 23:51 ` [PATCH v5 6/7][Update] cpufreq: Support for fast frequency switching Rafael J. Wysocki
2016-03-17 11:35 ` Juri Lelli
2016-03-17 11:40 ` Peter Zijlstra
2016-03-17 11:48 ` Juri Lelli
2016-03-17 12:53 ` Rafael J. Wysocki
2016-03-17 0:01 ` [PATCH v5 7/7][Update] cpufreq: schedutil: New governor based on scheduler utilization data Rafael J. Wysocki
2016-03-17 11:30 ` Juri Lelli
2016-03-17 12:54 ` Rafael J. Wysocki
2016-03-17 11:36 ` Peter Zijlstra
2016-03-17 12:54 ` Rafael J. Wysocki
2016-03-17 15:54 ` [PATCH v6 6/7][Update] cpufreq: Support for fast frequency switching Rafael J. Wysocki
2016-03-17 16:01 ` [PATCH v6 7/7][Update] cpufreq: schedutil: New governor based on scheduler utilization data Rafael J. Wysocki
2016-03-18 12:34 ` Patrick Bellasi
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=7014450.lrfeLQYxYB@vostro.rjw.lan \
--to=rjw@rjwysocki.net \
--cc=juri.lelli@arm.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=mturquette@baylibre.com \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=steve.muckle@linaro.org \
--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).