Simpleperf 工具介绍app_profiler.py -i perf.data

Android-SimplePerf工具浅解_simpleperf的原理-CSDN博客

Simpleperf 工具介绍_simpleperf record-CSDN博客

https://zhuanlan.zhihu.com/p/493733454?utm_id=0

https://zhuanlan.zhihu.com/p/680585194

https://zhuanlan.zhihu.com/p/684969147

首先simpleperf是NDK自带的工具,一般下载NDK后,可以直接使用。

Simpleperf的用处:

现代CPU具有一个硬件组件,为性能监控单元,简称PMU,具有一些硬件计数器,主要是记录程序的CPU占用,及执行的指令数,以及统计缓存未命中事件的数量。

simpleperf包含三个功能,stat, record以及repor。

stat的作用是 统计 一个时间段内被分析的执行的进程发生的事件数。

主要进行以下步骤:1. 给定用户选项,通过对linux 内核进行系统调用启用分析。2. 内核在被分析的进程占用时启用计数器。3. 分析结束后,从内核读取计数器,并报告计数摘要。

record的作用主要是 记录 一个时间段内被分析的执行进程的样本。

主要进行以下步骤: 1. 也是通过对linux内核进行系统调用启动分析。2. 在simpleperf和linux内核之间创建映射缓冲区。3. 内核被调度到分析进程时启动计数器。4. 每次达到了预设定数量的事件发生时,就将样本存储到前面创建的映射缓冲区。4.最后从缓冲区中读取样本并生成perf.data。

report的作用就是从前面得到的perf.data读取数据,分析进程及其调用的其他库中,展示时间消耗热点并输出报告。

tips:编译生成的共享库时,需要去掉-s(strip)编译选项,这样库中可以包含函数符号,这样报告中显示的就是函数名称而不是一些数字!!!

simpleperf report -i data/perf.data
用 -o 参数,指定输出文件,来解决问题:$ adb shell /data/local/tmp/simpleperf record -p <进程号> --duration <持续时间> -o /sdcard/perf.data


python app_profiler.py -p com.tencent.xxx -r "-e cpu-clock -g --duration 60"-o perf.data -lib xxx\Android_ASTC\Game_Symbols_v1\UAGame-arm64

python 脚本(注:脚本被用于使得剖析和解析剖析结果更方便。)
<1> app_profiler.py:被用于剖析一个 android 应用程序。它的主要工作:准备剖析环境、下载 simpleperf 到设备上,在主机上生成并拉出 perf.data 数据文件。( 注:它由 app_profiler.config 配置 )
 

simpleperf record -p $(ps -ef | grep run_sdk |  head -n 1 |awk '{print $2}')  --call-graph fp -f 6000 --duration 10 -m 4096 -o /data/local/tmp/out.bin

说明:record就是记录一段时间已分析进程中的时间摘要。

-p一般后面会紧跟进程号。

$(ps -ef | grep run_sdk | head -n 1 |awk '{print $2}') 这句表示的是执行run_sdk,查找其对应的进程号,正好紧跟在-p的后面

--call-graph:设置堆栈展开的方式,包含三种模式(fp, dwarf,lbr)

fp: perf默认采用的方式,需要关闭对堆栈有影响的编译优化(-fno-omit-frame-pointer,-fno-optimize-sibling-calls),否则可能获取不到正确的堆栈信息。

优点:性能消耗小,生成文件小,report速度快。

缺点:不遵守X86Calling convention的函数无法获取堆栈信息,内联函数无法获取堆栈信息。

dwarf:

优点:堆栈信息最详细,内联函数也可以获取堆栈信息。

缺点:性能消耗大,生成文件大,report时间长 。

lbr:

优点:性能消耗极小,堆栈信息非常准确

缺点:需要处理器支持。

-f: 样本数/s

--duration :持续时间 单位s

-m: 如果记录过程中有事件丢失,可以将 -m 的值调大,默认小于等于1024.

-o:指定输出路径

结果可视化

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值