1. 22 Nov, 2009 7 commits
    • Pekka Enberg's avatar
      perf symbols: Fix ELF header errors during "perf kmem record" · e57cfcda
      Pekka Enberg authored
      The write_event() function in builtin-record.c writes out all
      mmap()'d DSOs including non-ELF files like GNOME resource files
      and such.
      
      Therefore, check for ELF_K_ELF in filename__read_build_id()
      before attempting to read the ELF header with gelf_getehdr().
      
      Fixes the following error messages when running "perf kmem
      record":
      
        penberg@penberg-laptop:~/src/linux/tools/perf$ perf kmem record
        ^C[ perf record: Woken up 2 times to write data ]
        [ perf record: Captured and wrote 0.753 MB perf.data (~32885 samples) ]
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
        filename__read_build_id: cannot get elf header.
      Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Li Zefan <lizf@cn.fujitsu.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <1258885784-11709-1-git-send-email-penberg@cs.helsinki.fi>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e57cfcda
    • Pekka Enberg's avatar
      perf kmem: Add --sort hit and --sort frag · f3ced7cd
      Pekka Enberg authored
      This patch adds support for "--sort hit" and "--sort frag" to
      the "perf kmem" tool. The former was already mentioned in the
      help text and the latter is useful for finding call-sites that
      exhibit worst case behavior for SLAB allocators.
      Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
      Cc: Li Zefan <lizf@cn.fujitsu.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
      Cc: linux-mm@kvack.org <linux-mm@kvack.org>
      LKML-Reference: <1258883880-7149-1-git-send-email-penberg@cs.helsinki.fi>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      f3ced7cd
    • Márton Németh's avatar
      perf_event: Remove redundant zero fill · 96b02d78
      Márton Németh authored
      The buffer is first zeroed out by memset(). Then strncpy() is
      used to fill the content. The strncpy() function also pads the
      string till the end of the specified length, which is redundant.
      The strncpy() does not ensures that the string will be properly
      closed with 0. Use strlcpy() instead.
      
      The semantic match that finds this kind of pattern is as
      follows: (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @@
      expression buffer;
      expression size;
      expression str;
      @@
      	memset(buffer, 0, size);
      	...
      -	strncpy(
      +	strlcpy(
      	buffer, str, sizeof(buffer)
      	);
      @@
      expression buffer;
      expression size;
      expression str;
      @@
      	memset(&buffer, 0, size);
      	...
      -	strncpy(
      +	strlcpy(
      	&buffer, str, sizeof(buffer));
      @@
      expression buffer;
      identifier field;
      expression size;
      expression str;
      @@
      	memset(buffer, 0, size);
      	...
      -	strncpy(
      +	strlcpy(
      	buffer->field, str, sizeof(buffer->field)
      	);
      @@
      expression buffer;
      identifier field;
      expression size;
      expression str;
      @@
      	memset(&buffer, 0, size);
      	...
      -	strncpy(
      +	strlcpy(
      	buffer.field, str, sizeof(buffer.field));
      // </smpl>
      
      On strncpy() vs strlcpy() see
      http://www.gratisoft.us/todd/papers/strlcpy.html .
      Signed-off-by: default avatarMárton Németh <nm127@freemail.hu>
      Cc: Julia Lawall <julia@diku.dk>
      Cc: cocci@diku.dk
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <4B086547.5040100@freemail.hu>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      96b02d78
    • Frederic Weisbecker's avatar
      hw-breakpoints: Separate the kernel part from breakpoint headers · 5093ebad
      Frederic Weisbecker authored
      So that we can include this header from userspace tools, like
      perf tools, to get the breakpoint types and len definitions.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Prasad <prasad@linux.vnet.ibm.com>
      LKML-Reference: <1258863695-10464-4-git-send-email-fweisbec@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      5093ebad
    • Frederic Weisbecker's avatar
      hw-breakpoints: Remove x86 specific headers from core file · b3a75542
      Frederic Weisbecker authored
      Remove asm/processor.h and asm/debugreg.h as these headers are
      not used anymore in the hw-breakpoints core file.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Prasad <prasad@linux.vnet.ibm.com>
      LKML-Reference: <1258863695-10464-3-git-send-email-fweisbec@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      b3a75542
    • Frederic Weisbecker's avatar
      tracing: Forget about the NMI buffer for syscall events · 28889bf9
      Frederic Weisbecker authored
      We are never in an NMI context when we commit a syscall trace to
      perf. So just forget about the nmi buffer there.
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Jason Baron <jbaron@redhat.com>
      LKML-Reference: <1258863695-10464-2-git-send-email-fweisbec@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      28889bf9
    • Frederic Weisbecker's avatar
      tracing: Use the perf recursion protection from trace event · ce71b9df
      Frederic Weisbecker authored
      When we commit a trace to perf, we first check if we are
      recursing in the same buffer so that we don't mess-up the buffer
      with a recursing trace. But later on, we do the same check from
      perf to avoid commit recursion. The recursion check is desired
      early before we touch the buffer but we want to do this check
      only once.
      
      Then export the recursion protection from perf and use it from
      the trace events before submitting a trace.
      
      v2: Put appropriate Reported-by tag
      Reported-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Masami Hiramatsu <mhiramat@redhat.com>
      Cc: Jason Baron <jbaron@redhat.com>
      LKML-Reference: <1258864015-10579-1-git-send-email-fweisbec@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ce71b9df
  2. 21 Nov, 2009 26 commits
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Read_tracing_data should die() another day · e2561368
      Arnaldo Carvalho de Melo authored
      It better propagate errors, also if we do a simple:
      
      [root@doppio linux-2.6-tip]# perf record -R -a -f sleep 3s ;
      perf trace [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.182 MB perf.data (~7972 samples) ]
      Fatal: not an trace data file
      [root@doppio linux-2.6-tip]#
      
      That is what is expected, right? I.e. as we didn't specify any
      tracepoint event via -e, it should gracefully bail out and not
      SEGFAULT.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258821086-11521-3-git-send-email-acme@infradead.org>
      [ Fixed the error messages some more ]
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e2561368
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Old versions of elf.h don't have NT_GNU_BUILD_ID · c12e15e7
      Arnaldo Carvalho de Melo authored
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258821086-11521-2-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      c12e15e7
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Fixup kernel_maps__fixup_end end map · 90c83218
      Arnaldo Carvalho de Melo authored
      We better call this routine after both the kernel and modules
      are loaded, because as it was if there weren't modules it would not
      be called, resulting in kernel_map->end remaining at zero, so no
      map would be found and consequently the kernel symtab wouldn't
      get loaded, i.e. no kernel symbols would be resolved.
      
      Also this fixes another case, that is when we _have_ modules,
      but the last map would have its ->end address not set before we
      loaded its symbols, which would never happen because ->end was
      not set.
      Reported-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258821086-11521-1-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      90c83218
    • Stephane Eranian's avatar
      perf_events: Fix default watermark calculation · 8904b180
      Stephane Eranian authored
      This patch fixes the default watermark value for the sampling
      buffer. With the existing calculation (watermark =
      max(PAGE_SIZE, max_size / 2)), no notification was ever received
      when the buffer was exactly 1 page. This was because you would
      never cross the threshold (there is no partial samples).
      
      In certain configuration, there was no possibilty detecting the
      problem because there was not enough space left to store the
      LOST record.In fact, there may be a more generic problem here.
      The kernel should ensure that there is alaways enough space to
      store one LOST record.
      
      This patch sets the default watermark to half the buffer size.
      With such limit, we are guaranteed to get a notification even
      with a single page buffer assuming no sample is bigger than a
      page.
      Signed-off-by: default avatarStephane Eranian <eranian@gmail.com>
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212509.344964101@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      LKML-Reference: <1256302576-6169-1-git-send-email-eranian@gmail.com>
      8904b180
    • Peter Zijlstra's avatar
      perf: Fix locking for PERF_FORMAT_GROUP · 6f10581a
      Peter Zijlstra authored
      We should hold event->child_mutex when iterating the inherited
      counters, we should hold ctx->mutex when iterating siblings.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212509.251030114@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      6f10581a
    • Peter Zijlstra's avatar
      perf: Fix event scaling for inherited counters · 59ed446f
      Peter Zijlstra authored
      Properly account the full hierarchy of counters for both the
      count (we already did so) and the scale times (new).
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212509.153379276@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      59ed446f
    • Peter Zijlstra's avatar
      perf: Fix time locking · 2b8988c9
      Peter Zijlstra authored
      Most sites updating ctx->time and event times do so under
      ctx->lock, make sure they all do.
      
      This was made possible by removing the __perf_event_read() call
      from __perf_event_sync_stat(), which already had this lock
      taken.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212509.102316434@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      2b8988c9
    • Peter Zijlstra's avatar
      perf: Simplify __perf_event_read · 58e5ad1d
      Peter Zijlstra authored
      cpuctx is always active, task context is always active for
      current
      
      the previous condition verifies that if its a task context its
      for current, hence we can assume ctx->is_active.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212509.000272254@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      58e5ad1d
    • Peter Zijlstra's avatar
      perf: Simplify __perf_event_sync_stat · 3dbebf15
      Peter Zijlstra authored
      Removes constraints from __perf_event_read() by leaving it with
      a single callsite; this callsite had ctx->lock held, the other
      one does not.
      
      Removes some superfluous code from __perf_event_sync_stat().
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.918544317@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      3dbebf15
    • Peter Zijlstra's avatar
      perf: Optimize __perf_event_read() · f6f83785
      Peter Zijlstra authored
      Both callers actually have IRQs disabled, no need doing so
      again.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.863685796@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      f6f83785
    • Peter Zijlstra's avatar
      perf: Optimize perf_event_task_sched_out · 02ffdbc8
      Peter Zijlstra authored
      Remove an update_context_time() call from the
      perf_event_task_sched_out() path and into the branch its needed.
      
      The call was both superfluous, because __perf_event_sched_out()
      already does it, and wrong, because it was done without holding
      ctx->lock.
      
      Place it in perf_event_sync_stat(), which is the only place it
      is needed and which does already hold ctx->lock.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.779516394@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      02ffdbc8
    • Peter Zijlstra's avatar
      perf: Fix PERF_FORMAT_GROUP scale info · abf4868b
      Peter Zijlstra authored
      As Corey reported, the total_enabled and total_running times
      could occasionally be 0, even though there were events counted.
      
      It turns out this is because we record the times before reading
      the counter while the latter updates the times.
      
      This patch corrects that.
      
      While looking at this code I found that there is a lot of
      locking iffyness around, the following patches correct most of
      that.
      Reported-by: default avatarCorey Ashford <cjashfor@linux.vnet.ibm.com>
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.685559857@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      abf4868b
    • Peter Zijlstra's avatar
      perf: Optimize perf_event_mmap_ctx() · f6d9dd23
      Peter Zijlstra authored
      Remove a rcu_read_{,un}lock() pair and a few conditionals.
      
      We can remove the rcu_read_lock() by increasing the scope of one
      in the calling function.
      
      We can do away with the system_state check if the machine still
      boots after this patch (seems to be the case).
      
      We can do away with the list_empty() check because the bare
      list_for_each_entry_rcu() reduces to that now that we've removed
      everything else.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.606459548@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      f6d9dd23
    • Peter Zijlstra's avatar
      perf: Optimize perf_event_comm_ctx() · f6595f3a
      Peter Zijlstra authored
      Remove a rcu_read_{,un}lock() pair and a few conditionals.
      
      We can remove the rcu_read_lock() by increasing the scope of one
      in the calling function.
      
      We can do away with the system_state check if the machine still
      boots after this patch (seems to be the case).
      
      We can do away with the list_empty() check because the bare
      list_for_each_entry_rcu() reduces to that now that we've removed
      everything else.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.527608793@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      f6595f3a
    • Peter Zijlstra's avatar
      perf: Optimize perf_event_task_ctx() · d6ff86cf
      Peter Zijlstra authored
      Remove a rcu_read_{,un}lock() pair and a few conditionals.
      
      We can remove the rcu_read_lock() by increasing the scope of one
      in the calling function.
      
      We can do away with the system_state check if the machine still
      boots after this patch (seems to be the case).
      
      We can do away with the list_empty() check because the bare
      list_for_each_entry_rcu() reduces to that now that we've removed
      everything else.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.452227115@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      d6ff86cf
    • Peter Zijlstra's avatar
      perf: Optimize perf_swevent_ctx_event() · 81520183
      Peter Zijlstra authored
      Remove a rcu_read_{,un}lock() pair and a few conditionals.
      
      We can remove the rcu_read_lock() by increasing the scope of one
      in the calling function.
      
      We can do away with the system_state check if the machine still
      boots after this patch (seems to be the case).
      
      We can do away with the list_empty() check because the bare
      list_for_each_entry_rcu() reduces to that now that we've removed
      everything else.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.378188589@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      81520183
    • Peter Zijlstra's avatar
      perf: Optimize some swcounter attr.sample_period==1 paths · 0cff784a
      Peter Zijlstra authored
      Avoid the rather expensive perf_swevent_set_period() if we know
      we have to sample every single event anyway.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.299508332@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      0cff784a
    • Peter Zijlstra's avatar
      perf: Allow for custom overflow handlers · 453f19ee
      Peter Zijlstra authored
      in-kernel perf users might wish to have custom actions on the
      sample interrupt.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <20091120212508.222339539@chello.nl>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      453f19ee
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Change the kernel DSO name if it comes from kallsyms · ef6ae724
      Arnaldo Carvalho de Melo authored
      So that the user have a clearer indication about the source of
      the symbols, as we only state buildid mismatches in verbose
      mode, because 'perf top' would overwrite such warning anyway.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258757489-5978-6-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ef6ae724
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Check vmlinux buildid · fbd733b8
      Arnaldo Carvalho de Melo authored
      E.g.:
      
      [root@doppio linux-2.6-tip]# perf top -v --vmlinux
      ../build/tip/vmlinux > /dev/null build_id in vmlinux is
      e96699725a47413a50c231864a8e7a8ced40a31b while expected is
      18e7cc53db62a7d35e9d6f6c9ddc23017d38ee9a, ignoring it
      
      I.e. perf top was told to use a vmlinux file that is not the one
      currently running on the machine, it ignores it and falls back
      to using /proc/kallsyms.
      
      This solves many, at first, mysterious results when people have
      a stale vmlinux file while keeping the default of trying to use
      the vmlinux file in the current directory in things like 'perf
      annotate' where the DWARF info is required and thus we can't use
      just /proc/kallsyms.
      
      Modules buildids are already being checked as of the previous
      changeset in this series, because we are using the default
      dso__load routine, that will look at a series of places looking
      for the best file with a matching buildid, starting in the
      -debuginfo directories.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258757489-5978-5-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      fbd733b8
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Do lazy symtab loading for the kernel & modules too · c338aee8
      Arnaldo Carvalho de Melo authored
      Just like we do with the other DSOs. This also simplifies the
      kernel_maps setup process, now all that the tools need to do is
      to call kernel_maps__init and the maps for the modules and
      kernel will be created, then, later, when
      kernel_maps__find_symbol() is used, it will also call
      maps__find_symbol that already checks if the symtab was loaded,
      loading it if needed.
      
      Now if one does 'perf top --hide_kernel_symbols' we won't pay
      the price of loading the (many) symbols in /proc/kallsyms or
      vmlinux.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258757489-5978-4-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      c338aee8
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Introduce dso__build_id_equal · 78075caa
      Arnaldo Carvalho de Melo authored
      Will be used in more places.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258757489-5978-3-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      78075caa
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Filename__read_build_id should look at .notes section too · fd7a346e
      Arnaldo Carvalho de Melo authored
      In the kernel we have more than one notes section, so the linker
      script combines all and puts them into a ".notes" combined
      section. So we need to look at both sections and also traverse
      them looking at multiple GElf_Nhdr entries till we find the one
      we want, with the build_id.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258757489-5978-2-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      fd7a346e
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Remove unrelated actions from dso__load_kernel_sym · 6671cb16
      Arnaldo Carvalho de Melo authored
      It should just load kernel symbols, not load the list of
      modules. There are more stuff to move to other routines, but
      lets do it in several steps.
      
      End goal is to be able to defer symbol table loading till we
      find a hit for that map address range. So that the kernel &
      modules are handled just like all the other DSOs in the system.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258757489-5978-1-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      6671cb16
    • Ingo Molnar's avatar
      Merge branch 'tracing/hw-breakpoints' into perf/core · 96200591
      Ingo Molnar authored
      Conflicts:
      	arch/x86/kernel/kprobes.c
      	kernel/trace/Makefile
      
      Merge reason: hw-breakpoints perf integration is looking
                    good in testing and in reviews, plus conflicts
                    are mounting up - so merge & resolve.
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      96200591
    • Ingo Molnar's avatar
      Merge branch 'perf/urgent' into perf/core · 7031281e
      Ingo Molnar authored
      Conflicts:
      	tools/perf/util/symbol.c
      
      Merge reason: this fix will get merged in .33, not .32, plus
                    resolve the conflict.
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      7031281e
  3. 20 Nov, 2009 1 commit
    • Li Zefan's avatar
      perf: Add 'perf kmem' tool · ba77c9e1
      Li Zefan authored
      This tool is mostly a perf version of kmemtrace-user.
      
      The following information is provided by this tool:
      
       - the total amount of memory allocated and fragmentation per
         call-site
      
       - the total amount of memory allocated and fragmentation per
         allocation
      
       - total memory allocated and fragmentation in the collected
         dataset - ...
      
      Sample output:
      
       # ./perf kmem record
       ^C
       # ./perf kmem --stat caller --stat alloc -l 10
      
       ------------------------------------------------------------------------------
       Callsite          | Total_alloc/Per |  Total_req/Per  |  Hit   | Fragmentation
       ------------------------------------------------------------------------------
       0xc052f37a        |   790528/4096   |   790528/4096   |    193 |    0.000%
       0xc0541d70        |   524288/4096   |   524288/4096   |    128 |    0.000%
       0xc051cc68        |   481600/200    |   481600/200    |   2408 |    0.000%
       0xc0572623        |   297444/676    |   297440/676    |    440 |    0.001%
       0xc05399f1        |    73476/164    |    73472/164    |    448 |    0.005%
       0xc05243bf        |    51456/256    |    51456/256    |    201 |    0.000%
       0xc0730d0e        |    31844/497    |    31808/497    |     64 |    0.113%
       0xc0734c4e        |    17152/256    |    17152/256    |     67 |    0.000%
       0xc0541a6d        |    16384/128    |    16384/128    |    128 |    0.000%
       0xc059c217        |    13120/40     |    13120/40     |    328 |    0.000%
       0xc0501ee6        |    11264/88     |    11264/88     |    128 |    0.000%
       0xc04daef0        |     7504/682    |     7128/648    |     11 |    5.011%
       0xc04e14a3        |     4216/191    |     4216/191    |     22 |    0.000%
       0xc05041ca        |     3524/44     |     3520/44     |     80 |    0.114%
       0xc0734fa3        |     2104/701    |     1620/540    |      3 |   23.004%
       0xc05ec9f1        |     2024/289    |     2016/288    |      7 |    0.395%
       0xc06a1999        |     1792/256    |     1792/256    |      7 |    0.000%
       0xc0463b9a        |     1584/144    |     1584/144    |     11 |    0.000%
       0xc0541eb0        |     1024/16     |     1024/16     |     64 |    0.000%
       0xc06a19ac        |      896/128    |      896/128    |      7 |    0.000%
       0xc05721c0        |      772/12     |      768/12     |     64 |    0.518%
       0xc054d1e6        |      288/57     |      280/56     |      5 |    2.778%
       0xc04b562e        |      157/31     |      154/30     |      5 |    1.911%
       0xc04b536f        |       80/16     |       80/16     |      5 |    0.000%
       0xc05855a0        |       64/64     |       36/36     |      1 |   43.750%
       ------------------------------------------------------------------------------
      
       ------------------------------------------------------------------------------
       Alloc Ptr         | Total_alloc/Per |  Total_req/Per  |  Hit   | Fragmentation
       ------------------------------------------------------------------------------
       0xda884000        |  1052672/4096   |  1052672/4096   |    257 |    0.000%
       0xda886000        |   262144/4096   |   262144/4096   |     64 |    0.000%
       0xf60c7c00        |    16512/128    |    16512/128    |    129 |    0.000%
       0xf59a4118        |    13120/40     |    13120/40     |    328 |    0.000%
       0xdfd4b2c0        |    11264/88     |    11264/88     |    128 |    0.000%
       0xf5274600        |     7680/256    |     7680/256    |     30 |    0.000%
       0xe8395000        |     5948/594    |     5464/546    |     10 |    8.137%
       0xe59c3c00        |     5748/479    |     5712/476    |     12 |    0.626%
       0xf4cd1a80        |     3524/44     |     3520/44     |     80 |    0.114%
       0xe5bd1600        |     2892/482    |     2856/476    |      6 |    1.245%
       ...               | ...             | ...             | ...    | ...
       ------------------------------------------------------------------------------
      
      SUMMARY
      =======
      Total bytes requested: 2333626
      Total bytes allocated: 2353712
      Total bytes wasted on internal fragmentation: 20086
      Internal fragmentation: 0.853375%
      
      TODO:
      - show sym+offset in 'callsite' column
      - show cross node allocation stats
      - collect more useful stats?
      - ...
      Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
      Acked-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
      Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
      Cc: linux-mm@kvack.org <linux-mm@kvack.org>
      LKML-Reference: <4B064AF5.9060208@cn.fujitsu.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ba77c9e1
  4. 19 Nov, 2009 6 commits
    • Masami Hiramatsu's avatar
      x86: Instruction decoder test should generate build warning · ce64c620
      Masami Hiramatsu authored
      Since some instructions are not decoded correctly by older
      versions of objdump, it may cause false positive error in insn
      decoder posttest.
      
      This changes build error of insn decoder test to build warning.
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
      Cc: systemtap <systemtap@sources.redhat.com>
      Cc: DLE <dle-develop@lists.sourceforge.net>
      Cc: Stephen Rothwell <sfr@canb.auug.org.au>
      Cc: Randy Dunlap <rdunlap@xenotime.net>
      Cc: Jim Keniston <jkenisto@us.ibm.com>
      Cc: Stephen Rothwell <sfr@canb.auug.org.au>
      LKML-Reference: <20091116230631.5250.41579.stgit@harusame>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ce64c620
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Don't die() in mmap_dispatch_perf_file · 6b0cb5f9
      Arnaldo Carvalho de Melo authored
      Propagate the error, that, interestingly, are already handled by
      all callers :-)
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258649757-17554-3-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      6b0cb5f9
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Eliminate some more die() uses in library functions · d5eed904
      Arnaldo Carvalho de Melo authored
      This time in perf_header__adds_write, propagating the do_write
      error returns.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258649757-17554-2-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      d5eed904
    • Arnaldo Carvalho de Melo's avatar
      perf tools: perf_header__read() shouldn't die() · 4dc0a04b
      Arnaldo Carvalho de Melo authored
      And also don't call the constructor in it, this way it adheres
      to the model the other methods follow.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258649757-17554-1-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      4dc0a04b
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Capture the running kernel buildid too · 2446042c
      Arnaldo Carvalho de Melo authored
      [root@doppio linux-2.6-tip]# perf record -a -f sleep 3s ; perf
      buildid-list | grep vmlinux
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.171 MB perf.data (~7489
      samples) ] 18e7cc53db62a7d35e9d6f6c9ddc23017d38ee9a vmlinux
      [root@doppio linux-2.6-tip]#
      
      Several refactorings were needed so that we can have symmetry
      between dsos__load_modules() and dsos__load_kernel(), i.e. those
      functions will respectively create and add to the dsos list the
      loaded modules and kernel, with its buildids, but not load its
      symbols. That is something the subcomands that need will have to
      call dso__load_kernel_sym(), just like we do with modules with
      dsos__load_module_sym()/dso__load_module_sym().
      
      Next csets will actually use this info to stop producing bogus
      results using mismatched vmlinux and .ko files.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Roland McGrath <roland@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258582853-8579-4-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      2446042c
    • Arnaldo Carvalho de Melo's avatar
      perf symbols: Record the build_ids of kernel modules too · f1617b40
      Arnaldo Carvalho de Melo authored
      [root@doppio linux-2.6-tip]# perf record -a sleep 2s;perf
      buildid-list|tail [ perf record: Woken up 1 times to write data
      ] [ perf record: Captured and wrote 0.162 MB perf.data (~7078
      samples) ] 881588fa57b3c1696bc91e5e804a11304f093535 [cfg80211]
      4d47ce1da9d16bad00c962c072451b7c681e82df [snd_page_alloc]
      5146377e89a7caac617f9782f1a02e46263d3a31 [rfkill]
      2153b937bff0d345fea83b63a2e1d3138569f83d [i915]
      4e6fb1bb97362e3ee4d306988b9ad6912d5fb9ae [drm_kms_helper]
      f56ef2bf853e3a798f0d8d51f797622e5dc4420e [drm]
      b0d157a3b5c4e017329ffc07c64623cd6ad65e95 [i2c_algo_bit]
      8125374b905ef9fa8b65d98e166b008ad952f198 [i2c_core]
      fc875c6e5a90e7b915e9d445d0efc859e1b2678c [video]
      4b43c5006589f977e9762fdfc7ac1a92b72fca52 [output]
      [root@doppio linux-2.6-tip]#
      
      elfutils libdwfl/linux-kernel-modules.c was used as reference,
      as suggested by Roland McGrath.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Roland McGrath <roland@redhat.com>
      Cc: Frédéric Weisbecker <fweisbec@gmail.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      LKML-Reference: <1258582853-8579-3-git-send-email-acme@infradead.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      f1617b40