【问题标题】:Perf Tool Linux - No Call-GraphPerf 工具 Linux - 无调用图
【发布时间】:2016-07-04 12:37:37
【问题描述】:

我正在尝试使用perf version 3.0.8 来分析我的嵌入式系统Linux kernel version 3.0.8

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

为了熟悉这个工具,我使用了一个使用-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

如您所见,根本没有调用跟踪。我真的很想深入研究我的系统,如果没有调用跟踪,这些结果将毫无用处。

【问题讨论】:

    标签: linux performance embedded perf flamegraph


    【解决方案1】:

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

    【讨论】:

    • 已经完成。它不起作用。因此,我尝试了另一块板(不同的 SoC 和更新的内核版本),神奇地它运行良好。显然问题在于我的表现。可能我的内核版本非常非常旧......但是,即使没有-g 选项,我也能够读取和使用性能分析的结果。
    【解决方案2】:

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

    如果 perf 命令因 --call-graph dwarf 而失败,除了 elfutils 之外,您可能还需要使用 libunwind 编译 perf。

    【讨论】:

      【解决方案3】:

      可能我的首选版本真的很旧(或/和内核工具)。我尝试使用另一个 soc(使用更新的内核和性能工具)并且调用堆栈正常工作。 然而,即使没有这个功能,我使用这个工具也是有利可图的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2018-03-22
        • 2021-04-11
        相关资源
        最近更新 更多