linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Ahern <dsahern@gmail.com>
To: Milian Wolff <milian.wolff@kdab.com>
Cc: acme@kernel.org, linux-perf-users@vger.kernel.org,
	hekuang@huawei.com, Jiri Olsa <jolsa@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>
Subject: Re: Cross platform perf reporting
Date: Mon, 15 Aug 2016 10:08:44 -0600	[thread overview]
Message-ID: <0b72dd07-0426-3542-a7f3-17d6ca3a0874@gmail.com> (raw)
In-Reply-To: <7508364.ZKHyXyzSjv@milian-kdab2>

On 8/15/16 9:22 AM, Milian Wolff wrote:
>> It should not open files outside of the symfs tree.
> 
> But apparently that is what happens.

sounds like a bug.

> 
>> If you note perf does find libc in the symfs 3 times but it is not finding
>> the symbol information it wants.
> 
> I only see that it fails to get addr2line debug information from paths 
> *outside* of the symfs: 
> 
> addr2line_init failed for /lib/arm-linux-gnueabihf/libc-2.19.so

that feature needs to handle symfs

> 
>>> To make things worse, it seems to break the buildid lookup, i.e. when you
>>> get samples in a file that you deployed manually to a target, which is
>>> not included in your sysroot that you pass to symfs:
>>>
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> <snip>
>>> $ strace -e file -f perf report --symfs=/ssd/milian/projects/pandaboard/
>>> debian-8.5-minimal-armhf-2016-06-06/ --stdio -s sym,srcline |& grep
>>> particles
>>>
>>> open("/ssd/milian/projects/pandaboard/debian-8.5-minimal-armhf-2016-06-06/
>>> //
>>> root/particles", O_RDONLY) = -1 ENOENT (No such file or directory)
>>> stat("/root/particles", 0x7ffe7535bf40) = -1 EACCES (Permission denied)
>>> stat("/ssd/milian/projects/pandaboard/debian-8.5-minimal-armhf-2016-06-06/
>>> //
>>> root/particles", 0x7ffe7535bec0) = -1 ENOENT (No such file or directory)
>>> stat("/ssd/milian/projects/pandaboard/debian-8.5-minimal-armhf-2016-06-06/
>>> //
>>> usr/lib/debug/root/particles.debug", 0x7ffe7535bf40) = -1 ENOENT (No such
>>> file or directory)
>>> stat("/ssd/milian/projects/pandaboard/debian-8.5-minimal-armhf-2016-06-06/
>>> //
>>> usr/lib/debug/root/particles", 0x7ffe7535bf40) = -1 ENOENT (No such file
>>> or
>>> directory)
>>> stat("/ssd/milian/projects/pandaboard/debian-8.5-minimal-armhf-2016-06-06/
>>> //
>>> root/particles", 0x7ffe7535bf40) = -1 ENOENT (No such file or directory)
>>> stat("/ssd/milian/projects/pandaboard/debian-8.5-minimal-armhf-2016-06-06/
>>> //
>>> root/.debug/particles", 0x7ffe7535bf40) = -1 ENOENT (No such file or
>>> directory)
>>> /root/particles with build id 1c10a17afa25337ab368f8d9e690184e536c6563 not
>>> found, continuing without symbols
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> Note how the above does not look for the buildid in my ~/.debug anymore...
>>
>> With symfs every file should be below the symfs root directory, including
>> build id files.
> 
> So I should unpack the perf archive on top of my sysroot?

Not if it contains differences.

> 
> That sounds like a bad idea, considering that I would then get clashes between 
> e.g. the actual /lib/libc.so.6 in my sysroot and the debug info that is in a 
> folder called /lib/libc.so.6/ in ~/.debug. And from the strace output above, 
> it does not look like perf would look into a .debug folder directly in 
> $symfs/.

I thought someone just added support for that.

> It also does not seem to be possible to pass multiple symfs directories, which 
> could also solve the issue for me. I.e. pass both a path to the sysroot, and 
> an additional path to wherever I unpacked the perf archive to.

When I added the symfs option back in 2010 it was to support many, many versions of embedded images. The images may start with the same sysroot (e.g., system files from the OS vendor) but will differ dramatically with locally built files.

I had a script that took the Wind River sysroot and copied to a tmp directory, added debug files for the system binaries and libraries, and then overlayed the locally built files which contained symbols and kernel files. From there perf would only open files in that directory.

When done, rm -rf tmp_dir and all remnants of that image were gone. I specifically did not want to manage everything in ~/.debug when you consider N variants of images (images you build, co-workers builds, project builds, official builds, etc) and all of those changing on a nearly daily basis.

      reply	other threads:[~2016-08-15 16:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-12 12:22 Cross platform perf reporting Milian Wolff
2016-08-12 14:38 ` David Ahern
2016-08-12 15:10 ` Milian Wolff
2016-08-12 15:31   ` Arnaldo Carvalho de Melo
2016-08-15 12:20     ` Milian Wolff
2016-08-15 14:42       ` David Ahern
2016-08-15 15:22         ` Milian Wolff
2016-08-15 16:08           ` David Ahern [this message]

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=0b72dd07-0426-3542-a7f3-17d6ca3a0874@gmail.com \
    --to=dsahern@gmail.com \
    --cc=acme@kernel.org \
    --cc=hekuang@huawei.com \
    --cc=jolsa@redhat.com \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=milian.wolff@kdab.com \
    --cc=namhyung@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).