查看程序运行热点(perf)

主要介绍一个定位程序热点的工具:perf。

  性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足够高,采样时间足够长,那么以上推论就比较可靠。因此,通过 tick 触发采样,我们便可以了解程序中哪些地方最耗时间,从而重点分析。

Perf中的子工具
1.         annotate 根据数据文件,注解被采样到的函数,显示指令级别的热点。

2.         archive  根据数据文件中记录的build‐id,将所有被采样到的 ELF文件打成压缩包。利用此压缩包,可以在任何机器上分析数据文件中记录的采样数据。

3.         bench Perf中内置的benchmark,目前包括两套针对调度器和内存管理子系统的benchmark。

4.         buildid‐cache 管理 perf的 buildid 缓存。每个 ELF 文件都有一个独一无二的 buildid。Buildid 被 perf用来关联性能数据与ELF文件。

5.         buildid‐list 列出数据文件中记录的所有buildid。

6.         diff  对比两个数据文件的差异。能够给出每个符号(函数)在热点分析上的具体差异。

7.         evlist  列出数据文件中的所有性能事件。

8.         inject  该工具读取perfrecord工具记录的事件流,并将其定向到标准输出。在被分析代码中的任何一点,都可以向事件流中注入其它事件。

9.          kmem  针对内存子系统的分析工具。

10.     kvm  此工具可以用来追踪、测试运行于KVM 虚拟机上的GuestOS。

11.     list   列出当前系统支持的所有性能事件。包括硬件性能事件、软件性能事件以及检查点。

12.     lock  分析内核中的加锁信息。包括锁的争用情况,等待延迟等。

13.     record  收集采样信息,并将其记录在数据文件中。随后可通过其它工具对数据文件进行分析。

14.     report  读取 perfrecord创建的数据文件,并给出热点分析结果。

15.     sched   针对调度器子系统的分析工具。

16.     script   执行 perl或 python 写的功能扩展脚本、生成脚本框架、读取数据文件中的数据信息等。

17.     stat   剖析某个特定进程的性能概况,包括CPI、Cache 丢失率等。

18.     test  Perf对当前软硬件平台的测试工具。可以用此工具测试当前的软硬件平台(主要是处理器型号和内部版本)是否能支持perf的所有功能。

19.     timechart  生成一幅描述处理器与各进程状态变化的矢量图。

20.     top 类似于 Linux 的 top 命令,对系统性能进行实时分析。

21.     trace strace inspired tool.

22.     probe 用于定义动态检查点

运行命令“perf record -p 32554”后,会产生一个perf.data的文件,使用“perf report”查看结果:


查看程序运行热点(perf)_第1张图片

perf record 的-g -e等选项很实用,可以使用perf record -h来查看学习

参考:

http://blog.163.com/121abc_603/blog/static/64394318201382922940555/

http://blog.csdn.net/trochiluses/article/details/10261339

http://blog.chinaunix.net/uid-10540984-id-3854969.html

你可能感兴趣的:(程序)