基本原理
都是对被监测对象(instructions executed,cache-missed suffered,branches mispredicted等)进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。
常用子系统
perf stat: 执行某个命令,收集特定进程的性能概况(perf list支持的事件),包括CPI、Cache丢失率等。
perf record:收集采样信息,并将其记录在数据文件中。随后可通过其它工具对数据文件进行分析。
perf top:系统性能实时分析。
perf report :读取perf record创建的数据文件,并给出热点分析结果。
perf trace:类似strace,可以跟踪系统调用。
当前分析问题使用比较多的为perf record,我们可以通过其产生火焰图,分析程序的性能瓶颈点。
如下图:rcl_wait占用cpu接近25%。