perf火焰图

此文件中也摘要了其他网站部分内容

备注:仅适用perf命令,也能看到性能信息,火焰图会更加直观。当适用产生火焰图比较费劲时,可直接适用perf命令看性能信息

第一、  查看linux系统是否支持perf

    如果支持linux系统,linux内核必须让

CONFIG_HAVE_PERF_EVENTS=y

CONFIG_PERF_USE_VMALLOC=y

在已运行中的linux系统中,使用"#zcat   /proc/config.gz",命令可现实所有的配置项状态。

在内核源码的“.config”,可查看CONFIG_HAVE_PERF_EVENTS和CONFIG_PERF_USE_VMALLOC的配置项状态

第二、编译出perf

在内核源码目录,进入tools/perf目录,在该目录下执行“make ; make install”,将会产生perf执行文件。

第三、perf的简单使用

#perf list

列出所有可记录的事件。

#perf stat   ./aa.bin

执行后Crl+c会出现一下内容

 Performance counter stats for './aa.bin':

        396.000000      task-clock (msec)         #    0.018 CPUs utilized
             1,893      context-switches          #    0.005 M/sec
                 3      cpu-migrations            #    0.008 K/sec
               740      page-faults               #    0.002 M/sec
       358,181,130      cycles                    #    0.904 GHz
       156,515,885      instructions              #    0.44  insn per cycle
        23,186,645      branches                  #   58.552 M/sec
         1,684,306      branch-misses             #    7.26% of all branches

      21.836086363 seconds time elapsed

Task-clock-msecs:CPU 利用率,该值高,说明程序的多数时间花费在 CPU 计算上而非 IO。

Context-switches:进程切换次数,记录了程序运行过程中发生了多少次进程切换,频繁的进程切换是应该避免的。

Cache-misses:程序运行过程中总体的 cache 利用情况,如果该值过高,说明程序的 cache 利用不好

CPU-migrations:表示进程 t1 运行过程中发生了多少次 CPU 迁移,即被调度器从一个 CPU 转移到另外一个 CPU 上运行。

Cycles:处理器时钟,一条机器指令可能需要多个 cycles,

Instructions: 机器指令数目。

IPC:是 Instructions/Cycles 的比值,该值越大越好,说明程序充分利用了处理器的特性。

Cache-references: cache 命中的次数

Cache-misses: cache 失效的次数。

 

#perf record – e cpu-clock – g ./aa.bin

输出内容如下:

Samples: 1K of event 'cpu-clock', Event count (approx.): 395000000
  Children      Self  Command  Shared Object        Symbol                                                                                                   ◆
+   33.80%     0.13%  dm.bin   [kernel.kallsyms]    [k] handle_sys64                                                                                         ▒
    15.57%    15.57%  dm.bin   libc-2.20.so         [.] _loop_32B                                                                                            ▒
+    9.56%     0.19%  dm.bin   [kernel.kallsyms]    [k] do_sys_open                                                                                          ▒
+    9.49%     0.06%  dm.bin   [kernel.kallsyms]    [k] sys_write                                                                                            ▒
+    9.30%     0.25%  dm.bin   [kernel.kallsyms]    [k] vfs_write                                                                                            ▒
+    8.29%     0.06%  dm.bin   [kernel.kallsyms]    [k] path_openat                                                                                          ▒
+    8.29%     0.00%  dm.bin   [kernel.kallsyms]    [k] do_filp_open                                                                                         ▒
+    7.97%     0.00%  dm.bin   [kernel.kallsyms]    [k] do_sync_write                                                                                        ▒
+    7.78%     0.19%  dm.bin   [kernel.kallsyms]    [k] ext4_file_write                                                                                      ▒
+    7.59%     0.13%  dm.bin   [kernel.kallsyms]    [k] generic_file_aio_write                                                                               ▒
+    7.47%     0.25%  dm.bin   [kernel.kallsyms]    [k] __generic_file_aio_write                                                                             ▒
+    7.03%     0.19%  dm.bin   [kernel.kallsyms]    [k] vfs_fstatat                                                                                          ▒
+    6.96%     0.06%  dm.bin   [kernel.kallsyms]    [k] sys_newstat                                                                                          ▒
     6.52%     6.52%  dm.bin   libc-2.20.so         [.] _IO_vfscanf                                                                                          ▒
+    6.33%     2.15%  dm.bin   [kernel.kallsyms]    [k] link_path_walk                                                                                       ▒
+    6.01%     0.00%  dm.bin   [kernel.kallsyms]    [k] user_path_at_empty                                                                                   ▒
+    5.44%     5.44%  dm.bin   [kernel.kallsyms]    [k] arch_local_irq_restore                                                                               ▒
+    5.32%     0.25%  dm.bin   [kernel.kallsyms]    [k] generic_file_buffered_write                                                                          ▒
+    4.75%     0.06%  dm.bin   [kernel.kallsyms]    [k] filename_lookup                                                                                      ▒
+    4.68%     0.25%  dm.bin   [kernel.kallsyms]    [k] path_lookupat                                                                                        ▒
+    4.56%     0.32%  dm.bin   [kernel.kallsyms]    [k] do_last           

通过将光标移动到前面有“+”号的行,可将此行展开。“-”标示已处于展开状态,若没有符号,标示无法展开。

“childern”列:指示该方法的字方法占用的百分比。

“self”列:标示该方法出子函数外占用的百分比(不包含被调用函数的百分比)

第 三、perf记录进程性能事件(假设进程PID:18263)

#perf record -F 99 -p 18263 -g -- sleep 60

命令执行后会产生perf.data进程事件文件

#perf script > out.perf

对perf.data文件进行处理产生out.perf文件

第四、系统须安装perl工具,解析perl脚本

第五、FlameGraph工具使用

从网站https://github.com/brendangregg/FlameGraph下载FlameGraph,下载后的文件名为解压FlameGraph-master.zip,解压zip文件,得到解压FlameGraph-master目录。

FlameGraph为perl脚本工具,可对perf产生的数据进行处理,产生火焰图。执行如下命令可产生火焰图,out.svg即为最终产生的火焰图。

FlameGraph-master/stackcollapse-perf.pl out.perf > out.folded
FlameGraph-master/flamegraph.pl out.folded  > out.svg

 

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值