Received: by 10.213.65.68 with SMTP id h4csp1282053imn; Wed, 21 Mar 2018 07:06:55 -0700 (PDT) X-Google-Smtp-Source: AG47ELsZAkv4jSzifDMU521r5a42a/pa32AW+v+7aS7bR5a28nmrypCkqxQ6x5Rnk83PLxU8jss5 X-Received: by 2002:a17:902:3181:: with SMTP id x1-v6mr3291742plb.269.1521641215824; Wed, 21 Mar 2018 07:06:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521641215; cv=none; d=google.com; s=arc-20160816; b=P+NQjrbTNsghKU+kE3yUVVQIHbZGNnQXpHAO73h2eN7aQiQVpDh4rBq83Bsj0QvhGh xS2P9/vDsOTfMlxJRAZ8pUYY7M0/QACAXDCHNQYmWXFbdTyyG3Go9yV2ObD0qI2uYkyF k9XOqrXq8pjlF+A8RqKY192qphCEnipdoiZwLISIQBsuZ3dNqdfBLYatpN1vlgjBgi5d aJAmsYdO0GKrgD1nQH9roKyBFPUP/3G7bNgRwzOCuIrgcAl94XUMJfiApXBCaLXxEZtY DG+IgtA+dzUJXjGkjMfjG+HdfHTp6AMMKGYvAYmVqS2PrrvmB/Tui8RofrQf5+PM7Zeu hv/Q== 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=l1z4DwqsXUyxJ8Wg+FzeXmNqnc0mGRcO9KJkp6xw32I=; b=oShm8/g/pvRjQVvP4vNuDO+cBEp7ExGrBzzicTUOOCQXNajJPZIAEzg8KaaASTlaUP zHpmbuGE7oeFJERZXIJQTzkwxe+s/J6t4NkSsxQJWOWBiM+EK2QAqRYgk9nxUJhyB9H1 JyEXPEQIkToI2CdBK8I3KU+pSGO5Lw5wcCxaVOcK5al2ctXqNNCShU4fKHnnXali7eHj cWuteKfrHl7hEvIPk5zo3fhvrh/usgMGw76yhom13Z6NcfC0LA/+4guS/21qT1eRQWMt Z5737D1stHhxRpfRpyDDXbvnFg45F0iimerpsPO9DKVd0FhJ+eWpbWKrnkfts33yEIBk nMKQ== 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 w186si2871499pgd.573.2018.03.21.07.06.29; Wed, 21 Mar 2018 07:06:55 -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 S1752231AbeCUOCs (ORCPT + 99 others); Wed, 21 Mar 2018 10:02:48 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:53646 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751644AbeCUOCr (ORCPT ); Wed, 21 Mar 2018 10:02:47 -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 BDD9E1529; Wed, 21 Mar 2018 07:02:46 -0700 (PDT) Received: from queper01-VirtualBox (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 963823F25D; Wed, 21 Mar 2018 07:02:43 -0700 (PDT) Date: Wed, 21 Mar 2018 14:02:37 +0000 From: Quentin Perret To: Patrick Bellasi Cc: Juri Lelli , Dietmar Eggemann , linux-kernel@vger.kernel.org, Peter Zijlstra , 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: <20180321140235.GA2168@queper01-VirtualBox> 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 Wednesday 21 Mar 2018 at 12:26:21 (+0000), 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? > > > 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<--- > Yes this should be functionally equivalent. However, with your suggestion you can potentially remove the task contribution from the cpu_util in cpu_util_wake() and then add it back right after if cpu==dst_cpu. This is sub-optimal and that's why I implemented things slightly differently. But maybe this optimization really is too small to justify the extra complexity involved ... > 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