From: Patrick Bellasi <patrick.bellasi@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Vincent Guittot <vincent.guittot@linaro.org>,
Ingo Molnar <mingo@kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Juri Lelli <juri.lelli@redhat.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Morten Rasmussen <Morten.Rasmussen@arm.com>,
viresh kumar <viresh.kumar@linaro.org>,
Valentin Schneider <valentin.schneider@arm.com>,
Quentin Perret <quentin.perret@arm.com>
Subject: Re: [PATCH v5 00/10] track CPU utilization
Date: Tue, 5 Jun 2018 16:38:26 +0100 [thread overview]
Message-ID: <20180605153826.GE32302@e110439-lin> (raw)
In-Reply-To: <20180605141809.GV12180@hirez.programming.kicks-ass.net>
On 05-Jun 16:18, Peter Zijlstra wrote:
> On Mon, Jun 04, 2018 at 08:08:58PM +0200, Vincent Guittot wrote:
> > On 4 June 2018 at 18:50, Peter Zijlstra <peterz@infradead.org> wrote:
>
> > > So this patch-set tracks the !cfs occupation using the same function,
> > > which is all good. But what, if instead of using that to compensate the
> > > OPP selection, we employ that to renormalize the util signal?
> > >
> > > If we normalize util against the dynamic (rt_avg affected) cpu_capacity,
> > > then I think your initial problem goes away. Because while the RT task
> > > will push the util to .5, it will at the same time push the CPU capacity
> > > to .5, and renormalized that gives 1.
And would not that mean also that a 50% task co-scheduled with the
same 50% RT task, will be reported as a 100% util_avg task?
> > >
> > > NOTE: the renorm would then become something like:
> > > scale_cpu = arch_scale_cpu_capacity() / rt_frac();
>
> Should probably be:
>
> scale_cpu = atch_scale_cpu_capacity() / (1 - rt_frac())
>
> > >
> > >
> > > On IRC I mentioned stopping the CFS clock when preempted, and while that
> > > would result in fixed numbers, Vincent was right in pointing out the
> > > numbers will be difficult to interpret, since the meaning will be purely
> > > CPU local and I'm not sure you can actually fix it again with
> > > normalization.
> > >
> > > Imagine, running a .3 RT task, that would push the (always running) CFS
> > > down to .7, but because we discard all !cfs time, it actually has 1. If
> > > we try and normalize that we'll end up with ~1.43, which is of course
> > > completely broken.
> > >
> > >
> > > _However_, all that happens for util, also happens for load. So the above
> > > scenario will also make the CPU appear less loaded than it actually is.
> >
> > The load will continue to increase because we track runnable state and
> > not running for the load
>
> Duh yes. So renormalizing it once, like proposed for util would actually
> do the right thing there too. Would not that allow us to get rid of
> much of the capacity magic in the load balance code?
>
> /me thinks more..
>
> Bah, no.. because you don't want this dynamic renormalization part of
> the sums. So you want to keep it after the fact. :/
>
> > As you mentioned, scale_rt_capacity give the remaining capacity for
> > cfs and it will behave like cfs util_avg now that it uses PELT. So as
> > long as cfs util_avg < scale_rt_capacity(we probably need a margin)
> > we keep using dl bandwidth + cfs util_avg + rt util_avg for selecting
> > OPP because we have remaining spare capacity but if cfs util_avg ==
> > scale_rt_capacity, we make sure to use max OPP.
What will happen for the 50% task of the example above?
> Good point, when cfs-util < cfs-cap then there is idle time and the util
> number is 'right', when cfs-util == cfs-cap we're overcommitted and
> should go max.
Again I cannot easily read the example above...
Would that mean that a 50% CFS task, preempted by a 50% RT task (which
already set OPP to max while RUNNABLE) will end up running at the max
OPP too?
> Since the util and cap values are aligned that should track nicely.
True... the only potential issue I see is that we are steering PELT
behaviors towards better driving schedutil to run high-demand
workloads while _maybe_ affecting quite sensibly the capacity of PELT
to describe how much CPU a task uses.
Ultimately, utilization has always been a metric on "how much you
use"... while here it seems to me we are bending it to be something to
define "how fast you have to run".
--
#include <best/regards.h>
Patrick Bellasi
next prev parent reply other threads:[~2018-06-05 15:38 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-25 13:12 [PATCH v5 00/10] track CPU utilization Vincent Guittot
2018-05-25 13:12 ` [PATCH v5 01/10] sched/pelt: Move pelt related code in a dedicated file Vincent Guittot
2018-05-25 14:26 ` Quentin Perret
2018-05-25 16:14 ` Peter Zijlstra
2018-05-29 8:21 ` Quentin Perret
2018-05-25 18:04 ` Patrick Bellasi
2018-05-29 14:55 ` Quentin Perret
2018-05-29 15:02 ` Vincent Guittot
2018-05-29 15:04 ` Quentin Perret
2018-05-25 13:12 ` [PATCH v5 02/10] sched/rt: add rt_rq utilization tracking Vincent Guittot
2018-05-25 15:54 ` Patrick Bellasi
2018-05-29 13:29 ` Vincent Guittot
2018-05-30 9:32 ` Patrick Bellasi
2018-05-30 10:06 ` Vincent Guittot
2018-05-30 11:01 ` Patrick Bellasi
2018-05-30 14:39 ` Vincent Guittot
2018-05-25 13:12 ` [PATCH v5 03/10] cpufreq/schedutil: add rt " Vincent Guittot
2018-05-30 7:03 ` Viresh Kumar
2018-05-30 8:23 ` Vincent Guittot
2018-05-30 9:40 ` Patrick Bellasi
2018-05-30 9:53 ` Vincent Guittot
2018-05-30 16:46 ` Quentin Perret
2018-05-31 8:46 ` Juri Lelli
2018-06-01 16:23 ` Peter Zijlstra
2018-06-01 17:23 ` Patrick Bellasi
2018-06-04 10:17 ` Quentin Perret
2018-06-04 15:16 ` Patrick Bellasi
2018-05-25 13:12 ` [PATCH v5 04/10] sched/dl: add dl_rq " Vincent Guittot
2018-05-30 10:50 ` Patrick Bellasi
2018-05-30 11:51 ` Vincent Guittot
2018-05-25 13:12 ` [PATCH v5 05/10] cpufreq/schedutil: get max utilization Vincent Guittot
2018-05-28 10:12 ` Juri Lelli
2018-05-28 14:57 ` Vincent Guittot
2018-05-28 15:22 ` Juri Lelli
2018-05-28 16:34 ` Vincent Guittot
2018-05-31 10:27 ` Patrick Bellasi
2018-05-31 13:02 ` Vincent Guittot
2018-06-01 13:53 ` Vincent Guittot
2018-06-01 17:45 ` Joel Fernandes
2018-06-04 6:41 ` Vincent Guittot
2018-06-04 7:04 ` Juri Lelli
2018-06-04 7:14 ` Vincent Guittot
2018-06-04 10:12 ` Juri Lelli
2018-06-04 12:35 ` Vincent Guittot
2018-05-29 5:08 ` Joel Fernandes
2018-05-29 6:31 ` Juri Lelli
2018-05-29 6:48 ` Vincent Guittot
2018-05-29 9:47 ` Juri Lelli
2018-05-29 8:40 ` Quentin Perret
2018-05-29 9:52 ` Juri Lelli
2018-05-30 8:37 ` Quentin Perret
2018-05-30 8:51 ` Juri Lelli
2018-05-25 13:12 ` [PATCH v5 06/10] sched: remove rt and dl from sched_avg Vincent Guittot
2018-05-25 13:12 ` [PATCH v5 07/10] sched/irq: add irq utilization tracking Vincent Guittot
2018-05-30 15:55 ` Dietmar Eggemann
2018-05-30 18:45 ` Vincent Guittot
2018-05-31 16:54 ` Dietmar Eggemann
2018-06-06 16:06 ` Vincent Guittot
2018-06-07 8:29 ` Dietmar Eggemann
2018-06-07 8:44 ` Vincent Guittot
2018-06-07 9:06 ` Dietmar Eggemann
2018-05-25 13:12 ` [PATCH v5 08/10] cpufreq/schedutil: take into account interrupt Vincent Guittot
2018-05-28 10:41 ` Juri Lelli
2018-05-28 12:06 ` Vincent Guittot
2018-05-28 12:37 ` Juri Lelli
2018-05-25 13:12 ` [PATCH v5 09/10] sched: remove rt_avg code Vincent Guittot
2018-05-25 13:12 ` [PATCH v5 10/10] proc/sched: remove unused sched_time_avg_ms Vincent Guittot
2018-06-04 16:50 ` [PATCH v5 00/10] track CPU utilization Peter Zijlstra
2018-06-04 17:13 ` Quentin Perret
2018-06-04 18:08 ` Vincent Guittot
2018-06-05 14:18 ` Peter Zijlstra
2018-06-05 15:03 ` Juri Lelli
2018-06-05 15:38 ` Patrick Bellasi [this message]
2018-06-05 22:27 ` Peter Zijlstra
2018-06-06 9:44 ` Quentin Perret
2018-06-06 9:59 ` Vincent Guittot
2018-06-06 10:02 ` Vincent Guittot
2018-06-06 10:12 ` Quentin Perret
2018-06-05 8:36 ` Vincent Guittot
2018-06-05 10:57 ` Quentin Perret
2018-06-05 11:59 ` Vincent Guittot
2018-06-05 13:12 ` Quentin Perret
2018-06-05 13:18 ` Vincent Guittot
2018-06-05 13:52 ` Quentin Perret
2018-06-05 13:55 ` Vincent Guittot
2018-06-05 14:09 ` Quentin Perret
2018-06-05 14:21 ` Quentin Perret
2018-06-05 12:11 ` Juri Lelli
2018-06-05 13:05 ` Quentin Perret
2018-06-05 13:15 ` Juri Lelli
2018-06-05 14:01 ` Quentin Perret
2018-06-05 14:13 ` Juri Lelli
2018-06-06 13:05 ` Claudio Scordino
2018-06-06 13:20 ` Quentin Perret
2018-06-06 13:53 ` Claudio Scordino
2018-06-06 14:10 ` Quentin Perret
2018-06-06 21:05 ` luca abeni
2018-06-07 8:25 ` Quentin Perret
2018-06-06 20:53 ` luca abeni
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=20180605153826.GE32302@e110439-lin \
--to=patrick.bellasi@arm.com \
--cc=Morten.Rasmussen@arm.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=quentin.perret@arm.com \
--cc=rjw@rjwysocki.net \
--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 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.