1. 15 May, 2015 4 commits
  2. 14 May, 2015 5 commits
    • Jiri Olsa's avatar
      perf tools: Make flex/bison calls honour V=1 · 70923bd2
      Jiri Olsa authored
      Reported-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Don Zickus <dzickus@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/n/tip-dnc2ggwhffdpuvijwq4rkic9@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      70923bd2
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Fix the build on older distros · c188e7ac
      Arnaldo Carvalho de Melo authored
      Such as RHEL5, where CLOEXEC, NONBLOCK flags are not present, use a
      ifdef+define approach instead to make it build on all distros.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Don Zickus <dzickus@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Vinson Lee <vlee@twitter.com>
      Link: http://lkml.kernel.org/n/tip-pioazikk9d9oz5qdeor3eldu@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c188e7ac
    • Arnaldo Carvalho de Melo's avatar
      tools lib traceevent: Provide le16toh define for older systems · b390d850
      Arnaldo Carvalho de Melo authored
      Where such macro is not present, so just copy its definition from
      glibc's endian.h and define it if not already.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Don Zickus <dzickus@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Link: http://lkml.kernel.org/n/tip-4j90i2na07ppidt0z6cbuxr7@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b390d850
    • Namhyung Kim's avatar
      perf report: Fix some option handling on --stdio · 4fd113b5
      Namhyung Kim authored
      There's a bug that perf report sometimes ignore some options on --stdio
      output.  This bug is triggered only if a related config variable is set.
      For example, let's assume we have a following config file.
      
        $ cat ~/.perfconfig
        [call-graph]
          print-type = graph
        [hist]
          percentage = absolute
      
      Then, following perf config will not honor some options.
      
        $ perf record -ag sleep 1
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.199 MB perf.data (77 samples) ]
      
        $ perf report -g none --stdio
        # To display the perf.data header info, please use --header/--header-only options.
        #
        # Samples: 77  of event 'cycles'
        # Event count (approx.): 25425383
        #
        # Overhead  Command          Shared Object            Symbol
        # ........  ...............  .......................  ..............
        #
            16.34%  swapper          [kernel.vmlinux]         [k] intel_idle
                            |
                            ---intel_idle
                               cpuidle_enter_state
                               cpuidle_enter
                               cpu_startup_entry
         ...
      
      With '-g none' option, it should not show callchains, but it still shows
      callchains.  However it works as expected on --tui output.
      
      Similarly, '--percentage relative' option is not work and still shows a
      absolute percentage values.
      
      Looking at the source, I found that those setting were overwritten by
      config variables when setup_pager() called.  The setup_pager() is to
      start a pager process so that it can manage long lines of output on the
      stdio mode.  But as it calls the perf_config() after parsing arguments,
      the settings were overwritten regardless of command line options.
      
      The reason it calls perf_config() is to find the 'pager_program' which
      might be set by a config variable, I guess.  However current perf code
      does not provide the config variable for it, so it's just meaningless
      IMHO.  Eliminating the call makes the option working as expected.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Taeung Song <treeze.taeung@gmail.com>
      Link: http://lkml.kernel.org/r/1431529406-6762-1-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4fd113b5
    • Naveen N. Rao's avatar
      perf probe: Ignore tail calls to probed functions · d4c537e6
      Naveen N. Rao authored
      perf probe currently errors out if there are any tail calls to probed
      functions:
      
      [root@rhel71be]# perf probe do_fork
      Failed to find probe point in any functions.
        Error: Failed to add events.
      
      Fix this by teaching perf to ignore tail calls.
      
      Without patch:
      
        [root@rhel71be perf]# ./perf probe -v do_fork
        probe-definition(0): do_fork symbol:do_fork file:(null) line:0 offset:0
        return:0 lazy:(null)
        0 arguments
        Looking at the vmlinux_path (7 entries long)
        symsrc__init: build id mismatch for /boot/vmlinux.
        Using /usr/lib/debug/lib/modules/3.10.0-201.el7.ppc64/vmlinux for symbols
        Open Debuginfo file:
        /usr/lib/debug/lib/modules/3.10.0-201.el7.ppc64/vmlinux
        Try to find probe point from debuginfo.
        found inline addr: 0xc0000000000bb9b0
        Probe point found: do_fork+0
        found inline addr: 0xc0000000000bbe20
        Probe point found: kernel_thread+48
        found inline addr: 0xc0000000000bbe5c
        Probe point found: sys_fork+28
        found inline addr: 0xc0000000000bbfac
        Probe point found: sys_vfork+44
        found inline addr: 0xc0000000000bc27c
        Failed to find probe point in any functions.
        An error occurred in debuginfo analysis (-2).
        Error: Failed to add events. Reason: No such file or directory (Code: -2)
      
      With patch:
      
        [root@rhel71be perf]# ./perf probe -v do_fork
        probe-definition(0): do_fork symbol:do_fork file:(null) line:0 offset:0
        return:0 lazy:(null)
        0 arguments
        Looking at the vmlinux_path (7 entries long)
        symsrc__init: build id mismatch for /boot/vmlinux.
        Using /usr/lib/debug/lib/modules/3.10.0-201.el7.ppc64/vmlinux for symbols
        Open Debuginfo file:
        /usr/lib/debug/lib/modules/3.10.0-201.el7.ppc64/vmlinux
        Try to find probe point from debuginfo.
        found inline addr: 0xc0000000000bb9b0
        Probe point found: do_fork+0
        found inline addr: 0xc0000000000bbe20
        Probe point found: kernel_thread+48
        found inline addr: 0xc0000000000bbe5c
        Probe point found: sys_fork+28
        found inline addr: 0xc0000000000bbfac
        Probe point found: sys_vfork+44
        found inline addr: 0xc0000000000bc27c
        Ignoring tail call from SyS_clone
        Found 4 probe_trace_events.
        Opening /sys/kernel/debug/tracing/kprobe_events write=1
        No kprobe blacklist support, ignored
        Added new events:
        Writing event: p:probe/do_fork _text+768432
        Failed to write event: Invalid argument
          Error: Failed to add events. Reason: Invalid argument (Code: -22)
      
      [Ignore the error about failure to write event - this kernel is missing
      a patch to resolve _text properly]
      
      The reason to ignore tail calls is that the address does not belong to
      any function frame. In the example above, the address in SyS_clone is
      0xc0000000000bc27c, but looking at the debug-info:
      
       <1><830081>: Abbrev Number: 133 (DW_TAG_subprogram)
          <830083>   DW_AT_external    : 1
          <830083>   DW_AT_name        : (indirect string, offset: 0x3cea3): SyS_clone
          <830087>   DW_AT_decl_file   : 7
          <830088>   DW_AT_decl_line   : 1689
          <83008a>   DW_AT_prototyped  : 1
          <83008a>   DW_AT_type        : <0x8110eb>
          <83008e>   DW_AT_low_pc      : 0xc0000000000bc270
          <830096>   DW_AT_high_pc     : 0xc
          <83009e>   DW_AT_frame_base  : 1 byte block: 9c 	(DW_OP_call_frame_cfa)
          <8300a0>   DW_AT_GNU_all_call_sites: 1
          <8300a0>   DW_AT_sibling     : <0x830178>
      <snip>
       <3><830147>: Abbrev Number: 125 (DW_TAG_GNU_call_site)
          <830148>   DW_AT_low_pc      : 0xc0000000000bc27c
          <830150>   DW_AT_GNU_tail_call: 1
          <830150>   DW_AT_abstract_origin: <0x82e7e1>
      
      The frame ends at 0xc0000000000bc27c. I suppose this is why this
      particular call is a "tail" call. FWIW, systemtap seems to ignore these
      as well and requires users to explicitly place probes at these call
      sites if necessary. I print out the caller so that users know.
      Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Acked-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Link: http://lkml.kernel.org/r/1430394151-15928-1-git-send-email-naveen.n.rao@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d4c537e6
  3. 12 May, 2015 12 commits
  4. 11 May, 2015 3 commits
  5. 09 May, 2015 1 commit
    • Ingo Molnar's avatar
      Merge tag 'perf-core-for-mingo' of... · 32b0ed3a
      Ingo Molnar authored
      Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
      
      Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
      
      User visible changes:
      
        - 'perf probe' improvements: (Masami Hiramatsu)
      
          - Support glob wildcards for function name
          - Support $params special probe argument: Collect all function arguments
          - Make --line checks validate C-style function name.
          - Add --no-inlines option to avoid searching inline functions
      
        - Introduce new 'perf bench futex' benchmark: 'wake-parallel', to
          measure parallel waker threads generating contention for kernel
          locks (hb->lock). (Davidlohr Bueso)
      
      Bug fixes:
      
        - Improve 'perf top' to survive much longer on high core count machines,
          more work needed to refcount more data structures besides 'struct thread'
          and fix more races. (Arnaldo Carvalho de Melo)
      
      Infrastructure changes:
      
        - Move barrier.h mb/rmb/wmb API from tools/perf/ to kernel like tools/arch/
          hierarchy. (Arnaldo Carvalho de Melo)
      
        - Borrow atomic.h from the kernel, initially the x86 implementations
          with a fallback to gcc intrinsics for the other arches, all the kernel
          like framework in place for doing arch specific implementations,
          preferrably cloning what is in the kernel to the greater extent
          possible. (Arnaldo Carvalho de Melo)
      
        - Protect the 'struct thread' lifetime with a reference counter,
          and protect data structures that contains its instances with
          a mutex. (Arnaldo Carvalho de Melo
      
        - Disable libdw DWARF unwind when built with NO_DWARF (Naveen N. Rao)
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      32b0ed3a
  6. 08 May, 2015 15 commits