From: Michael Neuling <mikey@neuling.org>
To: Stephane Eranian <eranian@google.com>
Cc: "ak@linux.intel.com" <ak@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Michael Ellerman <michael@ellerman.id.au>,
Linux PPC dev <linuxppc-dev@ozlabs.org>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
Ingo Molnar <mingo@kernel.org>,
Anshuman Khandual <khandual@linux.vnet.ibm.com>
Subject: Re: [V6 00/11] perf: New conditional branch filter
Date: Tue, 03 Jun 2014 08:52:14 +1000 [thread overview]
Message-ID: <1401749534.13479.48.camel@ale.ozlabs.ibm.com> (raw)
In-Reply-To: <CABPqkBSmuMth4KmdLw7Nigf5uQREQJ+xL=42xV9c8FjR2VPO5g@mail.gmail.com>
On Mon, 2014-06-02 at 14:59 +0200, Stephane Eranian wrote:
> On Wed, May 28, 2014 at 10:04 AM, Anshuman Khandual
> <khandual@linux.vnet.ibm.com> wrote:
> > On 05/27/2014 05:39 PM, Stephane Eranian wrote:
> >> I have been looking at those patches and ran some tests.
> >> And I found a few issues so far.
> >>
> >> I am running:
> >> $ perf record -j any_ret -e cycles:u test_program
> >> $ perf report -D
> >>
> >> Most entries are okay and match the filter, however some do not make s=
ense:
> >>
> >> 3642586996762 0x15d0 [0x108]: PERF_RECORD_SAMPLE(IP, 2): 17921/17921:
> >> 0x10001170 period: 613678 addr: 0
> >> .... branch stack: nr:9
> >> ..... 0: 00000000100011cc -> 0000000010000e38
> >> ..... 1: 0000000010001150 -> 00000000100011bc
> >> ..... 2: 0000000010001208 -> 0000000010000e38
> >> ..... 3: 0000000010001160 -> 00000000100011f8
> >> ..... 4: 00000000100011cc -> 0000000010000e38
> >> ..... 5: 0000000010001150 -> 00000000100011bc
> >> ..... 6: 0000000010001208 -> 0000000010000e38
> >> ..... 7: 0000000010001160 -> 00000000100011f8
> >> ..... 8: 0000000000000000 -> 0000000010001160
> >> ^^^^^^
> >> Entry 8 does not make sense, unless 0x0 is a valid return branch
> >> instruction address.
> >> If an address is invalid, the whole entry needs to be eliminated. It
> >> is okay to have
> >> less than the max number of entries supported by HW.
> >
> > Hey Stephane,
> >
> > Okay. The same behaviour is also reflected in the test results what I h=
ave
> > shared in the patchset. Here is that section.
> >
> > (3) perf record -j any_ret -e branch-misses:u ./cprog
> >
> > # Overhead Command Source Shared Object Source Symbol Targe=
t Shared Object Target Symbol
> > # ........ ....... .................... ..................... .....=
............... .....................
> > #
> > 15.61% cprog [unknown] [.] 00000000 cprog=
[.] sw_3_1
> > 6.28% cprog cprog [.] symbol2 cprog=
[.] hw_1_2
> > 6.28% cprog cprog [.] ctr_addr cprog=
[.] sw_4_1
> > 6.26% cprog cprog [.] success_3_1_3 cprog=
[.] sw_3_1
> > 6.24% cprog cprog [.] symbol1 cprog=
[.] hw_1_1
> > 6.24% cprog cprog [.] sw_4_2 cprog=
[.] callme
> > 6.21% cprog [unknown] [.] 00000000 cprog=
[.] callme
> > 6.19% cprog cprog [.] lr_addr cprog=
[.] sw_4_2
> > 3.16% cprog cprog [.] hw_1_2 cprog=
[.] callme
> > 3.15% cprog cprog [.] success_3_1_1 cprog=
[.] sw_3_1
> > 3.15% cprog cprog [.] sw_4_1 cprog=
[.] callme
> > 3.14% cprog cprog [.] callme cprog=
[.] main
> > 3.13% cprog cprog [.] hw_1_1 cprog=
[.] callme
> >
> > So a lot of samples above have 0x0 as the "from" address. This originat=
es from the code
> > section here inside the function "power_pmu_bhrb_read", where we hit tw=
o back to back
>=20
> Could you explain the back-to-back case a bit more here?
> Back-to-back returns to me means something like:
>=20
> int foo()
> {
> ...
> return bar();
> }
>=20
> int bar()
> {
> return 0;
> }
>=20
> Not counting the leaf optimization here, bar return to foo which
> immediately returns: 2 back-2-back returns.
> Is that the case you're talking about here?
>=20
> > target addresses. So we zero out the from address for the first target =
address and re-read
> > the second address over again. So thats how we get zero as the from add=
ress. This is how the
> > HW capture the samples. I was reluctant to drop these samples but I agr=
ee that these kind of
> > samples can be dropped if we need to.
> >
> I think we need to make it as simple as possible for tools, i.e.,
> avoid having to decode the
> disassembly to figure out what happened. Here address 0 is not exploitabl=
e.
This was my fault. I figured if we only had partial information from
the hardware, it was best to at least export that to the tools. If you
disagree then we can we remove them. There was a discussion a while
back on this here:
https://lkml.org/lkml/2013/5/8/543
Because of the way the branch buffer is structured, we can certainly
lose the from address of the oldest branch in the buffer. I've not seen
the hardware lose the from branches in the middle of the buffer but I
guess it's possible. We'll have to get back to you on how or why this
would occur (and associated bias) after talking to some hardware folk.
FWIW, there was some discussion on how the POWER8 branch buffer works a
while back here (same thread as before):
https://lkml.org/lkml/2013/5/8/541
Mikey
prev parent reply other threads:[~2014-06-02 22:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-05 9:09 [V6 00/11] perf: New conditional branch filter Anshuman Khandual
2014-05-05 9:09 ` [V6 01/11] perf: Add PERF_SAMPLE_BRANCH_COND Anshuman Khandual
2014-05-05 9:09 ` [V6 02/11] perf, tool: Conditional branch filter 'cond' added to perf record Anshuman Khandual
2014-05-05 9:09 ` [V6 03/11] x86, perf: Add conditional branch filtering support Anshuman Khandual
2014-05-05 9:09 ` [V6 04/11] perf, documentation: Description for conditional branch filter Anshuman Khandual
2014-05-05 9:09 ` [V6 05/11] powerpc, perf: Re-arrange BHRB processing Anshuman Khandual
2014-05-05 9:09 ` [V6 06/11] powerpc, perf: Re-arrange PMU based branch filter processing in POWER8 Anshuman Khandual
2014-05-05 9:09 ` [V6 07/11] powerpc, perf: Change the name of HW PMU branch filter tracking variable Anshuman Khandual
2014-05-05 9:09 ` [V6 08/11] powerpc, lib: Add new branch analysis support functions Anshuman Khandual
2014-05-05 9:09 ` [V6 09/11] powerpc, perf: Enable SW filtering in branch stack sampling framework Anshuman Khandual
2014-05-05 9:09 ` [V6 10/11] power8, perf: Adapt BHRB PMU configuration to work with SW filters Anshuman Khandual
2014-05-05 9:09 ` [V6 11/11] powerpc, perf: Enable privilege mode SW branch filters Anshuman Khandual
2014-05-27 12:09 ` [V6 00/11] perf: New conditional branch filter Stephane Eranian
2014-05-28 8:04 ` Anshuman Khandual
2014-06-02 12:59 ` Stephane Eranian
2014-06-02 16:04 ` Anshuman Khandual
2014-06-02 16:25 ` Stephane Eranian
2014-06-02 22:52 ` Michael Neuling [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=1401749534.13479.48.camel@ale.ozlabs.ibm.com \
--to=mikey@neuling.org \
--cc=acme@ghostprotocols.net \
--cc=ak@linux.intel.com \
--cc=eranian@google.com \
--cc=khandual@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=michael@ellerman.id.au \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=sukadev@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 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).