linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] PM: suspend: Upstreaming wakeup reason capture support
@ 2022-01-10 18:49 Kelly Rossmoyer
  2022-01-24 17:37 ` John Stultz
  2022-01-27 19:54 ` Rafael J. Wysocki
  0 siblings, 2 replies; 13+ messages in thread
From: Kelly Rossmoyer @ 2022-01-10 18:49 UTC (permalink / raw)
  To: Rafael J. Wysocki, Pavel Machek, Len Brown, Greg Kroah-Hartman,
	Lee Jones, Vijay Nayak
  Cc: linux-pm, linux-kernel

# Introduction

To aid optimization, troubleshooting, and attribution of battery life, the
Android kernel currently includes a set of patches which provide enhanced
visibility into kernel suspend/resume/abort behaviors.  The capabilities
and implementation of this feature have evolved significantly since an
unsuccessful attempt to upstream the original code
(https://lkml.org/lkml/2014/3/10/716), and we would like to (re)start a
conversation about upstreaming, starting with the central question: is
there support for upstreaming this set of features?

# Motivation

Of the many factors influencing battery life on Linux-powered mobile
devices, kernel suspend tends to be amongst the most impactful.  Maximizing
time spent in suspend and minimizing the frequency of net-negative suspend
cycles are both important contributors to battery life optimization.  But
enabling that optimization - and troubleshooting when things go wrong -
requires more observability of suspend/resume/abort behavior than Linux
currently provides.  While mechanisms like `/sys/power/pm_wakeup_irq` and
wakeup_source stats are useful, they are incomplete and scattered.  The
Android kernel wakeup reason patches implement significant improvements in
that area.

# Features

As of today, the active set of patches surface the following
suspend-related data:

* wakeup IRQs, including:
   * multiple IRQs if more than one is pending during resume flow
   * unmapped HW IRQs (wakeup-capable in HW) that should not be
     occurring
   * misconfigured IRQs (e.g. both enable_irq_wake() and
     IRQF_NO_SUSPEND)
   * threaded IRQs (not just the parent chip's IRQ)

* non-IRQ wakeups, including:
   * wakeups caused by an IRQ that was consumed by lower-level SW
   * wakeups from SOC architecture that don't manifest as IRQs

* abort reasons, including:
   * wakeup_source activity
   * failure to freeze userspace
   * failure to suspend devices
   * failed syscore_suspend callback

* durations from the most recent cycle, including:
   * time spent doing suspend/resume work
   * time spent in suspend

In addition to battery life optimization and troubleshooting, some of these
capabilities also lay the groundwork for efforts around improving
attribution of wakeups/aborts (e.g. to specific processes, device features,
external devices, etc).

# Shortcomings

While the core implementation (see below) is relatively straightforward and
localized, calls into that core are somewhat widely spread in order to
capture the breadth of events of interest.  The pervasiveness of those
hooks is clearly an area where improvement would be beneficial, especially
if a cleaner solution preserved equivalent capabilities.

# Existing Code

As a reference for how Android currently implements the core code for these
features (which would need a bit of work before submission even if all
features were included), see the following link:

https://android.googlesource.com/kernel/common/+/refs/heads/android-mainline/kernel/power/wakeup_reason.c


--

Kelly Rossmoyer | Software Engineer | krossmo@google.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2022-02-02  8:00 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-10 18:49 [RFC] PM: suspend: Upstreaming wakeup reason capture support Kelly Rossmoyer
2022-01-24 17:37 ` John Stultz
2022-01-26  5:09   ` Zichar Zhang
2022-01-28  4:55     ` [PATCH 1/1] [RFC] wakeup_reason: Add infrastructure to log and report why the system resumed from suspend Zichar Zhang
2022-01-28  7:01       ` Greg KH
2022-01-28  8:43         ` Zichar Zhang
2022-01-28  9:32       ` Lee Jones
2022-01-29  7:52     ` [RFC] PM: suspend: Upstreaming wakeup reason capture support Kelly Rossmoyer
2022-01-27 19:54 ` Rafael J. Wysocki
2022-01-27 20:10   ` Rafael J. Wysocki
2022-01-29  8:26     ` Kelly Rossmoyer
2022-01-30 14:46       ` Rafael J. Wysocki
2022-02-02  7:59         ` Kelly Rossmoyer

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).