simpleperf介绍
Simpleperf是Android平台的一个native层性能分析工具。它的命令行界面支持与linux-tools perf大致相同的选项,但是它还支持许多Android特有的改进。
simpleperf原理
CPU具有一个硬件组件,称为性能监控单元(PMU)。PMU具有一些硬件计数器,计数一些诸如 经历了多少次CPU周期,执行了多少条指令,或发生了多少次缓存未命中 等的事件。
Linux内核将这些硬件计数器包装到硬件perf事件 (hardware perf events)中。此外,Linux内核还提供了独立于硬件的软件事件和跟踪点事件。Linux内核通过 perf_event_open 系统调用将这些都暴露给了用户空间,这正是simpleperf所使用的机制。
简单说,simpleperf的工作原理就是根据的设置的频率进行采样,在CPU上(每个核上都有)产生一个中断,中断到来时记录当前CPU正在运行哪个进程的哪个函数。最终的结果是一个统计量,记录的是一段时间内某个函数被击中的次数百分比,百分比越大说明这段时间这个函数占用的cpu资源越多。
simpleperf功能
使用simpleperf list 命令列出当前所有可用的事件
simpleperf使用
simpleperf的使用分为两步:
1. 记录事件
2. 生产分析报告
使用方式也分为两种:
1. 命令行方式
2. python脚本方式
pythony脚本与simpleperf工具存在于android的ndk中,且相同目录,可以通过locate来定位本地的simpleperf所在目录。
~/bin/android-ndk-r20/simpleperf
reference:
simpleperf record --help
simpleperf report --help
https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/README.md
举例:
命令行方式记录事件
simpleperf record -p 829 -o /data/local/tmp/perf.data -e cpu-cycles:u -f 1000 --duration 10 --call-graph dwarf --post-unwind or
simpleperf record --app com.android.settings -o /data/local/tmp/perf.data -e cpu-cycles:u -f 1000 --duration 10 --call-graph dwarf --post-unwind
命令行方式生产分析报告
simpleperf report -i /data/local/tmp/perf.data --children -g caller > /data/local/tmp/perfdata
pythony脚本记录事件
python app_profiler.py -p mediacenter
python app_profiler.py --pid xxx
pythony脚本生产分析报告
python report_html.py (windows)
./report_html.py (linux)