1. 21 Jun, 2017 1 commit
  2. 19 Jun, 2017 1 commit
  3. 16 Mar, 2017 1 commit
    • Andi Kleen's avatar
      perf script: Add 'brstackinsn' for branch stacks · 48d02a1d
      Andi Kleen authored
      
      Implement printing instruction sequences as hex dump for branch stacks.
      
      This relies on the x86 instruction decoder used by the PT decoder to
      find the lengths of instructions to dump them individually.
      
      This is good enough for pattern matching.
      
      This allows to study hot paths for individual samples, together with
      branch misprediction and cycle count / IPC information if available (on
      Skylake systems).
      
        % perf record -b ...
        % perf script -F brstackinsn
        ...
          read_hpet+67:
                ffffffff9905b843        insn: 74 ea                     # PRED
                ffffffff9905b82f        insn: 85 c9
                ffffffff9905b831        insn: 74 12
                ffffffff9905b833        insn: f3 90
                ffffffff9905b835        insn: 48 8b 0f
                ffffffff9905b838        insn: 48 89 ca
                ffffffff9905b83b        insn: 48 c1 ea 20
                ffffffff9905b83f        insn: 39 f2
                ffffffff9905b841        insn: 89 d0
                ffffffff9905b843        insn: 74 ea                     # PRED
      
      Only works when no special branch filters are specified.
      
      Occasionally the path does not reach up to the sample IP, as the LBRs
      may be frozen before executing a final jump. In this case we print a
      special message.
      
      The instruction dumper piggy backs on the existing infrastructure from
      the IP PT decoder.
      
      An earlier iteration of this patch relied on a disassembler, but this
      version only uses the existing instruction decoder.
      
      Committer note:
      
      Added hint about how to get suitable perf.data files for use with
      '-F brstackinsm':
      
        $ perf record usleep 1
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.018 MB perf.data (8 samples) ]
        $
        $ perf script -F brstackinsn
        Display of branch stack assembler requested, but non all-branch filter set
        Hint: run 'perf record -b ...'
        $
      Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Link: http://lkml.kernel.org/r/20170223234634.583-1-andi@firstfloor.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      48d02a1d
  4. 03 Mar, 2017 1 commit
    • Adrian Hunter's avatar
      perf intel-PT/BTS: Add missing initialization · f1c4d1ad
      Adrian Hunter authored
      
        $ perf test decoder
        57: x86 instruction decoder - new instructions : FAILED!
        $
      
        Failed to decode 'rel' value (0xfffffffc vs expected 0): 0f 1b 80 78 56 34 12 	bndstx %bnd0,0x12345678(%rax)
        Failed to decode 'rel' value (0xfffffffc vs expected 0): 0f 1b 85 78 56 34 12 	bndstx %bnd0,0x12345678(%rbp)
        Failed to decode 'rel' value (0xfffffffc vs expected 0): 0f 1b 84 01 78 56 34 12 	bndstx %bnd0,0x12345678(%rcx,%rax,1)
        Failed to decode 'rel' value (0xfffffffc vs expected 0): 0f 1b 84 05 78 56 34 12 	bndstx %bnd0,0x12345678(%rbp,%rax,1)
        Failed to decode 'rel' value (0xfffffffc vs expected 0): 0f 1b 84 08 78 56 34 12 	bndstx %bnd0,0x12345678(%rax,%rcx,1)
      
      There is missing initialization.  It only affects the test because it is
      checking 'rel' even in cases where there is no value.
      
      Fix it.
      Reported-and-Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: http://lkml.kernel.org/r/08c6ad07-7994-3e56-b20e-d75727ca7765@intel.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f1c4d1ad
  5. 01 Mar, 2017 1 commit
  6. 14 Feb, 2017 1 commit
  7. 09 Feb, 2017 1 commit
    • Arnaldo Carvalho de Melo's avatar
      perf intel-pt: Use __fallthrough · 7ea6856d
      Arnaldo Carvalho de Melo authored
      
      To address new warnings emmited by gcc 7, e.g.::
      
          CC       /tmp/build/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.o
          CC       /tmp/build/perf/tests/parse-events.o
        util/intel-pt-decoder/intel-pt-pkt-decoder.c: In function 'intel_pt_pkt_desc':
        util/intel-pt-decoder/intel-pt-pkt-decoder.c:499:6: error: this statement may fall through [-Werror=implicit-fallthrough=]
           if (!(packet->count))
              ^
        util/intel-pt-decoder/intel-pt-pkt-decoder.c:501:2: note: here
          case INTEL_PT_CYC:
          ^~~~
          CC       /tmp/build/perf/util/intel-pt-decoder/intel-pt-decoder.o
        cc1: all warnings being treated as errors
      Acked-by: default avatarAndi Kleen <ak@linux.intel.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/n/tip-mf0hw789pu9x855us5l32c83@git.kernel.org
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7ea6856d
  8. 24 Oct, 2016 2 commits
  9. 05 Oct, 2016 2 commits
  10. 29 Sep, 2016 1 commit
  11. 12 Aug, 2016 1 commit
  12. 23 Jul, 2016 1 commit
    • Dan Williams's avatar
      x86/insn: remove pcommit · fd1d961d
      Dan Williams authored
      
      The pcommit instruction is being deprecated in favor of either ADR
      (asynchronous DRAM refresh: flush-on-power-fail) at the platform level, or
      posted-write-queue flush addresses as defined by the ACPI 6.x NFIT (NVDIMM
      Firmware Interface Table).
      
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Cc: x86@kernel.org
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Xiao Guangrong <guangrong.xiao@linux.intel.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
      Acked-by: default avatarIngo Molnar <mingo@redhat.com>
      Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
      fd1d961d
  13. 21 Jul, 2016 1 commit
  14. 20 Jul, 2016 1 commit
  15. 12 Jul, 2016 1 commit
  16. 25 Apr, 2016 1 commit
  17. 03 Mar, 2016 1 commit
    • Josh Poimboeuf's avatar
      x86/asm/decoder: Use explicitly signed chars · 19072f23
      Josh Poimboeuf authored
      
      When running objtool on a ppc64le host to analyze x86 binaries, it
      reports a lot of false warnings like:
      
        ipc/compat_mq.o: warning: objtool: compat_SyS_mq_open()+0x91: can't find jump dest instruction at .text+0x3a5
      
      The warnings are caused by the x86 instruction decoder setting the wrong
      value for the jump instruction's immediate field because it assumes that
      "char == signed char", which isn't true for all architectures.  When
      converting char to int, gcc sign-extends on x86 but doesn't sign-extend
      on ppc64le.
      
      According to the gcc man page, that's a feature, not a bug:
      
        > Each kind of machine has a default for what "char" should be.  It is
        > either like "unsigned char" by default or like "signed char" by
        > default.
        >
        > Ideally, a portable program should always use "signed char" or
        > "unsigned char" when it depends on the signedness of an object.
      
      Conform to the "standards" by changing the "char" casts to "signed
      char".  This results in no actual changes to the object code on x86.
      
      Note: the x86 decoder now lives in three different locations in the
      kernel tree, which are all kept in sync via makefile checks and
      warnings: in-kernel, perf, and objtool.  This fixes all three locations.
      Eventually we should probably try to at least converge the two separate
      "tools" locations into a single shared location.
      Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephen Rothwell <sfr@canb.auug.org.au>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/9dd4161719b20e6def9564646d68bfbe498c549f.1456962210.git.jpoimboe@redhat.com
      
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      19072f23
  18. 28 Sep, 2015 2 commits
  19. 04 Sep, 2015 6 commits
  20. 01 Sep, 2015 1 commit
    • Wang Nan's avatar
      perf build: Fix Intel PT instruction decoder dependency problem · 04aa90b5
      Wang Nan authored
      
      I hit following building error randomly:
      
          ...
        /bin/sh: /path/to/kernel/buildperf/util/intel-pt-decoder/inat-tables.c: No such file or directory
          ...
          LINK     /path/to/kernel/buildperf/plugin_mac80211.so
          LINK     /path/to/kernel/buildperf/plugin_kmem.so
          LINK     /path/to/kernel/buildperf/plugin_xen.so
          LINK     /path/to/kernel/buildperf/plugin_hrtimer.so
        In file included from util/intel-pt-decoder/intel-pt-insn-decoder.c:25:0:
        util/intel-pt-decoder/inat.c:24:25: fatal error: inat-tables.c: No such file or directory
         #include "inat-tables.c"
                                 ^
        compilation terminated.
        make[4]: *** [/path/to/kernel/buildperf/util/intel-pt-decoder/intel-pt-insn-decoder.o] Error 1
        make[4]: *** Waiting for unfinished jobs....
          LINK     /path/to/kernel/buildperf/plugin_function.so
      
      This is caused by tools/perf/util/intel-pt-decoder/Build that, it tries
      to generate $(OUTPUT)util/intel-pt-decoder/inat-tables.c atomatically
      but forget to ensure the existance of $(OUTPUT)util/intel-pt-decoder
      directory.
      
      This patch fixes it by adding $(call rule_mkdir) like other similar rules.
      Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1441087005-107540-1-git-send-email-wangnan0@huawei.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      04aa90b5
  21. 31 Aug, 2015 1 commit
    • Adrian Hunter's avatar
      perf tools: Fix build on powerpc broken by pt/bts · 97db6206
      Adrian Hunter authored
      
      It is theoretically possible to process perf.data files created on x86
      and that contain Intel PT or Intel BTS data, on any other architecture,
      which is why it is possible for there to be build errors on powerpc
      caused by pt/bts.
      
      The errors were:
      
      	util/intel-pt-decoder/intel-pt-insn-decoder.c: In function ‘intel_pt_insn_decoder’:
      	util/intel-pt-decoder/intel-pt-insn-decoder.c:138:3: error: switch missing default case [-Werror=switch-default]
      	   switch (insn->immediate.nbytes) {
      	   ^
      	cc1: all warnings being treated as errors
      
      	linux-acme.git/tools/perf/perf-obj/libperf.a(libperf-in.o): In function `intel_pt_synth_branch_sample':
      	sources/linux-acme.git/tools/perf/util/intel-pt.c:871: undefined reference to `tsc_to_perf_time'
      	linux-acme.git/tools/perf/perf-obj/libperf.a(libperf-in.o): In function `intel_pt_sample':
      	sources/linux-acme.git/tools/perf/util/intel-pt.c:915: undefined reference to `tsc_to_perf_time'
      	sources/linux-acme.git/tools/perf/util/intel-pt.c:962: undefined reference to `tsc_to_perf_time'
      	linux-acme.git/tools/perf/perf-obj/libperf.a(libperf-in.o): In function `intel_pt_process_event':
      	sources/linux-acme.git/tools/perf/util/intel-pt.c:1454: undefined reference to `perf_time_to_tsc'
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
      Cc: Wang Nan <wangnan0@huawei.com>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1441046384-28663-1-git-send-email-adrian.hunter@intel.com
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      97db6206
  22. 24 Aug, 2015 6 commits
  23. 22 Aug, 2015 1 commit
  24. 17 Aug, 2015 4 commits