Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1234498

[PATCH 35/39] perf intel-pt: Add mispred-all config option to aid use with autofdo

From Arnaldo Carvalho de Melo <acme@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 35/39] perf intel-pt: Add mispred-all config option to aid use with autofdo
Date 2015-09-28 23:20 +0200
Message-ID <qdO05-2Tc-71@gated-at.bofh.it> (permalink)
References <qdNQm-2GE-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Adrian Hunter <adrian.hunter@intel.com>

autofdo incorrectly expects branch flags to include either mispred or
predicted.  In fact mispred = predicted = 0 is valid and means the flags
are not supported, which they aren't by Intel PT.

To make autofdo work, add a config option which will cause Intel PT
decoder to set the mispred flag on all branches.

Below is an example of using Intel PT with autofdo.  The example is
also added to the Intel PT documentation.  It requires autofdo
(https://github.com/google/autofdo) and gcc version 5.  The bubble
sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tutorial)
amended to take the number of elements as a parameter.

	$ gcc-5 -O3 sort.c -o sort_optimized
	$ ./sort_optimized 30000
	Bubble sorting array of 30000 elements
	2254 ms

	$ cat ~/.perfconfig
	[intel-pt]
		mispred-all

	$ perf record -e intel_pt//u ./sort 3000
	Bubble sorting array of 3000 elements
	58 ms
	[ perf record: Woken up 2 times to write data ]
	[ perf record: Captured and wrote 3.939 MB perf.data ]
	$ perf inject -i perf.data -o inj --itrace=i100usle --strip
	$ ./create_gcov --binary=./sort --profile=inj --gcov=sort.gcov -gcov_version=1
	$ gcc-5 -O3 -fauto-profile=sort.gcov sort.c -o sort_autofdo
	$ ./sort_autofdo 30000
	Bubble sorting array of 30000 elements
	2155 ms

Note there is currently no advantage to using Intel PT instead of LBR,
but that may change in the future if greater use is made of the data.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1443186956-18718-26-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/intel-pt.txt | 29 +++++++++++++++++++++++++++++
 tools/perf/util/intel-pt.c            | 14 ++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/tools/perf/Documentation/intel-pt.txt b/tools/perf/Documentation/intel-pt.txt
index a0fbb5d71f7d..be764f9ec769 100644
--- a/tools/perf/Documentation/intel-pt.txt
+++ b/tools/perf/Documentation/intel-pt.txt
@@ -764,3 +764,32 @@ perf inject also accepts the --itrace option in which case tracing data is
 removed and replaced with the synthesized events. e.g.
 
 	perf inject --itrace -i perf.data -o perf.data.new
+
+Below is an example of using Intel PT with autofdo.  It requires autofdo
+(https://github.com/google/autofdo) and gcc version 5.  The bubble
+sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tutorial)
+amended to take the number of elements as a parameter.
+
+	$ gcc-5 -O3 sort.c -o sort_optimized
+	$ ./sort_optimized 30000
+	Bubble sorting array of 30000 elements
+	2254 ms
+
+	$ cat ~/.perfconfig
+	[intel-pt]
+		mispred-all
+
+	$ perf record -e intel_pt//u ./sort 3000
+	Bubble sorting array of 3000 elements
+	58 ms
+	[ perf record: Woken up 2 times to write data ]
+	[ perf record: Captured and wrote 3.939 MB perf.data ]
+	$ perf inject -i perf.data -o inj --itrace=i100usle --strip
+	$ ./create_gcov --binary=./sort --profile=inj --gcov=sort.gcov -gcov_version=1
+	$ gcc-5 -O3 -fauto-profile=sort.gcov sort.c -o sort_autofdo
+	$ ./sort_autofdo 30000
+	Bubble sorting array of 30000 elements
+	2155 ms
+
+Note there is currently no advantage to using Intel PT instead of LBR, but
+that may change in the future if greater use is made of the data.
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index 05e8fcc5188b..03ff072b5993 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -64,6 +64,7 @@ struct intel_pt {
 	bool data_queued;
 	bool est_tsc;
 	bool sync_switch;
+	bool mispred_all;
 	int have_sched_switch;
 	u32 pmu_type;
 	u64 kernel_start;
@@ -943,6 +944,7 @@ static void intel_pt_update_last_branch_rb(struct intel_pt_queue *ptq)
 	be->flags.abort = !!(state->flags & INTEL_PT_ABORT_TX);
 	be->flags.in_tx = !!(state->flags & INTEL_PT_IN_TX);
 	/* No support for mispredict */
+	be->flags.mispred = ptq->pt->mispred_all;
 
 	if (bs->nr < ptq->pt->synth_opts.last_branch_sz)
 		bs->nr += 1;
@@ -1967,6 +1969,16 @@ static bool intel_pt_find_switch(struct perf_evlist *evlist)
 	return false;
 }
 
+static int intel_pt_perf_config(const char *var, const char *value, void *data)
+{
+	struct intel_pt *pt = data;
+
+	if (!strcmp(var, "intel-pt.mispred-all"))
+		pt->mispred_all = perf_config_bool(var, value);
+
+	return 0;
+}
+
 static const char * const intel_pt_info_fmts[] = {
 	[INTEL_PT_PMU_TYPE]		= "  PMU Type            %"PRId64"\n",
 	[INTEL_PT_TIME_SHIFT]		= "  Time Shift          %"PRIu64"\n",
@@ -2011,6 +2023,8 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
 	if (!pt)
 		return -ENOMEM;
 
+	perf_config(intel_pt_perf_config, pt);
+
 	err = auxtrace_queues__init(&pt->queues);
 	if (err)
 		goto err_free;
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[GIT PULL 00/39] perf/core improvements and fixes Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:10 +0200
  [PATCH 06/39] tools build: Add test for missing include Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:10 +0200
  [PATCH 02/39] perf hists browser: Use the map to determine if a DSO is being used as a kernel Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:10 +0200
  [PATCH 20/39] perf report: Adjust sample type validation for synthesized branch stacks Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:10 +0200
  [PATCH 37/39] perf tools: Show proper error message for wrong terms of hw/sw events Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 31/39] perf evlist: Add perf_evlist__id2evsel_strict() Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 15/39] perf intel-pt: Make logging slightly more efficient Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 26/39] perf report: Make max_stack value allow for synthesized callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 27/39] perf hists: Allow for max_stack greater than PERF_MAX_STACK_DEPTH Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 34/39] perf inject: Add --strip option to strip out non-synthesized events Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 29/39] perf scripting python: Allow for max_stack greater than PERF_MAX_STACK_DEPTH Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 01/39] perf top: Filter symbols based on __map__is_kernel(map) Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 03/39] perf tools: Use __map__is_kernel() when synthesizing kernel module mmap records Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 13/39] perf report: Fix sample type validation for synthesized callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 32/39] perf evlist: Add perf_evlist__remove() Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 30/39] perf script: Make scripting_max_stack value allow for synthesized callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 10/39] perf tools: Rename the 'single_dep' target to 'prepare' Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 11/39] tools build: Build fixdep helper from perf and basic libs Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 04/39] tools lib api fs: Store tracing mountpoint for better error message Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 14/39] perf intel-pt: Fix potential loop forever Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 07/39] tools build: Add fixdep dependency helper Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 35/39] perf intel-pt: Add mispred-all config option to aid use with autofdo Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:20 +0200
  [PATCH 28/39] perf script: Add a setting for maximum stack depth Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 24/39] perf intel-pt: Move branch filter logic Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 23/39] perf inject: Set branch stack feature flag when synthesizing branch stacks Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 33/39] perf inject: Remove more aux-related stuff when processing instruction traces Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 18/39] perf tools: Add more documentation to export-to-postgresql.py script Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 17/39] perf session: Warn when AUX data has been lost Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 16/39] perf script: Allow time to be displayed in nanoseconds Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 25/39] perf intel-pt: Support generating branch stack Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 21/39] perf report: Also do default setup for synthesized branch stacks Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 22/39] perf report: Skip events with null branch stacks Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  [PATCH 05/39] tools build: Add Makefile.include Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-09-28 23:30 +0200
  Re: [GIT PULL 00/39] perf/core improvements and fixes Ingo Molnar <mingo@kernel.org> - 2015-09-29 09:50 +0200

csiph-web