All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Andi Kleen <andi@firstfloor.org>
Cc: jolsa@kernel.org, linux-kernel@vger.kernel.org,
	Andi Kleen <ak@linux.intel.com>
Subject: Re: [PATCH v6 1/5] tools, perf, script: Add --insn-trace for instruction decoding
Date: Mon, 8 Oct 2018 15:03:14 -0300	[thread overview]
Message-ID: <20181008180314.GT3541@kernel.org> (raw)
In-Reply-To: <20180920180540.14039-2-andi@firstfloor.org>

Em Thu, Sep 20, 2018 at 11:05:36AM -0700, Andi Kleen escreveu:
> From: Andi Kleen <ak@linux.intel.com>
> 
> Add a --insn-trace short hand option for decoding and disassembling
> instruction streams for intel_pt. This automatically pipes the
> output into the xed disassembler to generate disassembled instructions.
> This just makes this use model much nicer to use
> 
> Before
> 
> % perf record -e intel_pt// ...
> % perf script --itrace=i0ns --ns -F +insn,-event,-period | xed -F insn: -A -64
>    swapper     0 [000] 117276.429606186:  ffffffff81010486 pt_config ([kernel.kallsyms])          nopl  %eax, (%rax,%rax,1)
>    swapper     0 [000] 117276.429606186:  ffffffff8101048b pt_config ([kernel.kallsyms])          add $0x10, %rsp
>    swapper     0 [000] 117276.429606186:  ffffffff8101048f pt_config ([kernel.kallsyms])          popq  %rbx
>    swapper     0 [000] 117276.429606186:  ffffffff81010490 pt_config ([kernel.kallsyms])          popq  %rbp
>    swapper     0 [000] 117276.429606186:  ffffffff81010491 pt_config ([kernel.kallsyms])          popq  %r12
>    swapper     0 [000] 117276.429606186:  ffffffff81010493 pt_config ([kernel.kallsyms])          popq  %r13
>    swapper     0 [000] 117276.429606186:  ffffffff81010495 pt_config ([kernel.kallsyms])          popq  %r14
>    swapper     0 [000] 117276.429606186:  ffffffff81010497 pt_config ([kernel.kallsyms])          popq  %r15
>    swapper     0 [000] 117276.429606186:  ffffffff81010499 pt_config ([kernel.kallsyms])          retq
>    swapper     0 [000] 117276.429606186:  ffffffff8101063e pt_event_add ([kernel.kallsyms])               cmpl  $0x1, 0x1b0(%rbx)
>    swapper     0 [000] 117276.429606186:  ffffffff81010645 pt_event_add ([kernel.kallsyms])               mov $0xffffffea, %eax
>    swapper     0 [000] 117276.429606186:  ffffffff8101064a pt_event_add ([kernel.kallsyms])               mov $0x0, %edx
>    swapper     0 [000] 117276.429606186:  ffffffff8101064f pt_event_add ([kernel.kallsyms])               popq  %rbx
>    swapper     0 [000] 117276.429606186:  ffffffff81010650 pt_event_add ([kernel.kallsyms])               cmovnz %edx, %eax
>    swapper     0 [000] 117276.429606186:  ffffffff81010653 pt_event_add ([kernel.kallsyms])               jmp 0xffffffff81010635
>    swapper     0 [000] 117276.429606186:  ffffffff81010635 pt_event_add ([kernel.kallsyms])               retq
>    swapper     0 [000] 117276.429606186:  ffffffff8115e687 event_sched_in.isra.107 ([kernel.kallsyms])            test %eax, %eax
> 
> Now
> 
> % perf record -e intel_pt// ...
> % perf script --insn-trace --xed
> ... same output ...
> 
> XED needs to be installed with:
> 
> > git clone https://github.com/intelxed/mbuild.git mbuild
> > git clone https://github.com/intelxed/xed
> > cd xed
> > mkdir obj
> > cd obj
> > ../mfile.py
> > sudo ../mfile.py --prefix=/usr/local install

I tried following these instructions, but in the end these are the only
files installed in /usr/local:

[acme@jouet obj]$ find /usr/local -name "*xed*"
/usr/local/include/xed
/usr/local/include/xed/xed-reg-class.h
/usr/local/include/xed/xed-reg-role-enum.h
/usr/local/include/xed/xed-format-options.h
/usr/local/include/xed/xed-encoder-hl.h
/usr/local/include/xed/xed-ild.h
/usr/local/include/xed/xed-encode.h
/usr/local/include/xed/xed-immed.h
/usr/local/include/xed/xed-init-pointer-names.h
/usr/local/include/xed/xed-operand-accessors.h
/usr/local/include/xed/xed-operand-enum.h
/usr/local/include/xed/xed-flags.h
/usr/local/include/xed/xed-operand-action.h
/usr/local/include/xed/xed-print-info.h
/usr/local/include/xed/xed-chip-features.h
/usr/local/include/xed/xed-types.h
/usr/local/include/xed/xed-common-hdrs.h
/usr/local/include/xed/xed-decoded-inst-api.h
/usr/local/include/xed/xed-inst.h
/usr/local/include/xed/xed-address-width-enum.h
/usr/local/include/xed/xed-state.h
/usr/local/include/xed/xed-decoded-inst.h
/usr/local/include/xed/xed-isa-set.h
/usr/local/include/xed/xed-reg-enum.h
/usr/local/include/xed/xed-attribute-enum.h
/usr/local/include/xed/xed-operand-ctype-enum.h
/usr/local/include/xed/xed-extension-enum.h
/usr/local/include/xed/xed-iformfl-enum.h
/usr/local/include/xed/xed-convert-table-init.h
/usr/local/include/xed/xed-immdis.h
/usr/local/include/xed/xed-iclass-enum.h
/usr/local/include/xed/xed-flag-enum.h
/usr/local/include/xed/xed-get-time.h
/usr/local/include/xed/xed-attributes.h
/usr/local/include/xed/xed-init.h
/usr/local/include/xed/xed-operand-storage.h
/usr/local/include/xed/xed-operand-width-enum.h
/usr/local/include/xed/xed-operand-ctype-map.h
/usr/local/include/xed/xed-error-enum.h
/usr/local/include/xed/xed-operand-values-interface.h
/usr/local/include/xed/xed-operand-convert-enum.h
/usr/local/include/xed/xed-chip-enum.h
/usr/local/include/xed/xed-cpuid-bit-enum.h
/usr/local/include/xed/xed-iform-enum.h
/usr/local/include/xed/xed-decode.h
/usr/local/include/xed/xed-flag-action-enum.h
/usr/local/include/xed/xed-rep-prefix.h
/usr/local/include/xed/xed-patch.h
/usr/local/include/xed/xed-util.h
/usr/local/include/xed/xed-cpuid-rec.h
/usr/local/include/xed/xed-iform-map.h
/usr/local/include/xed/xed-category-enum.h
/usr/local/include/xed/xed-machine-mode-enum.h
/usr/local/include/xed/xed-syntax-enum.h
/usr/local/include/xed/xed-isa-set-enum.h
/usr/local/include/xed/xed-disas.h
/usr/local/include/xed/xed-operand-type-enum.h
/usr/local/include/xed/xed-portability.h
/usr/local/include/xed/xed-exception-enum.h
/usr/local/include/xed/xed-version.h
/usr/local/include/xed/xed-operand-element-xtype-enum.h
/usr/local/include/xed/xed-build-defines.h
/usr/local/include/xed/xed-common-defs.h
/usr/local/include/xed/xed-gen-table-defs.h
/usr/local/include/xed/xed-operand-element-type-enum.h
/usr/local/include/xed/xed-nonterminal-enum.h
/usr/local/include/xed/xed-encoder-gen-defs.h
/usr/local/include/xed/xed-agen.h
/usr/local/include/xed/xed-interface.h
/usr/local/include/xed/xed-encoder-iforms.h
/usr/local/include/xed/xed-operand-visibility-enum.h
/usr/local/include/xed/xed-operand-action-enum.h
/usr/local/include/xed/xed-reg-class-enum.h
/usr/local/include/llvm/MC/MCFixedLenDisassembler.h
/usr/local/include/llvm/ADT/IndexedMap.h
/usr/local/include/clang/Basic/FixedPoint.h
/usr/local/lib/libxed.a
/usr/local/lib/libxed-ild.a
[acme@jouet obj]$

I have /usr/local/bin in my PATH and:

[acme@jouet perf]$ perf script --xed -i /home/acme/perf.data.intel_pt
sh: xed: command not found
[acme@jouet perf]$

What am I missing?

- Arnaldo
 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> 
> --
> 
> v2: Add separate --xed option
> v3: Add xed build documentation and update commit
> ---
>  tools/perf/Documentation/build-xed.txt   | 11 +++++++++++
>  tools/perf/Documentation/perf-script.txt |  7 +++++++
>  tools/perf/builtin-script.c              | 23 +++++++++++++++++++++++
>  3 files changed, 41 insertions(+)
>  create mode 100644 tools/perf/Documentation/build-xed.txt
> 
> diff --git a/tools/perf/Documentation/build-xed.txt b/tools/perf/Documentation/build-xed.txt
> new file mode 100644
> index 000000000000..8da3028e6dca
> --- /dev/null
> +++ b/tools/perf/Documentation/build-xed.txt
> @@ -0,0 +1,11 @@
> +
> +For --xed the xed tool is needed. Here is how to install it:
> +
> +> git clone https://github.com/intelxed/mbuild.git mbuild                                                                                        
> +> git clone https://github.com/intelxed/xed                                                                                                      
> +> cd xed                                                                                                                                         
> +> mkdir obj                                                                                                                                      
> +> cd obj                                                                                                                                         
> +> ../mfile.py                                                                                                                                    
> +> sudo ../mfile.py --prefix=/usr/local install    
> +
> diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
> index afdafe2110a1..00c655ab4968 100644
> --- a/tools/perf/Documentation/perf-script.txt
> +++ b/tools/perf/Documentation/perf-script.txt
> @@ -383,6 +383,13 @@ include::itrace.txt[]
>  	will be printed. Each entry has function name and file/line. Enabled by
>  	default, disable with --no-inline.
>  
> +--insn-trace::
> +	Show instruction stream for intel_pt traces. Combine with --xed to
> +	show disassembly.
> +
> +--xed::
> +	Run xed disassembler on output. Requires installing the xed disassembler.
> +
>  SEE ALSO
>  --------
>  linkperf:perf-record[1], linkperf:perf-script-perl[1],
> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
> index 4da5e32b9e03..311f5b53dd83 100644
> --- a/tools/perf/builtin-script.c
> +++ b/tools/perf/builtin-script.c
> @@ -44,6 +44,7 @@
>  #include <sys/stat.h>
>  #include <fcntl.h>
>  #include <unistd.h>
> +#include <subcmd/pager.h>
>  
>  #include "sane_ctype.h"
>  
> @@ -3100,6 +3101,24 @@ static int perf_script__process_auxtrace_info(struct perf_session *session,
>  #define perf_script__process_auxtrace_info 0
>  #endif
>  
> +static int parse_insn_trace(const struct option *opt __maybe_unused,
> +			    const char *str __maybe_unused,
> +			    int unset __maybe_unused)
> +{
> +	parse_output_fields(NULL, "+insn,-event,-period", 0);
> +	itrace_parse_synth_opts(opt, "i0ns", 0);
> +	nanosecs = true;
> +	return 0;
> +}
> +
> +static int parse_xed(const struct option *opt __maybe_unused,
> +		     const char *str __maybe_unused,
> +		     int unset __maybe_unused)
> +{
> +	force_pager("xed -F insn: -A -64 | less");
> +	return 0;
> +}
> +
>  int cmd_script(int argc, const char **argv)
>  {
>  	bool show_full_info = false;
> @@ -3184,6 +3203,10 @@ int cmd_script(int argc, const char **argv)
>  		    "system-wide collection from all CPUs"),
>  	OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]",
>  		   "only consider these symbols"),
> +	OPT_CALLBACK_OPTARG(0, "insn-trace", &itrace_synth_opts, NULL, NULL,
> +			"Decode instructions from itrace", parse_insn_trace),
> +	OPT_CALLBACK_OPTARG(0, "xed", NULL, NULL, NULL,
> +			"Run xed disassembler on output", parse_xed),
>  	OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]",
>  		   "Stop display of callgraph at these symbols"),
>  	OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"),
> -- 
> 2.17.1

  parent reply	other threads:[~2018-10-08 18:03 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-20 18:05 Make perf script easier to use for itrace Andi Kleen
2018-09-20 18:05 ` [PATCH v6 1/5] tools, perf, script: Add --insn-trace for instruction decoding Andi Kleen
2018-10-08 17:50   ` Arnaldo Carvalho de Melo
2018-10-08 18:03   ` Arnaldo Carvalho de Melo [this message]
2018-10-08 18:41     ` Andi Kleen
2018-10-08 19:40       ` Arnaldo Carvalho de Melo
2018-10-26  7:45   ` [tip:perf/urgent] perf " tip-bot for Andi Kleen
2018-09-20 18:05 ` [PATCH v6 2/5] perf, tools, script: Make itrace script default to all calls Andi Kleen
2018-10-26  7:46   ` [tip:perf/urgent] perf " tip-bot for Andi Kleen
2018-09-20 18:05 ` [PATCH v6 3/5] tools, perf, script: Add --call-trace and --call-ret-trace Andi Kleen
2018-09-28 10:23   ` leo.yan
2018-09-28 17:19     ` Andi Kleen
2018-09-29  7:39       ` leo.yan
2018-10-02 14:24         ` Arnaldo Carvalho de Melo
2018-10-02 23:09           ` leo.yan
2018-10-26  7:46   ` [tip:perf/urgent] tools " tip-bot for Andi Kleen
2018-09-20 18:05 ` [PATCH v6 4/5] tools, perf, script: Implement --graph-function Andi Kleen
2018-10-26  7:47   ` [tip:perf/urgent] perf " tip-bot for Andi Kleen
2018-09-20 18:05 ` [PATCH v6 5/5] perf, tools, script: Support total cycles count Andi Kleen
2018-09-24 17:07   ` Andi Kleen
2018-10-26  7:47     ` [tip:perf/urgent] perf " tip-bot for Andi Kleen

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=20181008180314.GT3541@kernel.org \
    --to=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=andi@firstfloor.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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.