RAM评估方法详解

来源:互联网 发布:网络高清数字矩阵 编辑:程序博客网 时间:2024/05/17 15:36

注:本文针对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

结果如下图:
这里写图片描述
2.对我们有用的是第一项:MemTotal

3.新建一个Excel表格,将其保存,并将kb转换为MB

4.右图转化后方法:461692 / 1024 = 450.8710 (MB)

(2.4):获取procstats信息

1.还是在终端,通过procstats工具获取最近1小时内的内存使用信息,使用下面命令:

adb shell dumpsys procstats --hours 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'

2.Android L中,zygote无法直接使用上面第一条命令的话,可以先adb shell进入手机,然后使用ps | grep zygote,获得zygote对应PID号,然后退出手机,使用下面命令:

watch -n 2 ‘adb shell dumpsys meminfo PID号’

得到结果如下图:
这里写图片描述
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

结果如下图:
这里写图片描述
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
0 0
原创粉丝点击