1. 15 Apr, 2010 5 commits
  2. 14 Apr, 2010 33 commits
    • Thomas Gleixner's avatar
      perf: Fix dynamic field detection · a1e2f60e
      Thomas Gleixner authored
      Checking if a tracing field is an array with a dynamic length
      requires to check the field type and seek the "__data_loc"
      string that prepends the actual type, as can be found in a trace
      event format file:
      
      	field:__data_loc char[] name;	offset:16;	size:4;	signed:1;
      
      But we actually use strcmp() to check if the field type fully
      matches "__data_loc", which may fail as we trip over the rest of
      the type.
      
      To fix this, use strncmp to only check if it starts with
      "__data_loc".
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <1271282283-23721-1-git-send-regression-fweisbec@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      a1e2f60e
    • Frederic Weisbecker's avatar
      perf: Fix hlist related build error · 95476b64
      Frederic Weisbecker authored
      hlist helpers need to be available for all software events, not
      only trace events.
      
      Pull them out outside the ifdef CONFIG_EVENT_TRACING section.
      
      Fixes:
      	kernel/perf_event.c:4573: error: implicit declaration of function 'swevent_hlist_put'
      	kernel/perf_event.c:4614: error: implicit declaration of function 'swevent_hlist_get'
      	kernel/perf_event.c:5534: error: implicit declaration of function 'swevent_hlist_release
      Reported-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1271281338-23491-1-git-send-regression-fweisbec@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      95476b64
    • Masami Hiramatsu's avatar
      perf probe: Show function entry line as probe-able · f6c903f5
      Masami Hiramatsu authored
      Function entry line should be shown as probe-able line,
      because each function has declared line attribute.
      
      LKML-Reference: <20100414224007.14630.96915.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f6c903f5
    • Masami Hiramatsu's avatar
      perf probe: Support DW_OP_plus_uconst in DW_AT_data_member_location · de1439d8
      Masami Hiramatsu authored
      DW_OP_plus_uconst can be used for DW_AT_data_member_location.
      This patch adds DW_OP_plus_uconst support when getting
      structure member offset.
      
      Commiter note:
      
      Fixed up the size_t format specifier in one case:
      
      cc1: warnings being treated as errors
      util/probe-finder.c: In function ‘die_get_data_member_location’:
      util/probe-finder.c:270: error: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
      make: *** [/home/acme/git/build/perf/util/probe-finder.o] Error 1
      
      LKML-Reference: <20100414223958.14630.5230.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      de1439d8
    • Masami Hiramatsu's avatar
      perf probe: Fix line range to show end line · dda4ab34
      Masami Hiramatsu authored
      Line range should reject the range if the number of lines is 0
      (e.g. "sched.c:1024+0"), and it should show the lines include
      the end of line number (e.g. "sched.c:1024-2048" should show
      2048th line).
      
      LKML-Reference: <20100414223950.14630.42263.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      dda4ab34
    • Masami Hiramatsu's avatar
      perf probe: Fix a bug that --line range can be overflow · d3b63d7a
      Masami Hiramatsu authored
      Since line_finder.lno_s/e are signed int but line_range.start/end
      are unsigned int, it is possible to be overflow when converting
      line_range->start/end to line_finder->lno_s/e.
      This changes line_range.start/end and line_list.line to signed int
      and adds overflow checks when setting line_finder.lno_s/e.
      
      LKML-Reference: <20100414223942.14630.72730.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d3b63d7a
    • Masami Hiramatsu's avatar
      perf probe: Fix mis-estimation for shortening filename · dd259c5d
      Masami Hiramatsu authored
      Fix mis-estimation size for making a short filename.
      Since the buffer size is 32 bytes and there are '@' prefix and
      '\0' termination, maximum shorten filename length should be
      30. This means, before searching '/', it should be 31 bytes.
      
      LKML-Reference: <20100414223935.14630.11954.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      dd259c5d
    • Masami Hiramatsu's avatar
      perf probe: Fix to use correct debugfs path finder · 7ca5989d
      Masami Hiramatsu authored
      Instead of using debugfs_path, use debugfs_find_mountpoint()
      to find actual debugfs path.
      
      LKML-Reference: <20100414223928.14630.38326.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Reported-by: default avatarIngo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7ca5989d
    • Masami Hiramatsu's avatar
      perf probe: Remove xstrdup()/xstrndup() from util/probe-{event, finder}.c · 02b95dad
      Masami Hiramatsu authored
      Remove all xstr*dup() calls from util/probe-{event,finder}.c since
      it may cause 'sudden death' in utility functions and it makes
      reusing it from other code difficult.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171756.3790.89607.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      02b95dad
    • Masami Hiramatsu's avatar
      perf probe: Remove xzalloc() from util/probe-{event, finder}.c · e334016f
      Masami Hiramatsu authored
      Remove all xzalloc() calls from util/probe-{event,finder}.c since
      it may cause 'sudden death' in utility functions and it makes
      reusing it from other code difficult.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171749.3790.33303.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e334016f
    • Masami Hiramatsu's avatar
      perf probe: Remove die() from probe-event code · 146a1439
      Masami Hiramatsu authored
      Remove die() and DIE_IF() code from util/probe-event.c since
      these 'sudden death' in utility functions make reusing it from
      other code (especially tui/gui) difficult.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171742.3790.33650.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      146a1439
    • Masami Hiramatsu's avatar
      perf probe: Remove die() from probe-finder code · b55a87ad
      Masami Hiramatsu authored
      Remove die() and DIE_IF() code from util/probe-finder.c since
      these 'sudden death' in utility functions make reusing it from
      other code (especially tui/gui) difficult.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171735.3790.88853.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b55a87ad
    • Masami Hiramatsu's avatar
      perf probe: Support DW_OP_call_frame_cfa in debuginfo · a34a9854
      Masami Hiramatsu authored
      When building kernel without CONFIG_FRAME_POINTER, gcc uses
      CFA (canonical frame address) for frame base. With this patch,
      perf probe just gets CFI (call frame information) from debuginfo
      and search corresponding CFA from the CFI. IOW, this allows
      perf probe works correctly on the kernel without CONFIG_FRAME_POINTER.
      
      <Before>
       ./perf probe -fn sched_slice:12 lw.weight
        Fatal: DW_OP 156 is not supported.
                    (^^^ DW_OP_call_frame_cfa)
      
      <After>
      ./perf probe -fn sched_slice:12 lw.weight
      Add new event:
        probe:sched_slice    (on sched_slice:12 with weight=lw.weight)
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171728.3790.98217.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a34a9854
    • Masami Hiramatsu's avatar
      perf probe: Support basic type casting · 11a1ca35
      Masami Hiramatsu authored
      Add basic type casting for arguments to perf probe. This allows
      users to specify the actual type of arguments. Of course, if
      user sets invalid types, kprobe-tracer rejects that.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171722.3790.50372.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      11a1ca35
    • Masami Hiramatsu's avatar
      perf probe: Query basic types from debuginfo · 4984912e
      Masami Hiramatsu authored
      Query the basic type information (byte-size and signed-flag) from
      debuginfo and pass that to kprobe-tracer. This is especially useful
      for tracing the members of data structure, because each member has
      different byte-size on the memory.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171715.3790.23730.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4984912e
    • Masami Hiramatsu's avatar
      tracing/kprobes: Support basic types on dynamic events · 93ccae7a
      Masami Hiramatsu authored
      Support basic types of integer (u8, u16, u32, u64, s8, s16, s32, s64) in
      kprobe tracer. With this patch, users can specify above basic types on
      each arguments after ':'. If omitted, the argument type is set as
      unsigned long (u32 or u64, arch-dependent).
      
       e.g.
        echo 'p account_system_time+0 hardirq_offset=%si:s32' > kprobe_events
      
        adds a probe recording hardirq_offset in signed-32bits value on the
        entry of account_system_time.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171708.3790.18599.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      93ccae7a
    • Masami Hiramatsu's avatar
      perf probe: Use the last field name as the argument name · df0faf4b
      Masami Hiramatsu authored
      Set the last field name to the argument name when the argument
      is refering a data-structure member.
      
      e.g.
       ./perf probe --add 'vfs_read file->f_mode'
       Add new event:
         probe:vfs_read       (on vfs_read with f_mode=file->f_mode)
      
       This probe records file->f_mode, but the argument name becomes "f_mode".
      
      This enables perf-trace command to parse trace event format correctly.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171700.3790.72961.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      df0faf4b
    • Masami Hiramatsu's avatar
      perf probe: Support argument name · 48481938
      Masami Hiramatsu authored
      Set given names to event arguments. The syntax is same as kprobe-tracer,
      you can add 'NAME=' right before each argument.
      
      e.g.
        ./perf probe vfs_read foo=file
      
       then, 'foo' is set to the argument name as below.
      
        ./perf probe -l
        probe:vfs_read       (on vfs_read@linux-2.6-tip/fs/read_write.c with foo)
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <20100412171653.3790.74624.stgit@localhost6.localdomain6>
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      48481938
    • Frederic Weisbecker's avatar
      perf tools: Fix accidentally preprocessed snprintf callback · fcd14984
      Frederic Weisbecker authored
      struct sort_entry has a callback named snprintf that turns an
      entry into a string result.
      But there are glibc versions that implement snprintf through a
      macro. The following expression is then going to get the snprintf
      call preprocessed:
      
              ent->snprintf(...)
      
      to finally end up in a build error:
      
              util/hist.c: Dans la fonction «hist_entry__snprintf» :
              util/hist.c:539: erreur: «struct sort_entry» has no member named «__builtin___snprintf_chk»
      
      To fix this, prepend struct sort_entry callbacks with an "se_"
      prefix.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      fcd14984
    • Frederic Weisbecker's avatar
      perf: Make clock software events consistent with general exclusion rules · df8290bf
      Frederic Weisbecker authored
      The cpu/task clock events implement their own version of exclusion
      on top of exclude_user and exclude_kernel.
      
      The result is that when the event triggered in the kernel but we
      have exclude_kernel set, we try to rewind using task_pt_regs.
      There are two side effects of this:
      
      - we call task_pt_regs even on kernel threads, which doesn't give
        us the desired result.
      - if the event occured in the kernel, we shouldn't rewind to the
        user context. We want to actually ignore the event.
      
      get_irq_regs() will always give us the right interrupted context, so
      use its result and submit it to perf_exclude_context() that knows
      when an event must be ignored.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ingo Molnar <mingo@elte.hu>
      df8290bf
    • Frederic Weisbecker's avatar
      perf: Store active software events in a hashlist · 76e1d904
      Frederic Weisbecker authored
      Each time a software event triggers, we need to walk through
      the entire list of events from the current cpu and task contexts
      to retrieve a running perf event that matches.
      We also need to check a matching perf event is actually counting.
      
      This walk is wasteful and makes the event fast path scaling
      down with a growing number of events running on the same
      contexts.
      
      To solve this, we store the running perf events in a hashlist to
      get an immediate access to them against their type:event_id when
      they trigger.
      
      v2: - Fix SWEVENT_HLIST_SIZE definition (and re-learn some basic
            maths along the way)
          - Only allocate hlist for online cpus, but keep track of the
            refcount on offline possible cpus too, so that we allocate it
            if needed when it becomes online.
          - Drop the kref use as it's not adapted to our tricks anymore.
      
      v3: - Fix bad refcount check (address instead of value). Thanks to
            Eric Dumazet who spotted this.
          - While exiting cpu, move the hlist release out of the IPI path
            to lock the hlist mutex sanely.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Ingo Molnar <mingo@elte.hu>
      76e1d904
    • Tom Zanussi's avatar
      perf trace: Invoke live mode automatically if record/report not specified · a0cccc2e
      Tom Zanussi authored
      Currently, live mode is invoked by explicitly invoking the
      record and report sides and connecting them with a pipe e.g.
      
       $ perf trace record rwtop -o - | perf trace report rwtop 5 -i -
      
      In terms of usability, it's not that bad, but it does require
      the user to type and remember more than necessary.
      
      This patch allows the user to accomplish the same thing without
      specifying the separate record/report steps or the pipe.  So the
      same command as above can be accomplished more simply as:
      
       $ perf trace rwtop 5
      
      Notice that the '-i -' and '-o -' aren't required in this case -
      they're added internally, and that any extra arguments are
      passed along to the report script (but not to the record
      script).
      
      The overall effect is that any of the scripts listed in 'perf
      trace -l' can now be used directly in live mode, with the
      expected arguments, by simply specifying the script and args to
      'perf trace'.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-12-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      a0cccc2e
    • Tom Zanussi's avatar
      perf trace/scripting: Enable scripting shell scripts for live mode · 00b21a01
      Tom Zanussi authored
      It should be possible to run any perf trace script in 'live
      mode'. This requires being able to pass in e.g. '-i -' or other
      args, which the current shell scripts aren't equipped to handle.
       In a few cases, there are required or optional args that also
      need special handling. This patch makes changes the current set
      of shell scripts as necessary.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-11-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      00b21a01
    • Tom Zanussi's avatar
      perf trace/scripting: Add rwtop and sctop scripts · 47902f36
      Tom Zanussi authored
      A couple of scripts, one in Python and the other in Perl, that
      demonstrate 'live mode' tracing.  For each, the output of the
      perf event stream is fed continuously to the script, which
      continuously aggregates the data and reports the current results
      every 3 seconds, or at the optionally specified interval.  After
      the current results are displayed, the aggregations are cleared
      and the cycle begins anew.
      
      To run the scripts, simply pipe the output of the 'perf trace
      record' step as input to the corresponding 'perf trace report'
      step, using '-' as the filename to -o and -i:
      
       $ perf trace record sctop -o - | perf trace report sctop -i -
      
      Also adds clear_term() utility functions to the Util.pm and
      Util.py utility modules, for use by any script to clear the
      screen.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-10-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      47902f36
    • Tom Zanussi's avatar
      perf: Convert perf header build_ids into build_id events · c7929e47
      Tom Zanussi authored
      Bypasses the build_id perf header code and replaces it with a
      synthesized event and processing function that accomplishes the
      same thing, used when reading/writing perf data to/from a pipe.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-9-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      c7929e47
    • Tom Zanussi's avatar
      perf: Convert perf tracing data into a tracing_data event · 9215545e
      Tom Zanussi authored
      Bypasses the tracing_data perf header code and replaces it with
      a synthesized event and processing function that accomplishes
      the same thing, used when reading/writing perf data to/from a
      pipe.
      
      The tracing data is pretty large, and this patch doesn't attempt
      to break it down into component events.  The tracing_data event
      itself doesn't actually contain the tracing data, rather it
      arranges for the event processing code to skip over it after
      it's read, using the skip return value added to the event
      processing loop in a previous patch.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-8-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      9215545e
    • Tom Zanussi's avatar
      perf: Convert perf event types into event type events · cd19a035
      Tom Zanussi authored
      Bypasses the event type perf header code and replaces it with a
      synthesized event and processing function that accomplishes the
      same thing, used when reading/writing perf data to/from a pipe.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-7-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      cd19a035
    • Tom Zanussi's avatar
      perf: Convert perf header attrs into attr events · 2c46dbb5
      Tom Zanussi authored
      Bypasses the attr perf header code and replaces it with a
      synthesized event and processing function that accomplishes the
      same thing, used when reading/writing perf data to/from a pipe.
      
      Making the attrs into events allows them to be streamed over a
      pipe along with the rest of the header data (in later patches).
      It also paves the way to allowing events to be added and removed
      from perf sessions dynamically.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-6-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      2c46dbb5
    • Tom Zanussi's avatar
      perf trace: Introduce special handling for pipe input · c239da3b
      Tom Zanussi authored
      Adds special treatment for stdin - if the user specifies '-i -'
      to perf trace, the intent is that the event stream be read from
      stdin rather than from a disk file.
      
      The actual handling of the '-' filename is done by the session;
      this just adds a signal handler to stop reporting, and turns off
      interference by the pager.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-5-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      c239da3b
    • Tom Zanussi's avatar
      perf report: Introduce special handling for pipe input · 46656ac7
      Tom Zanussi authored
      Adds special treatment for stdin - if the user specifies '-i -'
      to perf report, the intent is that the event stream be written
      to stdin rather than from a disk file.
      
      The actual handling of the '-' filename is done by the session;
      this just adds a signal handler to stop reporting, and turns off
      interference by the pager.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-4-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      46656ac7
    • Tom Zanussi's avatar
      perf record: Introduce special handling for pipe output · 529870e3
      Tom Zanussi authored
      Adds special treatment for stdout - if the user specifies '-o -'
      to perf record, the intent is that the event stream be written
      to stdout rather than to a disk file.
      
      Also, redirect stdout of forked child to stderr - in pipe mode,
      stdout of the forked child interferes with the stdout perf
      stream, so redirect it to stderr where it can still be seen but
      won't be mixed in with the perf output.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-3-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      529870e3
    • Tom Zanussi's avatar
      perf: Add pipe-specific header read/write and event processing code · 8dc58101
      Tom Zanussi authored
      This patch makes several changes to allow the perf event stream
      to be sent and received over a pipe:
      
      - adds pipe-specific versions of the header read/write code
      
      - adds pipe-specific version of the event processing code
      
      - adds a range of event types to be used for header or other
        pseudo events, above the range used by the kernel
      
      - checks the return value of event handlers, which they can use
        to skip over large events during event processing rather than actually
        reading them into event objects.
      
      - unifies the multiple do_read() functions and updates its
        users.
      
      Note that none of these changes affect the existing perf data
      file format or processing - this code only comes into play if
      perf output is sent to stdout (or is read from stdin).
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: fweisbec@gmail.com
      Cc: rostedt@goodmis.org
      Cc: k-keiichi@bx.jp.nec.com
      Cc: acme@ghostprotocols.net
      LKML-Reference: <1270184365-8281-2-git-send-email-tzanussi@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      8dc58101
    • Ian Munsie's avatar
      perf: Fix endianness argument compatibility with OPT_BOOLEAN() and introduce OPT_INCR() · c0555642
      Ian Munsie authored
      Parsing an option from the command line with OPT_BOOLEAN on a
      bool data type would not work on a big-endian machine due to the
      manner in which the boolean was being cast into an int and
      incremented. For example, running 'perf probe --list' on a
      PowerPC machine would fail to properly set the list_events bool
      and would therefore print out the usage information and
      terminate.
      
      This patch makes OPT_BOOLEAN work as expected with a bool
      datatype. For cases where the original OPT_BOOLEAN was
      intentionally being used to increment an int each time it was
      passed in on the command line, this patch introduces OPT_INCR
      with the old behaviour of OPT_BOOLEAN (the verbose variable is
      currently the only such example of this).
      
      I have reviewed every use of OPT_BOOLEAN to verify that a true
      C99 bool was passed. Where integers were used, I verified that
      they were only being used for boolean logic and changed them to
      bools to ensure that they would not be mistakenly used as ints.
      The major exception was the verbose variable which now uses
      OPT_INCR instead of OPT_BOOLEAN.
      Signed-off-by: default avatarIan Munsie <imunsie@au.ibm.com>
      Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
      Cc: <stable@kernel.org> # NOTE: wont apply to .3[34].x cleanly, please backport
      Cc: Git development list <git@vger.kernel.org>
      Cc: Ian Munsie <imunsie@au1.ibm.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Eric B Munson <ebmunson@us.ibm.com>
      Cc: Valdis.Kletnieks@vt.edu
      Cc: WANG Cong <amwang@redhat.com>
      Cc: Thiago Farina <tfransosi@gmail.com>
      Cc: Masami Hiramatsu <mhiramat@redhat.com>
      Cc: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
      Cc: Jaswinder Singh Rajput <jaswinderrajput@gmail.com>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      Cc: Anton Blanchard <anton@samba.org>
      Cc: John Kacur <jkacur@redhat.com>
      Cc: Li Zefan <lizf@cn.fujitsu.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <1271147857-11604-1-git-send-email-imunsie@au.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      c0555642
  3. 09 Apr, 2010 1 commit
  4. 08 Apr, 2010 1 commit
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Ignore "overwrite" field if present in /events/header_page · e9e94e3b
      Arnaldo Carvalho de Melo authored
      That is not used in perf where we have the LOST events.
      
      Without this patch we get:
      
      [root@doppio ~]# perf lock report | head -3
        Warning: Error: expected 'data' but read 'overwrite'
      
      So, to make the same perf command work with kernels with and without
      this field, introduce variants for the parsing routines to not warn the
      user in such case.
      
      Discussed-with: Steven Rostedt <rostedt@goodmis.org>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <new-submission>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e9e94e3b