[Android systrace系列] 抓取开机过程systrace
-------------------------------------------------------------------------
这篇文章的小目标:了解抓取开机过程systrace的步骤
-------------------------------------------------------------------------
手机开机的过程,涉及的代码很多,如果能用systrace来分析,事半功倍。
首先分解开机各阶段的耗时,方便后续对照。
只需要在events log过滤boot_progress关键字,就可以得出开机各阶段的耗时。
device:/ $ logcat -b events | grep boot_progress
07-17 08:33:00.241 400 400 I boot_progress_start: 4826
11-29 09:53:34.968 400 400 I boot_progress_preload_start: 7577
11-29 09:53:36.154 400 400 I boot_progress_preload_end: 8763
11-29 09:53:36.519 2072 2072 I boot_progress_system_run: 9127
11-29 09:53:37.088 2072 2072 I boot_progress_pms_start: 9697
11-29 09:53:37.238 2072 2072 I boot_progress_pms_system_scan_start: 9847
11-29 09:53:37.402 2072 2072 I boot_progress_pms_data_scan_start: 10011
11-29 09:53:37.430 2072 2072 I boot_progress_pms_scan_end: 10039
11-29 09:53:37.925 2072 2072 I boot_progress_pms_ready: 10533
11-29 09:53:39.394 2072 2072 I boot_progress_ams_ready: 12003
11-29 09:53:41.324 2072 2637 I boot_progress_enable_screen: 13933
在操作抓取systrace之前,不妨先参考 [Android systrace系列] systrace的信息从哪里来,来熟悉systrace log类别的掩码,和ftrace事件的路径。
下面来说明抓取开机systrace的步骤,这里需要编译手机的userdebug版本
1. 全局搜所有rc文件,将所有关闭trace的命令注释,例如这一句 #write /sys/kernel/debug/tracing/instances/wifi/tracing_on 0
修改完rc文件后,编译手机ROM。
技巧:可以编完一次手机ROM之后,只在out文件夹搜rc文件,缩小搜索范围,然后修改重编。
2. 修改build.prop,并push到手机
2.1 首先提取手机上的build.prop
adb pull /system/build.prop
2.2 添加属性debug.atrace.tags.enableflags,数值为掩码,使能需要的systrace category。
掩码可参考源码//android/system/core/libcutils/include/cutils/trace.h中,ATRACE_TAG开头的宏定义。
debug.atrace.tags.enableflags可以是0x开头的十六进制,也可以用0开头的8进制,或者非0卡开头的十进制。
debug.atrace.tags.enableflags=0xC402A
2.3 将buid.prop重新push到手机
adb root
adb remount
adb push build.prop /system/
提示:也可以在device.mk添加属性debug.atrace.tags.enableflags,然后编译手机ROM
3. 修改atrace.rc,并push到手机
3.1 首先提取手机上的atrace.rc
adb pull /system/etc/init/atrace.rc
在更改buffer权限的下一行,扩大buffer大小 ,以便容纳足够长时间的log
chmod 0666 /sys/kernel/debug/tracing/buffer_size_kb
write /sys/kernel/debug/tracing/buffer_size_kb 51200
3.2 选择需要抓取的kernel ftrace event。
可以先关闭所有开关,就是手机目录 /sys/kernel/debug/tracing/events/ 下所有的trace,下面只列举四行作为例子
write /sys/kernel/debug/tracing/events/power/enable 0
write /sys/kernel/debug/tracing/events/sched/enable 0
write /sys/kernel/debug/tracing/events/vmscan/enable 0
write /sys/kernel/debug/tracing/events/block/enable 0
再打开需要的开关,可以参考atrace.cpp的数组 k_categories
write /sys/kernel/debug/tracing/events/power/cpu_frequency/enable 1
write /sys/kernel/debug/tracing/events/power/idle/enable 1
write /sys/kernel/debug/tracing/events/sched/sched_switch/enable 1
write /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable 1
write /sys/kernel/debug/tracing/events/block/block_rq_issue/enable 1
write /sys/kernel/debug/tracing/events/block/block_rq_complete/enable 1
3.3 正如第1点所说,atrace.rc中,要注释关闭 trace 的命令,因为开机过程的trace是默认关闭的。
#write /sys/kernel/debug/tracing/tracing_on 0
#write /sys/kernel/tracing/tracing_on 0
3.4 为了避免开机完成后继续输出 trace 冲掉开机 log,开机完成后停止trace,在atrace.rc的最后面加入下面两行:
这里注意不要在3.3所说的两行上面加,因为on property会被认为是另一个 action 块的开头
on property:sys.boot_completed=1
write /sys/kernel/debug/tracing/tracing_on 0
3.5 将 atrace.rc push 到 /system/etc/init/atrace.rc
adb root
adb remount
adb push atrace.rc /system/etc/init/atrace.rc
4. 重启开机,执行adb shell "cat /sys/kernel/debug/tracing/trace" > trace.out
这时可以尝试在 chrome://tracing 点击Load加载 trace.out。
提示:文件太大,或者个别log的不完整,会导致加载失败。
如果加载出错,请继续下面的步骤。
5. (可选步骤)太大的 trace.out 文件,可以以纯文本方式,切割出需要分析的启动阶段,单独保存成part.out,再尝试加载。
6. 因不完整 log 而加载失败的 trace 文件(无论切割过或未切割),可以用 trace2html.py 转化,而不是 systrace.py,因为后者也会发生错误
首先下载catapult,https://github.com/catapult-project/catapult
trace2html.py路径://catapult/tracing/bin/ trace2html.py
转化命令是 trace2html.py trace.out
转载请注明出处:https://www.cnblogs.com/zzcperf/p/14054555.html
[Android systrace系列] 抓取开机过程systrace的更多相关文章
- Android测试日志文件抓取与分析
1.log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb shel ...
- android 使用 perfetto 抓取atrace
最近项目的原因需要抓自定义的一些atrace,发现使用google 自带的systrace python脚本抓出来的log使用chrome已经打不开了. 想着用用比较时髦的perfetto吧,发现无论 ...
- android adb命令 抓取系统各种 log
getLog.bat: adb root adb remount adb wait-for-device adb logcat -v time > C:\log.txt 在Android中不同的 ...
- python抓取网页过程
准备过程 1.抓取网页的过程 准备好http请求(http request)->提交对应的请求->获得返回的响应(http response)->获得网页源码 2.GET还是POST ...
- Android Screen Monitor抓取真机屏幕
今天看到一款有点意思的开源软件“android-screen-monitor”, 简要记录如下: 1 简介 一款同步手机真机屏幕到PC上的软件(屏幕实时抓取,有点小卡) 2 开源地址 http://c ...
- Android APP测试的日志文件抓取
1 log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有: ...
- 【android】[转]Android软件测试的日志文件抓取简介
1 log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb s ...
- 抓取Android应用的log
今天测试软件时,遇到一个bug,因为开发说那边不复现,所以为了更好追踪这个问题,需要抓取复现步骤地log. 在网上查了相关资料,同时结合自己遇到的问题,总结如下. 1. 抓取Android 应用log ...
- Nutch学习笔记二——抓取过程简析
在上篇学习笔记中http://www.cnblogs.com/huligong1234/p/3464371.html 主要记录Nutch安装及简单运行的过程. 笔记中 通过配置抓取地址http://b ...
随机推荐
- Kubernetes YAML最佳实践和策略
Kubernetes工作负载最常用YAML格式的文件来定义. YAML的问题之一就是很难描述清单文件之间的约束或关系. 如果你希望检查是否已从受信任的注册表中提取部署到群集中的所有映像,该怎么办? 如 ...
- 水题挑战1:NOIP 2013 选择客栈
丽江河边有\(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号.每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 \sim k-1\) 表示),且 ...
- Union-Find算法详解
今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的.名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣. 说起这个 Union-Find ...
- Java_基础(二)
思想 面向过程的思想: 怎么按步骤把问题解决, 并将步骤编程方法, 一步一步事项, 适合简单不需要协作的任务 面向对象的思想: 怎么设计这个事务 区别与联系 都是解决问题的思维方式, 都是代码组织的方 ...
- CentOS7下一键小白搭建seafile pro云盘
搭建前准备工作 vps或者云服务器,个人搭建使用建议腾讯云,公司搭建使用建议阿里云. 没有服务器的小伙伴可以下面链接进入看下,腾讯云的配置带宽会比阿里云的好点. 阿里云新人优惠服务器 腾讯云云上特惠 ...
- 白话科普系列——双十一,竟然是一场有“预谋”的DDoS攻击?
随著互联网与信息技术的发展,所有人都在享受互联网带来的舒适和便利.如今,无论是个人社交行为,还是商业活动都早已离不开互联网. 但是,网络空间在创造机遇的同时,也带来了威胁.随着企业价值.知名度的提高. ...
- CSS之calc()
calc() 函数支持任意CSS长度单位的混合计算,遵循标准数学运算优先级规则,可以动态计算长度值.注意,calc()函数内部的运算符两侧各加一个空白符,否则会产生解析错误. calc()使用的难点在 ...
- c++实现扫雷游戏 初学
设计思路 全局变量定义地图和一些判断信息 创建三个地图 分别表示 源地图 显示的效果地图 和一个用来判断点位是否被选中的地图 功能: 玩家输入要翻开的格子的行数和列数.用一个函数来翻开目标格子,如 ...
- fork函数拓展
1.fork之后父子进程共享文件:文件引用计数的值改变,共享偏移. 在下面的例子中test.txt为parentchil.如果子进程没有睡眠,两个进程交叉执行,内容不可预测. 1 #include&l ...
- transformer多头注意力的不同框架实现(tensorflow+pytorch)
多头注意力可以用以下一张图描述: 1.使用pytorch自带的库的实现 torch.nn.MultiheadAttention(embed_dim, num_heads, dropout=0.0, b ...