1、Simpleperf的工作原理
现代的CPU具有一个硬件组件,称为性能监控单元(PMU)。
PMU具有一些硬件计数器,计数一些诸如经历了多少次CPU周期,执行了多少条指令,或发生了多少次缓存未命中等的事件。
Linux内核将这些硬件计数器包装到硬件perf事件(hardware perf events)中。此外,Linux内核还提供了独立于硬件的软件事件和跟踪点事件。
Linux内核通过perf_event_open系统调用将这些都暴露给了用户空间。
这正是simpleperf所使用的机制。
代码路径:/system/extras/simpleperf/
脚本路径:/system/extras/simpleperf/scripts
手机设备的默认路径 :/system/bin/simpleperf
Simpleperf是谷歌将perf工具port到Android上的性能分析工具,它的命令行界面支持与linux-tools perf大致相同的选项,但是它还支持许多Android特有的改进。
具有三个主要的功能:stat,record 和 report。
Stat命令给出了在一个时间段内被分析的进程中发生了多少事件的摘要。以下是它的工作原理:
给定用户选项,simpleperf通过对linux内核进行系统调用来启用分析;
Linux 内核在调度到被分析进程时启用计数器;
分析之后,simpleperf从内核读取计数器,并报告计数器摘要。
Record命令在一段时间内记录剖析进程的样本。它的工作原理如下:
给定用户选项,simpleperf通过对linux内核进行系统调用来启用分析;
Simpleperf在simpleperf和linux内核之间创建映射缓冲区;
Linux内核在调度到被分析进程时启用计数器;
每次给定数量的事件发生时,linux内核将样本转储到映射缓冲区;
Simpleperf从映射缓冲区读取样本并生成perf.data。
Report命令读取perf.data文件及所有被剖析进程用到的共享库,并输出一份报告,展示时间消耗在了哪里。