HACK#66 进行内核或进程的各种概要分析
本节使用perf tools从各种角度对内核或进程进行概要分析。
perf tools的子命令中具有特定用途的性能分析功能。本节将举例说明其中一部分功能的使用方法。
使用perf stat获取综合统计信息
perf top或perf record/report可以用来分析特定的性能,但是不适用于汇总综合性能。perf stat就是针对指定的命令显示汇总的性能测量结果的功能。下面是显示执行“ls/”时汇总的所有命令的方法。
313,491 branches#166.766 M/sec
11,971 branch-misses#3.819%
24,521 cache-references#13.044 M/sec
7,571 cache-misses#4.027 M/sec
0.002377647 seconds time elapsed
通过使用这个功能,可以测量测定对象程序的缓存未命中、执行命令条数、周期数等,还可以推测出性能特别差的处理是由于缓存未命中、分支预测错误,还是其他原因。一部分开发人员还经常将其用于比较安装性能改善补丁前后的结果,定量地显示效果。
下面查看测定结果的信息。第一个task-clock-msecs表示执行所花费的时间。还会显示消耗了多少CPU时间。context-switches为进程或线程的切换次数。本次仅使用ls进行简单的处理,因此没有发生切换。CPU-migrations为正在运行的CPU切换的次数。page-faults表示按需分页或交换(swapping)等中使用的页面错误的发生次数和频率。cycles是用时钟数量来表示进程执行所花费的CPU时间。instructions表示执行的命令条数。instructions中的IPC是Instructions Per Cycle的缩写。如果这个值较小的话,则每条命令的时钟数量越大,因此认为效率较低(例如,内存访问或I/O的频率较高)。branches表示分支命令的数量和频率,branch-misses表示分支预测错误的比例。另外,cache-references表示缓存的参照,cache-misses表示缓存未命中的频率等。一般来说,缓存未命中的次数越少,IPC越大,就认为程序的执行效率越高。