simpleperf、Flame Graph使用简介

目录

背景

simpleperf简介

Simpleperf使用

将Simpleperf工具的可执行程序 push 到手机上

启动手机上的被测程序,ps 出该程序的进程ID

记录运行结果数据perf.data

报告结果数据:将data转为txt

将手机的文件pull到电脑指定路径

使用脚本report_html.py将data转为html文件

下载FlameGraph

生成火焰图

火焰图(Flame Graph)

简介

3.2-火焰图查看方法

3.2.1-鼠标悬浮

3.2.2-点击放大

3.2.3-搜索

demo参考

参考

拓展


背景

在实际的工程中,可以使用simpleperf分析camera gpu内存泄露和GPU内存拆解。一般camera gpu泄露问题总体不太容易定位,在代码层面上,gpu memory的分配和消费涉及到camera app、camera provider和camera server 众多业务逻辑及gpu驱动的memory management。但是如果我们抓住内存分配和回收在内核中的末端接口,从下往上dump 出所有alloc和free的调用,通过对比是可以定位出在哪里出现了alloc但是没有free的情况,也就是可以找到泄漏点,如果能找到泄露点,自然距离解决问题就不远了。

simpleperf简介

        为了达成上述的目的,我们需要一个工具可以追踪gpu驱动kgsl 中定义的关于内存的tracepoints,也就是kgsl_mem_alloc、kgsl_mem_free、kgsl_mem_map,使用这个工具dump出所有调用这三个接口的调用,这种工具有很多,但是如果需要带上用户空间的backtrace可选项就少了。介于kgsl有现成的静态tracepoint以及工具易用度,这里选择了simpleperf。

simpleperf 是原linux平台perf的简化android版本,现在已经收录在google source code中,具体的google 官方代码路径为:https://cs.android.com/android/platform/superproject/+/master:system/extras/simpleperf/

Simpleperf是一个命令行工具,它的工具集包涵client端和host端。

-Client端:运行在Android系统上的可执行文件,负责收集性能数据;shell中端中直接使用simpleperf record或者simpleperf report命令。

-Host端:则运行开发机上,负责对数据进行分析和可视化;可以使用脚本report_html.py进行可视化。

Simpleperf还包含其他脚本:

用于记录事件的脚本(脚本或可执行文件均可记录):app_profiler.py、run_simpleperf_without_usb_connection.py

用于报告的脚本:report.py、report_html.py

用于分析 profiling data 的脚本:simpleperf_report_lib.py

Simpleperf使用

将Simpleperf工具的可执行程序 push 到手机上

adb push ~/system/extras/simpleperf/scripts/bin/android/arm64/simpleperf  /data/local/tmp

adb shell chmod 777 /data/local/tmp/simpleperf

启动手机上的被测程序,ps 出该程序的进程ID

adb shell ps -A | grep "需要分析的应用程序包名"

例如:

  • adb shell ps -A|grep camera
    • 查询provider_pid_1273

记录运行结果数据perf.data

# -p <进程号>

# --duration <持续的时间(秒为单位)>

# -o <输出文件名称>

# --call-graph dwarf 用在32位系统中,64位则采用--call-graph fp

adb shell simpleperf record -p 11555 --duration 10 -o /sdcard/perf.data --call-graph fp

报告结果数据:将data转为txt

adb shell simpleperf report -i /sdcard/perf.data -o /sdcard/perf.txt

将手机的文件pull到电脑指定路径

adb pull /sdcard/perf.txt ./
adb pull /sdcard/perf.data ./

使用脚本report_html.py将data转为html文件

perf.data是一个文本文件,如果嵌套过深,基本就看不懂了。

可通过其中一个脚本(python report.py -g)启动GUI显示可视化结果。

还可以通过如下转化为HTML文件。

python3 ~/system/extras/simpleperf//report_html.py -i perf.data -o simpleperf.html

下载FlameGraph

https://github.com/brendangregg/FlameGraph.git

# 将FlameGraph下载到指定目录simpleperf-demo,并将simpleperf复制到该目录
git clone https://github.com/brendangregg/FlameGraph.git
chmod 777 FlameGraph/flamegraph.pl
chmod 777 FlameGraph/stackcollapse-perf.pl
cp -r /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf /home/mi/simpleperf-demo

生成火焰图

cd /home/mi/simpleperf-demo
python ./simpleperf/report_sample.py > out.perf
./FlameGraph/stackcollapse-perf.pl out.perf >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

repinkply

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值