public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [BUG] perf: perf trace does not work anymore
@ 2010-04-29 12:28 Stephane Eranian
  2010-04-30 17:39 ` Frederic Weisbecker
  2010-05-01  5:44 ` Tom Zanussi
  0 siblings, 2 replies; 3+ messages in thread
From: Stephane Eranian @ 2010-04-29 12:28 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: linux-kernel, peterz, mingo, paulus, davem, robert.richter,
	perfmon2-devel, eranian

Hi,

I am trying to use perf trace to dump the raw samples.

$ perf record -R noploop 5
noploop for 5 seconds
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.269 MB perf.data (~11759 samples) ]

$ perf trace
  Fatal: reading input file (size expected=3 received=-1)

Seems like trace does not understand the format of the perf.data file anymore.
This used to work. Did you change the purpose of perf trace?

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

* Re: [BUG] perf: perf trace does not work anymore
  2010-04-29 12:28 [BUG] perf: perf trace does not work anymore Stephane Eranian
@ 2010-04-30 17:39 ` Frederic Weisbecker
  2010-05-01  5:44 ` Tom Zanussi
  1 sibling, 0 replies; 3+ messages in thread
From: Frederic Weisbecker @ 2010-04-30 17:39 UTC (permalink / raw)
  To: Stephane Eranian
  Cc: linux-kernel, peterz, mingo, paulus, davem, robert.richter,
	perfmon2-devel, eranian

On Thu, Apr 29, 2010 at 02:28:02PM +0200, Stephane Eranian wrote:
> Hi,
> 
> I am trying to use perf trace to dump the raw samples.
> 
> $ perf record -R noploop 5
> noploop for 5 seconds
> [ perf record: Woken up 3 times to write data ]
> [ perf record: Captured and wrote 0.269 MB perf.data (~11759 samples) ]
> 
> $ perf trace
>   Fatal: reading input file (size expected=3 received=-1)
> 
> Seems like trace does not understand the format of the perf.data file anymore.
> This used to work. Did you change the purpose of perf trace?


Yeah I've seen this recently. It doesn't seem to eventually impact the
output of perf trace.

In fact it seems it is looking for a field in a format file that doesn't exist
anymore, or something like that, in the /debug/tracing/events/header_page file.

Will fix, thanks.


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

* Re: [BUG] perf: perf trace does not work anymore
  2010-04-29 12:28 [BUG] perf: perf trace does not work anymore Stephane Eranian
  2010-04-30 17:39 ` Frederic Weisbecker
@ 2010-05-01  5:44 ` Tom Zanussi
  1 sibling, 0 replies; 3+ messages in thread
From: Tom Zanussi @ 2010-05-01  5:44 UTC (permalink / raw)
  To: Stephane Eranian
  Cc: Frederic Weisbecker, linux-kernel, peterz, mingo, paulus, davem,
	robert.richter, perfmon2-devel, eranian

Hi,

On Thu, 2010-04-29 at 14:28 +0200, Stephane Eranian wrote:
> Hi,
> 
> I am trying to use perf trace to dump the raw samples.
> 
> $ perf record -R noploop 5
> noploop for 5 seconds
> [ perf record: Woken up 3 times to write data ]
> [ perf record: Captured and wrote 0.269 MB perf.data (~11759 samples) ]
> 
> $ perf trace
>   Fatal: reading input file (size expected=3 received=-1)
> 
> Seems like trace does not understand the format of the perf.data file anymore.
> This used to work. Did you change the purpose of perf trace?

Hmm, I don't think this has ever worked - you're recording raw samples
but no tracepoints - the current code seems to assume raw samples means
tracepoints and anyway perf trace currently only deals with tracepoint
events.  It would have worked before if you had recorded tracepoint
events - perhaps that's what you're remembering? 

In any case, you should be able to dump the raw non-tracepoint samples
using perf report -D, but that also shows the same problem.

The patch below should at least allow perf report -D to work - that
won't help displaying them in perf trace though, unless/until it gets
enhanced to do something with non-tracepoint events.

Also, there seems to be another recent problem showing the 'size
expected' warnings, probably to do with some malformed trace event
descriptions, but that's a different problem, a warning whereas this
shows up as an error. 

>From 17b268102265b673b7e7d589f7aaf983d7178766 Mon Sep 17 00:00:00 2001
From: Tom Zanussi <tzanussi@gmail.com>
Date: Sat, 1 May 2010 00:09:25 -0500
Subject: [PATCH] perf: record TRACE_INFO only if using tracepoints and
SAMPLE_RAW

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.

Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
---
 tools/perf/builtin-record.c        |   25 ++++++++++++++-----------
 tools/perf/util/header.c           |    1 -
 tools/perf/util/parse-events.h     |    1 +
 tools/perf/util/trace-event-info.c |    5 +++++
 4 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 83b308a..722b6f1 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -567,11 +567,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 {
 		for (i = 0; i < nr_counters; i++) {
-			if (attrs[i].sample_type & PERF_SAMPLE_RAW) {
+			if (attrs[i].sample_type & PERF_SAMPLE_RAW &&
+				attrs[i].type == PERF_TYPE_TRACEPOINT) {
 				perf_header__set_feat(&session->header, HEADER_TRACE_INFO);
 				break;
 			}
@@ -669,16 +670,18 @@ static int __cmd_record(int argc, const char **argv)
 			return err;
 		}
 
-		err = event__synthesize_tracing_data(output, attrs,
-						     nr_counters,
-						     process_synthesized_event,
-						     session);
-		if (err <= 0) {
-			pr_err("Couldn't record tracing data.\n");
-			return err;
-		}
+		if (have_tracepoints(attrs, nr_counters)) {
+			err = event__synthesize_tracing_data(output, attrs,
+							     nr_counters,
+							     process_synthesized_event,
+							     session);
+			if (err <= 0) {
+				pr_err("Couldn't record tracing data.\n");
+				return err;
+			}
 
-		advance_output(err);
+			advance_output(err);
+		}
 	}
 
 	machine = perf_session__find_host_machine(session);
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 6227dc4..fe12276 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -436,7 +436,6 @@ static int perf_header__adds_write(struct perf_header *self, int fd)
 		trace_sec->size = lseek(fd, 0, SEEK_CUR) - trace_sec->offset;
 	}
 
-
 	if (perf_header__has_feat(self, HEADER_BUILD_ID)) {
 		struct perf_file_section *buildid_sec;
 
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index b8c1f64..fc4ab3f 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -13,6 +13,7 @@ struct tracepoint_path {
 };
 
 extern struct tracepoint_path *tracepoint_id_to_path(u64 config);
+extern bool have_tracepoints(struct perf_event_attr *pattrs, int nb_events);
 
 extern int			nr_counters;
 
diff --git a/tools/perf/util/trace-event-info.c b/tools/perf/util/trace-event-info.c
index 30cd9b5..0a1fb9d 100644
--- a/tools/perf/util/trace-event-info.c
+++ b/tools/perf/util/trace-event-info.c
@@ -487,6 +487,11 @@ get_tracepoints_path(struct perf_event_attr *pattrs, int nb_events)
 	return nr_tracepoints > 0 ? path.next : NULL;
 }
 
+bool have_tracepoints(struct perf_event_attr *pattrs, int nb_events)
+{
+	return get_tracepoints_path(pattrs, nb_events) ? true : false;
+}
+
 int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events)
 {
 	char buf[BUFSIZ];
-- 
1.6.4.GIT




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

end of thread, other threads:[~2010-05-01  5:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-29 12:28 [BUG] perf: perf trace does not work anymore Stephane Eranian
2010-04-30 17:39 ` Frederic Weisbecker
2010-05-01  5:44 ` Tom Zanussi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox