All of lore.kernel.org
 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 [PATCH] power, trace: add tracing for device_resume 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.