使用时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,但在其他工具下运行时也是这种情况.
我正在尝试使用 docker 中的 Linux perf 命令来分析 ffmpeg。在第一次运行中,输出很好,“perf report”显示的所有函数名称都很好。在第二次运行中,它仅显示地址而不是函数名称。我正在使用一个在 docker 中运行 ffmpeg 两次的脚本。
脚本中使用的命令是:
perf record ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1500k output1.mp4
sleep 5
perf record ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1500k output1.mp4
Run Code Online (Sandbox Code Playgroud)
运行脚本的命令:
docker run -it --privileged -v $(pwd):/cwd myDocker:someTag /cwd/my_script.sh
Run Code Online (Sandbox Code Playgroud)
我注意到在第二次运行时,它在 perf.data 中找不到 libx264 库。
“perf report”的输出如下所示。非常感谢任何形式的帮助。
输出1:
# Overhead Command Shared Object Symbol
# ........ ....... .................. .........................................................
#
6.35% ffmpeg libx264.so.148 [.] x264_cabac_block_residual_rd_internal_ssse3_lzcnt
3.91% ffmpeg libx264.so.148 [.] x264_cabac_encode_decision_bmi2
3.70% ffmpeg ffmpeg [.] …Run Code Online (Sandbox Code Playgroud)