Linux 性能分析工具Perf

发布时间 2023-08-07 13:52:18作者: PKICA

Perf全名是Performance Event,是在Linux 2.6.31 以后内建的系统效能分析工具,它随着核心一并释出。藉由perf,应用程式可以利用PMU (Performance Monitoring Unit), tracepoint 和核心内部的特殊计数器(counter) 来进行统计,另外还能同时分析运行中的核心程式码,从而更全面了解应用程式中的效能瓶颈。

 

相较于OProfileGProfperf 的优势在于与Linux Kernel 紧密结合,并可受益于最先纳入核心的新特征。perf 基本原理是对目标进行取样,纪录特定的条件下所侦测的事件是否发生以及发生的次数。例如根据tick 中断进行取样,即在tick 中断内触发取样点,在取样点里判断行程(process) 当时的context。假如一个行程90% 的时间都花费在函式foo() 上,那么90% 的取样点都应该落在函式foo() 的上下文中。

 

Perf 可取样的事件非常多,可以分析Hardware event,如cpu-cyclesinstructions cache-missesbranch-misses …等等。可以分析Software event,如page-faultscontext-switches …等等,另外一种就是Tracepoint event。知道了cpu-cyclesinstructions 我们可以了解Instruction per cycle 是多少,进而判断程式码有没有好好利用CPUcache-misses 可以晓得是否有善用Locality of reference branch-misses 多了是否导致严重的pipeline hazard ?另外Perf 还可以对函式进行采样,了解效能卡在哪边。