All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: "Masami Hiramatsu" <mhiramat@redhat.com>,
	linux-kernel@vger.kernel.org,
	"Ananth N Mavinakayanahalli" <ananth@in.ibm.com>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	"Frédéric Weisbecker" <fweisbec@gmail.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Jason Baron" <jbaron@redhat.com>,
	"Jim Keniston" <jkenisto@us.ibm.com>,
	"K. Prasad" <prasad@linux.vnet.ibm.com>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Roland McGrath" <roland@redhat.com>,
	"Srikar Dronamraju" <srikar@linux.vnet.ibm.com>,
	"Steven Rostedt" <rostedt@goodmis.org>
Subject: Re: [PATCH 1/1] perf symbols: Use the buildids if present
Date: Thu, 5 Nov 2009 10:01:18 -0200	[thread overview]
Message-ID: <20091105120118.GB3494@ghostprotocols.net> (raw)
In-Reply-To: <20091105082733.GA18011@elte.hu>

Em Thu, Nov 05, 2009 at 09:27:33AM +0100, Ingo Molnar escreveu:
> 
> * Masami Hiramatsu <mhiramat@redhat.com> wrote:
> 
> > Arnaldo Carvalho de Melo wrote:
> >> From: Arnaldo Carvalho de Melo<acme@redhat.com>
> >>
> >> Now 'perf record' will intercept PERF_RECORD_MMAP calls, creating a
> >> linked list of DSOs, then when the session finishes, it will traverse
> >> this list and read the buildids, stashing them at the end of the file
> >> and will set up a new feature bit in the header bitmask.
> >>
> >> 'perf report' will then notice this feature and populate the 'dsos' list
> >> and set the build ids.
> >>
> >> When reading the symtabs it will refuse to load from a file that doesn't
> >> have the same build id.
> >>
> >> Example:
> >>
> >>   [root@doppio ~]# perf report | head
> >>   /home/acme/bin/perf with build id b1ea544ac3746e7538972548a09aadecc5753868 not found, continuing without symbols
> >>    # Samples: 2621434559
> >>    #
> >>    # Overhead          Command                  Shared Object  Symbol
> >>    # ........  ...............  .............................  ......
> >>    #
> >>         7.91%             init  [kernel]        [k] read_hpet
> >>         7.64%             init  [kernel]        [k] mwait_idle_with_hints
> >>         7.60%          swapper  [kernel]        [k] read_hpet
> >>         7.60%          swapper  [kernel]        [k] mwait_idle_with_hints
> >>         3.65%             init  [kernel]        [k] 0xffffffffa02339d9
> >> [root@doppio ~]#
> >>
> >> In this case the 'perf' binary was an older one, vanished, so it the symbols
> >> probably wouldn't match.
> >>
> >> Next patches will support the kernel as well, reading the build id notes for it
> >> and the modules from /sys.
> >
> > Great! then I can use it on 'perf probe' to check the dwarf binary is
> > same as running kernel.

Yes, at perf record I'll always get the build id from /sys/kernel/notes
and insert it in the buildid table, then at 'perf report' it will match
it against the file from where it is getting the symbols, be it
/proc/kallsyms or the vmlinux file, be it one specified in the command
line, found on some standard location (/sys/kernel/`uname
-r`/build/vmlinux) or from some new /sys file, as Ingo suggests.

The resulting infrastructure can then be used in perf probe to match
running kernel buildid against the vmlinux used.

> >> Another patch should also introduce a new plumbing command:
> >>
> >> 'perf list-buildids'
> >>
> >> that will then be used in porcelain that is distro specific to
> >> fetch -debuginfo packages where such buildids are present. This will in turn
> >> allow for one to run 'perf record' in one machine and 'perf report' in another.
> >
> > Hmm, so, will this command list up all debuginfo files with buildids?
> > If so, can it also find a kernel binary built locally?
> 
> Arnaldo, how about adding the kernel binary's build path to 
> /sys/kernel/notes, during the kernel build? (With perhaps a .config 
> override as well, for package builds.)
> 
> That object might or might not exist, and if it does not exist, or if 
> there is a buildid mismatch, we can fall back to 'well known' places for 
> kernel/module binaries.

Yeah, I'll do that. I haven't touched much of the kernel because I'm
trying to use what is already there to the fullest extent.

But there are things to do in the kernel (and wiki), yeah:

1. atomically generate mmap events, keeping the synthesize mmap/comm
events that traverses /proc/ pidspace just for older kernels

2. insert the buildid in the PERF_RECORD_MMAP events

3. kernel binary build path

4. write such entries in the perf wiki TODO page

:-)

- Arnaldo

  reply	other threads:[~2009-11-05 12:01 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-04 20:50 [PATCH 1/1] perf symbols: Use the buildids if present Arnaldo Carvalho de Melo
2009-11-05  3:29 ` Masami Hiramatsu
2009-11-05  8:27   ` Ingo Molnar
2009-11-05 12:01     ` Arnaldo Carvalho de Melo [this message]
2009-11-08 10:03 ` [tip:perf/core] " tip-bot for Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091105120118.GB3494@ghostprotocols.net \
    --to=acme@infradead.org \
    --cc=ananth@in.ibm.com \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=jbaron@redhat.com \
    --cc=jkenisto@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@redhat.com \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=prasad@linux.vnet.ibm.com \
    --cc=roland@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=srikar@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.