All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Tom Zanussi <tzanussi@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	Ingo Molnar <mingo@elte.hu>,
	linux-kernel@vger.kernel.org, Mike Galbraith <efault@gmx.de>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [PATCH 1/3] perf: record TRACE_INFO only if using tracepoints and SAMPLE_RAW
Date: Wed, 5 May 2010 06:26:18 +0200	[thread overview]
Message-ID: <20100505042616.GF5427@nowhere> (raw)
In-Reply-To: <1273030770.6383.6.camel@tropicana>

On Tue, May 04, 2010 at 10:39:30PM -0500, Tom Zanussi wrote:
> On Tue, 2010-05-04 at 18:18 -0300, Arnaldo Carvalho de Melo wrote:
> > Em Tue, May 04, 2010 at 07:06:45PM +0200, Frederic Weisbecker escreveu:
> > > On Tue, May 04, 2010 at 11:00:05AM -0300, Arnaldo Carvalho de Melo wrote:
> > > > From: Tom Zanussi <tzanussi@gmail.com>
> > > > 
> > > > The current perf code implicitly assumes SAMPLE_RAW means tracepoints
> > > > are being used, but doesn't check for that.  It happily records the
> > > > TRACE_INFO even if SAMPLE_RAW is used without tracepoints, but when the
> > > > perf data is read it won't go any further when it finds TRACE_INFO but
> > > > no tracepoints, and displays misleading errors.
> > > > 
> > > > This adds a check for both in perf-record, and won't record TRACE_INFO
> > > > unless both are true.  This at least allows perf report -D to dump raw
> > > > events, and avoids triggering a misleading error condition in perf
> > > > trace.  It doesn't actually enable the non-tracepoint raw events to be
> > > > displayed in perf trace, since perf trace currently only deals with
> > > > tracepoint events.
> > > > 
> > > > Cc: Frédéric Weisbecker <fweisbec@gmail.com>
> > > > Cc: Mike Galbraith <efault@gmx.de>
> > > > Cc: Paul Mackerras <paulus@samba.org>
> > > > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > > > LKML-Reference: <1272865861.7932.16.camel@tropicana>
> > > > Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
> > > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> > > > ---
> > > >  tools/perf/builtin-record.c        |   35 +++++++++++++++++++++--------------
> > > >  tools/perf/util/header.c           |    1 -
> > > >  tools/perf/util/parse-events.h     |    1 +
> > > >  tools/perf/util/trace-event-info.c |    5 +++++
> > > >  4 files changed, 27 insertions(+), 15 deletions(-)
> > > > 
> > > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > > > index ac989e9..0ff67d1 100644
> > > > --- a/tools/perf/builtin-record.c
> > > > +++ b/tools/perf/builtin-record.c
> > > > @@ -560,11 +560,12 @@ static int __cmd_record(int argc, const char **argv)
> > > >  			return err;
> > > >  	}
> > > >  
> > > > -	if (raw_samples) {
> > > > +	if (raw_samples && have_tracepoints(attrs, nr_counters)) {
> > > >  		perf_header__set_feat(&session->header, HEADER_TRACE_INFO);
> > > >  	} else {
> > > 
> > > 
> > > 
> > > Using get_tracepoints_path() is a bit costly just to check if we use
> > > tracepoints as it allocates and fill the paths.
> > 
> > Can you please send a fix?
> > 
> 
> Yeah, there's a lot of room for improvement here - thanks for pointing
> it out, Frederic.  The patch below should make it better...
> 
> Tom
> 
> From: Tom Zanussi <tzanussi@gmail.com>
> Date: Tue, 4 May 2010 22:20:16 -0500
> Subject: [PATCH] perf/record: simplify TRACE_INFO tracepoint check
> 
> Fix a couple of inefficiencies and redundancies related to
> have_tracepoints() and its use when checking whether to write
> TRACE_INFO.
> 
> First, there's no need to use get_tracepoints_path() in
> have_tracepoints() - we really just want the part that checks whether
> any attributes correspondo to tracepoints.
> 
> Second, we really don't care about raw_samples per se - tracepoints
> are always raw_samples.  In any case, the have_tracepoints() check
> should be sufficient to decide whether or not to write TRACE_INFO.
> 
> Signed-off-by: Tom Zanussi <tzanussi@gmail.com>



Thanks a lot!

Acked-by: Frederic Weisbecker <fweisbec@gmail.com>



> ---
>  tools/perf/builtin-record.c        |   11 +----------
>  tools/perf/util/trace-event-info.c |    8 +++++++-
>  2 files changed, 8 insertions(+), 11 deletions(-)
> 
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 0ff67d1..d3981ac 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -560,17 +560,8 @@ static int __cmd_record(int argc, const char **argv)
>  			return err;
>  	}
>  
> -	if (raw_samples && have_tracepoints(attrs, nr_counters)) {
> +	if (have_tracepoints(attrs, nr_counters))
>  		perf_header__set_feat(&session->header, HEADER_TRACE_INFO);
> -	} else {
> -		for (i = 0; i < nr_counters; i++) {
> -			if (attrs[i].sample_type & PERF_SAMPLE_RAW &&
> -				attrs[i].type == PERF_TYPE_TRACEPOINT) {
> -				perf_header__set_feat(&session->header, HEADER_TRACE_INFO);
> -				break;
> -			}
> -		}
> -	}
>  
>  	atexit(atexit_header);
>  
> diff --git a/tools/perf/util/trace-event-info.c b/tools/perf/util/trace-event-info.c
> index 0a1fb9d..b157260 100644
> --- a/tools/perf/util/trace-event-info.c
> +++ b/tools/perf/util/trace-event-info.c
> @@ -489,7 +489,13 @@ get_tracepoints_path(struct perf_event_attr *pattrs, int nb_events)
>  
>  bool have_tracepoints(struct perf_event_attr *pattrs, int nb_events)
>  {
> -	return get_tracepoints_path(pattrs, nb_events) ? true : false;
> +	int i;
> +
> +	for (i = 0; i < nb_events; i++)
> +		if (pattrs[i].type == PERF_TYPE_TRACEPOINT)
> +			return true;
> +
> +	return false;
>  }
>  
>  int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events)
> -- 
> 1.6.4.GIT
> 
> 
> 
> 
> 


  reply	other threads:[~2010-05-05  4:26 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-04 14:00 [GIT PULL 0/3] perf fixes (inject, report, record) Arnaldo Carvalho de Melo
2010-05-04 14:00 ` [PATCH 1/3] perf: record TRACE_INFO only if using tracepoints and SAMPLE_RAW Arnaldo Carvalho de Melo
2010-05-04 17:06   ` Frederic Weisbecker
2010-05-04 21:18     ` Arnaldo Carvalho de Melo
2010-05-05  3:39       ` Tom Zanussi
2010-05-05  4:26         ` Frederic Weisbecker [this message]
2010-05-05 16:52         ` [tip:perf/core] perf/record: simplify TRACE_INFO tracepoint check tip-bot for Tom Zanussi
2010-05-04 14:00 ` [PATCH 2/3] perf inject: Add missing bits Arnaldo Carvalho de Melo
2010-05-05  4:18   ` Tom Zanussi
2010-05-04 14:00 ` [PATCH 3/3] perf: Fix performance issue with perf report Arnaldo Carvalho de Melo
2010-05-04 16:32 ` [GIT PULL 0/3] perf fixes (inject, report, record) Ingo Molnar

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=20100505042616.GF5427@nowhere \
    --to=fweisbec@gmail.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@ghostprotocols.net \
    --cc=efault@gmx.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=tzanussi@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.