1. 08 9月, 2016 2 次提交
  2. 05 9月, 2016 3 次提交
  3. 01 9月, 2016 10 次提交
    • R
      perf probe: Move dwarf specific functions to dwarf-aux.c · 6243b9dc
      Ravi Bangoria 提交于
      Move generic dwarf related functions from util/probe-finder.c to
      util/dwarf-aux.c. Functions name and their prototype are also changed
      accordingly. No functionality changes.
      Suggested-and-Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: NRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
      Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/1472546377-25612-1-git-send-email-ravi.bangoria@linux.vnet.ibm.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      6243b9dc
    • R
      perf uprobe: Skip prologue if program compiled without optimization · e47392bf
      Ravi Bangoria 提交于
      The function prologue prepares stack and registers before executing
      function logic.
      
      When target program is compiled without optimization, function parameter
      information is only valid after the prologue.
      
      When we probe entrypc of the function, and try to record a function
      parameter, it contains a garbage value.
      
      For example:
      
        $ vim test.c
          #include <stdio.h>
      
          void foo(int i)
          {
             printf("i: %d\n", i);
          }
      
          int main()
          {
            foo(42);
            return 0;
          }
      
        $ gcc -g test.c -o test
        $ objdump -dl test | less
          foo():
          /home/ravi/test.c:4
            400536:       55                      push   %rbp
            400537:       48 89 e5                mov    %rsp,%rbp
            40053a:       48 83 ec 10             sub    -bashx10,%rsp
            40053e:       89 7d fc                mov    %edi,-0x4(%rbp)
          /home/ravi/test.c:5
            400541:       8b 45 fc                mov    -0x4(%rbp),%eax
          ...
          ...
          main():
          /home/ravi/test.c:9
            400558:       55                      push   %rbp
            400559:       48 89 e5                mov    %rsp,%rbp
          /home/ravi/test.c:10
            40055c:       bf 2a 00 00 00          mov    -bashx2a,%edi
            400561:       e8 d0 ff ff ff          callq  400536 <foo>
      
        $ perf probe -x ./test 'foo i'
        $ cat /sys/kernel/debug/tracing/uprobe_events
           p:probe_test/foo /home/ravi/test:0x0000000000000536 i=-12(%sp):s32
      
        $ perf record -e probe_test:foo ./test
        $ perf script
           test  5778 [001]  4918.562027: probe_test:foo: (400536) i=0
      
      Here variable 'i' is passed via stack which is pushed on stack at
      0x40053e. But we are probing at 0x400536.
      
      To resolve this issues, we need to probe on next instruction after
      prologue.  gdb and systemtap also does same thing. I've implemented this
      patch based on approach systemtap has used.
      
      After applying patch:
      
        $ perf probe -x ./test 'foo i'
        $ cat /sys/kernel/debug/tracing/uprobe_events
          p:probe_test/foo /home/ravi/test:0x0000000000000541 i=-4(%bp):s32
      
        $ perf record -e probe_test:foo ./test
        $ perf script
          test  6300 [001]  5877.879327: probe_test:foo: (400541) i=42
      
      No need to skip prologue for optimized case since debug info is correct
      for each instructions for -O2 -g. For more details please visit:
      
              https://bugzilla.redhat.com/show_bug.cgi?id=612253#c6
      
      Changes in v2:
      
      - Skipping prologue only when any ARG is either C variable, $params or
        $vars.
      
      - Probe on line(:1) may not be always possible. Recommend only address
        to force probe on function entry.
      
      Committer notes:
      
      Testing it with 'perf trace':
      
        # perf probe -x ./test foo i
        Added new event:
          probe_test:foo       (on foo in /home/acme/c/test with i)
      
        You can now use it in all perf tools, such as:
      
      	  perf record -e probe_test:foo -aR sleep 1
      
        # cat /sys/kernel/debug/tracing/uprobe_events
        p:probe_test/foo /home/acme/c/test:0x0000000000000526 i=-12(%sp):s32
        # trace --no-sys --event probe_*:* ./test
        i: 42
           0.000 probe_test:foo:(400526) i=0)
        #
      
      After the patch:
      
        # perf probe -d *:*
        Removed event: probe_test:foo
        # perf probe -x ./test foo i
        Target program is compiled without optimization. Skipping prologue.
        Probe on address 0x400526 to force probing at the function entry.
      
        Added new event:
          probe_test:foo       (on foo in /home/acme/c/test with i)
      
        You can now use it in all perf tools, such as:
      
      	perf record -e probe_test:foo -aR sleep 1
      
        # cat /sys/kernel/debug/tracing/uprobe_events
        p:probe_test/foo /home/acme/c/test:0x0000000000000531 i=-4(%bp):s32
        # trace --no-sys --event probe_*:* ./test
        i: 42
           0.000 probe_test:foo:(400531) i=42)
        #
      Reported-by: NMichael Petlan <mpetlan@redhat.com>
      Report-Link: https://www.mail-archive.com/linux-perf-users@vger.kernel.org/msg02348.htmlSigned-off-by: NRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Tested-by: NJiri Olsa <jolsa@kernel.org>
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Acked-by: NNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Cc: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
      Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1299021
      Link: http://lkml.kernel.org/r/1470214725-5023-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com
      [ Rename 'die' to 'cu_die' to avoid shadowing a die() definition on at least centos 5, Debian 7 and ubuntu:12.04.5]
      [ Use PRIx64 instead of lx to format a Dwarf_Addr, aka long long unsigned int, fixing the build on 32-bit systems ]
      [ dwarf_getsrclines() expects a size_t * argument ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      e47392bf
    • R
      perf probe: Add helper function to check if probe with variable · b3f33f93
      Ravi Bangoria 提交于
      Introduce helper function instead of inline code and replace hardcoded
      strings "$vars" and "$params" with their corresponding macros.
      
      perf_probe_with_var() is not declared as static since it will be called
      from different file in subsequent patch.
      Signed-off-by: NRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
      Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/1470214725-5023-1-git-send-email-ravi.bangoria@linux.vnet.ibm.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      b3f33f93
    • A
      perf symbols: Fixup symbol sizes before picking best ones · 432746f8
      Arnaldo Carvalho de Melo 提交于
      When we call symbol__fixup_duplicate() we use algorithms to pick the
      "best" symbols for cases where there are various functions/aliases to an
      address, and those check zero size symbols, which, before calling
      symbol__fixup_end() are _all_ symbols in a just parsed kallsyms file.
      
      So first fixup the end, then fixup the duplicates.
      
      Found while trying to figure out why 'perf test vmlinux' failed, see the
      output of 'perf test -v vmlinux' to see cases where the symbols picked
      as best for vmlinux don't match the ones picked for kallsyms.
      
      Cc: Anton Blanchard <anton@samba.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Fixes: 694bf407 ("perf symbols: Add some heuristics for choosing the best duplicate symbol")
      Link: http://lkml.kernel.org/n/tip-rxqvdgr0mqjdxee0kf8i2ufn@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      432746f8
    • A
      perf symbols: Check symbol_conf.allow_aliases for kallsyms loading too · c97b40e4
      Arnaldo Carvalho de Melo 提交于
      We can allow aliases to be kept, but we were checking this just when
      loading vmlinux files, be consistent, do it for any symbol table loading
      code that calls symbol__fixup_duplicate() by making this function check
      .allow_aliases instead.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Fixes: 680d926a ("perf symbols: Allow symbol alias when loading map for symbol name")
      Link: http://lkml.kernel.org/n/tip-z0avp0s6cfjckc4xj3pdfjdz@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      c97b40e4
    • M
      perf probe: Support probing on offline cross-arch binary · 293d5b43
      Masami Hiramatsu 提交于
      Support probing on offline cross-architecture binary by adding getting
      the target machine arch from ELF and choose correct register string for
      the machine.
      
      Here is an example:
        -----
        $ perf probe --vmlinux=./vmlinux-arm --definition 'do_sys_open $params'
        p:probe/do_sys_open do_sys_open+0 dfd=%r5:s32 filename=%r1:u32 flags=%r6:s32 mode=%r3:u16
        -----
      
      Here, we can get probe/do_sys_open from above and append it to to the target
      machine's tracing/kprobe_events file in the tracefs mountput, usually
      /sys/kernel/debug/tracing/kprobe_events (or /sys/kernel/tracing/kprobe_events).
      Signed-off-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/147214229717.23638.6440579792548044658.stgit@devbox
      [ Add definition for EM_AARCH64 to fix the build on at least centos 6, debian 7 & ubuntu 12.04.5 ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      293d5b43
    • M
      perf probe: Ignore vmlinux buildid if offline kernel is given · 428aff82
      Masami Hiramatsu 提交于
      Ignore the buildid of running kernel when both of --definition and
      --vmlinux is given because that kernel should be off-line.
      
      This also skips post-processing of kprobe event for relocating symbol
      and checking blacklist, because it can not be done on off-line kernel.
      
      E.g. without this fix perf shows an error as below
        ----
        $ perf probe --vmlinux=./vmlinux-arm --definition do_sys_open
        ./vmlinux-arm with build id 7a1f76dd56e9c4da707cd3d6333f50748141434b not found, continuing without symbols
        Failed to find symbol do_sys_open in kernel
          Error: Failed to add events.
        ----
      with this fix, we can get the definition
        ----
        $ perf probe --vmlinux=./vmlinux-arm --definition do_sys_open
        p:probe/do_sys_open do_sys_open+0
        ----
      Signed-off-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/147214228193.23638.12581984840822162131.stgit@devboxSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      428aff82
    • M
      perf probe: Show trace event definition · 1c20b1d1
      Masami Hiramatsu 提交于
      Add --definition/-D option for showing the trace-event definition in
      stdout. This can be useful in debugging or combined with a shell script.
      
      e.g.
        ----
        # perf probe --definition 'do_sys_open $params'
        p:probe/do_sys_open _text+2261728 dfd=%di:s32 filename=%si:u64 flags=%dx:s32 mode=%cx:u16
        ----
      Suggested-and-Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/147214226712.23638.2240534040014013658.stgit@devboxSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      1c20b1d1
    • M
      perf symbols: Demangle symbols for synthesized @plt entries. · 2a8d41b4
      Milian Wolff 提交于
      The symbols in the synthesized @plt entries where not demangled before,
      i.e. we could end up with entries such as:
      
          $ perf report
          Samples: 7K of event 'cycles:ppp', Event count (approx.): 6223833141
          Children      Self  Command          Shared Object           Symbol
          -   93.63%    28.89%  lab_mandelbrot   lab_mandelbrot        [.] main
              - 73.81% main
                  - 33.57% hypot
                    27.76% __hypot_finite
                    15.97% __muldc3
                     2.90% __muldc3@plt
                     2.40% _ZNK6QImage6heightEv@plt
                   + 2.14% QColor::rgb
                     1.94% _ZNK6QImage5widthEv@plt
                     1.92% cabs@plt
      
      This patch remedies this issue by also applying demangling to the
      synthesized symbols. The output for the above is now:
      
          $ perf report
          Samples: 7K of event 'cycles:ppp', Event count (approx.): 6223833141
          Children      Self  Command          Shared Object           Symbol
          -   93.63%    28.89%  lab_mandelbrot   lab_mandelbrot        [.] main
              - 73.81% main
                  - 33.57% hypot
                    27.76% __hypot_finite
                    15.97% __muldc3
                     2.90% __muldc3@plt
                     2.40% QImage::height() const@plt
                   + 2.14% QColor::rgb
                     1.94% QImage::width() const@plt
                     1.92% cabs@plt
      Signed-off-by: NMilian Wolff <milian.wolff@kdab.com>
      LPU-Reference: 20160830114102.30863-1-milian.wolff@kdab.com
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      2a8d41b4
    • A
      perf probe: Do not use map_load filters for function · fd227598
      Arnaldo Carvalho de Melo 提交于
      It is simpler to just do the loop, no need for globals and the last user
      of such facility disappears.
      
      Testing:
      
        # perf probe -F [a-z]*recvmsg
        aead_recvmsg
        compat_SyS_recvmsg
        compat_sys_recvmsg
        hash_recvmsg
        inet_recvmsg
        kernel_recvmsg
        netlink_recvmsg
        packet_recvmsg
        ping_recvmsg
        raw_recvmsg
        rawv6_recvmsg
        rng_recvmsg
        security_socket_recvmsg
        selinux_socket_recvmsg
        skcipher_recvmsg
        sock_common_recvmsg
        sock_no_recvmsg
        sock_recvmsg
        sys_recvmsg
        tcp_recvmsg
        udp_recvmsg
        udpv6_recvmsg
        unix_dgram_recvmsg
        unix_seqpacket_recvmsg
        unix_stream_recvmsg
        #
      
      Without filters:
      
        # perf probe -F | tail -5
        zswap_pool_create
        zswap_pool_current
        zswap_update_total_size
        zswap_writeback_entry
        zswap_zpool_param_set
        #
        # perf probe -F | wc -l
        33311
        #
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@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/r/20160831130427.GA13095@kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      fd227598
  4. 30 8月, 2016 2 次提交
  5. 24 8月, 2016 16 次提交
  6. 19 8月, 2016 1 次提交
    • A
      perf evsel: Do not access outside hw cache name arrays · c53412ee
      Arnaldo Carvalho de Melo 提交于
      We have to check if the values are >= *_MAX, not just >, fix it.
      
      From the bugzilla report:
      
      ''In file /tools/perf/util/evsel.c  function __perf_evsel__hw_cache_name
      it appears that there is a bug that reads beyond the end of the buffer.
      The statement "if (type > PERF_COUNT_HW_CACHE_MAX)" allows type to be
      equal to the maximum value. Later, when statement "if
      (!perf_evsel__is_cache_op_valid(type, op))" is executed, the function
      can access array perf_evsel__hw_cache_stat[type] beyond the end of the
      buffer.
      
      It appears to me that the statement "if (type > PERF_COUNT_HW_CACHE_MAX)"
      should be "if (type >= PERF_COUNT_HW_CACHE_MAX)"
      
      Bug found with Coverity and manual code review. No attempts were made to
      execute the code with a maximum type value.''
      
      Committer note:
      
      Testing it:
      
        $ perf record -e $(echo $(perf list cache | cut -d \[ -f1) | sed 's/ /,/g') usleep 1
        [ perf record: Woken up 16 times to write data ]
        [ perf record: Captured and wrote 0.023 MB perf.data (34 samples) ]
        $ perf evlist
        L1-dcache-load-misses
        L1-dcache-loads
        L1-dcache-stores
        L1-icache-load-misses
        LLC-load-misses
        LLC-loads
        LLC-store-misses
        LLC-stores
        branch-load-misses
        branch-loads
        dTLB-load-misses
        dTLB-loads
        dTLB-store-misses
        dTLB-stores
        iTLB-load-misses
        iTLB-loads
        node-load-misses
        node-loads
        node-store-misses
        node-stores
        $ perf list cache
      
        List of pre-defined events (to be used in -e):
      
          L1-dcache-load-misses        [Hardware cache event]
          L1-dcache-loads              [Hardware cache event]
          L1-dcache-stores             [Hardware cache event]
          L1-icache-load-misses        [Hardware cache event]
          LLC-load-misses              [Hardware cache event]
          LLC-loads                    [Hardware cache event]
          LLC-store-misses             [Hardware cache event]
          LLC-stores                   [Hardware cache event]
          branch-load-misses           [Hardware cache event]
          branch-loads                 [Hardware cache event]
          dTLB-load-misses             [Hardware cache event]
          dTLB-loads                   [Hardware cache event]
          dTLB-store-misses            [Hardware cache event]
          dTLB-stores                  [Hardware cache event]
          iTLB-load-misses             [Hardware cache event]
          iTLB-loads                   [Hardware cache event]
          node-load-misses             [Hardware cache event]
          node-loads                   [Hardware cache event]
          node-store-misses            [Hardware cache event]
          node-stores                  [Hardware cache event]
        $
      Reported-by: NBrian Sweeney <bsweeney@lgsinnovations.com>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=153351Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      c53412ee
  7. 17 8月, 2016 1 次提交
    • M
      perf unwind: Use addr_location::addr instead of ip for entries · 67540759
      Milian Wolff 提交于
      This fixes the srcline translation for call chains of user space
      applications.
      
      Before we got:
      
          perf report --stdio --no-children -s sym,srcline -g address
           8.92%  [.] main                                 mandelbrot.h:41
                  |
                  |--3.70%--main +8390240
                  |          __libc_start_main +139950056726769
                  |          _start +8388650
                  |
                  |--2.74%--main +8390189
                  |
                   --2.08%--main +8390296
                             __libc_start_main +139950056726769
                             _start +8388650
      
           7.59%  [.] main                                 complex:1326
                  |
                  |--4.79%--main +8390203
                  |          __libc_start_main +139950056726769
                  |          _start +8388650
                  |
                   --2.80%--main +8390219
      
           7.12%  [.] __muldc3                             libgcc2.c:1945
                  |
                  |--3.76%--__muldc3 +139950060519490
                  |          main +8390224
                  |          __libc_start_main +139950056726769
                  |          _start +8388650
                  |
                   --3.32%--__muldc3 +139950060519512
                             main +8390224
      
      With this patch applied, we instead get:
      
          perf report --stdio --no-children -s sym,srcline -g address
           8.92%  [.] main                                 mandelbrot.h:41
                  |
                  |--3.70%--main mandelbrot.h:41
                  |          __libc_start_main +241
                  |          _start +4194346
                  |
                  |--2.74%--main mandelbrot.h:41
                  |
                   --2.08%--main mandelbrot.h:41
                             __libc_start_main +241
                             _start +4194346
      
           7.59%  [.] main                                 complex:1326
                  |
                  |--4.79%--main complex:1326
                  |          __libc_start_main +241
                  |          _start +4194346
                  |
                   --2.80%--main complex:1326
      
           7.12%  [.] __muldc3                             libgcc2.c:1945
                  |
                  |--3.76%--__muldc3 libgcc2.c:1945
                  |          main mandelbrot.h:39
                  |          __libc_start_main +241
                  |          _start +4194346
                  |
                   --3.32%--__muldc3 libgcc2.c:1945
                             main mandelbrot.h:39
      Suggested-and-Acked-by: NNamhyung Kim <namhyung@kernel.org>
      Signed-off-by: NMilian Wolff <milian.wolff@kdab.com>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      LPU-Reference: 20160816153926.11288-1-milian.wolff@kdab.com
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      67540759
  8. 16 8月, 2016 4 次提交
  9. 13 8月, 2016 1 次提交