Received: by 10.213.65.68 with SMTP id h4csp1231649imn; Wed, 21 Mar 2018 06:02:06 -0700 (PDT) X-Google-Smtp-Source: AG47ELtAplPEHw3f6KSEGWW2ehHfJDhn2xHI3zgJ67uTfRiIFNa90xK2yrVzz0ogFU+nXFz/gbPn X-Received: by 10.99.175.8 with SMTP id w8mr14639071pge.390.1521637326631; Wed, 21 Mar 2018 06:02:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521637326; cv=none; d=google.com; s=arc-20160816; b=A9N4HXBWQzbosAMdvxPqF1rnsvqmTr1TCVtGsxJuwyy/CZaIKr6K5INiVXN56ZZXEE Awk8OGsNwsTzztjlIaYJrDUYN79/Oi0RNMxfvw4LJHU835vTjOe28EoWWLXbkqkZes7L Pdbvq7WINmjzGZorAIgxf+STbPdYihH2SAwuqf+ZynNXmBGvHvQrIfbk1Od+JHszFAQz pcLTL90a6pKqOn0NjswLGttfd1WCCxjjUGx//P2MGjFIlhiHKbhYlDyz5P61OkN623zy yPpp7X8WYSi21kKwuEyPHpRtgVi2W7ovf5NQcPkUaFTQYkHLxDoGUT/oA9ebAHVNrSQ+ hKMA== 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:dkim-signature:arc-authentication-results; bh=8ajSFYJo7BYeCN8RuHo+lyJVIFU1cx8pT8XnlS27qP4=; b=FGcCi2LYkUhUzKacQ3d68RefUIDBJ3CXQVkk2bZ3wwmXEysXgBixCoH5VDe9b3vBsy /cZc+lq8USSo+BiJ0LnHf4mKE0dX7AoqhEVwmvnYPEq4izjgut1795zpIGNQ7qlqsfCx 3/f1wiGMIzMouIz0eRgxRIQG52DBEc+IWOBLISEZSUpYHqTEqcas7aqJJDFhI3GLHPEJ TqhcW+R/Cgvo+uVLDPpFl1OiI7s79VKf3E+loUBoCWW9JSHrQok/4Fg0W3BEhxzIx/DT ddc5LaNJ1vMggZg/DDBNUSffVuBSQ8HcqgKTB0u0GH7bGIq9v64j1cmpn8pC5NzfyX8S 82VA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=YaMuhR19; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v20-v6si3555710plo.199.2018.03.21.06.01.43; Wed, 21 Mar 2018 06:02:06 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=YaMuhR19; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751940AbeCUM7b (ORCPT + 99 others); Wed, 21 Mar 2018 08:59:31 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:42917 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751597AbeCUM73 (ORCPT ); Wed, 21 Mar 2018 08:59:29 -0400 Received: by mail-wr0-f195.google.com with SMTP id s18so5088599wrg.9; Wed, 21 Mar 2018 05:59:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=8ajSFYJo7BYeCN8RuHo+lyJVIFU1cx8pT8XnlS27qP4=; b=YaMuhR192EdtWVit50HrLofQg4mjl2/sjNUu/A6Qb8La/iIf0kCBHd/nx5hxeFmDMB 0AXpeAsDm8sT8hvCL+2derFCsGSMG3Oq1Od0Hz47ot1aYfbcoKIVXxKaudI9vwnjbWFK 4UhhFbeOfLHThLEeKvqtfGZ9DMon2nqlhrpSjxNjlo7TdQF7Bej4UDzIg79E+ghtXgJ2 Rmb2OvCzcgVAdlYoIccl1on1xKnuddLEDpgHm9MqeXg/fPSWBHvdDjMhHyHettEF/ogl yYROmygXQ9a98FjtmkkR1hW/r6CIxIJih8h3JblmUuYhjNCRUeHUR8o792v/pL++n9di Ryzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=8ajSFYJo7BYeCN8RuHo+lyJVIFU1cx8pT8XnlS27qP4=; b=ZIB1c98MGku/tOdRaUBbFNbJaPrlesmLhRh51IumV6gNa4ImGpUFnxDAnHA4WNI71C W5V0IJRPi/pLlhEbki3eeXT5/6MddcJ9eGOSO4o5OrPqX/x1cBRhBkd0WRtL2admwFYH ZWK0pyw1sp27dEASEcLxk3qAyMkUIz+DYTUBwweRDr5XAGsCn85u6r8bStaIamiJtM2z Rh2xJL3pGEFZgT4WgJuWHFKx1HblOIQKLXr0paMzcINkf0jmGnAgLtAvmE7Zp/e2NHlJ w2VfUvILcs8jpqtU7Of4pHDaoO1LGyWXWS07xzB0r7dVpMSiSgl1a9PQYp9L4er2rZB2 kE4g== X-Gm-Message-State: AElRT7Ht9aQXXaKqWdK8RH2aiamEffFIgG5PTwoExPUqfR4FYHSvkG4A +4CCL24mOklSryiIz4M1mXw= X-Received: by 10.223.134.121 with SMTP id 54mr15701147wrw.59.1521637168112; Wed, 21 Mar 2018 05:59:28 -0700 (PDT) Received: from localhost.localdomain ([151.15.242.31]) by smtp.gmail.com with ESMTPSA id w29sm4527698wra.84.2018.03.21.05.59.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 21 Mar 2018 05:59:27 -0700 (PDT) Date: Wed, 21 Mar 2018 13:59:25 +0100 From: Juri Lelli To: Patrick Bellasi 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: <20180321125925.GB15165@localhost.localdomain> References: <20180320094312.24081-1-dietmar.eggemann@arm.com> <20180320094312.24081-5-dietmar.eggemann@arm.com> <20180321090430.GA6913@localhost.localdomain> <20180321122621.GA13951@e110439-lin> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180321122621.GA13951@e110439-lin> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 21/03/18 12:26, Patrick Bellasi wrote: > 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? Maybe, or simply use getter methods and aggregate again here. > > > 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. Well, for RT we should problably consider the fact that schedutil is going to select max OPP... Apart from that I guess it could work like you said. > > > > + 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. Make sense to me. Shouldn't we then make all this conditional on using schedutil? > > > 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'm only saying that we shouldn't probably have two places where we add this 1.25 factor to utilization before using it, as in the future one of the two might modify that 1.25 to something else and then we'll have problems. So, maybe a common wrapper that adds such factor? > > > 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? And I should have read till the end before writing the above paragraph it seems. :) Thanks, - Juri