All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Adrian Hunter <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: ak@linux.intel.com, adrian.hunter@intel.com, tglx@linutronix.de,
	mingo@kernel.org, hpa@zytor.com, linux-kernel@vger.kernel.org,
	acme@redhat.com
Subject: [tip:perf/core] perf intel-pt: Improve sample timestamp
Date: Wed, 21 Jun 2017 11:20:20 -0700	[thread overview]
Message-ID: <tip-3f04d98e972b59706bd43d6cc75efac91f8fba50@git.kernel.org> (raw)
In-Reply-To: <1495786658-18063-3-git-send-email-adrian.hunter@intel.com>

Commit-ID:  3f04d98e972b59706bd43d6cc75efac91f8fba50
Gitweb:     http://git.kernel.org/tip/3f04d98e972b59706bd43d6cc75efac91f8fba50
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Fri, 26 May 2017 11:17:03 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 21 Jun 2017 11:35:43 -0300

perf intel-pt: Improve sample timestamp

The decoder uses its current timestamp in samples. Usually that is a
timestamp that has already passed, but in some cases it is a timestamp
for a branch that the decoder is walking towards, and consequently
hasn't reached. Improve that situation by using the pkt_state to
determine when to use the current or previous timestamp.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1495786658-18063-3-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 34 ++++++++++++++++++++--
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index 5a9676c..d5c69e8 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -64,6 +64,25 @@ enum intel_pt_pkt_state {
 	INTEL_PT_STATE_FUP_NO_TIP,
 };
 
+static inline bool intel_pt_sample_time(enum intel_pt_pkt_state pkt_state)
+{
+	switch (pkt_state) {
+	case INTEL_PT_STATE_NO_PSB:
+	case INTEL_PT_STATE_NO_IP:
+	case INTEL_PT_STATE_ERR_RESYNC:
+	case INTEL_PT_STATE_IN_SYNC:
+	case INTEL_PT_STATE_TNT:
+		return true;
+	case INTEL_PT_STATE_TIP:
+	case INTEL_PT_STATE_TIP_PGD:
+	case INTEL_PT_STATE_FUP:
+	case INTEL_PT_STATE_FUP_NO_TIP:
+		return false;
+	default:
+		return true;
+	};
+}
+
 #ifdef INTEL_PT_STRICT
 #define INTEL_PT_STATE_ERR1	INTEL_PT_STATE_NO_PSB
 #define INTEL_PT_STATE_ERR2	INTEL_PT_STATE_NO_PSB
@@ -99,6 +118,7 @@ struct intel_pt_decoder {
 	uint64_t timestamp;
 	uint64_t tsc_timestamp;
 	uint64_t ref_timestamp;
+	uint64_t sample_timestamp;
 	uint64_t ret_addr;
 	uint64_t ctc_timestamp;
 	uint64_t ctc_delta;
@@ -139,6 +159,7 @@ struct intel_pt_decoder {
 	unsigned int fup_tx_flags;
 	unsigned int tx_flags;
 	uint64_t timestamp_insn_cnt;
+	uint64_t sample_insn_cnt;
 	uint64_t stuck_ip;
 	int no_progress;
 	int stuck_ip_prd;
@@ -898,6 +919,7 @@ static int intel_pt_walk_insn(struct intel_pt_decoder *decoder,
 
 	decoder->tot_insn_cnt += insn_cnt;
 	decoder->timestamp_insn_cnt += insn_cnt;
+	decoder->sample_insn_cnt += insn_cnt;
 	decoder->period_insn_cnt += insn_cnt;
 
 	if (err) {
@@ -2069,7 +2091,7 @@ static int intel_pt_sync(struct intel_pt_decoder *decoder)
 
 static uint64_t intel_pt_est_timestamp(struct intel_pt_decoder *decoder)
 {
-	uint64_t est = decoder->timestamp_insn_cnt << 1;
+	uint64_t est = decoder->sample_insn_cnt << 1;
 
 	if (!decoder->cbr || !decoder->max_non_turbo_ratio)
 		goto out;
@@ -2077,7 +2099,7 @@ static uint64_t intel_pt_est_timestamp(struct intel_pt_decoder *decoder)
 	est *= decoder->max_non_turbo_ratio;
 	est /= decoder->cbr;
 out:
-	return decoder->timestamp + est;
+	return decoder->sample_timestamp + est;
 }
 
 const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
@@ -2133,11 +2155,17 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
 	if (err) {
 		decoder->state.err = intel_pt_ext_err(err);
 		decoder->state.from_ip = decoder->ip;
+		decoder->sample_timestamp = decoder->timestamp;
+		decoder->sample_insn_cnt = decoder->timestamp_insn_cnt;
 	} else {
 		decoder->state.err = 0;
+		if (intel_pt_sample_time(decoder->pkt_state)) {
+			decoder->sample_timestamp = decoder->timestamp;
+			decoder->sample_insn_cnt = decoder->timestamp_insn_cnt;
+		}
 	}
 
-	decoder->state.timestamp = decoder->timestamp;
+	decoder->state.timestamp = decoder->sample_timestamp;
 	decoder->state.est_timestamp = intel_pt_est_timestamp(decoder);
 	decoder->state.cr3 = decoder->cr3;
 	decoder->state.tot_insn_cnt = decoder->tot_insn_cnt;

  reply	other threads:[~2017-06-21 18:22 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-26  8:17 [PATCH V2 00/37] perf intel-pt: Power events and PTWRITE Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 01/37] perf intel-pt: Move decoder error setting into one condition Adrian Hunter
2017-06-21 18:19   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 02/37] perf intel-pt: Improve sample timestamp Adrian Hunter
2017-06-21 18:20   ` tip-bot for Adrian Hunter [this message]
2017-05-26  8:17 ` [PATCH V2 03/37] perf intel-pt: Fix missing stack clear Adrian Hunter
2017-06-21 18:20   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 04/37] perf intel-pt: Ensure IP is zero when state is INTEL_PT_STATE_NO_IP Adrian Hunter
2017-06-21 18:21   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 05/37] perf intel-pt: Fix last_ip usage Adrian Hunter
2017-06-21 18:22   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 06/37] perf intel-pt: Ensure never to set 'last_ip' when packet 'count' is zero Adrian Hunter
2017-06-21 18:22   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 07/37] perf intel-pt: Use FUP always when scanning for an IP Adrian Hunter
2017-06-21 18:23   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 08/37] perf intel-pt: Clear FUP flag on error Adrian Hunter
2017-06-21 18:23   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 09/37] perf intel-pt: Add missing __fallthrough Adrian Hunter
2017-06-21 18:24   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 10/37] perf intel-pt: Allow decoding with branch tracing disabled Adrian Hunter
2017-06-21 18:24   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 11/37] perf intel-pt: Add default config for pass-through branch enable Adrian Hunter
2017-06-21 18:25   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 12/37] perf intel-pt: Add documentation for new config terms Adrian Hunter
2017-06-21 18:25   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 13/37] perf intel-pt: Add decoder support for ptwrite and power event packets Adrian Hunter
2017-06-21 18:26   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 14/37] perf intel-pt: Add reserved byte to CBR packet payload Adrian Hunter
2017-06-21 18:27   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 15/37] perf intel-pt: Add decoder support for CBR events Adrian Hunter
2017-06-21 18:27   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 16/37] perf intel-pt: Remove redundant initial_skip checks Adrian Hunter
2017-06-21 18:28   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 17/37] perf intel-pt: Fix transactions_sample_type Adrian Hunter
2017-06-21 18:28   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 18/37] perf tools: Fix message because cpu list option is -C not -c Adrian Hunter
2017-06-21 18:29   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 19/37] perf script: Fix message because field list option is -F not -f Adrian Hunter
2017-06-21 18:29   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 20/37] perf script: Add 'synth' event type for synthesized events Adrian Hunter
2017-06-21 10:17   ` [PATCH V3 " Adrian Hunter
2017-06-21 13:51     ` Arnaldo Carvalho de Melo
2017-06-21 16:41       ` Adrian Hunter
2017-06-21 17:29         ` Arnaldo Carvalho de Melo
2017-06-21 20:20           ` Adrian Hunter
2017-06-22 14:59             ` Arnaldo Carvalho de Melo
2017-07-01  8:50     ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 21/37] perf script: Add 'synth' field for synthesized event payloads Adrian Hunter
2017-06-21 10:17   ` [PATCH V3 " Adrian Hunter
2017-07-01  8:51   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 22/37] tools include: Add byte-swapping macros to kernel.h Adrian Hunter
2017-07-01  8:50   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 23/37] perf auxtrace: Add itrace option to output ptwrite events Adrian Hunter
2017-07-01  8:51   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 24/37] perf auxtrace: Add itrace option to output power events Adrian Hunter
2017-07-01  8:51   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 25/37] perf script: Add synthesized Intel PT power and ptwrite events Adrian Hunter
2017-06-28 13:04   ` Arnaldo Carvalho de Melo
2017-06-28 17:40     ` Adrian Hunter
2017-06-28 18:53       ` Arnaldo Carvalho de Melo
2017-06-28 20:21         ` Hunter, Adrian
2017-06-28 20:26           ` Arnaldo Carvalho de Melo
2017-06-29 19:56             ` Adrian Hunter
2017-06-29 20:13               ` Arnaldo Carvalho de Melo
2017-06-30  2:08                 ` Arnaldo Carvalho de Melo
2017-06-30  8:51                   ` Adrian Hunter
2017-06-30 14:54                     ` Arnaldo Carvalho de Melo
2017-06-30 19:37                       ` Hunter, Adrian
2017-06-30  8:36   ` [PATCH V3 " Adrian Hunter
2017-07-01  8:52     ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 26/37] perf intel-pt: Factor out common code synthesizing event samples Adrian Hunter
2017-07-01  8:52   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 27/37] perf intel-pt: Remove unused instructions_sample_period Adrian Hunter
2017-07-01  8:52   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 28/37] perf intel-pt: Join needlessly wrapped lines Adrian Hunter
2017-07-01  8:53   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 29/37] perf intel-pt: Tidy Intel PT evsel lookup into separate function Adrian Hunter
2017-07-01  8:53   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 30/37] perf intel-pt: Tidy messages into called function intel_pt_synth_event() Adrian Hunter
2017-07-01  8:53   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 31/37] perf intel-pt: Factor out intel_pt_set_event_name() Adrian Hunter
2017-07-01  8:54   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 32/37] perf intel-pt: Move code in intel_pt_synth_events() to simplify attr setting Adrian Hunter
2017-07-01  8:54   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 33/37] perf intel-pt: Synthesize new power and ptwrite events Adrian Hunter
2017-06-30  8:36   ` [PATCH V3 " Adrian Hunter
2017-07-01  8:54     ` [tip:perf/core] perf intel-pt: Synthesize new power and "ptwrite" events tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 34/37] perf intel-pt: Add example script for power events and PTWRITE Adrian Hunter
2017-07-01  8:55   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 35/37] perf intel-pt: Update documentation to include new ptwrite and power events Adrian Hunter
2017-07-01  8:55   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 36/37] perf intel-pt: Do not use TSC packets for calculating CPU cycles to TSC Adrian Hunter
2017-07-01  8:56   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-05-26  8:17 ` [PATCH V2 37/37] perf auxtrace: Add CPU filter support Adrian Hunter
2017-07-01  8:56   ` [tip:perf/core] " tip-bot for Adrian Hunter
2017-06-12 13:04 ` [PATCH V2 00/37] perf intel-pt: Power events and PTWRITE Adrian Hunter
2017-06-12 13:56   ` Arnaldo Carvalho de Melo
2017-06-21 10:20     ` Adrian Hunter
2017-06-21 13:40       ` Arnaldo Carvalho de Melo
2017-06-27 15:27     ` Arnaldo Carvalho de Melo

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=tip-3f04d98e972b59706bd43d6cc75efac91f8fba50@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    /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.