Sam*_*adt 25 linux performance perf
使用时perf report,我没有看到我的程序的任何符号,而是我得到这样的输出:
$ perf record /path/to/racket ints.rkt 10000
$ perf report --stdio
# Overhead Command Shared Object Symbol
# ........ ........ ................. ......
#
70.06% ints.rkt [unknown] [.] 0x5f99b8
26.28% ints.rkt [kernel.kallsyms] [k] 0xffffffff8103d0ca
3.66% ints.rkt perf-32046.map [.] 0x7f1d9be46650
Run Code Online (Sandbox Code Playgroud)
这是相当缺乏信息的.
相关程序使用调试符号构建,sysprof工具显示相应的符号,Zoom也是如此,我认为它是perf在引擎盖下使用的.
请注意,这是在x86-64上,因此二进制文件是使用编译的-fomit-frame-pointer,但在其他工具下运行时也是这种情况.
min*_*iot 17
这篇文章已经有一年多的历史了,但是当我遇到同样的问题时它出现在我的谷歌搜索结果的顶部,我想我会在这里回答它.经过一番搜索后,我发现在这个相关的StackOverflow问题中给出的答案非常有用.在我的Ubuntu Raring系统上,我最后做了以下事情:
-g(很明显,你需要调试符号)运行perf为
record -g dwarf -F 97 /path/to/my/program
Run Code Online (Sandbox Code Playgroud)
这种方式perf能够处理DWARF 2调试格式,这是gccLinux上使用的标准格式.该-F 97参数将采样率降低到97 Hz.对我的系统来说,默认采样率显然太大,导致这样的消息:
Warning:
Processed 172390 events and lost 126 chunks!
Check IO/CPU overload!
Run Code Online (Sandbox Code Playgroud)
perf report之后的调用会因分段错误而失败.随着采样率的降低,一切都很好.
perf.data文件已经没有上一步骤中的任何错误产生,你可以运行perf report个人等.我喜欢FlameGraph工具生成SVG可视化.其他人报道跑步
echo 0 > /proc/sys/kernel/kptr_restrict
Run Code Online (Sandbox Code Playgroud)
如果需要内核符号,root也可以提供帮助.