Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753571AbcJDULK (ORCPT ); Tue, 4 Oct 2016 16:11:10 -0400 Received: from mail-wm0-f45.google.com ([74.125.82.45]:35900 "EHLO mail-wm0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751969AbcJDULI (ORCPT ); Tue, 4 Oct 2016 16:11:08 -0400 Date: Tue, 4 Oct 2016 21:11:05 +0100 From: Matt Fleming To: Peter Zijlstra Cc: Ingo Molnar , linux-kernel@vger.kernel.org, Mike Galbraith , Yuyang Du , Vincent Guittot , Dietmar Eggemann Subject: Re: [PATCH] sched/fair: Do not decay new task load on first enqueue Message-ID: <20161004201105.GP16071@codeblueprint.co.uk> References: <20160923115808.2330-1-matt@codeblueprint.co.uk> <20160928101422.GR5016@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160928101422.GR5016@twins.programming.kicks-ass.net> User-Agent: Mutt/1.5.24+41 (02bc14ed1569) (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1761 Lines: 42 On Wed, 28 Sep, at 12:14:22PM, Peter Zijlstra wrote: > On Fri, Sep 23, 2016 at 12:58:08PM +0100, Matt Fleming wrote: > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index 8fb4d1942c14..4a2d3ff772f8 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -3142,7 +3142,7 @@ enqueue_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) > > int migrated, decayed; > > > > migrated = !sa->last_update_time; > > - if (!migrated) { > > + if (!migrated && se->sum_exec_runtime) { > > __update_load_avg(now, cpu_of(rq_of(cfs_rq)), sa, > > se->on_rq * scale_load_down(se->load.weight), > > cfs_rq->curr == se, NULL); > > > Hrmm,.. so I see the problem, but I think we're working around it. > > So the problem is that time moves between wake_up_new_task() doing > post_init_entity_util_avg(), which attaches us to the cfs_rq, and > activate_task() which enqueues us. > > Part of the problem is that we do not in fact seem to do > update_rq_clock() before post_init_entity_util_avg(), which makes the > delta larger than it should be. > > The other problem is that activate_task()->enqueue_task() does do > update_rq_clock() (again, after fixing), creating the delta. > > Which suggests we do something like the below (not compile tested or > anything, also I ran out of tea again). This patch causes some low cpu machines (4 or 8) to regress. It turns out they regress with my patch too. I'm running the below patch without the enqueue_task() hunk now to see if that makes a difference. > While staring at this, I don't think we can still hit > vruntime_normalized() with a new task, so I _think_ we can remove that > !se->sum_exec_runtime clause there (and rejoice), no? Looks that way to me, yeah.