Perf工具Linux

我打算使用perf version 3.0.8来剖析我的嵌入式系统Linux kernel version 3.0.8

我使用zlib和elfutils交叉编译工具/ perf。

为了熟悉这个工具,我使用了使用-g选项编译的简单快速排序示例。

我运行perf record -F 99 -g -- ./qsort (从示例中复制),然后执行perf report --stdio查看我的配置文件结果。

这是perf report -g --stdio输出的快照:

No kallsyms or vmlinux with build-id f41dfb5606beda1d75171db69f1e9466cb4868ba was found
[hi3518_dsu] with build id f41dfb5606beda1d75171db69f1e9466cb4868ba not found, continuing without symbols
No kallsyms or vmlinux with build-id a0f9a05faf6bcfb72282a03e048b47e8a8c0f2ec was found
[hi3518_tde] with build id a0f9a05faf6bcfb72282a03e048b47e8a8c0f2ec not found, continuing without symbols

# Events: 256  cpu-clock
    #
    # Overhead  Command      Shared Object                  Symbol
    # ........  .......  .................  ......................
    #
        96.88%    qsort  qsort              [.] partition
         0.78%    qsort  [kernel.kallsyms]  [k] __do_softirq
         0.39%    qsort  [kernel.kallsyms]  [k] __wake_up_sync_key
         0.39%    qsort  [kernel.kallsyms]  [k] get_page_from_freelist
         0.39%    qsort  [kernel.kallsyms]  [k] __memzero
         0.39%    qsort  [kernel.kallsyms]  [k] div_s64_rem
         0.39%    qsort  [hi3518_tde]       [k] 0x58
         0.39%    qsort  [hi3518_dsu]       [k] 0x8154

正如你所看到的,根本不存在呼叫跟踪。 我真的很有兴趣深入研究我的系统,如果没有调用跟踪,这些结果是无用的。


在编译您试图分析的程序时,使用-fno-omit-frame-pointer标志可能会有一些运气。 我还遇到了一些问题,使得调用图在ARM嵌入式系统上可以正常工作。


我找到了解决方案。 运行perf --call-graph dwarf -- ./qsort确保您已经用矮调试符号(-g,-ggdb或-gdwarf标志)编译了该程序。 另外,您可能需要为您在系统上使用的任何库安装调试符号。 https://fedoraproject.org/wiki/StackTraces显示了如何为Fedora安装调试符号包。

如果perf命令失败并带有--call-graph矮人,除了elfutils之外,您可能需要使用libunwind编译perf。


可能我的pref版本真的很旧(或/和内核工具)。 我尝试了另一个soc(使用更新的内核和perf工具),并且callstack正常工作。 但是,即使没有这个功能,我也使用这个工具获利。

链接地址: http://www.djcxy.com/p/80039.html

上一篇: Perf Tool Linux

下一篇: What does perf's option to measure events at user and kernel levels mean?