【内部】内存标准测试工具
来源:飞书 docx(obj_token: ClQhdAuKYoMgrTxAUGwcosWYncb)
外部工具链接:【外部】内存标准测试工具-仅ODM使用
外部工具(校准图形内存)MTS_ODM工具更新记录
English Version: Memory Standard 2.0 Test Tool
工具问题咨询:@唐慧
一、测试工具(MTS)
作用:
用于应用前后台内存和高优内存池测试,之前的半自动化测试工具也集成到了里面,方便测试
工具下载:
需要 Linux 环境,windows 用户请使用虚拟机安装 ubuntu 后使用。
工具会实时更新,所以只支持 git 安装!!!使用旧版本安装遇到问题请参考常见问题3
工具更新日志记录:https://mi.feishu.cn/wiki/PVY7wMwCjiKRsikSVARce66Wndg
注:校准图形内存统计方式需切换分支 git checkout memory_gl_egl
【通用测试要求仅OS4或竞品机需要校准图形内存,该分支已自动判断是否为OS4或竞品机,其他类型默认不校准图形内存】
git clone git@git.n.xiaomi.com:memory-test-suite/mts.git && cd mts && bash scripts/install.sh && source ~/.bashrc && bash scripts/install.sh如出现 Success 则安装成功,否则安装失败,请检查下面列出的常见问题。
常见问题:
- 如果 clone 提示权限问题,请检查能否通过浏览器访问 https://git.n.xiaomi.com/memory-test-suite/mts,如果可以则不是权限问题,请检查下一条。
- 如果之前未从 git 上 clone 过代码,可能出现如下问题。解决方案:通过 https://git.n.xiaomi.com/-/user_settings/ssh_keys 配置 git keys 后再 clone,配置过程可以参考 https://blog.csdn.net/xyzchenxiaolin/article/details/51852333
📷 图片描述: 在Ubuntu虚拟机中运行git clone命令时出现Permission denied (publickey)错误信息
- 在 ubuntu 虚拟机里运行由 windows 下载或 clone 的代码会报如下错误。解决方案:在 ubuntu 内部使用 git clone 下载代码。
📷 图片描述: 在Ubuntu虚拟机中运行bash scripts/install.sh脚本时出现
\rcommand not found及syntax error错误信息
- 旧版本安装脚本有问题,如果使用旧版安装,启动终端时会出现以下问题:
📷 图片描述: Ubuntu终端中运行Python3脚本时出现pyenv init警告信息
解决方法:把 ~/.pyenv(在 /home/<用户名>/ 路径下,找不到按 ctrl + h 就能看见了)这个文件夹删掉,再把 ~/.bashrc 中这三句删掉,重启终端,然后按本文给出的方式安装
📷 图片描述: 终端中执行的pyenv配置命令代码示例(export PATH, eval pyenv init, eval pyenv virtualenv-init)
fatal: could not create work tree dir 'mts': Permission denied
解决方法:参考 https://stackoverflow.com/questions/16376035/fatal-could-not-create-work-tree-dir-kivy
ModuleNotFoundError: No module named 'xlsxwriter'
解决方法:python3 -m pip install xlsxwriter
ModuleNotFoundError: No module named 'openpyxl'
解决方法:python3 -m pip install openpyxl
-
📷 图片描述: MTS运行时xlsxwriter add_format对象没有set_color属性引发AttributeError,提示安装版本为3.2.0
解决方法:
python3 -m pip uninstall xlsxwriter
python3 -m pip install xlsxwriter==3.2.0
MTS(内存测试集成工具)目录简介:
- develop:开发者常用且常修改的文件,全部为软连接
- mts:主功能实现
- appDump:应用内存监控器子功能
- helper:公共函数包
- memoryDist:生成内存分布表子功能
- memDump:保存内存信息子功能
- main.py:mts 主功能入口
- out:保存程序运行结果,包括各种保存、生成的数据。默认不加入 git,可以通过
make clean清除 - scripts:提供了一些方便易用的脚本
- start.py:mts 快捷入口
二、内存标准
MIUI LITE:入门机,内存2-4G手机
MIUI:中高端机,内存>=6G手机
前台标准: 取测试过程中的前台峰值
后台标准:测试完成取静置3min的值
三、测试注意事项
-
每个应用测试前,需要逐一打开,点掉弹框,设置10分钟/永不锁屏,然后重启手机开始测试;
-
刷机后连接wifi,登录小米账号(国际版本需要登录谷歌账号),测试前,需设置不自动更新,使用应用预置版本进行测试;
不自动更新步骤:点开设置——我的设备——点击系统,——点击右上角↗️三点 ——选择系统更新设置 ——选择自动下载,关闭
-
注意脚本自动获取的进程名,是否跟《【内部】内存标准测试方法》(表格E列)一致,若不一致需要自己手动输入进程名;
-
对应测试场景,每测完一条case,都需要一键清理,再测试下一条case。
四、应用前后台内存测试方法
测试方法:
测试工具使用方法:
先点开测试应用,终端输入如下命令,应用名称支持输入拼音汉字,例如 设置,支持输入”设置”,“shezhi”,“sz”(点此查看所有业务拼音对应关系)。当终端出现”实时抓取内存中…, 操作APP结束后, 请按Enter键,记录前台5s值”,开始按照上述测试方法执行测试用例,测试用例执行结束,按【Enter】,等3min出结果。支持的进程详见手机进程-业务对照表
场景内存新增校准图形内存抓取
‼️ 场景内存新增校准图形内存抓取 切换分支 git checkout memory_gl_egl 执行命令为: python3 start.py gpumem
📌 测试鸿蒙next执行命令为 :python start.py appdump —hidumper 需安装hdc,下载安装链接:https://developer.huawei.com/consumer/cn/download/
$ python start.py appdump
No: 序列号 设备名 状态
1: yp6dlr49nfeqkn4p M2007J22C device
2: jfx4pz7h7pauga4h M2007J22C device
请选择手机(输入序号):2
当前测试设备:jfx4pz7h7pauga4h cannon
请打开待测APP,用于获取测试包名,然后按Enter键继续测试,或者输入'q'结束测试:
[RunShell] command > adb -s jfx4pz7h7pauga4h shell dumpsys window | grep mCurrentFocus
[RunShell] output::std_result > mCurrentFocus=Window{7c0461 mode=0 rootTaskId=10 u0 com.android.settings/com.android.settings.MainSettings}
请输入应用名称(拼音首字母):sz
匹配到应用:设置, 正在获取手机进程,请稍后...
当前包名:com.android.settings, 所有进程:['com.android.settings:remote', 'com.android.settings']
如果进程无误,请按Enter键后开始操作APP,
如果进程有误,请自行输入所有待测试进程名称,各进程间用空格分隔:
请输入[待测试进程场景],然后按Enter键后开始操作APP:
实时抓取内存中..., 操作APP结束后, 请按Enter键,记录前台5s值
com.android.settings:remote 22
com.android.settings 69
TOTAL 92
-----------------------
com.android.settings:remote 22
com.android.settings 76
TOTAL 98
-----------------------
com.android.settings:remote 22
com.android.settings 88
TOTAL 110
-----------------------
----------sleep 5s----------
----------等待30秒,自动记录后台测试结果----------
----------sleep 20s----------
send-trim-memory : com.android.settings // 此步报错忽略即可
请打开待测APP,用于获取测试包名,然后按Enter键继续测试,或者输入'q'结束测试: q
已保存 应用内存信息 到 /home/cuiyangpei/Documents/work-MIUI/tool/memory_test/mts/out/appdump/2021-03-30_11-28-58 中动图参考:
📷 图片描述: Linux系统终端中执行python3 start.py appdump命令的内存测试脚本生成界面
前台和后台测试值详见脚本生成的mts/out/appdump/2021-xx-xx/***result***.txt文件
示例:
应用版本: RELEASE-4.25.1.4225-02099051
cameraserver 9 9 9----------测试之前 memory(MB)
android.hardware.camera.provider@2.4-service_64 135 135 135----------测试之前 memory(MB)
com.android.camera 166 131 129----------测试之前 memory(MB)
com.huawei.camera 0 0 0----------测试之前 memory(MB)
TOTAL: 310----------测试之前 memory(MB)
TOTAL-EGL: 275----------减去进程EGL的测试之前 memory(MB)
TOTAL-Graphics: 273----------减去进程Graphics的测试之前 memory(MB)
cameraserver 9 9 9 --------前台峰值 memory(MB)
android.hardware.camera.provider@2.4-service_64 235 235 233 --------前台峰值 memory(MB)
com.android.camera 234 150 139 --------前台峰值 memory(MB)
com.huawei.camera 0 0 0 --------前台峰值 memory(MB)
TOTAL: 478--------前台峰值 memory(MB)
TOTAL-EGL: 394--------减去进程EGL的前台峰值 memory(MB)
TOTAL-Graphics: 381--------减去进程Graphics的前台峰值 memory(MB)
cameraserver 9 9 9----------前台操作完静置5秒钟 memory(MB)
android.hardware.camera.provider@2.4-service_64 236 236 233----------前台操作完静置5秒钟 memory(MB)
com.android.camera 236 152 141----------前台操作完静置5秒钟 memory(MB)
com.huawei.camera 0 0 0----------前台操作完静置5秒钟 memory(MB)
TOTAL: 481----------前台操作完静置5秒钟 memory(MB)
TOTAL-EGL: 397----------减去进程EGL的前台操作完静置5秒钟 memory(MB)
TOTAL-Graphics: 383----------减去进程Graphics的前台操作完静置5秒钟 memory(MB)
cameraserver 9 9 9----------后台静置30秒 memory(MB)
android.hardware.camera.provider@2.4-service_64 136 136 136----------后台静置30秒 memory(MB)
com.android.camera 155 132 130----------后台静置30秒memory(MB)
com.huawei.camera 0 0 0----------后台静置30秒 memory(MB)
//高优实际值
//计算方法:应用高优进程内存占用之和
//适用场景:1.小米机器不同版本内存占用对比测试,比如MIUI11与MIUI12高优内存对比
2.内存标准测试,比如小米机器与内存标准对比
高优实际值(TOTAL): 145----------后台静置30秒 memory(MB)
//高优参考值(TOTAL-EGL)
//计算方法:应用高优进程内存占用之和 - 竞品未统计的EGL内存之和
//适用场景:竞品对比测试,比如小米机器与竞品机器对比
高优参考值(TOTAL-EGL): 145----------减去进程EGL的后台静置30秒 memory(MB)
//高优参考值(TOTAL-Graphics)
//计算方法:应用高优进程内存占用之和 - 竞品未统计Graphics的内存之和
//适用场景:竞品对比测试,比如小米机器与竞品机器对比
高优参考值(TOTAL-Graphics): 145----------减去进程Graphics的后台静置30秒 memory(MB)
非高优实际值(TOTAL): 155----------后台静置30秒memory(MB)
非高优参考值(TOTAL-EGL): 132----------减去进程EGL的后台静置30秒 memory(MB)
非高优参考值(TOTAL-Graphics): 130----------减去进程Graphics的后台静置30秒memory(MB)
//实际值
//计算方法:应用所有进程的内存占用之和
//适用场景:1.小米机器不同版本内存占用对比测试,比如MIUI11与MIUI12内存占用情况对比
2.内存标准测试,比如小米机器与内存标准对比
实际值(TOTAL): 300----------后台静置30秒 memory(MB)
//参考值(TOTAL-EGL)
//计算方法:应用所有进程的内存占用之和 - 竞品未统计的EGL内存之和
//适用场景:竞品对比测试,比如小米机器与竞品机器对比
参考值(TOTAL-EGL): 277----------减去进程EGL的后台静置30秒 memory(MB)
//参考值(TOTAL-Graphics)
//计算方法:应用高优进程内存占用之和 - 竞品未统计Graphics的内存之和
//适用场景:竞品对比测试,比如小米机器与竞品机器对比
参考值(TOTAL-Graphics): 275----------减去进程Graphics的后台静置30秒memory(MB)
(PS:以上 标红为”高优实际值”,“高优参考值”,“实际值”,“参考值”的详细解释)
取值:前台峰值、前台静置、后台
(这三个值里面都有TOTAL TOTAL-EGL,TOTAL-GL,TOTAL-Graphics,关于什么时候用TOTAL TOTAL-EGL,TOTAL-GL,TOTAL-Graphics,见【取值常见问题】1)
取值常见问题:
1.每个值应用的场景?
实际值(TOTAL):小米自己机型对比,小米和”内存标准”对比
参考值(TOTAL-EGL,TOTAL-GL,TOTAL-Graphics):“竞品”对比
(小米机型根据竞品的是否有EGL、GL、Graphics的实际情况取值,进行比对)
注意:内存标准验收测试,以实际值和标准值做对比,附加参考值供分析
2.后台不同值之间的关系?
实际值 = 高优实际值 + 非高优实际值
参考值 = 高优参考值 + 非高优参考值
3.后台什么时候取高优/非高优的值?
测试任务指明要"高优内存"、"非高优内存"相关数据时。(一般情况下取实际值/参考值)
(脚本会自动判定,测试的进程为”应用高优进程”还是”非应用高优进程”,在生成的***result***.txt文件中可以查看)
根据之前的测试内容重新生成结果:
仅支持 1.1 及之后版本生成的测试内容,如无法生成,请检测程序版本。
$ python3 start.py -v
Memory Test Suite: V1.1注意:根据最终测试结果,若发现超过标准,则需要手动抓取hprof文件,具体方法如下:
python3 start.py appdump --hprof 在前台结束和后台3分钟后抓取hprof额外添加功能
·额外获取高通AI-cpu+npu峰值
在原场景内存命令后添加 —ai,会同时监控npu数据(最后结果生成表格中展示),执行命令如下:
python3 start.py appdump --ai·场景内存获取同时 抓取gfxinfo&Surfaceflinger
执行命令:python3 start.py appdump —gs
五、高优内存池测试方法
测试方法:
测试工具使用方法:
开机/日常使用,按照如上测试方法,所有用例执行完成后,再在终端输入如下命令:
$ python3 scripts/memory_dist.py
No: 序列号 设备名 状态
1: yp6dlr49nfeqkn4p M2007J22C device
2: jfx4pz7h7pauga4h M2007J22C device
请选择手机(输入序号):1
正在保存 yp6dlr49nfeqkn4p:
1: 设备信息
2: /proc/meminfo
3: dumpsys meminfo
生成 内存分布表 : /home/cuiyangpei/Documents/work-MIUI/tool/memory_test/mts/out/memdist/2021-03-30_11-47-00/memory_distribution.xlsx
链接 手机内存信息: /home/cuiyangpei/Documents/work-MIUI/tool/memory_test/mts/out/memdist/2021-03-30_11-47-00/source动图参考:
📷 图片描述: 高优内存池测试中终端界面,展示执行memory_dist.py命令的操作场景
高优进程内存结果详见mts/out/memdist/2021-xxx/memory_distribution.xlsx
更多使用用法详见:https://git.n.xiaomi.com/liuchao12/mts/-/blob/master/README.md
六、开机剩余内存测试方法
测试方法:
前提条件
📌 1. 测试机型要求:出厂默认状态 2. 线刷normal版本或恢复出厂设置(默认使用稳定版本。开发版需使用pref版) 3. 开机后,关闭WiFi,设置中打开开发者选项,开启USB调试模式,开启USB调试(安全设置),设置自动锁屏时间为屏幕永不休眠/无操作后10分钟,一键清理内存(最近任务的一键清理按钮),重启手机 4. 注:
- USB连接:为了保证手机运行状态,避免直接连接USB对内存的影响,USB连接电脑后解锁手机,运行测试工具(MTS)
- 开机引导处:同意必须的条约、作为新手机使用、跳过密码设置、跳过小爱、默认导航方式miui14:(“基础设置”页面点”继续”按钮)
- 不登陆帐户,不能带水印
- 不要使用调起/使用键盘
- 不要使用带’搜索’的功能
检查设备状态(此处测试遇到问题,可联系徐雨晴) (1)检查硬件批次,最好是P2或P2之后的机器
方法1:查看手机背面有一段带有镭雕号的字样:
N2-P1-AS1-10378, 红色高亮部分为手机的硬件批次 方法2:
adb shell getprop | grep -i hwlevel
如果该项目还没到P2阶段,请忽略第5点(1)(2)(3)的所有测试条件。
(2)确认硬件批次为P2/P2之后的前提下,检查手机是否打开secureboot
验证方法:adb shell getprop ro.boot.secureboot 预期结果:返回值:1 手机一般是在工厂过站时刷secureboot, 在确保硬件批次正确的前提下,secureboot一 般是开着的。(3)确保设备为minidump debugpolicy状态
检查方法:adb shell getprop ro.boot.dp 预期结果:返回值:0x20!注:如果返回值不为0x20,切到minidump debugpolicy版本的操作方法:
去corgi平台下载该项目工厂版本线刷包,注意筛选条件只 项目名称+工厂版+userdebug 这三个限制条件(找不到工厂包的把除了这三个的限制条件都去掉),解压缩,imges文件夹里有apdp_minidump.mbn, 用fastboot烧写:
fastboot flash apdp ./apdp_minidump.mbn
注意这里是你下载的 apdp_minidump.mbn 的路径
fastboot reboot
# 开机后再次验证 ro.boot.dp 返回值是否为0x20
📌 测试步骤(以下测试步骤为脚本自动执行) 1.重启手机,解锁静置8min 2.计算5轮结果的平均值作为最后的结果。 ⚠️ 重启一次获取一次数据,共重启5轮 每轮数据获取步骤 1、设备信息: device.txt 2、获取smaps信息-smaps文件夹 3、/proc/meminfo 4、/proc/vmallocinfo 5、/proc/slabinfo 6、dumpsys meminfo -a (开机内存) / dumpsys meminfo -S (老化内存) 7、dumpsys meminfo system_server 8、/proc/zoneinfo 9、/sys/kernel/debug/f2fs/status 10、抓取参考数据GC ·/proc/meminfo · dumpsys meminfo -a ·/proc/zoneinfo 11、抓取bugreport 12、抓取hprof 13、截图,保存手机当前桌面 14、adb shell ps -e : ps_e.txt 15、adb shell ps -eT : ps_eT.txt
测试工具使用方法:
按照如上前提条件设置完成后,再在终端输入如下命令:
🔹 重新解析生成汇总表格数据:python3 start.py memdist -i (几轮原始数据汇总路径)
‼️ 校准图形内存: python3 memory_dist.py (需要切换分支: git checkout memory_gl_egl)
📌 测试鸿蒙next执行命令为 :python scripts/hy_memory_dist.py
$ python3 memory_dist.py
上次更新时间 2022年 12月 05日 星期一 17:16:04 CST,自动更新程序中...
重启手机中...
静置 480 秒
获取数据第 1 次
正在保存 482d8573:
1: 设备信息
2: /proc/meminfo
3: dumpsys meminfo
静置 60s, 抓取参考数据(GC)
抓取bugreport中
END
重启手机中...
静置 480 秒TOTAL-EGL: 64----------减去进程EGL的前台操作完静置5秒钟 memory(MB)
TOTAL-GL: 64----------减去进程GL的前台操作完静置5秒钟 memory(MB)
TOTAL-Graphics: 62----------减去进程Graphics的前台操作完静置5秒钟 memory(MB)
获取数据第 1 次
正在保存 482d8573:
1: 设备信息
2: /proc/meminfo
3: dumpsys meminfo
静置 60s, 抓取参考数据(GC)
抓取bugreport中
END
重启手机中...
静置 480 秒
获取数据第 1 次
正在保存 482d8573:
1: 设备信息
2: /proc/meminfo
3: dumpsys meminfo
静置 60s, 抓取参考数据(GC)
抓取bugreport中
END
重启手机中...
静置 480 秒
获取数据第 1 次
正在保存 482d8573:
1: 设备信息
2: /proc/meminfo
3: dumpsys meminfo
静置 60s, 抓取参考数据(GC)
抓取bugreport中
END
重启手机中...
静置 480 秒
获取数据第 1 次
正在保存 482d8573:
1: 设备信息
2: /proc/meminfo
3: dumpsys meminfo
静置 60s, 抓取参考数据(GC)
抓取bugreport中
END
第1轮测试
生成 内存分布表 : /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/memory_distribution_1.xlsx
链接 手机内存信息: /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/source_1
第2轮测试
生成 内存分布表 : /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/memory_distribution_2.xlsx
链接 手机内存信息: /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/source_2
第3轮测试
生成 内存分布表 : /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/memory_distribution_3.xlsx
链接 手机内存信息: /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/source_3
第4轮测试
生成 内存分布表 : /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/memory_distribution_4.xlsx
链接 手机内存信息: /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/source_4
第5轮测试
生成 内存分布表 : /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/memory_distribution_5.xlsx
链接 手机内存信息: /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/source_5
生成 总表 : /home/mi/PycharmProjects/mts/out/memdist/2022-12-12_12-14-57/memory_distribution.xlsx七、内存压力测试(Monkey)(待完善)
前置条件
设置中打开开发者选项,开启USB调试模式,开启USB调试(安全设置),设置自动锁屏时间为屏幕永不休眠/无操作后10分钟,直接进入系统测试工具使用方法:
7.1 设置配置文件
在配置文件中(app_monkey.ini文件)列出需要测试的应用以及每个应用测试时长(默认1小时)
[packages]
# 应用进程可在 applist.json 文件自行添加
name=
设置
[basic]
# 应用 monkey 时长(s)
timeout=3600注意:应用配置可能不全,可以在applist.json中自行配置应用包名及进程列表
7.2 运行脚本
单应用 Monkey
# python3 start.py appdump --monkey
上次更新时间 2022年 12月 05日 星期一 17:16:04 CST,自动更新程序中...
error: 不能变基式拉取:您有未暂存的变更。
error: 请提交或贮藏它们。
更新失败,请手动执行 git pull 更新。
com.android.settings 31
com.android.settings:remote 0
com.xiaomi.misettings 0
com.xiaomi.misettings:remote 0
TOTAL 31
-----------------------
shell 23985 1798 5175588 118636 futex_wait_queue_me 0 S com.android.commands.monkey
2023-01-12_22-03-52
2023-01-12_22-03-54
----------请稍后,程序自动记录后台测试结果----------
----------sleep 20s----------
com.android.settings 31 31 31 31
com.android.settings:remote 0 0 0 0
com.xiaomi.misettings 0 0 0 0
com.xiaomi.misettings:remote 0 0 0 0
send-trim-memory : com.android.settings
send-trim-memory : com.android.settings:remote
send-trim-memory : com.xiaomi.misettings
send-trim-memory : com.xiaomi.misettings:remote
----------sleep 180s----------
已保存 应用内存信息 到 /home/mi/PycharmProjects/mts/out/monkey/2023-01-12_22-03-52 中八、外部用户
- 外部测试:【外部】内存标准测试工具-仅ODM使用
- 三方或商业预装应用:内存测试工具(三方应用)