Re: [PATCH v2 0/2] perf probe fixes for ppc64le

2016-04-27 Thread Naveen N. Rao
On 2016/04/12 02:40PM, Naveen N Rao wrote:
> This patchset fixes three issues found with perf probe on ppc64le:
> 1. 'perf test kallsyms' failure on ppc64le (reported by Michael
> Ellerman). This was due to the symbols being fixed up during symbol
> table load. This is fixed in patch 2 by delaying symbol fixup until
> later.
> 2. perf probe function offset was being calculated from the local entry
> point (LEP), which does not match user expectation when trying to look
> at function disassembly output (reported by Ananth N). This is fixed for
> kallsyms in patch 1 and for symbol table in patch 2.
> 3. perf probe failure with kretprobe when using kallsyms. This was
> failing as we were specifying an offset. This is fixed in patch 1.
> 
> A few examples demonstrating the issues and the fix:
> 
> Example for issue (2):
> 
> # objdump -d vmlinux | grep -A8 \<_do_fork\>:
> c00b6a00 <_do_fork>:
> c00b6a00: f7 00 4c 3c addis   r2,r12,247
> c00b6a04: 00 86 42 38 addir2,r2,-31232
> c00b6a08: a6 02 08 7c mflrr0
> c00b6a0c: d0 ff 41 fb std r26,-48(r1)
> c00b6a10: 26 80 90 7d mfocrf  r12,8
> c00b6a14: d8 ff 61 fb std r27,-40(r1)
> c00b6a18: e0 ff 81 fb std r28,-32(r1)
> c00b6a1c: e8 ff a1 fb std r29,-24(r1)
> # perf probe -v _do_fork+4
> probe-definition(0): _do_fork+4 
> symbol:_do_fork file:(null) line:0 offset:4 return:0 lazy:(null)
> 0 arguments
> Looking at the vmlinux_path (8 entries long)
> Using /proc/kcore for kernel object code
> Using /proc/kallsyms for symbols
> Opening /sys/kernel/debug/tracing//kprobe_events write=1
> Writing event: p:probe/_do_fork _text+748044
> Added new event:
>   probe:_do_fork   (on _do_fork+4)
> 
> You can now use it in all perf tools, such as:
> 
>   perf record -e probe:_do_fork -aR sleep 1
> 
> # printf "%x\n" 748044
> b6a0c
> ^
> This is offset from the LEP. With this, there is also no way to ever
> probe between the GEP and the LEP.
> 
> With this patchset:
> # perf probe -v _do_fork+4
> probe-definition(0): _do_fork+4 
> symbol:_do_fork file:(null) line:0 offset:4 return:0 lazy:(null)
> 0 arguments
> Looking at the vmlinux_path (8 entries long)
> Using /proc/kcore for kernel object code
> Using /proc/kallsyms for symbols
> Opening /sys/kernel/debug/tracing//kprobe_events write=1
> Writing event: p:probe/_do_fork _text+748036
> Added new event:
>   probe:_do_fork   (on _do_fork+4)
> 
> You can now use it in all perf tools, such as:
> 
>   perf record -e probe:_do_fork -aR sleep 1
> 
> # perf probe -v _do_fork
> probe-definition(0): _do_fork 
> symbol:_do_fork file:(null) line:0 offset:0 return:0 lazy:(null)
> 0 arguments
> Looking at the vmlinux_path (8 entries long)
> Using /proc/kcore for kernel object code
> Using /proc/kallsyms for symbols
> Opening /sys/kernel/debug/tracing//kprobe_events write=1
> Writing event: p:probe/_do_fork _text+748040
> Added new event:
>   probe:_do_fork   (on _do_fork)
> 
> You can now use it in all perf tools, such as:
> 
>   perf record -e probe:_do_fork -aR sleep 1
> 
> We only offset to the LEP if function entry is specified, otherwise, we
> offset from the GEP.
> 
> Example for issue (3):
> -
> Before patch:
> # perf probe -v _do_fork:%return
> probe-definition(0): _do_fork:%return 
> symbol:_do_fork file:(null) line:0 offset:0 return:1 lazy:(null)
> 0 arguments
> Looking at the vmlinux_path (8 entries long)
> Using /proc/kcore for kernel object code
> Using /proc/kallsyms for symbols
> Opening /sys/kernel/debug/tracing//kprobe_events write=1
> Writing event: r:probe/_do_fork _do_fork+8
> Failed to write event: Invalid argument
>   Error: Failed to add events. Reason: Invalid argument (Code: -22)
> 
> After patch:
> # perf probe _do_fork:%return
> Added new event:
>   probe:_do_fork   (on _do_fork%return)
> 
> You can now use it in all perf tools, such as:
> 
>   perf record -e probe:_do_fork -aR sleep 1
> 
> 
> Concept Acked-by: Michael Ellerman 
> 
> Cc: Mark Wielaard 
> Cc: Thiago Jung Bauermann 
> Cc: Arnaldo Carvalho de Melo 
> Cc: Masami Hiramatsu 
> Cc: Michael Ellerman 
> Cc: Balbir Singh 
> Cc: Ananth N Mavinakayanahalli 

Arnaldo,
Can you please pick this up if you're ok with the changes?

- Naveen

> 
> Naveen N. Rao (2):
>   perf tools: Fix kprobe and kretprobe handling with kallsyms on ppc64le
>   perf tools: Fix kallsyms perf test on ppc64le
> 
>  tools/perf/arch/powerpc/util/sym-handling.c | 43 
> +
>  tools/perf/util/probe-event.c   |  5 ++--
>  tools/perf/util/probe-event.h   |  3 +-
>  tools/perf/util/sy

Re: [PATCH v2 0/2] perf probe fixes for ppc64le

2016-04-13 Thread Balbir Singh


On 12/04/16 19:10, Naveen N. Rao wrote:
> This patchset fixes three issues found with perf probe on ppc64le:
> 1. 'perf test kallsyms' failure on ppc64le (reported by Michael
> Ellerman). This was due to the symbols being fixed up during symbol
> table load. This is fixed in patch 2 by delaying symbol fixup until
> later.
> 2. perf probe function offset was being calculated from the local entry
> point (LEP), which does not match user expectation when trying to look
> at function disassembly output (reported by Ananth N). This is fixed for
> kallsyms in patch 1 and for symbol table in patch 2.
> 3. perf probe failure with kretprobe when using kallsyms. This was
> failing as we were specifying an offset. This is fixed in patch 1.
> 
> A few examples demonstrating the issues and the fix:
> 

Given the choices, I think this makes sense

Acked-by: Balbir Singh 
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[PATCH v2 0/2] perf probe fixes for ppc64le

2016-04-12 Thread Naveen N. Rao
This patchset fixes three issues found with perf probe on ppc64le:
1. 'perf test kallsyms' failure on ppc64le (reported by Michael
Ellerman). This was due to the symbols being fixed up during symbol
table load. This is fixed in patch 2 by delaying symbol fixup until
later.
2. perf probe function offset was being calculated from the local entry
point (LEP), which does not match user expectation when trying to look
at function disassembly output (reported by Ananth N). This is fixed for
kallsyms in patch 1 and for symbol table in patch 2.
3. perf probe failure with kretprobe when using kallsyms. This was
failing as we were specifying an offset. This is fixed in patch 1.

A few examples demonstrating the issues and the fix:

Example for issue (2):

# objdump -d vmlinux | grep -A8 \<_do_fork\>:
c00b6a00 <_do_fork>:
c00b6a00:   f7 00 4c 3c addis   r2,r12,247
c00b6a04:   00 86 42 38 addir2,r2,-31232
c00b6a08:   a6 02 08 7c mflrr0
c00b6a0c:   d0 ff 41 fb std r26,-48(r1)
c00b6a10:   26 80 90 7d mfocrf  r12,8
c00b6a14:   d8 ff 61 fb std r27,-40(r1)
c00b6a18:   e0 ff 81 fb std r28,-32(r1)
c00b6a1c:   e8 ff a1 fb std r29,-24(r1)
# perf probe -v _do_fork+4
probe-definition(0): _do_fork+4 
symbol:_do_fork file:(null) line:0 offset:4 return:0 lazy:(null)
0 arguments
Looking at the vmlinux_path (8 entries long)
Using /proc/kcore for kernel object code
Using /proc/kallsyms for symbols
Opening /sys/kernel/debug/tracing//kprobe_events write=1
Writing event: p:probe/_do_fork _text+748044
Added new event:
  probe:_do_fork   (on _do_fork+4)

You can now use it in all perf tools, such as:

perf record -e probe:_do_fork -aR sleep 1

# printf "%x\n" 748044
b6a0c
^
This is offset from the LEP. With this, there is also no way to ever
probe between the GEP and the LEP.

With this patchset:
# perf probe -v _do_fork+4
probe-definition(0): _do_fork+4 
symbol:_do_fork file:(null) line:0 offset:4 return:0 lazy:(null)
0 arguments
Looking at the vmlinux_path (8 entries long)
Using /proc/kcore for kernel object code
Using /proc/kallsyms for symbols
Opening /sys/kernel/debug/tracing//kprobe_events write=1
Writing event: p:probe/_do_fork _text+748036
Added new event:
  probe:_do_fork   (on _do_fork+4)

You can now use it in all perf tools, such as:

perf record -e probe:_do_fork -aR sleep 1

# perf probe -v _do_fork
probe-definition(0): _do_fork 
symbol:_do_fork file:(null) line:0 offset:0 return:0 lazy:(null)
0 arguments
Looking at the vmlinux_path (8 entries long)
Using /proc/kcore for kernel object code
Using /proc/kallsyms for symbols
Opening /sys/kernel/debug/tracing//kprobe_events write=1
Writing event: p:probe/_do_fork _text+748040
Added new event:
  probe:_do_fork   (on _do_fork)

You can now use it in all perf tools, such as:

perf record -e probe:_do_fork -aR sleep 1

We only offset to the LEP if function entry is specified, otherwise, we
offset from the GEP.

Example for issue (3):
-
Before patch:
# perf probe -v _do_fork:%return
probe-definition(0): _do_fork:%return 
symbol:_do_fork file:(null) line:0 offset:0 return:1 lazy:(null)
0 arguments
Looking at the vmlinux_path (8 entries long)
Using /proc/kcore for kernel object code
Using /proc/kallsyms for symbols
Opening /sys/kernel/debug/tracing//kprobe_events write=1
Writing event: r:probe/_do_fork _do_fork+8
Failed to write event: Invalid argument
  Error: Failed to add events. Reason: Invalid argument (Code: -22)

After patch:
# perf probe _do_fork:%return
Added new event:
  probe:_do_fork   (on _do_fork%return)

You can now use it in all perf tools, such as:

perf record -e probe:_do_fork -aR sleep 1


Concept Acked-by: Michael Ellerman 

Cc: Mark Wielaard 
Cc: Thiago Jung Bauermann 
Cc: Arnaldo Carvalho de Melo 
Cc: Masami Hiramatsu 
Cc: Michael Ellerman 
Cc: Balbir Singh 
Cc: Ananth N Mavinakayanahalli 

Naveen N. Rao (2):
  perf tools: Fix kprobe and kretprobe handling with kallsyms on ppc64le
  perf tools: Fix kallsyms perf test on ppc64le

 tools/perf/arch/powerpc/util/sym-handling.c | 43 +
 tools/perf/util/probe-event.c   |  5 ++--
 tools/perf/util/probe-event.h   |  3 +-
 tools/perf/util/symbol-elf.c|  7 +++--
 tools/perf/util/symbol.h|  3 +-
 5 files changed, 43 insertions(+), 18 deletions(-)

-- 
2.7.4

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev