Perf全名是Performance Event,是在Linux 2.6.31 以后内建的系统效能分析工具,它随着核心一并释出。藉由perf,应用程式可以利用PMU (Performance Monitoring Unit), tracepoint 和核心内部的特殊计数器(counter) 来进行统计,另外还能同时分析运行中的核心程式码,从而更全面了解应用程式中的效能瓶颈。
相较于OProfile和GProf,perf 的优势在于与Linux Kernel 紧密结合,并可受益于最先纳入核心的新特征。perf 基本原理是对目标进行取样,纪录特定的条件下所侦测的事件是否发生以及发生的次数。例如根据tick 中断进行取样,即在tick 中断内触发取样点,在取样点里判断行程(process) 当时的context。假如一个行程90% 的时间都花费在函式foo() 上,那么90% 的取样点都应该落在函式foo() 的上下文中。
Perf 可取样的事件非常多,可以分析Hardware event,如cpu-cycles、instructions 、cache-misses、branch-misses …等等。可以分析Software event,如page-faults、context-switches …等等,另外一种就是Tracepoint event。知道了cpu-cycles、instructions 我们可以了解Instruction per cycle 是多少,进而判断程式码有没有好好利用CPU,cache-misses 可以晓得是否有善用Locality of reference ,branch-misses 多了是否导致严重的pipeline hazard ?另外Perf 还可以对函式进行采样,了解效能卡在哪边。
标签:perf,性能,Linux,misses,取样,event,Perf From: https://www.cnblogs.com/guxuanqing/p/17611246.html