* Perf not resolving all symbols, showing 0x7ffffxxx
@ 2013-10-03 14:21 Martin Hicks
2013-10-15 13:59 ` Martin Hicks
0 siblings, 1 reply; 11+ messages in thread
From: Martin Hicks @ 2013-10-03 14:21 UTC (permalink / raw)
To: linuxppc-dev
Hi,
I've been trying to track down a performance regression that started
leading up to the v3.6 kernel, and while doing this I've been
gathering perf data on v3.6-rc and comparing it to v3.11 perf reports
of the same workload.
With v3.6-rc kernels I get all symbols resolved like this:
# Events: 39K cpu-clock-msecs
#
# Overhead Command Shared Object
Symbol
# ........ ........... ......................
........................................
#
9.69% nfsd [kernel.kallsyms] [k] csum_partial
5.64% nfsd [kernel.kallsyms] [k] __do_softirq
3.12% nfsd [sunrpc] [k] svc_create
2.38% nfsd [kernel.kallsyms] [k] __queue_work
1.91% nfsd [gianfar_driver] [k] gfar_poll
1.73% nfsd [kernel.kallsyms] [k] memset
1.54% nfsd [nfsd] [k] nfsd_vfs_read.isra.16
1.40% ksoftirqd/0 [kernel.kallsyms] [k] finish_task_switch.isra.54
1.30% nfsd [kernel.kallsyms] [k] get_page_from_freelist
1.21% nfsd [gianfar_driver] [k] gfar_start_xmit
1.20% nfsd [sunrpc] [k] svc_xprt_received
But when I perf on v3.11 kernels I see a lot of unresolved symbols:
# Events: 69K cpu-clock-msecs
#
# Overhead Command Shared Object
Symbol
# ........ ............ .....................
...................................
#
73.80% nfsd [unknown] [k] 0x7ffff7fa
7.57% nfsd [kernel.kallsyms] [k] csum_partial
4.59% kworker/0:1 [unknown] [k] 0x7ffff832
3.76% ksoftirqd/0 [unknown] [k] 0x7ffff96e
0.94% kswapd0 [unknown] [k] 0x7ffffcc2
0.92% swapper [unknown] [k] 0x7ffffa54
0.62% nfsd [kernel.kallsyms] [k] __udp4_lib_lookup
0.49% nfsd [kernel.kallsyms] [k] ip_append_page
0.48% nfsd [kernel.kallsyms] [k] __do_softirq
0.36% eventmon [unknown] [k] 0x7ffff9c4
0.32% nfsd [kernel.kallsyms] [k] __getnstimeofday
Any ideas? Have I overlooked some necessary kernel config change?
Does perf need some binary that I may not have installed on this
embedded platform?
Freescale mpc8379 (e300c4)
Gcc-4.7.2 uClibC built with ct-ng 1.18.0
binutils 2.22
Thanks,
mh
--
Martin Hicks P.Eng. | mort@bork.org
Bork Consulting Inc. | +1 (613) 266-2296
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-03 14:21 Perf not resolving all symbols, showing 0x7ffffxxx Martin Hicks
@ 2013-10-15 13:59 ` Martin Hicks
2013-10-15 15:30 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 11+ messages in thread
From: Martin Hicks @ 2013-10-15 13:59 UTC (permalink / raw)
To: linuxppc-dev, Anton Blanchard
I've tracked the start of the strange instruction pointers in 'perf
report' to a commit by Anton:
commit 75382aa72f06823db7312ad069c3bae2eb3f8548
Author: Anton Blanchard <anton@samba.org>
Date: Tue Jun 26 01:01:36 2012 +0000
powerpc/perf: Move code to select SIAR or pt_regs into perf_read_regs
I don't know enough about PPC to know what's going on, but reverting
the changes to perf_instruction_pointer() gets me reasonable 'perf
report' output with 3.11.
Thanks,
mh
On Thu, Oct 3, 2013 at 10:21 AM, Martin Hicks <mort@bork.org> wrote:
> Hi,
>
> I've been trying to track down a performance regression that started
> leading up to the v3.6 kernel, and while doing this I've been
> gathering perf data on v3.6-rc and comparing it to v3.11 perf reports
> of the same workload.
>
> With v3.6-rc kernels I get all symbols resolved like this:
>
> # Events: 39K cpu-clock-msecs
> #
> # Overhead Command Shared Object
> Symbol
> # ........ ........... ......................
> ........................................
> #
> 9.69% nfsd [kernel.kallsyms] [k] csum_partial
> 5.64% nfsd [kernel.kallsyms] [k] __do_softirq
> 3.12% nfsd [sunrpc] [k] svc_create
> 2.38% nfsd [kernel.kallsyms] [k] __queue_work
> 1.91% nfsd [gianfar_driver] [k] gfar_poll
> 1.73% nfsd [kernel.kallsyms] [k] memset
> 1.54% nfsd [nfsd] [k] nfsd_vfs_read.isra.16
> 1.40% ksoftirqd/0 [kernel.kallsyms] [k] finish_task_switch.isra.54
> 1.30% nfsd [kernel.kallsyms] [k] get_page_from_freelist
> 1.21% nfsd [gianfar_driver] [k] gfar_start_xmit
> 1.20% nfsd [sunrpc] [k] svc_xprt_received
>
>
> But when I perf on v3.11 kernels I see a lot of unresolved symbols:
>
> # Events: 69K cpu-clock-msecs
> #
> # Overhead Command Shared Object
> Symbol
> # ........ ............ .....................
> ...................................
> #
> 73.80% nfsd [unknown] [k] 0x7ffff7fa
> 7.57% nfsd [kernel.kallsyms] [k] csum_partial
> 4.59% kworker/0:1 [unknown] [k] 0x7ffff832
> 3.76% ksoftirqd/0 [unknown] [k] 0x7ffff96e
> 0.94% kswapd0 [unknown] [k] 0x7ffffcc2
> 0.92% swapper [unknown] [k] 0x7ffffa54
> 0.62% nfsd [kernel.kallsyms] [k] __udp4_lib_lookup
> 0.49% nfsd [kernel.kallsyms] [k] ip_append_page
> 0.48% nfsd [kernel.kallsyms] [k] __do_softirq
> 0.36% eventmon [unknown] [k] 0x7ffff9c4
> 0.32% nfsd [kernel.kallsyms] [k] __getnstimeofday
>
>
> Any ideas? Have I overlooked some necessary kernel config change?
> Does perf need some binary that I may not have installed on this
> embedded platform?
>
> Freescale mpc8379 (e300c4)
> Gcc-4.7.2 uClibC built with ct-ng 1.18.0
> binutils 2.22
>
> Thanks,
> mh
>
> --
> Martin Hicks P.Eng. | mort@bork.org
> Bork Consulting Inc. | +1 (613) 266-2296
--
Martin Hicks P.Eng. | mort@bork.org
Bork Consulting Inc. | +1 (613) 266-2296
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-15 13:59 ` Martin Hicks
@ 2013-10-15 15:30 ` Benjamin Herrenschmidt
2013-10-15 18:44 ` Martin Hicks
0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Herrenschmidt @ 2013-10-15 15:30 UTC (permalink / raw)
To: Martin Hicks; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
On Tue, 2013-10-15 at 09:59 -0400, Martin Hicks wrote:
> I've tracked the start of the strange instruction pointers in 'perf
> report' to a commit by Anton:
>
> commit 75382aa72f06823db7312ad069c3bae2eb3f8548
> Author: Anton Blanchard <anton@samba.org>
> Date: Tue Jun 26 01:01:36 2012 +0000
>
> powerpc/perf: Move code to select SIAR or pt_regs into perf_read_regs
>
> I don't know enough about PPC to know what's going on, but reverting
> the changes to perf_instruction_pointer() gets me reasonable 'perf
> report' output with 3.11.
This is an e300 core right ? (603...). Do that have an SIAR at all
(Scott ?)
Cheers,
Ben.
> Thanks,
> mh
>
>
> On Thu, Oct 3, 2013 at 10:21 AM, Martin Hicks <mort@bork.org> wrote:
> > Hi,
> >
> > I've been trying to track down a performance regression that started
> > leading up to the v3.6 kernel, and while doing this I've been
> > gathering perf data on v3.6-rc and comparing it to v3.11 perf reports
> > of the same workload.
> >
> > With v3.6-rc kernels I get all symbols resolved like this:
> >
> > # Events: 39K cpu-clock-msecs
> > #
> > # Overhead Command Shared Object
> > Symbol
> > # ........ ........... ......................
> > ........................................
> > #
> > 9.69% nfsd [kernel.kallsyms] [k] csum_partial
> > 5.64% nfsd [kernel.kallsyms] [k] __do_softirq
> > 3.12% nfsd [sunrpc] [k] svc_create
> > 2.38% nfsd [kernel.kallsyms] [k] __queue_work
> > 1.91% nfsd [gianfar_driver] [k] gfar_poll
> > 1.73% nfsd [kernel.kallsyms] [k] memset
> > 1.54% nfsd [nfsd] [k] nfsd_vfs_read.isra.16
> > 1.40% ksoftirqd/0 [kernel.kallsyms] [k] finish_task_switch.isra.54
> > 1.30% nfsd [kernel.kallsyms] [k] get_page_from_freelist
> > 1.21% nfsd [gianfar_driver] [k] gfar_start_xmit
> > 1.20% nfsd [sunrpc] [k] svc_xprt_received
> >
> >
> > But when I perf on v3.11 kernels I see a lot of unresolved symbols:
> >
> > # Events: 69K cpu-clock-msecs
> > #
> > # Overhead Command Shared Object
> > Symbol
> > # ........ ............ .....................
> > ...................................
> > #
> > 73.80% nfsd [unknown] [k] 0x7ffff7fa
> > 7.57% nfsd [kernel.kallsyms] [k] csum_partial
> > 4.59% kworker/0:1 [unknown] [k] 0x7ffff832
> > 3.76% ksoftirqd/0 [unknown] [k] 0x7ffff96e
> > 0.94% kswapd0 [unknown] [k] 0x7ffffcc2
> > 0.92% swapper [unknown] [k] 0x7ffffa54
> > 0.62% nfsd [kernel.kallsyms] [k] __udp4_lib_lookup
> > 0.49% nfsd [kernel.kallsyms] [k] ip_append_page
> > 0.48% nfsd [kernel.kallsyms] [k] __do_softirq
> > 0.36% eventmon [unknown] [k] 0x7ffff9c4
> > 0.32% nfsd [kernel.kallsyms] [k] __getnstimeofday
> >
> >
> > Any ideas? Have I overlooked some necessary kernel config change?
> > Does perf need some binary that I may not have installed on this
> > embedded platform?
> >
> > Freescale mpc8379 (e300c4)
> > Gcc-4.7.2 uClibC built with ct-ng 1.18.0
> > binutils 2.22
> >
> > Thanks,
> > mh
> >
> > --
> > Martin Hicks P.Eng. | mort@bork.org
> > Bork Consulting Inc. | +1 (613) 266-2296
>
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-15 15:30 ` Benjamin Herrenschmidt
@ 2013-10-15 18:44 ` Martin Hicks
2013-10-15 19:53 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 11+ messages in thread
From: Martin Hicks @ 2013-10-15 18:44 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
On Tue, Oct 15, 2013 at 11:30 AM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Tue, 2013-10-15 at 09:59 -0400, Martin Hicks wrote:
>> I've tracked the start of the strange instruction pointers in 'perf
>> report' to a commit by Anton:
>>
>> commit 75382aa72f06823db7312ad069c3bae2eb3f8548
>> Author: Anton Blanchard <anton@samba.org>
>> Date: Tue Jun 26 01:01:36 2012 +0000
>>
>> powerpc/perf: Move code to select SIAR or pt_regs into perf_read_regs
>>
>> I don't know enough about PPC to know what's going on, but reverting
>> the changes to perf_instruction_pointer() gets me reasonable 'perf
>> report' output with 3.11.
>
> This is an e300 core right ? (603...). Do that have an SIAR at all
> (Scott ?)
Yes, e300c3.
mh
--
Martin Hicks P.Eng. | mort@bork.org
Bork Consulting Inc. | +1 (613) 266-2296
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-15 18:44 ` Martin Hicks
@ 2013-10-15 19:53 ` Benjamin Herrenschmidt
2013-10-15 20:22 ` Scott Wood
0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Herrenschmidt @ 2013-10-15 19:53 UTC (permalink / raw)
To: Martin Hicks; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
On Tue, 2013-10-15 at 14:44 -0400, Martin Hicks wrote:
> On Tue, Oct 15, 2013 at 11:30 AM, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > On Tue, 2013-10-15 at 09:59 -0400, Martin Hicks wrote:
> >> I've tracked the start of the strange instruction pointers in 'perf
> >> report' to a commit by Anton:
> >>
> >> commit 75382aa72f06823db7312ad069c3bae2eb3f8548
> >> Author: Anton Blanchard <anton@samba.org>
> >> Date: Tue Jun 26 01:01:36 2012 +0000
> >>
> >> powerpc/perf: Move code to select SIAR or pt_regs into perf_read_regs
> >>
> >> I don't know enough about PPC to know what's going on, but reverting
> >> the changes to perf_instruction_pointer() gets me reasonable 'perf
> >> report' output with 3.11.
> >
> > This is an e300 core right ? (603...). Do that have an SIAR at all
> > (Scott ?)
>
> Yes, e300c3.
Ok so I have a hard time figuring out how that patch can make a
difference since for all I can see, there is no perf backend upstream
for e300 at all :-(
I must certainly be missing something ... Scott, can you have a look ?
Cheers,
Ben.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-15 19:53 ` Benjamin Herrenschmidt
@ 2013-10-15 20:22 ` Scott Wood
2013-10-15 20:39 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 11+ messages in thread
From: Scott Wood @ 2013-10-15 20:22 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Martin Hicks, linuxppc-dev, Anton Blanchard
On Tue, 2013-10-15 at 14:53 -0500, Benjamin Herrenschmidt wrote:
> On Tue, 2013-10-15 at 14:44 -0400, Martin Hicks wrote:
> > On Tue, Oct 15, 2013 at 11:30 AM, Benjamin Herrenschmidt
> > <benh@kernel.crashing.org> wrote:
> > > On Tue, 2013-10-15 at 09:59 -0400, Martin Hicks wrote:
> > >> I've tracked the start of the strange instruction pointers in 'perf
> > >> report' to a commit by Anton:
> > >>
> > >> commit 75382aa72f06823db7312ad069c3bae2eb3f8548
> > >> Author: Anton Blanchard <anton@samba.org>
> > >> Date: Tue Jun 26 01:01:36 2012 +0000
> > >>
> > >> powerpc/perf: Move code to select SIAR or pt_regs into perf_read_regs
> > >>
> > >> I don't know enough about PPC to know what's going on, but reverting
> > >> the changes to perf_instruction_pointer() gets me reasonable 'perf
> > >> report' output with 3.11.
> > >
> > > This is an e300 core right ? (603...). Do that have an SIAR at all
> > > (Scott ?)
> >
> > Yes, e300c3.
>
> Ok so I have a hard time figuring out how that patch can make a
> difference since for all I can see, there is no perf backend upstream
> for e300 at all :-(
>
> I must certainly be missing something ... Scott, can you have a look ?
e300c3 has a core-fsl-emb style performance monitor (though Linux
doesn't support it yet). If a bug was bisected to a change in
core-book3s.c, then it's probably a coincidence due to moving code
around.
-Scott
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-15 20:22 ` Scott Wood
@ 2013-10-15 20:39 ` Benjamin Herrenschmidt
2013-10-16 15:05 ` Martin Hicks
0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Herrenschmidt @ 2013-10-15 20:39 UTC (permalink / raw)
To: Scott Wood; +Cc: Martin Hicks, linuxppc-dev, Anton Blanchard
On Tue, 2013-10-15 at 15:22 -0500, Scott Wood wrote:
> On Tue, 2013-10-15 at 14:53 -0500, Benjamin Herrenschmidt wrote:
> > On Tue, 2013-10-15 at 14:44 -0400, Martin Hicks wrote:
> > > On Tue, Oct 15, 2013 at 11:30 AM, Benjamin Herrenschmidt
> > > <benh@kernel.crashing.org> wrote:
> > > > On Tue, 2013-10-15 at 09:59 -0400, Martin Hicks wrote:
> > > >> I've tracked the start of the strange instruction pointers in 'perf
> > > >> report' to a commit by Anton:
> > > >>
> > > >> commit 75382aa72f06823db7312ad069c3bae2eb3f8548
> > > >> Author: Anton Blanchard <anton@samba.org>
> > > >> Date: Tue Jun 26 01:01:36 2012 +0000
> > > >>
> > > >> powerpc/perf: Move code to select SIAR or pt_regs into perf_read_regs
> > > >>
> > > >> I don't know enough about PPC to know what's going on, but reverting
> > > >> the changes to perf_instruction_pointer() gets me reasonable 'perf
> > > >> report' output with 3.11.
> > > >
> > > > This is an e300 core right ? (603...). Do that have an SIAR at all
> > > > (Scott ?)
> > >
> > > Yes, e300c3.
> >
> > Ok so I have a hard time figuring out how that patch can make a
> > difference since for all I can see, there is no perf backend upstream
> > for e300 at all :-(
> >
> > I must certainly be missing something ... Scott, can you have a look ?
>
> e300c3 has a core-fsl-emb style performance monitor (though Linux
> doesn't support it yet). If a bug was bisected to a change in
> core-book3s.c, then it's probably a coincidence due to moving code
> around.
Mort, can you see if just that change is enough to cause the problem ?
------------------- arch/powerpc/include/asm/perf_event.h --------------------
index 5c16b89..0bb2372 100644
@@ -26,8 +26,13 @@
#include <asm/ptrace.h>
#include <asm/reg.h>
+/*
+ * Overload regs->result to specify whether we should use the MSR (result
+ * is zero) or the SIAR (result is non zero).
+ */
#define perf_arch_fetch_caller_regs(regs, __ip) \
do { \
+ (regs)->result = 0; \
(regs)->nip = __ip; \
(regs)->gpr[1] = *(unsigned long *)__get_SP(); \
asm volatile("mfmsr %0" : "=r" ((regs)->msr)); \
Ben.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-15 20:39 ` Benjamin Herrenschmidt
@ 2013-10-16 15:05 ` Martin Hicks
2013-10-16 18:42 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 11+ messages in thread
From: Martin Hicks @ 2013-10-16 15:05 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
Actually, I was wrong, the mpc8379 is an e300c4.
So it seems clear to me that we compile in the book3s code because
this is an 83xx CPU part. I also see that Kconfig knows that I have
an core-fsl-emb but we don't actually compile the PMU backend for it
because there's no support for anything but e500.
mort@chinook:~/src/s4v2-glibc/linux-mpc$ grep PERF .config
CONFIG_FSL_EMB_PERFMON=y
CONFIG_PPC_PERF_CTRS=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
mort@chinook:~/src/s4v2-glibc/linux-mpc$ grep BOOK3S .config
CONFIG_PPC_BOOK3S_32=y
CONFIG_PPC_BOOK3S=y
more below...
On Tue, Oct 15, 2013 at 4:39 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Tue, 2013-10-15 at 15:22 -0500, Scott Wood wrote:
>> On Tue, 2013-10-15 at 14:53 -0500, Benjamin Herrenschmidt wrote:
>> > On Tue, 2013-10-15 at 14:44 -0400, Martin Hicks wrote:
>> > > >
>> > > > This is an e300 core right ? (603...). Do that have an SIAR at all
>> > > > (Scott ?)
>> > >
>> > > Yes, e300c3.
>> >
>> > Ok so I have a hard time figuring out how that patch can make a
>> > difference since for all I can see, there is no perf backend upstream
>> > for e300 at all :-(
>> >
>> > I must certainly be missing something ... Scott, can you have a look ?
>>
>> e300c3 has a core-fsl-emb style performance monitor (though Linux
>> doesn't support it yet). If a bug was bisected to a change in
>> core-book3s.c, then it's probably a coincidence due to moving code
>> around.
CONFIG_PPC_PERF_CTRS seems to give the mpc8379 some kind of basic
performance measuring. Is this through dummy_perf() in
arch/powerpc/kernel/pmc.c?
>
> Mort, can you see if just that change is enough to cause the problem ?
It is not. The patch that does get IPs working again in my 3.11 tree
is this one:
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index eeae308..9a3f572 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -122,10 +122,6 @@ void power_pmu_flush_branch_stack(void) {}
static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
#endif /* CONFIG_PPC32 */
-static bool regs_use_siar(struct pt_regs *regs)
-{
- return !!regs->result;
-}
/*
* Things that are specific to 64-bit implementations.
@@ -1802,14 +1798,13 @@ unsigned long perf_misc_flags(struct pt_regs *regs)
*/
unsigned long perf_instruction_pointer(struct pt_regs *regs)
{
- bool use_siar = regs_use_siar(regs);
-
- if (use_siar && siar_valid(regs))
- return mfspr(SPRN_SIAR) + perf_ip_adjust(regs);
- else if (use_siar)
- return 0; // no valid instruction pointer
- else
+ unsigned long mmcra = regs->dsisr;
+ if (TRAP(regs) != 0xf00)
+ return regs->nip;
+ if ((ppmu->flags & PPMU_NO_CONT_SAMPLING) &&
+ !(mmcra & MMCRA_SAMPLE_ENABLE))
return regs->nip;
+ return mfspr(SPRN_SIAR) + perf_ip_adjust(regs);
}
static bool pmc_overflow_power7(unsigned long val)
mh
--
Martin Hicks P.Eng. | mort@bork.org
Bork Consulting Inc. | +1 (613) 266-2296
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-16 15:05 ` Martin Hicks
@ 2013-10-16 18:42 ` Benjamin Herrenschmidt
2013-10-16 21:16 ` Martin Hicks
0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Herrenschmidt @ 2013-10-16 18:42 UTC (permalink / raw)
To: Martin Hicks; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
On Wed, 2013-10-16 at 11:05 -0400, Martin Hicks wrote:
> Actually, I was wrong, the mpc8379 is an e300c4.
>
> So it seems clear to me that we compile in the book3s code because
> this is an 83xx CPU part. I also see that Kconfig knows that I have
> an core-fsl-emb but we don't actually compile the PMU backend for it
> because there's no support for anything but e500.
>
> mort@chinook:~/src/s4v2-glibc/linux-mpc$ grep PERF .config
> CONFIG_FSL_EMB_PERFMON=y
> CONFIG_PPC_PERF_CTRS=y
> CONFIG_HAVE_PERF_EVENTS=y
> CONFIG_PERF_EVENTS=y
> # CONFIG_DEBUG_PERF_USE_VMALLOC is not set
> mort@chinook:~/src/s4v2-glibc/linux-mpc$ grep BOOK3S .config
> CONFIG_PPC_BOOK3S_32=y
> CONFIG_PPC_BOOK3S=y
>
> more below...
>
> On Tue, Oct 15, 2013 at 4:39 PM, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > On Tue, 2013-10-15 at 15:22 -0500, Scott Wood wrote:
> >> On Tue, 2013-10-15 at 14:53 -0500, Benjamin Herrenschmidt wrote:
> >> > On Tue, 2013-10-15 at 14:44 -0400, Martin Hicks wrote:
> >> > > >
> >> > > > This is an e300 core right ? (603...). Do that have an SIAR at all
> >> > > > (Scott ?)
> >> > >
> >> > > Yes, e300c3.
> >> >
> >> > Ok so I have a hard time figuring out how that patch can make a
> >> > difference since for all I can see, there is no perf backend upstream
> >> > for e300 at all :-(
> >> >
> >> > I must certainly be missing something ... Scott, can you have a look ?
> >>
> >> e300c3 has a core-fsl-emb style performance monitor (though Linux
> >> doesn't support it yet). If a bug was bisected to a change in
> >> core-book3s.c, then it's probably a coincidence due to moving code
> >> around.
>
> CONFIG_PPC_PERF_CTRS seems to give the mpc8379 some kind of basic
> performance measuring. Is this through dummy_perf() in
> arch/powerpc/kernel/pmc.c?
>
> >
> > Mort, can you see if just that change is enough to cause the problem ?
>
> It is not. The patch that does get IPs working again in my 3.11 tree
> is this one:
>
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index eeae308..9a3f572 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -122,10 +122,6 @@ void power_pmu_flush_branch_stack(void) {}
> static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
> #endif /* CONFIG_PPC32 */
>
> -static bool regs_use_siar(struct pt_regs *regs)
> -{
> - return !!regs->result;
> -}
Can you try instead just chaning regs_use_siar to return false always ?
Do that help ?
Cheers,
Ben.
> /*
> * Things that are specific to 64-bit implementations.
> @@ -1802,14 +1798,13 @@ unsigned long perf_misc_flags(struct pt_regs *regs)
> */
> unsigned long perf_instruction_pointer(struct pt_regs *regs)
> {
> - bool use_siar = regs_use_siar(regs);
> -
> - if (use_siar && siar_valid(regs))
> - return mfspr(SPRN_SIAR) + perf_ip_adjust(regs);
> - else if (use_siar)
> - return 0; // no valid instruction pointer
> - else
> + unsigned long mmcra = regs->dsisr;
> + if (TRAP(regs) != 0xf00)
> + return regs->nip;
> + if ((ppmu->flags & PPMU_NO_CONT_SAMPLING) &&
> + !(mmcra & MMCRA_SAMPLE_ENABLE))
> return regs->nip;
> + return mfspr(SPRN_SIAR) + perf_ip_adjust(regs);
> }
>
> static bool pmc_overflow_power7(unsigned long val)
>
>
> mh
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-16 18:42 ` Benjamin Herrenschmidt
@ 2013-10-16 21:16 ` Martin Hicks
2013-10-16 23:01 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 11+ messages in thread
From: Martin Hicks @ 2013-10-16 21:16 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
On Wed, Oct 16, 2013 at 2:42 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Wed, 2013-10-16 at 11:05 -0400, Martin Hicks wrote:
>> Actually, I was wrong, the mpc8379 is an e300c4.
>>
>> So it seems clear to me that we compile in the book3s code because
>> this is an 83xx CPU part. I also see that Kconfig knows that I have
>> an core-fsl-emb but we don't actually compile the PMU backend for it
>> because there's no support for anything but e500.
>>
>> mort@chinook:~/src/s4v2-glibc/linux-mpc$ grep PERF .config
>> CONFIG_FSL_EMB_PERFMON=y
>> CONFIG_PPC_PERF_CTRS=y
>> CONFIG_HAVE_PERF_EVENTS=y
>> CONFIG_PERF_EVENTS=y
>> # CONFIG_DEBUG_PERF_USE_VMALLOC is not set
>> mort@chinook:~/src/s4v2-glibc/linux-mpc$ grep BOOK3S .config
>> CONFIG_PPC_BOOK3S_32=y
>> CONFIG_PPC_BOOK3S=y
>>
>> more below...
>>
>> On Tue, Oct 15, 2013 at 4:39 PM, Benjamin Herrenschmidt
>> <benh@kernel.crashing.org> wrote:
>> > On Tue, 2013-10-15 at 15:22 -0500, Scott Wood wrote:
>> >> On Tue, 2013-10-15 at 14:53 -0500, Benjamin Herrenschmidt wrote:
>> >> > On Tue, 2013-10-15 at 14:44 -0400, Martin Hicks wrote:
>> >> > > >
>> >> > > > This is an e300 core right ? (603...). Do that have an SIAR at all
>> >> > > > (Scott ?)
>> >> > >
>> >> > > Yes, e300c3.
>> >> >
>> >> > Ok so I have a hard time figuring out how that patch can make a
>> >> > difference since for all I can see, there is no perf backend upstream
>> >> > for e300 at all :-(
>> >> >
>> >> > I must certainly be missing something ... Scott, can you have a look ?
>> >>
>> >> e300c3 has a core-fsl-emb style performance monitor (though Linux
>> >> doesn't support it yet). If a bug was bisected to a change in
>> >> core-book3s.c, then it's probably a coincidence due to moving code
>> >> around.
>>
>> CONFIG_PPC_PERF_CTRS seems to give the mpc8379 some kind of basic
>> performance measuring. Is this through dummy_perf() in
>> arch/powerpc/kernel/pmc.c?
>>
>> >
>> > Mort, can you see if just that change is enough to cause the problem ?
>>
>> It is not. The patch that does get IPs working again in my 3.11 tree
>> is this one:
>>
>> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
>> index eeae308..9a3f572 100644
>> --- a/arch/powerpc/perf/core-book3s.c
>> +++ b/arch/powerpc/perf/core-book3s.c
>> @@ -122,10 +122,6 @@ void power_pmu_flush_branch_stack(void) {}
>> static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
>> #endif /* CONFIG_PPC32 */
>>
>> -static bool regs_use_siar(struct pt_regs *regs)
>> -{
>> - return !!regs->result;
>> -}
>
> Can you try instead just chaning regs_use_siar to return false always ?
> Do that help ?
>
That does fix the problem. v3.11 with the following:
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index eeae308..e91cf67 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -124,7 +124,7 @@ static inline void power_pmu_bhrb_read(struct
cpu_hw_events *cpuhw) {}
static bool regs_use_siar(struct pt_regs *regs)
{
- return !!regs->result;
+ return 0; //!!regs->result;
}
/*
mh
--
Martin Hicks P.Eng. | mort@bork.org
Bork Consulting Inc. | +1 (613) 266-2296
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Perf not resolving all symbols, showing 0x7ffffxxx
2013-10-16 21:16 ` Martin Hicks
@ 2013-10-16 23:01 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 11+ messages in thread
From: Benjamin Herrenschmidt @ 2013-10-16 23:01 UTC (permalink / raw)
To: Martin Hicks; +Cc: Scott Wood, linuxppc-dev, Anton Blanchard
On Wed, 2013-10-16 at 17:16 -0400, Martin Hicks wrote:
> That does fix the problem. v3.11 with the following:
>
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index eeae308..e91cf67 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -124,7 +124,7 @@ static inline void power_pmu_bhrb_read(struct
> cpu_hw_events *cpuhw) {}
>
> static bool regs_use_siar(struct pt_regs *regs)
> {
> - return !!regs->result;
> + return 0; //!!regs->result;
> }
Ok, we probably need that function to do that on machines with no
backend :-) Either that or properly clear regs->result always.
I've had a quick look through perf and I admit I'm not sure of all the
ways perf ends up populating "regs" here and how many holes there is
in that scheme :-)
Anton? How do you know for sure regs is always be cooked by your stuff
(for regs->result) ?
Ben.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2013-10-16 23:02 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-03 14:21 Perf not resolving all symbols, showing 0x7ffffxxx Martin Hicks
2013-10-15 13:59 ` Martin Hicks
2013-10-15 15:30 ` Benjamin Herrenschmidt
2013-10-15 18:44 ` Martin Hicks
2013-10-15 19:53 ` Benjamin Herrenschmidt
2013-10-15 20:22 ` Scott Wood
2013-10-15 20:39 ` Benjamin Herrenschmidt
2013-10-16 15:05 ` Martin Hicks
2013-10-16 18:42 ` Benjamin Herrenschmidt
2013-10-16 21:16 ` Martin Hicks
2013-10-16 23:01 ` Benjamin Herrenschmidt
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).