All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>, Andi Kleen <ak@linux.intel.com>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5] perf record: collect user registers set jointly with dwarf stacks
Date: Tue, 4 Jun 2019 11:12:20 -0300	[thread overview]
Message-ID: <20190604141220.GG24504@kernel.org> (raw)
In-Reply-To: <3dc0c67e-9ea3-b9f5-1aa2-e87603b29c37@linux.intel.com>

Em Fri, May 31, 2019 at 09:27:38AM +0300, Alexey Budankov escreveu:
> On 30.05.2019 22:41, Arnaldo Carvalho de Melo wrote:
> > Em Thu, May 30, 2019 at 10:03:36PM +0300, Alexey Budankov escreveu:
> >> When dwarf stacks are collected jointly with user specified register
> >> set using --user-regs option like below the full register context is
> >> captured on a sample:
> >>
> >>   $ perf record -g --call-graph dwarf,1024 --user-regs=IP,SP,BP -- stack_test2.g.O3
> >>
> >>   188143843893585 0x6b48 [0x4f8]: PERF_RECORD_SAMPLE(IP, 0x4002): 23828/23828: 0x401236 period: 1363819 addr: 0x7ffedbdd51ac
> >>   ... FP chain: nr:0
> >>   ... user regs: mask 0xff0fff ABI 64-bit
> >>   .... AX    0x53b
> >>   .... BX    0x7ffedbdd3cc0
> >>   .... CX    0xffffffff
> >>   .... DX    0x33d3a
> >>   .... SI    0x7f09b74c38d0
> >>   .... DI    0x0
> >>   .... BP    0x401260
> >>   .... SP    0x7ffedbdd3cc0
> >>   .... IP    0x401236
> >>   .... FLAGS 0x20a
> >>   .... CS    0x33
> >>   .... SS    0x2b
> >>   .... R8    0x7f09b74c3800
> >>   .... R9    0x7f09b74c2da0
> >>   .... R10   0xfffffffffffff3ce
> >>   .... R11   0x246
> >>   .... R12   0x401070
> >>   .... R13   0x7ffedbdd5db0
> >>   .... R14   0x0
> >>   .... R15   0x0
> >>   ... ustack: size 1024, offset 0xe0
> >>    . data_src: 0x5080021
> >>    ... thread: stack_test2.g.O:23828
> >>    ...... dso: /root/abudanko/stacks/stack_test2.g.O3
> >>
> >> After applying the change suggested in the patch the sample data contain
> >> only user specified register values. IP and SP registers (DWARF_MINIMAL_REGS)
> >> are collected anyways regardless of the --user-regs value provided from
> >> the command line:
> > 
> > Applied, changed the subject and description to:
> > 
> > perf record: Allow mixing --user-regs with --call-graph=dwarf
> > 
> > When DWARF stacks were requested and at the same time that the user
> > specifies a register set using the --user-regs option the full register
> > context was being captured on samples:
> > 
> >   $ perf record -g --call-graph dwarf,1024 --user-regs=IP,SP,BP -- stack_test2.g.O3
> > 
> >   188143843893585 0x6b48 [0x4f8]: PERF_RECORD_SAMPLE(IP, 0x4002): 23828/23828: 0x401236 period: 1363819 addr: 0x7ffedbdd51ac
> >   ... FP chain: nr:0
> >   ... user regs: mask 0xff0fff ABI 64-bit
> >   .... AX    0x53b
> >   .... BX    0x7ffedbdd3cc0
> >   .... CX    0xffffffff
> >   .... DX    0x33d3a
> >   .... SI    0x7f09b74c38d0
> >   .... DI    0x0
> >   .... BP    0x401260
> >   .... SP    0x7ffedbdd3cc0
> >   .... IP    0x401236
> >   .... FLAGS 0x20a
> >   .... CS    0x33
> >   .... SS    0x2b
> >   .... R8    0x7f09b74c3800
> >   .... R9    0x7f09b74c2da0
> >   .... R10   0xfffffffffffff3ce
> >   .... R11   0x246
> >   .... R12   0x401070
> >   .... R13   0x7ffedbdd5db0
> >   .... R14   0x0
> >   .... R15   0x0
> >   ... ustack: size 1024, offset 0xe0
> >    . data_src: 0x5080021
> >    ... thread: stack_test2.g.O:23828
> >    ...... dso: /root/abudanko/stacks/stack_test2.g.O3
> > 
> > I.e. the --user-regs=IP,SP,BP was being ignored, being overridden by the
> > needs of --call-graph=dwarf.
> > 
> > After applying the change in this patch the sample data contains the
> > user specified register, but making sure that at least the minimal set
> > of register needed for DWARF unwinding (DWARF_MINIMAL_REGS) is
> > requested.
> > 
> > The user is warned that DWARF unwinding may not work if extra registers
> > end up being needed.
> > 
> >   -g call-graph dwarf,K                         full_regs
> >   --user-regs=user_regs                         user_regs
> >   -g call-graph dwarf,K --user-regs=user_regs   user_regs + DWARF_MINIMAL_REGS
> > <REST remains the same>
> > 
> 
> Sounds better. Thanks!
> 
> ~Alexey

Now cross building to a few arches is failing, so far:

[perfbuilder@quaco ~]$ cat /tmp/dm.log/summary
 alpine:3.4: Ok
 alpine:3.5: Ok
 alpine:3.6: Ok
 alpine:3.7: Ok
 alpine:3.8: Ok
 alpine:3.9: Ok
 alpine:edge: Ok
 amazonlinux:1: Ok
 amazonlinux:2: Ok
 android-ndk:r12b-arm: Ok
 android-ndk:r15c-arm: Ok
 centos:5: Ok
 centos:6: Ok
 centos:7: Ok
 clearlinux:latest: Ok
 debian:8: Ok
 debian:9: Ok
 debian:experimental: Ok
 debian:experimental-x-arm64: Ok
 debian:experimental-x-mips: FAIL
 debian:experimental-x-mips64: FAIL
 debian:experimental-x-mipsel: FAIL
 fedora:20: Ok
 fedora:22: Ok
 fedora:23: Ok
 fedora:24: Ok
 fedora:24-x-ARC-uClibc: FAIL
 fedora:25: Ok
 fedora:26: Ok
 fedora:27: Ok
[perfbuilder@quaco ~]$

For instance:

[perfbuilder@quaco ~]$ cat /tmp/dm.log/debian\:experimental-x-mips64
<SNIP>
  CC       /tmp/build/perf/tests/pmu.o
util/evsel.c: In function '__perf_evsel__config_callchain':
util/evsel.c:672:38: error: 'PERF_REG_IP' undeclared (first use in this function); did you mean 'PERF_REGS_MAX'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^~~~~~~~~~~
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:38: note: each undeclared identifier is reported only once for each function it appears in
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^~~~~~~~~~~
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:62: error: 'PERF_REG_SP' undeclared (first use in this function); did you mean 'PERF_MEM_S'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                                              ^~~~~~~~~~~
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
  LD       /tmp/build/perf/bench/perf-in.o
  CC       /tmp/build/perf/tests/hists_common.o
mv: cannot stat '/tmp/build/perf/util/.evsel.o.tmp': No such file or directory
make[4]: *** [/git/linux/tools/build/Makefile.build:97: /tmp/build/perf/util/evsel.o] Error 1
make[4]: *** Waiting for unfinished jobs....
<SNIP>



[perfbuilder@quaco ~]$ cat /tmp/dm.log/fedora\:24-x-ARC-uClibc

<SNIP>
  CC       /tmp/build/perf/tests/mmap-basic.o
  CC       /tmp/build/perf/ui/hist.o
util/evsel.c: In function '__perf_evsel__config_callchain':
util/evsel.c:672:38: error: 'PERF_REG_IP' undeclared (first use in this function); did you mean 'PERF_MEM_S'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:38: note: each undeclared identifier is reported only once for each function it appears in
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                      ^
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
util/evsel.c:672:62: error: 'PERF_REG_SP' undeclared (first use in this function); did you mean 'PERF_REG_IP'?
 #define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP))
                                                              ^
util/evsel.c:708:31: note: in expansion of macro 'DWARF_MINIMAL_REGS'
     attr->sample_regs_user |= DWARF_MINIMAL_REGS;
                               ^~~~~~~~~~~~~~~~~~
  MKDIR    /tmp/build/perf/ui/stdio/
mv: cannot stat '/tmp/build/perf/util/.evsel.o.tmp': No such file or directory
/git/linux/tools/build/Makefile.build:96: recipe for target '/tmp/build/perf/util/evsel.o' failed
make[4]: *** [/tmp/build/perf/util/evsel.o] Error 1


  reply	other threads:[~2019-06-04 14:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-30 19:03 [PATCH v5] perf record: collect user registers set jointly with dwarf stacks Alexey Budankov
2019-05-30 19:41 ` Arnaldo Carvalho de Melo
2019-05-31  6:27   ` Alexey Budankov
2019-06-04 14:12     ` Arnaldo Carvalho de Melo [this message]
2019-06-04 14:56       ` Alexey Budankov
2019-06-04 15:42         ` Arnaldo Carvalho de Melo
2019-06-17 18:58 ` [tip:perf/core] perf record: Allow mixing --user-regs with --call-graph=dwarf tip-bot for Alexey Budankov

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=20190604141220.GG24504@kernel.org \
    --to=arnaldo.melo@gmail.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.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 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.