devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Juri Lelli <juri.lelli@arm.com>
To: linux-kernel@vger.kernel.org
Cc: linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	devicetree@vger.kernel.org, peterz@infradead.org,
	vincent.guittot@linaro.org, robh+dt@kernel.org,
	mark.rutland@arm.com, linux@arm.linux.org.uk,
	sudeep.holla@arm.com, lorenzo.pieralisi@arm.com,
	catalin.marinas@arm.com, will.deacon@arm.com,
	morten.rasmussen@arm.com, dietmar.eggemann@arm.com,
	juri.lelli@arm.com
Subject: [RFC PATCH 0/8] CPUs capacity information for heterogeneous systems
Date: Mon, 23 Nov 2015 14:28:33 +0000	[thread overview]
Message-ID: <1448288921-30307-1-git-send-email-juri.lelli@arm.com> (raw)

Hi all,

ARM systems may be configured to have CPUs with different power/performance
characteristics within the same chip. In this case, additional information has
to be made available to the kernel (the scheduler in particular) for it to be
aware of such differences and take decisions accordingly. This posting stems
from the ongoing discussion about introducing a simple platform energy cost
model to guide scheduling decisions (a.k.a Energy Aware Scheduling [1]), but
also aims to be an independent track aimed to standardise the way we make the
scheduler aware of heterogenous CPU systems. With these patches and in addition
patches from [1] (that make the scheduler wakeup paths aware of heterogenous
CPU systems) we enable the scheduler to have good default performance on such
systems. In addition, we get a clearly defined way of providing the scheduler
with needed information about CPU capacity on such systems.

CPU capacity is defined in this context as a number that provides the scheduler
information about CPUs heterogeneity. Such heterogeneity can come from
micro-architectural differences (e.g., ARM big.LITTLE systems) or maximum
frequency at which CPUs can run (e.g., SMP systems with multiple frequency
domains and different max frequencies). Heterogeneity in this context is about
differing performance characteristics; in practice, the binding that we propose
in this RFC tries to capture a first-order approximation of the relative
performance of CPUs.

This RFC proposes a solution to the problem of how do we init CPUs original
capacity. The way it works today, and for arm A15/A7 systems only, is that we
rely on cpu_efficiency magic numbers from arch/arm/kernel/topology.c and the
existence of clock-frequency dtb properties; having those values available, we
then do some math to come up with capacities we know from measurement (e.g.,
EAS energy model), e.g. for TC2 they are 430 for A7 and 1024 for A15.
Currently, arm64 doesn't have such a feature at all.

With this patchset we provide CPUs capacity information either from DT or from
sysfs interface. Such information is standardized for both arm and arm64.

Patches high level description:

 o 01/08 cleans up how cpu_scale is initialized in arm
 o 02/08 introduces documentation for the new optional DT binding
 o [03-06]/08 add cpu-capacity attribute to TC2 and Juno DTs and provide
   parsing of such information at boot time
 o [07-08]/08 introduce sysfs attribute

The patchset is based on top of tip/sched/core as of today.

In case you would like to test this out, I pushed a branch here:

 git://linux-arm.org/linux-jl.git upstream/default_caps_dt

This branch contains additional patches, useful to better understand how CPU
capacity information is actually used by the scheduler. Discussion regarding
these additional patches will be started with a different posting in the
future. We just didn't want to make discussion too broad, as we realize that
this set can be controversial already on its own.

Comments, concerns and rants are more than welcome!

Best,

- Juri

Juri Lelli (8):
  ARM: initialize cpu_scale to its default
  Documentation: arm: define DT cpu capacity bindings
  arm: parse cpu capacity from DT
  arm, dts: add TC2 cpu capacity information
  arm64: parse cpu capacity from DT
  arm64, dts: add Juno cpu capacity information
  arm: add sysfs cpu_capacity attribute
  arm64: add sysfs cpu_capacity attribute

 .../devicetree/bindings/arm/cpu-capacity.txt       | 227 +++++++++++++++++++++
 Documentation/devicetree/bindings/arm/cpus.txt     |  17 ++
 arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts         |   6 +
 arch/arm/kernel/topology.c                         | 122 ++++++++++-
 arch/arm64/boot/dts/arm/juno.dts                   |   7 +
 arch/arm64/kernel/topology.c                       | 114 +++++++++++
 6 files changed, 489 insertions(+), 4 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/arm/cpu-capacity.txt

-- 
2.2.2

             reply	other threads:[~2015-11-23 14:28 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-23 14:28 Juri Lelli [this message]
2015-11-23 14:28 ` [RFC PATCH 1/8] ARM: initialize cpu_scale to its default Juri Lelli
2015-11-30 11:13   ` Vincent Guittot
2015-11-23 14:28 ` [RFC PATCH 2/8] Documentation: arm: define DT cpu capacity bindings Juri Lelli
2015-11-24  2:06   ` Rob Herring
2015-11-24 10:54     ` Juri Lelli
2015-11-30  9:59       ` Vincent Guittot
2015-12-01 11:20         ` Juri Lelli
2015-12-10 14:14           ` Dietmar Eggemann
2015-12-11 10:09             ` Juri Lelli
2015-12-10 15:30     ` Mark Brown
2015-12-10 17:58       ` Juri Lelli
2015-12-11 17:49         ` Mark Brown
     [not found]           ` <20151211174940.GQ5727-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-12-14 12:36             ` Juri Lelli
2015-12-14 16:59               ` Mark Brown
2015-12-15 12:22                 ` Juri Lelli
2015-12-15 13:39                   ` Mark Brown
2015-12-15 14:01                     ` Mark Rutland
2015-12-15 14:24                       ` Juri Lelli
2015-12-15 14:50                         ` Mark Rutland
2015-12-15 15:36                           ` Juri Lelli
2015-12-15 15:08                       ` Mark Brown
     [not found]                         ` <20151215150813.GZ5727-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-12-15 15:32                           ` Mark Rutland
2015-12-15 15:46                             ` Juri Lelli
2015-12-15 15:57                               ` Mark Rutland
2015-12-15 16:23                                 ` Catalin Marinas
2015-12-15 16:41                                   ` Mark Rutland
2015-12-15 16:59                                     ` Vincent Guittot
     [not found]                                       ` <CAKfTPtAuosPcL8bbQ27Y-vUE1h4QRY8hGESnm4YrxqRAQ3K=5g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-12-15 17:15                                         ` Mark Rutland
2015-12-15 17:47                                           ` Vincent Guittot
     [not found]                                             ` <CAKfTPtBzWcNHx+Fi7hUabNpPsd1thFAkPnLcpsnqbQp6Qq24cQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-12-15 18:39                                               ` Mark Rutland
2015-12-15 17:17                             ` Mark Brown
     [not found]                               ` <20151215171713.GA5727-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-12-15 17:28                                 ` Mark Rutland
2015-12-15 17:45                                   ` Mark Brown
2015-12-15 18:10                                     ` Mark Rutland
2015-12-15 18:45                                       ` Mark Brown
2015-12-17  9:07                                     ` Juri Lelli
2015-12-15 13:55                   ` Vincent Guittot
2015-11-23 14:28 ` [RFC PATCH 3/8] arm: parse cpu capacity from DT Juri Lelli
2015-12-10 14:14   ` Dietmar Eggemann
     [not found]     ` <566988DD.9080005-5wv7dgnIgG8@public.gmane.org>
2015-12-11 10:12       ` Juri Lelli
2015-11-23 14:28 ` [RFC PATCH 4/8] arm, dts: add TC2 cpu capacity information Juri Lelli
2015-11-23 14:28 ` [RFC PATCH 5/8] arm64: parse cpu capacity from DT Juri Lelli
2015-12-10 14:15   ` Dietmar Eggemann
2015-12-11 10:07     ` Juri Lelli
2015-11-23 14:28 ` [RFC PATCH 6/8] arm64, dts: add Juno cpu capacity information Juri Lelli
2015-11-23 14:28 ` [RFC PATCH 7/8] arm: add sysfs cpu_capacity attribute Juri Lelli
2015-11-23 14:28 ` [RFC PATCH 8/8] arm64: " Juri Lelli
2015-12-10 14:15   ` Dietmar Eggemann
2015-12-10 15:59     ` Mark Brown
2015-12-10 18:01       ` Juri Lelli
2015-12-11 17:54         ` Mark Brown
2015-12-07 12:02 ` [RFC PATCH 0/8] CPUs capacity information for heterogeneous systems Juri Lelli
2015-12-07 12:11   ` Russell King - ARM Linux
2015-12-07 12:36     ` Juri Lelli
2015-12-07 13:18       ` Russell King - ARM Linux
     [not found]         ` <20151207131843.GP8644-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2015-12-07 15:41           ` Juri Lelli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1448288921-30307-1-git-send-email-juri.lelli@arm.com \
    --to=juri.lelli@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dietmar.eggemann@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=morten.rasmussen@arm.com \
    --cc=peterz@infradead.org \
    --cc=robh+dt@kernel.org \
    --cc=sudeep.holla@arm.com \
    --cc=vincent.guittot@linaro.org \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).