mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Sameer Nanda <snanda@chromium.org>
Cc: rob@landley.net, len.brown@intel.com, pavel@ucw.cz,
	gregkh@linuxfoundation.org, rostedt@goodmis.org,
	fweisbec@gmail.com, mingo@redhat.com, jkosina@suse.cz,
	standby24x7@gmail.com, jj@chaosbits.net,
	paulmck@linux.vnet.ibm.com, josh@joshtriplett.org,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-pm@vger.kernel.org
Subject: Re: [PATCH] power, trace: add tracing for device_resume
Date: Fri, 18 May 2012 23:27:53 +0200	[thread overview]
Message-ID: <201205182327.53409.rjw@sisk.pl> (raw)
In-Reply-To: <1337365643-29261-1-git-send-email-snanda@chromium.org>

On Friday, May 18, 2012, Sameer Nanda wrote:
> Added event tracing for device_resume. This helps quickly pinpoint which
> devices take a long time to resume.

There is some code already for that in the PM core.  You have to boot the
kernel with initcall_debug in the command line to activate it.

Thanks,
Rafael


> Signed-off-by: Sameer Nanda <snanda@chromium.org>
> ---
>  Documentation/trace/events-power.txt |   20 +++++++++++
>  drivers/base/power/main.c            |   10 ++++++
>  include/trace/events/power.h         |   59 ++++++++++++++++++++++++++++++++++
>  3 files changed, 89 insertions(+), 0 deletions(-)
> 
> diff --git a/Documentation/trace/events-power.txt b/Documentation/trace/events-power.txt
> index cf794af..dbfb7f0 100644
> --- a/Documentation/trace/events-power.txt
> +++ b/Documentation/trace/events-power.txt
> @@ -88,3 +88,23 @@ power_domain_target	"%s state=%lu cpu_id=%lu"
>  The first parameter gives the power domain name (e.g. "mpu_pwrdm").
>  The second parameter is the power domain target state.
>  
> +4. Device resume events
> +=======================
> +The device resume events are used for measuring the time taken to resume
> +devices.
> +
> +device_resume_in	"device=%s driver=%s"
> +device_resume_waited	"device=%s driver=%s time_delta=%lld"
> +device_resume_out	"device=%s driver=%s time_delta=%lld"
> +
> +The first parameter is the device that is being resumed.
> +
> +The second parameter is the driver associated with the device being resumed.
> +
> +The third parameter in device_resume_waited is the time delta from the entry
> +point of device_resume to the wait completion of parent device being resumed.
> +The unit for time_delta is us.
> +
> +The third parameter in device_resume_out is the time delta from the wait
> +completion of parent device being resumed to device_resume being completed.
> +The unit for time_delta is us.
> diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
> index b462c0e..3ed01cd 100644
> --- a/drivers/base/power/main.c
> +++ b/drivers/base/power/main.c
> @@ -28,6 +28,7 @@
>  #include <linux/sched.h>
>  #include <linux/async.h>
>  #include <linux/suspend.h>
> +#include <trace/events/power.h>
>  
>  #include "../base.h"
>  #include "power.h"
> @@ -565,11 +566,19 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
>  	char *info = NULL;
>  	int error = 0;
>  	bool put = false;
> +	s64 in_time = ktime_to_us(ktime_get());
> +	s64 wait_done_time;
> +
> +	trace_device_resume_in(dev);
>  
>  	TRACE_DEVICE(dev);
>  	TRACE_RESUME(0);
>  
>  	dpm_wait(dev->parent, async);
> +
> +	wait_done_time = ktime_to_us(ktime_get());
> +	trace_device_resume_waited(dev, wait_done_time - in_time);
> +
>  	device_lock(dev);
>  
>  	/*
> @@ -638,6 +647,7 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
>  	if (put)
>  		pm_runtime_put_sync(dev);
>  
> +	trace_device_resume_out(dev, ktime_to_us(ktime_get()) - wait_done_time);
>  	return error;
>  }
>  
> diff --git a/include/trace/events/power.h b/include/trace/events/power.h
> index cae9a94..9601419 100644
> --- a/include/trace/events/power.h
> +++ b/include/trace/events/power.h
> @@ -4,6 +4,7 @@
>  #if !defined(_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
>  #define _TRACE_POWER_H
>  
> +#include <linux/device.h>
>  #include <linux/ktime.h>
>  #include <linux/tracepoint.h>
>  
> @@ -48,6 +49,64 @@ DEFINE_EVENT(cpu, cpu_frequency,
>  	TP_ARGS(frequency, cpu_id)
>  );
>  
> +#define get_driver_name(dev) dev->driver && dev->driver->name ? \
> +		dev->driver->name : ""
> +
> +TRACE_EVENT(device_resume_in,
> +
> +	TP_PROTO(struct device *dev),
> +
> +	TP_ARGS(dev),
> +
> +	TP_STRUCT__entry(
> +		__string(	device_name,	dev_name(dev)		)
> +		__string(	driver_name,	get_driver_name(dev)	)
> +	),
> +
> +	TP_fast_assign(
> +		__assign_str(device_name, dev_name(dev));
> +		__assign_str(driver_name, get_driver_name(dev));
> +	),
> +
> +	TP_printk("device=%s driver=%s", __get_str(device_name), __get_str(driver_name))
> +);
> +
> +DECLARE_EVENT_CLASS(device_resume_internal,
> +
> +	TP_PROTO(struct device *dev, s64 time_delta),
> +
> +	TP_ARGS(dev, time_delta),
> +
> +	TP_STRUCT__entry(
> +		__field(	s64,		time_delta		)
> +		__string(	device_name,	dev_name(dev)		)
> +		__string(	driver_name,	get_driver_name(dev)	)
> +	),
> +
> +	TP_fast_assign(
> +		__entry->time_delta = time_delta;
> +		__assign_str(device_name, dev_name(dev));
> +		__assign_str(driver_name, get_driver_name(dev));
> +	),
> +
> +	TP_printk("device=%s driver=%s time_delta=%lld", __get_str(device_name),
> +		  __get_str(driver_name), __entry->time_delta)
> +);
> +
> +DEFINE_EVENT(device_resume_internal, device_resume_waited,
> +
> +	TP_PROTO(struct device *dev, s64 time_delta),
> +
> +	TP_ARGS(dev, time_delta)
> +);
> +
> +DEFINE_EVENT(device_resume_internal, device_resume_out,
> +
> +	TP_PROTO(struct device *dev, s64 time_delta),
> +
> +	TP_ARGS(dev, time_delta)
> +);
> +
>  TRACE_EVENT(machine_suspend,
>  
>  	TP_PROTO(unsigned int state),
> 


  parent reply	other threads:[~2012-05-18 21:23 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-18 18:27 Sameer Nanda
2012-05-18 18:37 ` Greg KH
2012-05-18 18:57   ` Sameer Nanda
2012-05-18 19:14     ` Steven Rostedt
2012-05-18 20:58       ` Sameer Nanda
2012-05-18 21:19         ` Steven Rostedt
2012-05-18 21:39           ` Sameer Nanda
2012-05-18 21:46             ` Rafael J. Wysocki
2012-05-18 22:17               ` Sameer Nanda
2012-05-18 23:01                 ` Greg KH
2012-05-18 23:15                   ` Sameer Nanda
2012-05-19 11:59                     ` Rafael J. Wysocki
2012-05-19 16:32                       ` Greg KH
2012-05-19 19:30                         ` Rafael J. Wysocki
2012-05-22 19:18                           ` Sameer Nanda
2012-05-19  0:24                   ` Steven Rostedt
2012-05-18 21:27 ` Rafael J. Wysocki [this message]
2012-05-22 19:16 ` [PATCH] power: add knob for printing device resume times Sameer Nanda
2012-05-22 20:24   ` Greg KH
2012-05-23 16:45     ` [PATCH v2] " Sameer Nanda
2012-06-04 22:41       ` Sameer Nanda
2012-06-05  6:26         ` Greg KH
2012-06-10 11:25         ` Pavel Machek
2012-06-15  0:19       ` Greg KH
2012-06-15 10:00         ` Rafael J. Wysocki
2012-06-15 14:09           ` Greg KH
2012-06-16 13:57             ` Rafael J. Wysocki
2012-06-16 20:36               ` [PATCH] (was: Re: [PATCH v2] power: add knob for printing device resume times) Rafael J. Wysocki
2012-06-18  1:26                 ` Greg KH
2012-06-18  5:45                 ` Srivatsa S. Bhat
2012-06-28 21:29                   ` Sameer Nanda
2012-08-16 14:03               ` [PATCH v2] power: add knob for printing device resume times Pavel Machek
2012-05-24 10:27   ` [PATCH] " Pavel Machek
2012-05-29 17:08     ` Sameer Nanda

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=201205182327.53409.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=fweisbec@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jj@chaosbits.net \
    --cc=jkosina@suse.cz \
    --cc=josh@joshtriplett.org \
    --cc=len.brown@intel.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=pavel@ucw.cz \
    --cc=rob@landley.net \
    --cc=rostedt@goodmis.org \
    --cc=snanda@chromium.org \
    --cc=standby24x7@gmail.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

Powered by JetHome