注:本文针对MTK平台
一、RAM评估的目的、背景
RAM成本高,对于低端上量的机型来说,希望尽量使用低容量RAM来降低费用。
RAM资源宝贵,对于低容量RAM来说,合理使用RAM显得十分重要,而掌握RAM在正常使用过程中的消耗和剩余,是达到合理使用的前提。
对于众多应用(Native、GMS、3rd),是否会影响RAM的正常使用,需要进行把控。
在系统不断演进升级的状况下,当前RAM大小能否继续满足?是否会产生新的风险?必须通过RAM评估来给决策者提供决策依据。
Google提供了一些进行RAM监控的工具,我们主要通过这些工具进行测验分析。
但是这些工具只能在一个侧面进行测量,而且数据波动巨大,甚至还有错误。
RAM(使用)本身也是一个动态变化的过程。
如何得到手机正常使用时RAM的消耗和剩余状况,并且尽可能准确消除巨大波动带来的误差?
一段时间内的统计均值 + 误差弥补→优化后的更加准确贴近真实值的方法
二、方法步骤
(2.1):准备工作
1.指定评估的user软件版本
2.User软件版本对应的eng版本(主要为了eng版本的boot.img文件)
3.指定评估的样机(各阶段可能性能不同)
4.Adb环境
5.Txt处理工具(AltraEdit-32)
6.Excel处理工具
(2.2):下载user版本,打开USB debug
1.通过Teleweb下载指定评估的user软件版本
2.刷机完毕后,长按电源键开机
3.正常开机进入launcher界面后,放置手机1小时以上
4.通过数据线,将手机连接至电脑
5.打开手机的开发者选项,并勾选USB debug,使手机可以通过adb进行调试
(2.3):获取meminfo信息
1.打开终端,首先读取meminfo信息,使用下面命令:
adb shell cat /proc/meminfo
- 1
结果如下图:
2.对我们有用的是第一项:MemTotal
3.新建一个Excel表格,将其保存,并将kb转换为MB
4.右图转化后方法:461692 / 1024 = 450.8710 (MB)
(2.4):获取procstats信息
1.还是在终端,通过procstats工具获取最近1小时内的内存使用信息,使用下面命令:
adb shell dumpsys procstats --hours 1
- 1
结果如下图:
2.在XP系统中新建一个txt文本文件,将所得到的结果全部复制进去,保存。
3.通过UltraEdit-32工具重新打开该txt文本,通过该工具的查找/替换功能,筛选出所有进程和“TOTAL”关键字对应的行信息。
4.将筛选出的信息,保存在之前建立的Excel表格中等待进一步处理。
(2.5-1):获取FRM、SYS、APP的RAM使用
1.在Excel中将上一步得到的数据进行处理,删除多余无用项,最后保留如下图:
2.每一个进程使用的RAM大小,为倒数第二个数据,上图中用绿色线条画出的数据。
(2.5-2):获取FRM、SYS、APP的RAM使用
1.在Excel中将上一步得到的数据进行处理,判断每一个进程属于FRM、SYS、APP的哪一个,分别分类,处理结果如下图:
2.Actual Size为前面得到的倒数第二列数据,与百分比的乘积所得,它就是每个进程的RAM使用均值统计的结果。
(2.5-3):获取FRM、SYS、APP的RAM使用
1.在进行进程分类的时候,可以参考下表:
(2.5-4):获取FRM、SYS、APP的RAM使用
1.获取FRM的补充进程RAM占用大小,使用下面命令:
user@swd2:~$ watch -n 2 ' adb shell dumpsys meminfo zygote'
user@swd2:~$ watch -n 2 ' adb shell dumpsys meminfo mediaserver'
user@swd2:~$ watch -n 2 ' adb shell dumpsys meminfo drmserver'
user@swd2:~$ watch -n 2 ' adb shell dumpsys meminfo surfaceflinger'
user@swd2:~$ watch -n 2 ' adb shell dumpsys meminfo servicemanager'‘
- 1
- 2
- 3
- 4
- 5
2.Android L中,zygote无法直接使用上面第一条命令的话,可以先adb shell进入手机,然后使用ps | grep zygote,获得zygote对应PID号,然后退出手机,使用下面命令:
watch -n 2 ‘adb shell dumpsys meminfo PID号’
- 1
得到结果如下图:
3.红色标记出来的TOTAL,即为对应的RAM大小,这里单位是KB,需要自己换算成MB。
4.其他4个进程操作相同。
(2.5-5):获取FRM、SYS、APP的RAM使用
1.将补充的FRM进程的信息一起填入之前的Excel表格中,如下图:
2.最终,通过筛选,即可计算出FRM、SYS、APP的RAM占用大小,如下图:
(2.6):获取memory_layout信息
1.之前的数据保存好,告一段落,在终端中输入下面命令获取memory_layout信息:
adb shell cat /proc/mtk_memcfg/memory_layout
- 1
结果如下图:
2.红色标注的,是我们需要的数据,md表示Modem,DRAM表示RAM Total,FB表示FrameBuffer,后面的均是十六进制表示的大小,需要用计算器转换成十进制,此时单位是Byte,需要除以1024后再除以1024,换算成MB。
(2.7):计算得到Kernel大小
1.至此,所有需要获取的数据均已操作完毕,Kernel是一个计算值,公式如下:
Kernel = Total - MemTotal - FB - Modem
在本文中示例中计算结果如下图:
2.Total指的是上一步中的DRAM Total值。
(2.8):计算得到Free大小
1.至此,所有需要RAM消耗的值均已得到,用DRAM Total减去所有使用的,就是Free的大小。Free也是一个计算值,公式如下:
Free = Total - FB - Modem -Kernel - FRM - SYS - APP
2.得到Free值后,将所有结果整理成表,即可输出到报告中去了,最终呈现如下表:
Unit : MB
- eyelike@2015-5-6
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
</div>