linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lukasz Luba <lukasz.luba@arm.com>
To: linux-kernel@vger.kernel.org, daniel.lezcano@linaro.org
Cc: linux-pm@vger.kernel.org, amitk@kernel.org, rui.zhang@intel.com,
	lukasz.luba@arm.com, dietmar.eggemann@arm.com,
	Chris.Redpath@arm.com, Beata.Michalska@arm.com,
	viresh.kumar@linaro.org, rjw@rjwysocki.net,
	amit.kachhap@gmail.com
Subject: [RFC PATCH v2 0/6] Introduce Active Stats framework with CPU performance statistics
Date: Tue,  6 Jul 2021 14:18:22 +0100	[thread overview]
Message-ID: <20210706131828.22309-1-lukasz.luba@arm.com> (raw)

Hi all,

This patch set introduces a new mechanism: Active Stats framework (ASF), which
gathers and maintains statistics of CPU performance - time residency at each
performance state.

The ASF tracks all the frequency transitions as well as CPU
idle entry/exit events for all CPUs. Based on that it accounts the active
(non-idle) residency time for each CPU at each frequency. This information can
be used by some other subsystems (like thermal governor) to enhance their
estimations about CPU usage at a given period.

Does it fix something in mainline?
Yes, there is thermal governor Intelligent Power Allocation (IPA), which
estimates the CPUs power used in the past. IPA is sampling the CPU utilization
and frequency and relies on the info available at the time of sampling
and this imposes the estimation errors.
The use of ASF solve the issue and enables IPA to make better estimates.

Why it couldn't be done using existing frameworks?
The CPUFreq and CPUIdle statistics are not combined, so it is not possible
to derive the information on how long exactly the CPU was running with a given
frequency. This new framework combines that information and provides
it in a handy way. IMHO it has to be implemented as a new framework, next to
CPUFreq and CPUIdle, due to a clean design and not just hooks from thermal
governor into the frequency change and idle code paths.

Tha patch 4/6 introduces a new API for cooling devices, which allows to
stop tracking the freq and idle statistics.

The patch set contains also a patches 5/6 6/6 which adds the new power model
based on ASF into the cpufreq cooling (used by thermal governor IPA).
It is added as ifdef option, since Active Stats might be not compiled in.
The ASF is a compile time option, but that might be changed and IPA could
select it, which would allow to remove some redundant code from
cpufreq_cooling.c.

Comments and suggestions are very welcome.

Changelog:
v2:
- added interface for cooling devices to support custom setup used
  by IPA, which requires Active Stats alocated and running; when IPA
  is not working Active Stats are deactivated
- added mechanism to stop tracking CPU freq and idle changes in Active Stats
  when there are no clients of this information
- removed spinlock in idle path (and hotplug) and redesigned how Active Stats
  Monitor (ASM) tracks the changed performance; ASM no longer can update
  local ASM stats in periodic check; only CPU entering/exiting idle can do that
v1:
- basic implementation which can be found at [1]


Regards,
Lukasz Luba

[1] https://lore.kernel.org/linux-pm/20210622075925.16189-1-lukasz.luba@arm.com/

Lukasz Luba (6):
  PM: Introduce Active Stats framework
  cpuidle: Add Active Stats calls tracking idle entry/exit
  cpufreq: Add Active Stats calls tracking frequency changes
  thermal: Add interface to cooling devices to handle governor change
  thermal/core/power allocator: Prepare power actors and calm down when
    not used
  thermal: cpufreq_cooling: Improve power estimation based on Active
    Stats framework

 Documentation/power/active_stats.rst  | 128 ++++
 Documentation/power/index.rst         |   1 +
 MAINTAINERS                           |   8 +
 drivers/cpufreq/cpufreq.c             |   5 +
 drivers/cpuidle/cpuidle.c             |   5 +
 drivers/thermal/cpufreq_cooling.c     | 132 ++++
 drivers/thermal/gov_power_allocator.c |  71 ++
 include/linux/active_stats.h          | 131 ++++
 include/linux/thermal.h               |   1 +
 kernel/power/Kconfig                  |   9 +
 kernel/power/Makefile                 |   1 +
 kernel/power/active_stats.c           | 921 ++++++++++++++++++++++++++
 12 files changed, 1413 insertions(+)
 create mode 100644 Documentation/power/active_stats.rst
 create mode 100644 include/linux/active_stats.h
 create mode 100644 kernel/power/active_stats.c

-- 
2.17.1


             reply	other threads:[~2021-07-06 13:18 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-06 13:18 Lukasz Luba [this message]
2021-07-06 13:18 ` [RFC PATCH v2 1/6] PM: Introduce Active Stats framework Lukasz Luba
2021-07-06 13:18 ` [RFC PATCH v2 2/6] cpuidle: Add Active Stats calls tracking idle entry/exit Lukasz Luba
2021-07-06 13:18 ` [RFC PATCH v2 3/6] cpufreq: Add Active Stats calls tracking frequency changes Lukasz Luba
2021-07-06 13:18 ` [RFC PATCH v2 4/6] thermal: Add interface to cooling devices to handle governor change Lukasz Luba
2021-07-06 13:18 ` [RFC PATCH v2 5/6] thermal/core/power allocator: Prepare power actors and calm down when not used Lukasz Luba
2021-07-06 13:18 ` [RFC PATCH v2 6/6] thermal: cpufreq_cooling: Improve power estimation based on Active Stats framework Lukasz Luba
2021-07-06 15:28 ` [RFC PATCH v2 0/6] Introduce Active Stats framework with CPU performance statistics Rafael J. Wysocki
2021-07-06 15:56   ` Lukasz Luba
2021-07-06 16:34     ` Rafael J. Wysocki
2021-07-06 16:51       ` Lukasz Luba
2021-07-14 18:30         ` Rafael J. Wysocki
2021-07-19  8:52           ` Lukasz Luba

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=20210706131828.22309-1-lukasz.luba@arm.com \
    --to=lukasz.luba@arm.com \
    --cc=Beata.Michalska@arm.com \
    --cc=Chris.Redpath@arm.com \
    --cc=amit.kachhap@gmail.com \
    --cc=amitk@kernel.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=dietmar.eggemann@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=rui.zhang@intel.com \
    --cc=viresh.kumar@linaro.org \
    /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).