mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Morten Rasmussen <morten.rasmussen@arm.com>
To: Yuyang Du <yuyang.du@intel.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Benjamin Segall <bsegall@google.com>,
	Paul Turner <pjt@google.com>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Matt Fleming <matt@codeblueprint.co.uk>,
	Mike Galbraith <umgwanakikbuti@gmail.com>
Subject: Re: [PATCH v1 00/10] Optimize sched avgs computation and implement flat util hierarchy
Date: Thu, 1 Sep 2016 15:22:29 +0100	[thread overview]
Message-ID: <20160901142228.GC9409@e105550-lin.cambridge.arm.com> (raw)
In-Reply-To: <20160829190058.GJ3273@intel.com>

On Tue, Aug 30, 2016 at 03:00:58AM +0800, Yuyang Du wrote:
> On Wed, Aug 24, 2016 at 09:54:35AM +0100, Morten Rasmussen wrote:
> > As Dietmar mentioned already, the 'disconnect' is a feature of the PELT
> > rewrite. Paul and Ben's original implementation had full propagation up
> > and down the hierarchy. IIRC, one of the key points of the rewrite was
> > more 'stable' signals, which we would loose by re-introducing immediate
> > updates throughout hierarchy.
>  
> As I mentioned earlier, no essential change!

I don't quite agree with that, it is a very significant change and you
describe the problem yourself further down.

> A feature perhaps is: the
> rewrite takes into account the runnable ratio.
> 
> E.g., let there be a group having one task with share 1024, if the task
> sticks to one CPU, and the task is runnable 50% of the time.
> 
> With the old implementation, the group_entity_load_avg is 1024; but with
> the rewritten implementation, the group_entity_load_avg is 512. Isn't this
> good?
> 
> If the task migrates, the old implementation will still be 1024 on the new
> CPU, but the rewritten implementation will transition to 512, albeit taking
> 0.1+ second time, which we are now addressing. Isn't this good?

No, this is exactly the problem. When you migrate a task, you don't see
the effect immediately after the rewrite. You may have multiple cpus
load-balancing in the meantime before the group load/utilization have
settled after the migration. They will see a wrong picture of the
load/utilization. The cpu where the task was migrated from, appears to
still have load/utilization, and the cpu it has migrated to appears
nearly idle while in fact it is busy running the migrated task. That may
lead other cpus to put even more tasks on the cpu where the task was
migrated to.

We need the cpu load/utilization to be updated immediately to make
meaningful load-balancing decisions. That was ensured by updating the
entire group hierarchy when a task was added/removed before the rewrite.
The task entity contribution was rippling all the way down to the root
cfs_rq load/utilization immediately as all the group cfs_rq
load/utilization directly impacted the group entity load/utilization.
They were sort of 'connected'.

That is no longer the case, and that is why we have problems with
getting an accurate estimate of cpu utilization when we have task
groups.

> 
> > It is a significant change to group scheduling, so I'm a bit surprised
> > that nobody has observed any problems post the rewrite. But maybe most
> > users don't care about the load-balance being slightly off when tasks
> > have migrated or new tasks are added to a group.
>  
> I don't understand what you are saying.

See above. Maybe nobody has noticed the difference if they primarily
have use-cases with many long-running tasks.

> 
> > If we want to re-introduce propagation of both load and utilization I
> > would suggest that we just look at the original implementation. It
> > seemed to work.
> >
> > Handling utilization and load differently will inevitably result in more
> > code. The 'flat hierarchy' approach seems slightly less complicated, but
> > it prevents us from using group utilization later should we wish to do
> > so. It might for example become useful for the schedutil cpufreq
> > governor should it ever consider selecting frequencies differently based
> > on whether the current task is in a (specific) group or not.
> 
> I understand group util may have some usage should you attempt to do so, I'm
> not sure how realistic it is.

I'm not sure if it will be useful either, so far it is just an idea.

> Nothing prevents you from knowing the current task is from which (specific)
> group or not.

True, but it might be useful to know the utilization of the entire
group. However, in that case I guess the system-wide group utilization
might be more useful than the group utilization on the particular cpu.
But I haven't thought it through.

Morten

  reply	other threads:[~2016-09-01 14:22 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-10  0:14 Yuyang Du
2016-08-10  0:14 ` [PATCH v1 01/10] sched/fair: Chance LOAD_AVG_MAX_N from 345 to 347 Yuyang Du
2016-08-24 16:01   ` Vincent Guittot
2016-08-29  0:07     ` Yuyang Du
2016-08-10  0:14 ` [PATCH v1 02/10] documentation: Add scheduler/sched-avg.txt Yuyang Du
2016-08-22 16:48   ` Randy Dunlap
2016-08-10  0:14 ` [PATCH v1 03/10] sched/fair: Add static to remove_entity_load_avg() Yuyang Du
2016-08-10  0:14 ` [PATCH v1 04/10] sched/fair: Rename variable names for sched averages Yuyang Du
2016-08-10  0:14 ` [PATCH v1 05/10] sched/fair: Add __always_inline compiler attribute to __accumulate_sum() Yuyang Du
2016-08-10  0:14 ` [PATCH v1 06/10] sched/fair: Optimize __update_sched_avg() Yuyang Du
2016-08-10  0:14 ` [PATCH v1 07/10] sched/fair: Remove useless 64-bit to 32-bit variable conversion Yuyang Du
2016-08-25  7:11   ` Vincent Guittot
2016-08-29  1:00     ` Yuyang Du
2016-08-10  0:14 ` [PATCH v1 08/10] sched/fair: Remove scale_load_down() for load_avg Yuyang Du
2016-08-10  0:14 ` [PATCH v1 09/10] sched/fair: Rename scale_load() and scale_load_down() Yuyang Du
2016-08-10  0:14 ` [PATCH v1 10/10] sched/fair: Implement flat hierarchical structure for util_avg Yuyang Du
2016-08-10  0:23 ` [PATCH v1 00/10] Optimize sched avgs computation and implement flat util hierarchy Yuyang Du
2016-08-22 23:26   ` Yuyang Du
2016-08-23 13:28     ` Vincent Guittot
2016-08-23 14:13       ` Peter Zijlstra
2016-08-23 14:45         ` Vincent Guittot
2016-08-23 15:39           ` Dietmar Eggemann
2016-08-29  1:37             ` Yuyang Du
2016-09-01 18:32               ` Dietmar Eggemann
2016-08-24  8:54           ` Morten Rasmussen
2016-08-24  9:48             ` Vincent Guittot
2016-08-29 19:00             ` Yuyang Du
2016-09-01 14:22               ` Morten Rasmussen [this message]
2016-08-23 19:09         ` Yuyang Du
2016-08-23 19:01       ` Yuyang Du

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=20160901142228.GC9409@e105550-lin.cambridge.arm.com \
    --to=morten.rasmussen@arm.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt@codeblueprint.co.uk \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=umgwanakikbuti@gmail.com \
    --cc=vincent.guittot@linaro.org \
    --cc=yuyang.du@intel.com \
    /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

all inboxes | Powered by JetHome®