Thread (155 messages) 155 messages, 12 authors, 2016-03-18

Re: [PATCH 6/6] cpufreq: schedutil: New governor based on scheduler utilization data

From: Peter Zijlstra <peterz@infradead.org>
Date: 2016-03-08 19:26:57
Also in: linux-acpi, lkml

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 [off-list ref] wrote:
quoted
Seeing how frequency invariance is an arch feature, and cpufreq drivers
are also typically arch specific, do we really need a flag at this
level?
The next frequency is selected by the governor and that's why.  The
driver gets a frequency to set only.

Now, the governor needs to work with different platforms, so it needs
to know how to deal with the given one.
Ah, indeed. In any case, the availability of arch_sched_scale_freq() is
a compile time thingy, so we can, at compile time, know what to use.
quoted
In any case, I think the only difference between the two formula should
be the addition of (1) for the platforms that do not already implement
frequency invariance.
OK

So I'm reading this as a statement that linear is a better
approximation for frequency invariant utilization.
Well, (1) is what the scheduler does with frequency invariance, except
that allows a more flexible definition of 'current frequency' by asking
for it every time we update the util stats.

But if a platform doesn't need this, ie. it has a fixed frequency, or
simply doesn't provide anything like this, assuming we run at the
frequency we asked for is a reasonable assumption no?
This means that on platforms where the utilization is frequency
invariant we should use

  next_freq = a * x

(where x is given by (2) above) and for platforms where the
utilization is not frequency invariant

  next_freq = a * x * current_freq / max_freq

and all boils down to finding a.
Right.
Now, it seems reasonable for a to be something like (1 + 1/n) *
max_freq, so for non-frequency invariant we get

  nex_freq = (1 + 1/n) * current_freq * x
This seems like a big leap; where does:

  (1 + 1/n) * max_freq

come from? And what is 'n'?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help