【内部】内存标准测试工具

来源飞书 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 则安装成功,否则安装失败,请检查下面列出的常见问题。

常见问题:

  1. 如果 clone 提示权限问题,请检查能否通过浏览器访问 https://git.n.xiaomi.com/memory-test-suite/mts,如果可以则不是权限问题,请检查下一条。
  2. 如果之前未从 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)错误信息

  1. 在 ubuntu 虚拟机里运行由 windows 下载或 clone 的代码会报如下错误。解决方案:在 ubuntu 内部使用 git clone 下载代码。

📷 图片描述: 在Ubuntu虚拟机中运行bash scripts/install.sh脚本时出现\r command not found及syntax error错误信息

  1. 旧版本安装脚本有问题,如果使用旧版安装,启动终端时会出现以下问题:

📷 图片描述: Ubuntu终端中运行Python3脚本时出现pyenv init警告信息

解决方法:把 ~/.pyenv(在 /home/<用户名>/ 路径下,找不到按 ctrl + h 就能看见了)这个文件夹删掉,再把 ~/.bashrc 中这三句删掉,重启终端,然后按本文给出的方式安装

📷 图片描述: 终端中执行的pyenv配置命令代码示例(export PATH, eval pyenv init, eval pyenv virtualenv-init)

  1. fatal: could not create work tree dir 'mts': Permission denied

解决方法:参考 https://stackoverflow.com/questions/16376035/fatal-could-not-create-work-tree-dir-kivy

  1. ModuleNotFoundError: No module named 'xlsxwriter'

解决方法:python3 -m pip install xlsxwriter

  1. ModuleNotFoundError: No module named 'openpyxl'

解决方法:python3 -m pip install openpyxl

  1. 📷 图片描述: MTS运行时xlsxwriter add_format对象没有set_color属性引发AttributeError,提示安装版本为3.2.0

解决方法:

python3 -m pip uninstall xlsxwriter

python3 -m pip install xlsxwriter==3.2.0

MTS(内存测试集成工具)目录简介:

  1. develop:开发者常用且常修改的文件,全部为软连接
  2. mts:主功能实现
    1. appDump:应用内存监控器子功能
    2. helper:公共函数包
    3. memoryDist:生成内存分布表子功能
    4. memDump:保存内存信息子功能
    5. main.py:mts 主功能入口
  3. out:保存程序运行结果,包括各种保存、生成的数据。默认不加入 git,可以通过 make clean 清除
  4. scripts:提供了一些方便易用的脚本
  5. start.py:mts 快捷入口

二、内存标准

小米应用内存标准4.0

MIUI LITE:入门机,内存2-4G手机

MIUI:中高端机,内存>=6G手机

前台标准: 取测试过程中的前台峰值

后台标准:测试完成取静置3min的值

三、测试注意事项

  1. 每个应用测试前,需要逐一打开,点掉弹框,设置10分钟/永不锁屏,然后重启手机开始测试;

  2. 刷机后连接wifi,登录小米账号(国际版本需要登录谷歌账号),测试前,需设置不自动更新,使用应用预置版本进行测试;

不自动更新步骤:点开设置——我的设备——点击系统,——点击右上角↗️三点 ——选择系统更新设置 ——选择自动下载,关闭

  1. 注意脚本自动获取的进程名,是否跟《【内部】内存标准测试方法》(表格E列)一致,若不一致需要自己手动输入进程名;

  2. 对应测试场景,每测完一条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. 检查设备状态(此处测试遇到问题,可联系徐雨晴) (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 中

八、外部用户