[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160120004825.GB9882@X58A-UD3R>
Date: Wed, 20 Jan 2016 09:48:25 +0900
From: Byungchul Park <byungchul.park@....com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Dietmar Eggemann <dietmar.eggemann@....com>, perterz@...radead.org,
Frederic Weisbecker <fweisbec@...il.com>,
LKML <linux-kernel@...r.kernel.org>,
Chris Metcalf <cmetcalf@...hip.com>,
Thomas Gleixner <tglx@...utronix.de>,
Luiz Capitulino <lcapitulino@...hat.com>,
Christoph Lameter <cl@...ux.com>,
"Paul E . McKenney" <paulmck@...ux.vnet.ibm.com>,
Mike Galbraith <efault@....de>, Rik van Riel <riel@...hat.com>
Subject: Re: [RFC PATCH 0/4] sched: Improve cpu load accounting with nohz
On Tue, Jan 19, 2016 at 02:04:57PM +0100, Peter Zijlstra wrote:
> On Fri, Jan 15, 2016 at 04:56:36PM +0000, Dietmar Eggemann wrote:
> > Couldn't we set tickless_load only in case:
> >
> > unsigned long tickless_load = (active && pending_updates > 1) ?
> > this_rq->cpu_load[0] : 0;
> >
> > Even though update_cpu_load_nohz() can call with pending_updates=1 and
> > active=1 but then we don't have to decay.
>
> decay_load_missed() has an early bail for !missed, which will be tickled
> with pending_updates == 1.
I think the way for decay_load_missed() to get an early bail for
*!load*, which the Dietmar's proposal did, is also good. And the
peterz's proposal avoiding an unnecessary "add" operation is also
good. Whatever..
>
> What I was thinking of doing however is:
>
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -4445,13 +4445,15 @@ static void __update_cpu_load(struct rq
>
> old_load = this_rq->cpu_load[i];
> old_load = decay_load_missed(old_load, pending_updates - 1, i);
> - old_load -= decay_load_missed(tickless_load, pending_updates - 1, i);
> - /*
> - * old_load can never be a negative value because a decayed
> - * tickless_load cannot be greater than the original
> - * tickless_load.
> - */
> - old_load += tickless_load;
> + if (tickless_load) {
And additionally, in this approach, why don't you do like,
if (tickless_load || pending_updates - 1)
> + old_load -= decay_load_missed(tickless_load, pending_updates - 1, i);
> + /*
> + * old_load can never be a negative value because a
> + * decayed tickless_load cannot be greater than the
> + * original tickless_load.
> + */
> + old_load += tickless_load;
> + }
> new_load = this_load;
> /*
> * Round up the averaging division if load is increasing. This
>
>
> Since regardless of the pending_updates, none of that makes sense if
> !tickless_load.
None of that makes sense if !(pending_updates - 1), too. In that case,
it becomes,
old_load -= tickless_load;
old_load += tickless_load;
Powered by blists - more mailing lists