Thread (4 messages) 4 messages, 2 authors, 2024-08-12

Re: [PATCH v2] ARM: stacktrace: Add USER_STACKTRACE support

From: Jinjie Ruan <hidden>
Date: 2024-08-12 06:45:45
Also in: linux-perf-users, lkml


On 2024/8/2 19:48, Russell King (Oracle) wrote:
On Tue, Jul 30, 2024 at 10:15:32AM +0800, Jinjie Ruan wrote:
quoted
Currently, userstacktrace is unsupported for ARM. So use the
perf_callchain_user() code as blueprint to implement the
arch_stack_walk_user() which add userstacktrace support on ARM.
Meanwhile, we can use arch_stack_walk_user() to simplify the implementation
of perf_callchain_user().

A ftrace test case is shown as below:
	# cd /sys/kernel/debug/tracing
	# echo 1 > options/userstacktrace
	# echo 1 > options/sym-userobj
	# echo 1 > events/sched/sched_process_fork/enable
	# cat trace

	......
	              sh-100     [000] .....    51.779261: sched_process_fork: comm=sh pid=100 child_comm=sh child_pid=108
	              sh-100     [000] .....    51.779285: <user stack trace>
	 => /lib/libc.so.6[+0xb3c8c]
	 => /bin/busybox[+0xffb901f1]

Also a simple perf test is ok as below:
	# perf record -e cpu-clock --call-graph fp top
	# perf report --call-graph

	.....
	  [[31m  65.00%[[m     0.00%  top      [kernel.kallsyms]  [k] __ret_fast_syscall

	            |
	            ---__ret_fast_syscall
	               |
	               |--[[31m30.00%[[m--__se_sys_getdents64
	               |          iterate_dir
	               |          |
	               |          |--[[31m25.00%[[m--proc_pid_readdir

Signed-off-by: Jinjie Ruan <redacted>
Do you have a use case for this feature?
To my knowledge, user stack trace is used in both uprobes and ftrace.
Given that userspace is free to do whatever it likes with stack frames,
I think this is going to be hit and miss whether it works.
To be honest, I referred to the implementation of ARM64. Does anyone
have suggestions for improvements or modifications?
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help