在armv7l上的Perf堆栈回溯

时间:2017-08-01 06:56:26

标签: arm armv7 perf backtrace

我正在尝试使用perf来获取有关系统中堆栈回溯的信息。 我编译了一个应用程序,主要调用f,f调用g1,g1调用g3,g3调用g4,g4调用g2。 我希望我的回溯类似于

  • g2
  • g4
  • G3
  • G1
  • ˚F

但相反,我在perf脚本中裁剪了回溯,比如

a.out  2869 [000] 19414.348571:     225426 cycles:ppp:
                     7ac f (/opt/usr/home/owner/a.out)
                beb3dd2c [unknown] ([unknown])

a.out  2869 [000] 19414.348754:     235721 cycles:ppp:
                     72c g1 (/opt/usr/home/owner/a.out)
                beb3dd24 [unknown] ([unknown])

a.out  2869 [000] 19414.348937:     246486 cycles:ppp:
                     670 g3 (/opt/usr/home/owner/a.out)
                beb3dd14 [unknown] ([unknown])

a.out  2869 [000] 19414.349121:     232929 cycles:ppp:
                     60c g4 (/opt/usr/home/owner/a.out)
                beb3dd04 [unknown] ([unknown])

如何获得有关我的回溯的更多信息?

编译:arm-linux-gnueabi-gcc -O0 -g3 -marm -fno-omit-frame-pointer -funwind-tables main.c

Perf记录:perf记录-g -a

Perf脚本:perf脚本

目标在Linux 3.10.65上运行。

1 个答案:

答案 0 :(得分:1)

ARM的perf中的堆栈展开实现存在问题:某些时候没有实现。 尝试最近的内核和/或最新版本的perf(新的perf工具将在旧内核上运行,但回溯读取的一部分在内核中)。

https://wiki.linaro.org/LEG/Engineering/TOOLS/perf-callstack-unwinding(在那里也提到:How does linux's perf utility understand stack traces?

  

Linux perf具有特定于体系结构的支持代码。 x86有一些矮小的堆叠框架展开支撑,而arm和arm64没有。它应该在ARM32 / 64上实现。   ARMv7的工作是在LEG-760蓝图下完成的。 ..预期结果是perf输出统计信息中用户和内核调用链的回溯。

支持在2013年9月之后提交:http://www.spinics.net/lists/kernel/msg1608919.html3.10 is from june 2013

从3.11或任何更新版本的内核尝试kernel& perf。

相关问题