性能工具Linux-无调用图

性能工具Linux-无调用图,linux,performance,embedded,perf,flamegraph,Linux,Performance,Embedded,Perf,Flamegraph,我正试图使用perfversion3.0.8来评测我的嵌入式系统Linux内核版本3.0.8 我使用zlib和elfutils交叉编译工具/perf 为了熟悉这个工具,我使用了一个使用-g选项编译的简单快速排序示例 我运行perf record-F 99-g-->/qsort(从示例中复制),然后运行perf report--stdio以查看配置文件结果 这是性能报告-g--stdio输出的快照: No kallsyms or vmlinux with build-id f41dfb5606be

我正试图使用
perfversion3.0.8
来评测我的嵌入式系统
Linux内核版本3.0.8

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

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

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

这是
性能报告-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-ommit frame pointer
标志。在ARM嵌入式系统上使调用图与perf一起工作时,我也遇到了一些问题。

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

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


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

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


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

可能我的pref版本非常旧(或/和内核工具)。我尝试了另一个soc(使用更新的内核和perf工具),调用堆栈工作正常。
然而,即使没有这个功能,我也在使用这个工具

我的pref版本可能真的很旧(或者/和内核工具)。我尝试了另一个soc(使用更新的内核和perf工具),调用堆栈工作正常。
然而,即使没有这个功能,我也在使用这个工具

已经做了。它不起作用。所以,我尝试了另一块板(不同的SoC和更新的内核版本),神奇的是它工作得很好。很明显,这个问题影响了我的表现。可能我的内核版本非常非常旧。。。但是,即使没有
-g
选项,我也能够阅读和使用性能分析的结果。已经完成。它不起作用。所以,我尝试了另一块板(不同的SoC和更新的内核版本),神奇的是它工作得很好。很明显,这个问题影响了我的表现。可能我的内核版本非常非常旧。。。但是,即使没有
-g
选项,我也能够阅读和使用性能分析的结果。