From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752918AbcFUIm3 (ORCPT ); Tue, 21 Jun 2016 04:42:29 -0400 Received: from merlin.infradead.org ([205.233.59.134]:45213 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751874AbcFUImW (ORCPT ); Tue, 21 Jun 2016 04:42:22 -0400 Date: Tue, 21 Jun 2016 10:41:19 +0200 From: Peter Zijlstra To: Dietmar Eggemann Cc: Vincent Guittot , Yuyang Du , Ingo Molnar , linux-kernel , Mike Galbraith , Benjamin Segall , Paul Turner , Morten Rasmussen , Matt Fleming Subject: Re: [PATCH 4/4] sched,fair: Fix PELT integrity for new tasks Message-ID: <20160621084119.GN30154@twins.programming.kicks-ass.net> References: <20160617120136.064100812@infradead.org> <20160617120454.150630859@infradead.org> <20160617142814.GT30154@twins.programming.kicks-ass.net> <20160617160239.GL30927@twins.programming.kicks-ass.net> <20160617161831.GM30927@twins.programming.kicks-ass.net> <5767D51F.3080600@arm.com> <5768027E.1090408@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5768027E.1090408@arm.com> User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 20, 2016 at 03:49:34PM +0100, Dietmar Eggemann wrote: > On 20/06/16 13:35, Vincent Guittot wrote: > > It will go through wake_up_new_task and post_init_entity_util_avg > > during its fork which is enough to set last_update_time. Then, it will > > use the switched_to_fair if the task becomes a fair one > > Oh I see. We want to make sure that every task (even when forked as > !fair) has a last_update_time value != 0, when becoming fair one day. Right, see 2 below. I need to write a bunch of comments explaining PELT proper, as well as document these things. The things we ran into with these patches were that: 1) You need to update the cfs_rq _before_ any entity attach/detach (and might need to update_tg_load_avg when update_cfs_rq_load_avg() returns true). 2) (fair) entities are always attached, switched_from/to deal with !fair. 3) cpu migration is the only exception and uses the last_update_time=0 thing -- because refusal to take second rq->lock. Which is why I dislike Yuyang's patches, they create more exceptions instead of applying existing rules (albeit undocumented). Esp. 1 is important, because while for mathematically consistency you don't actually need to do this, you only need the entities to be up-to-date with the cfs rq when you attach/detach, but that forgets the temporal aspect of _when_ you do this.