Received: by 10.213.65.68 with SMTP id h4csp1207032imn; Wed, 21 Mar 2018 05:27:54 -0700 (PDT) X-Google-Smtp-Source: AG47ELsW1LDulAYFyt+kxIlkOGzzq7SoFMAFSxcIOjUhAGWlZKfZTmRhxriGUEtLlHiTJU8LzF2u X-Received: by 2002:a17:902:b185:: with SMTP id s5-v6mr20291995plr.109.1521635274014; Wed, 21 Mar 2018 05:27:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521635273; cv=none; d=google.com; s=arc-20160816; b=Qb310dcGxOwFDcF4xNnQv4BaAmrKkP8ElGlchzeSlqgy7TxWnlbShII0MCtiu8MDfh jNd2mWM1kndcYgllf8HvbgG+jhyKCV+buTzl1LYFOysxbhDmLlbVkXMda03zvOO02Xi+ 2+4Zj8bmYR0xg7dUzT9LDJ/Vs4qttKIYupQfE38j84UQltsIaMFaR7pUl5f8vpz4bpX0 WJXRmpldZz6DmIH4iMnVpXLtG7ZQgTagqP86HIa8Q32PjlmjKoA6wT6ceLs3+31w0g/w h7dCNSfB5HKoeF+FuxVzy3IOJq4HUQYg2fmzIBksnuOREvfWZoUMS0naGwq6XgPZnBLr zAxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=9y+KBycaLNf2njQHyQu3fxH94nc7pC6qZh+KKodCLx4=; b=MTgqCsH/MD0S4gxY4NdZ6AZs+ETeVPledvD9vvKWzb/YQdVeLHurcMtsTOf7TTr5jn BhsaGlDJWp8XkpDNoubx0t5Rv+RMr8LjCq3VuVx6rVwv1vZs3bzp0aC2EjIRLPX1ZZS8 BCpwhXcIhLLZcPq/uttK15htM3FDGapm29XD5uL7idWqqobGQk1jj2pL4eYwZbImjdXo zCos+eVo8A8dXnyqz6zXCLv/zkeNS3t4ZfSGJSVrD4tWHyvpsP85fbpiNx8lar7MO9KJ R190S8pdVEeRp1E2nmp1b2RNYQZUr89rM1hTkaywMzkeyLqjLpBdRHYACWZFIeqh48Mr 4wFw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f27si2722546pga.389.2018.03.21.05.27.39; Wed, 21 Mar 2018 05:27:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751851AbeCUM0c (ORCPT + 99 others); Wed, 21 Mar 2018 08:26:32 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:52610 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751812AbeCUM0a (ORCPT ); Wed, 21 Mar 2018 08:26:30 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DFBAE1529; Wed, 21 Mar 2018 05:26:29 -0700 (PDT) Received: from e110439-lin (e110439-lin.cambridge.arm.com [10.1.210.68]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 418963F487; Wed, 21 Mar 2018 05:26:27 -0700 (PDT) Date: Wed, 21 Mar 2018 12:26:21 +0000 From: Patrick Bellasi To: Juri Lelli Cc: Dietmar Eggemann , linux-kernel@vger.kernel.org, Peter Zijlstra , Quentin Perret , Thara Gopinath , linux-pm@vger.kernel.org, Morten Rasmussen , Chris Redpath , Valentin Schneider , "Rafael J . Wysocki" , Greg Kroah-Hartman , Vincent Guittot , Viresh Kumar , Todd Kjos , Joel Fernandes Subject: Re: [RFC PATCH 4/6] sched/fair: Introduce an energy estimation helper function Message-ID: <20180321122621.GA13951@e110439-lin> References: <20180320094312.24081-1-dietmar.eggemann@arm.com> <20180320094312.24081-5-dietmar.eggemann@arm.com> <20180321090430.GA6913@localhost.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180321090430.GA6913@localhost.localdomain> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 21-Mar 10:04, Juri Lelli wrote: > Hi, > > On 20/03/18 09:43, Dietmar Eggemann wrote: > > From: Quentin Perret > > > > In preparation for the definition of an energy-aware wakeup path, a > > helper function is provided to estimate the consequence on system energy > > when a specific task wakes-up on a specific CPU. compute_energy() > > estimates the OPPs to be reached by all frequency domains and estimates > > the consumption of each online CPU according to its energy model and its > > percentage of busy time. > > > > Cc: Ingo Molnar > > Cc: Peter Zijlstra > > Signed-off-by: Quentin Perret > > Signed-off-by: Dietmar Eggemann > > --- > > kernel/sched/fair.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 81 insertions(+) > > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index 6c72a5e7b1b0..76bd46502486 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -6409,6 +6409,30 @@ static inline int cpu_overutilized(int cpu) > > } > > > > /* > > + * Returns the util of "cpu" if "p" wakes up on "dst_cpu". > > + */ > > +static unsigned long cpu_util_next(int cpu, struct task_struct *p, int dst_cpu) > > +{ > > + unsigned long util = cpu_rq(cpu)->cfs.avg.util_avg; > > What about other classes? Shouldn't we now also take into account > DEADLINE (as schedutil does)? Good point, although that would likely require to factor out from schedutil the utilization aggregation function, isn't it? > BTW, we now also have a getter method in sched/sched.h; it takes > UTIL_EST into account, though. Do we need to take that into account when > estimating energy consumption? Actually I think that this whole function can be written "just" as: ---8<--- unsigned long util = cpu_util_wake(cpu); if (cpu != dst_cpu) return util; return min(util + task_util(p), capacity_orig_of(cpu)); ---8<--- which will reuse existing functions as well as getting for free other stuff (like the CPU util_est). Considering your observation above, it makes also easy to add into util the DEADLINE and RT utilizations, just before returning the value. > > + unsigned long capacity = capacity_orig_of(cpu); > > + > > + /* > > + * If p is where it should be, or if it has no impact on cpu, there is > > + * not much to do. > > + */ > > + if ((task_cpu(p) == dst_cpu) || (cpu != task_cpu(p) && cpu != dst_cpu)) > > + goto clamp_util; > > + > > + if (dst_cpu == cpu) > > + util += task_util(p); > > + else > > + util = max_t(long, util - task_util(p), 0); > > + > > +clamp_util: > > + return (util >= capacity) ? capacity : util; > > +} > > + > > +/* > > * Disable WAKE_AFFINE in the case where task @p doesn't fit in the > > * capacity of either the waking CPU @cpu or the previous CPU @prev_cpu. > > * > > @@ -6432,6 +6456,63 @@ static int wake_cap(struct task_struct *p, int cpu, int prev_cpu) > > return !util_fits_capacity(task_util(p), min_cap); > > } > > > > +static struct capacity_state *find_cap_state(int cpu, unsigned long util) > > +{ > > + struct sched_energy_model *em = *per_cpu_ptr(energy_model, cpu); > > + struct capacity_state *cs = NULL; > > + int i; > > + > > + /* > > + * As the goal is to estimate the OPP reached for a specific util > > + * value, mimic the behaviour of schedutil with a 1.25 coefficient > > + */ > > + util += util >> 2; > > What about other governors (ondemand for example). Is this supposed to > work only when schedutil is in use (if so we should probably make it > conditional on that)? Yes, I would say that EAS mostly makes sense when you have a "minimum" control on OPPs... otherwise all the energy estimations are really fuzzy. > Also, even when schedutil is in use, shouldn't we ask it for a util > "computation" instead of replicating its _current_ heuristic? Are you proposing to have the 1.25 factor only here and remove it from schedutil? > I fear the two might diverge in the future. That could be avoided by factoring out from schedutil the "compensation" factor into a proper function to be used by all the interested playes, isn't it? -- #include Patrick Bellasi