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

https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/android_application_profiling.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.py   or
python report_html.py

参考

Linux perf Examples

CPU Flame Graphs

https://hotttao.github.io/2020/01/04/linux_perf/04_perf/

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐