perf是performance的简称;最常用的性能分析工具。一款随linux内核代码一同发布和维护的性能诊断工具。linux内核2.6.31加入performance Counter, 内核2.6.32改为performance Event。
跟随linux内核发布的perf是一个基于内核的子系统;它提供一个性能分析框架。其利用硬件;CPU、PMU;Performance Monitoring Unit;;功能和软件;软件计数器、tracepoint;功能来进行性能统计。
Perf 可以对程序进行函数级别的采样;从而了解程序的性能瓶颈在哪里。其基本原理是;每隔一个固定时间;就是CPU上产生一个中断;看当前是哪个进程、哪个函数;然后给对应的进程和函数加一个统计值;这样就知道CPU有多少时间在某个进程或某个函数上了。使用 Perf 可以计算每个时钟周期内的指令数;称为 IPC。可以获取耗时的TOP函数等。
软件计数器
其中软件计数器能保存进程切换、tick数等数据。通过tick数;可以获取top函数;制作火焰图等。
PMU
Performance Monitor Unit;性能监视单元;其是CPU提供的一个单元;属于硬件的范畴。通过访问相关的寄存器能读取到CPU的一些性能数据;目前大部分CPU都会提供相应的PMU。PMU硬件产生的事件;比如cache命中。
tracepoints
tracepoints是散落在内核源码中的一些hook;它们可以在特定的代码被执行到时触发;这一特性可以被各种trace/debug工具所使用。比如保存内存分配的次数。perf将tracepoint产生的时间记录下来;生成报告;通过分析这些报告;调优人员便可以了解程序运行期间内核的各种细节;对性能症状做出准确的诊断。
这些tracepint的对应的sysfs节点在/sys/kernel/debug/tracing/events目录下。
参考如下文章等;
perf性能分析工具使用分享_良知犹存的博客-CSDN博客_perf report怎么看
学会使用perf性能分析工具--这一篇就够了_漫游嵌入式的博客-CSDN博客_perf工具