[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <25658a70-0b37-966d-e46c-f86be2a76a8e@arm.com>
Date: Tue, 29 Nov 2022 15:53:32 +0000
From: James Clark <james.clark@....com>
To: Anshuman Khandual <anshuman.khandual@....com>
Cc: Mark Brown <broonie@...nel.org>, Rob Herring <robh@...nel.org>,
Marc Zyngier <maz@...nel.org>,
Suzuki Poulose <suzuki.poulose@....com>,
Ingo Molnar <mingo@...hat.com>, linux-kernel@...r.kernel.org,
linux-perf-users@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, peterz@...radead.org,
acme@...nel.org, mark.rutland@....com, will@...nel.org,
catalin.marinas@....com
Subject: Re: [PATCH V5 6/7] arm64/perf: Add BRBE driver
On 07/11/2022 06:25, Anshuman Khandual wrote:
> This adds a BRBE driver which implements all the required helper functions
> for struct arm_pmu. Following functions are defined by this driver which
> will configure, enable, capture, reset and disable BRBE buffer HW as and
> when requested via perf branch stack sampling framework.
Hi Anshuman,
I've got a rough version of an updated test for branch stacks here [1].
A couple of interesting things that I've noticed running it:
First one is that sometimes I get (null) for the branch type. Debugging
in GDB shows me that the type is actually type == PERF_BR_EXTEND_ABI &&
new_type == 11. I can't see how this is possible looking at the driver
code. I think I saw this on a previous version of the patchset too but
didn't mention it because I thought it wasn't significant, but now I see
that something strange is going on. An interesting pattern is that they
are always after ERET samples and go from userspace to kernel:
41992866945460 0x6e8 [0x360]: PERF_RECORD_SAMPLE(IP, 0x1): 501/501:
0xffff800008010118 period: 1229 addr: 0
... branch stack: nr:34
.. 007a9988 -> 00000000 0 cycles P 9fbfbfbf IRQ
.. 00000000 -> 007a9988 0 cycles P 9fbfbfbf ERET
.. 007a9988 -> 00000000 0 cycles P 9fbfbfbf (null)
.. 00747668 -> 007a9988 0 cycles P 9fbfbfbf CALL
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00747664 -> 00747660 0 cycles P 9fbfbfbf COND
.. 00000000 -> 00747658 0 cycles P 9fbfbfbf ERET
.. 00747658 -> 00000000 0 cycles P 9fbfbfbf ARM64_DEBUG_DATA
.. 00000000 -> 00747650 0 cycles P 9fbfbfbf ERET
.. 00747650 -> 00000000 0 cycles P 9fbfbfbf ARM64_DEBUG_DATA
.. 00747624 -> 00747634 0 cycles P 9fbfbfbf COND
.. 00000000 -> 007475f4 0 cycles P 9fbfbfbf ERET
.. 007475f4 -> 00000000 0 cycles P 9fbfbfbf ARM64_DEBUG_DATA
.. 00000000 -> 007475e8 0 cycles P 9fbfbfbf ERET
.. 007475e8 -> 00000000 0 cycles P 9fbfbfbf (null)
.. 004005ac -> 007475e8 0 cycles P 9fbfbfbf CALL
.. 00000000 -> 00400564 0 cycles P 9fbfbfbf ERET
.. 00400564 -> 00000000 0 cycles P 9fbfbfbf (null)
.. 00000000 -> 00400564 0 cycles P 9fbfbfbf ERET
.. thread: perf:501
...... dso: [kernel.kallsyms]
The second one is that sometimes I get kernel addresses and RET branches
even if the option is any_call,u. The pattern here is that it's the last
non empty branch stack of a run, so maybe there is some disable path
where the filters aren't configured properly:
armv8pmu_brbe_enable+0xc/arm64_pmu_brbe_enable+0x0/P/-/-/0/CALL
armpmu_start+0xe0/armv8pmu_brbe_enable+0x0/P/-/-/0/IND_CALL
armv8pmu_brbe_reset+0x18/armpmu_start+0xd0/P/-/-/0/RET
arm64_pmu_brbe_reset+0x18/armv8pmu_brbe_reset+0x10/P/-/-/0/RET
[1]:
https://gitlab.arm.com/linux-arm/linux-jc/-/commit/7260b7bef06ac161eac88d05266e8c5c303d9881
Powered by blists - more mailing lists