Skip to contentSkip to conversation

perf tools: Fix Intel BTS/PT timestamp handling

PATCH In review Adrian Hunter 3 participants 3 messages Aug 20, 2015 – Aug 22, 2015 perf events

lore
Share & tools
lore

Adrian Hunter

author reviewer
#0 lore raw

PATCH 1/1 perf tools: Fix Intel BTS/PT timestamp handling

Events that don't sample the timestamp have a timestamp value of -1. Intel BTS and Intel PT processing wasn't taking that into account. This is particularly noticeable with Intel BTS because timestamps are not requested by default. Then, if the conversion of -1 to TSC results in a small number, the processing is unaffected. However if the conversion results in a big number, then the data is processed prematurely before relevant sideband data like mmap events, which in turn results in samples with unknown dsos.

---
 tools/perf/util/intel-bts.c | 2 +-
 tools/perf/util/intel-pt.c  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/util/intel-bts.c +1 -1
index dce99cfb1309..ea768625ab5b 100644
@@ -610,7 +610,7 @@ static int intel_bts_process_event(struct perf_session *session,
 		return -EINVAL;
 	}
 
-	if (sample->time)
+	if (sample->time && sample->time != (u64)-1)
 		timestamp = perf_time_to_tsc(sample->time, &bts->tc);
 	else
 		timestamp = 0;
tools/perf/util/intel-pt.c +1 -1
index 2a4a4120473b..a5acd2fe2447 100644
@@ -1450,7 +1450,7 @@ static int intel_pt_process_event(struct perf_session *session,
 		return -EINVAL;
 	}
 
-	if (sample->time)
+	if (sample->time && sample->time != (u64)-1)
 		timestamp = perf_time_to_tsc(sample->time, &pt->tc);
 	else
 		timestamp = 0;
Signature · 1 line
1.9.1
#1 lore raw

Em Thu, Aug 20, 2015 at 11:51:32AM +0300, Adrian Hunter escreveu:

Quoted 10 lines

Events that don't sample the timestamp have a timestamp value of -1. Intel BTS and Intel PT processing wasn't taking that into account. This is particularly noticeable with Intel BTS because timestamps are not requested by default. Then, if the conversion of -1 to TSC results in a small number, the processing is unaffected. However if the conversion results in a big number, then the data is processed prematurely before relevant sideband data like mmap events, which in turn results in samples with unknown dsos.

Thanks, since the BTS code is not in, I'm splitting it from here, so that this one only fixes what is upstream already, i.e. PT, and will fold the BTS part with the patch introducing BTS,

- Arnaldo

Quoted 34 lines
---
 tools/perf/util/intel-bts.c | 2 +-
 tools/perf/util/intel-pt.c  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/util/intel-bts.c +1 -1
index dce99cfb1309..ea768625ab5b 100644
@@ -610,7 +610,7 @@ static int intel_bts_process_event(struct perf_session *session,
 		return -EINVAL;
 	}
 
-	if (sample->time)
+	if (sample->time && sample->time != (u64)-1)
 		timestamp = perf_time_to_tsc(sample->time, &bts->tc);
 	else
 		timestamp = 0;
tools/perf/util/intel-pt.c +1 -1
index 2a4a4120473b..a5acd2fe2447 100644
@@ -1450,7 +1450,7 @@ static int intel_pt_process_event(struct perf_session *session,
 		return -EINVAL;
 	}
 
-	if (sample->time)
+	if (sample->time && sample->time != (u64)-1)
 		timestamp = perf_time_to_tsc(sample->time, &pt->tc);
 	else
 		timestamp = 0;
Signature · 1 line
1.9.1
#2 lore raw

[tip:perf/core] perf tools: Fix Intel PT timestamp handling

In reply to Adrian Hunter
perf tools: Fix Intel PT timestamp handling
Commit-ID:  81cd60cc29a9c3e92ad6ca167a4764b2c2d2fc04
Gitweb:     http://git.kernel.org/tip/81cd60cc29a9c3e92ad6ca167a4764b2c2d2fc04
Author:     Adrian Hunter <[email protected]>
AuthorDate: Thu, 20 Aug 2015 11:51:32 +0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Fri, 21 Aug 2015 10:29:23 -0300

perf tools: Fix Intel PT timestamp handling

Events that don't sample the timestamp have a timestamp value of -1.

Intel PT processing wasn't taking that into account.

This is particularly noticeable with Intel BTS because timestamps are not requested by default.

Then, if the conversion of -1 to TSC results in a small number, the processing is unaffected.

However if the conversion results in a big number, then the data is processed prematurely before relevant sideband data like mmap events, which in turn results in samples with unknown dsos.

Commiter note:

Since BTS wasn't upstream, I split the patch to fold the BTS part with the patch introducing it, to avoid having this bug in the commit history. PT was already upstream, so this patch contains that part.

---
 tools/perf/util/intel-pt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/intel-pt.c +1 -1
index 2a4a412..a5acd2f 100644
@@ -1450,7 +1450,7 @@ static int intel_pt_process_event(struct perf_session *session,
 		return -EINVAL;
 	}
 
-	if (sample->time)
+	if (sample->time && sample->time != (u64)-1)
 		timestamp = perf_time_to_tsc(sample->time, &pt->tc);
 	else
 		timestamp = 0;