OS4降负载专项 - 内存方案

来源飞书 wiki(obj_token: WJwCd8AfDoi04mxYPAIcZqianPc)

说明:原文档中的飞书电子表格(sheet)以 <sheet token="Pl9zsRfv1hSLcttIwhdcz0bQnXf"> 引用形式嵌入,无法在 Markdown 中重建表格内容,已用占位说明保留位置;表格数据集中在表格 token Pl9zsRfv1hSLcttIwhdcz0bQnXf 中。

标准方案

👉 方案改进

  • 原方案四大类场景,包含开机内存剩余,老化内存剩余,应用峰值内存,常驻高优占用,后台驻留
    • 其中两类剩余内存经过分析,统计无法准确内存统计口径,修改为 开机内存占用,老化内存占用
    • 新方案开机内存占用,老化内存占用,应用峰值内存,常驻高优占用,后台驻留进程

方案描述

  1. 开机内存占用
    • 开机后等待8分钟后,统计 dumpsys meminfo 和 /proc/meminfo 中的内存占用
  2. 老化内存占用
  3. 应用峰值内存
    1. 共152应用,统计前台的峰值内存
  4. 常驻高优内存
    • 共21个应用,进程级别在[forground, privious) (0 < adj score < 700)
    • 固定用例( 21 个应用不同),后台峰值内存
  5. 内存驻留
    • 55个三方应用循环连续启动9轮,查看临近五个应用的驻留比例,同时获取最小驻留和平均数量

基于OS3识别的系统内存痛点,内存资源控制-内存标准分析,结合内存测试方法,制定降负载相关的内存摸底

白板流程图(资源管控-内存):

  • 资源管控-内存
    • 开机内存占用
      • 目的:开机状态下的内存占用
    • 老化后内存占用
      • 目的:经过文件系统老化及进程老化后内存占用,对比内存占用增量
    • 应用峰值占用
      • 目的:小米自研应用的应用前后台峰值符合内存4.0标准
    • 高优进程场景内存占用
      • 目的:系统高优进程(52)的内存前后台内存对比
    • 内存驻留模型
      • 目的:OS的内存驻留能力

测试数据展示

👉 现状统计,小米17(P3)

  1. 内存问题整体解决情况:43.18%通过内存TMG评审澄清,解决率为38.64%
  2. 内存标准经过多年迭代,很多问题无法解决,比较关键是无有效拆解分析工具,业务比较难执行

小米17内存问题解决状况柱状图:澄清19个、修复17个、解决中6个、不能复现2个;解决率分别 43.18%、38.64%、13.64%、4.55%

开机内存内存测试原始数据

👉 总结:

  1. 高端机-12G内存:Magic8 Pro < OPPO FIND X9 Pro < P1 < VIVO X300 Pro
  • 开机内存占用,差于 友商magic 8Pro,OppoFind X9 Pro **1.4G,1G,**进程数量多19,42个
  1. 中端机12G内存: 荣耀300 < P16U
  • 开机内存占用,差于 友商 荣耀**1.2G,**进程数量多20个 中端机8G内存:荣耀X70 < ViVO Y500Pro < P16
  • 开机内存占用,差于 友商 ViVO Y500Pro, 荣耀X70 134MB, 1.4G
  1. 低端机4G-国际:P15A<三星A06 开机内存占用,差于 友商三星A06 -239MB
  2. 低端机6G:O19<荣耀Play 10C 开机内存占用,差于 荣耀Play 10C -1692MB

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet ROqm23)— 开机内存相关数据

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet jq4OoH

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet DPjT51

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet Xnw689

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet SLqOxN

老化内存 (top)

👉 高端机-12G内存: 总结: Magic8 Pro < OPPO FIND X9 Pro < VIVO X300 Pro < P1

  • 老化后内存占用,相对开机占用,P1增加1.66G,竞品(最优Vivo 增加1055MB)
  • 老化后内存占用,差于Magic 8Pro 2GB,差于OppoFindX9 1.34G,差于 Vivo X300Pro 差距 579MB,差于 小米15Ultra 280MB,差于 一加15 1.3G
  • 老化后进程数量增量 29,差于竞品友商,竞品最优(Vivo 增加 -7)
  • 老化后进程数量,差于OppoFindX9 56, 差于Majic8 Pro 49,差于Vivo X300Pro 48,差于一加15 41

中端机-12G内存: 总结: 荣耀300 < P16U

  • 老化后内存占用,相对开机占用,P16U增加1.56G
  • 老化后内存占用,差于荣耀300 1.35G
  • 老化后进程数量增量 31,差于荣耀300
  • 老化后进程数量差于荣耀300 31

中端机-8G内存: 总结: 荣耀x70 < P16 < VIVO Y500 Pro

  • 老化后内存占用,相对开机占用,P16U增加 0.86G
  • 老化后内存占用,差于荣耀x70 1.36G
  • 老化后进程数量增量 31,差于荣耀x70,VIVO Y500 Pro

低端机-4G内存: 总结:三星A06 < P15A

  • 老化后内存占用,相对开机占用,P15A增加 610MB
  • 老化后内存占用,差于三星A06 753MB

低端机-6G内存: 总结:O19 < 荣耀Play 10C

  • 老化后内存占用,相对开机占用,O19增加 676MB 荣耀Play10C增加 1332MB
  • 老化后内存占用,差于荣耀Play10C 1131MB

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet i1iFpq

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet OE4hBF

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet CYqe07

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet qCaMOP

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet KRTiRi

诉求:平台内存,内核内存目前提交问题解决少,缺乏进程数量和增量标准,缺乏进程对应的责任田

应用峰值内存

👉 总结:TOP13 高优进程对比,前台峰值内存占用 Mate60 < Vivo X200U < O2S < P1

  • 壁纸:P1 相比 Mate60 Pro 多占用 3.93倍( 73MB ), 相比 X200U 多占用 7.56倍( 85MB )
  • 电话服务:P1 相比 Mate60 Pro 多占用 1.76倍(56MB), 相比 X200U 多占用 1.44倍(40MB), 相比 Magic8Pro 多占用 1.81倍(58.33MB)
  • 负一屏:P1相比Mate60 Pro多占用 1.67倍(163MB), 相比 X200U 多占用 1.52倍(139MB), 相比 Magic8Pro 多占用 4.05倍(237MB)
  • SystemUI:P1相比Mate60 Pro多占用 2.75倍(276MB), 相比 X200U 多占用 1.95倍(212MB), 相比 Magic8Pro 多占用 1.75倍(179MB)
  • 息屏预览:P1相比Magic8Pro多占用 1.79倍(46.67MB)
  • 蓝牙:P1相比Mate60 Pro多占用 2.09倍(42.67MB), 相比 X200U 多占用 1.13倍(9.34MB), 相比 Magic8Pro 多占用 1.13倍(18MB)
  • 手机管家:P1相比Mate60 Pro多占用 2.09倍(39.67MB), 相比 X200U 多占用 1.92倍(36.33MB), 相比 Magic8Pro 多占用 1.64倍(29.67MB)
  • 应用商店:P1相比X200U 多占用 1.37倍(118.67MB)
  • 浏览器:P1相比Mate60 Pro 多占用 1.4倍(222.67MB)
  • 语音唤醒:P1相比X200U 多占用 1.15倍(10.67MB),相比Magic8Pro 多占用 1.11倍(8.33MB)

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet 4ufPAu

常驻高优内存

👉 总结:TOP6 高优进程对比,后台峰值内存占用 Mate60 < Vivo X200U < O2S < P1

  • 壁纸:P1 相比 Mate60 Pro 多占用 3.70倍(39.67MB), 相比 X200U 多占用 4.94倍(43.33MB)
  • 电话服务:P1 相比 Mate60 Pro 多占用 2.1倍(65MB), 相比 X200U 多占用 1.74倍(53MB), 相比 Magic8Pro 多占用 2.12倍(66.33MB)
  • 负一屏:P1 相比 Magic8Pro多占用 2.05倍(77MB)
  • SystemUI:P1相比Mate60 Pro多占用 3.24倍(236.33MB), 相比 X200U 多占用 1.92倍(163.67MB),P1 相比 Magic8Pro多占用 1.3倍(78MB)
  • 桌面:P1相比Mate60 Pro多占用 1.5倍(66MB), 相比 X200U 多占用 1.28倍(43MB)
  • 蓝牙:P1相比Mate60 Pro多占用 2.18倍(42.33MB), 相比 X200U 多占用 1.16倍(11MB),P1 相比 Magic8Pro多占用 1.3倍(18MB)
  • 手机管家:P1相比Mate60 Pro多占用 1.89倍(29.33MB), 相比 X200U 多占用 2.34倍(35.67MB),P1 相比 Magic8Pro多占用 1.55倍(22MB)
  • 输入法:P1相比Mate60 Pro多占用 1.13倍(12.67MB),P1 相比 Magic8Pro多占用 1.08倍(8MB)
  • 应用商店:P1相比Mate60 Pro多占用 1.74倍(140.67MB), 相比 X200U 多占用 1.67倍(132.67MB),P1 相比 Magic8Pro多占用 1.17倍(47MB)
  • 浏览器:P1相比Mate60 Pro多占用 1.36倍(181.33MB),P1 相比 Magic8Pro多占用 1.15倍(91.33MB)
  • 语音唤醒:P1相比X200U多占用 4.58倍(53.67MB),P1 相比 Magic8Pro多占用 1.36倍(18MB)

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet hvoNvO

内存驻留:小米应用后台驻留标准.docx

📎 附件:小米应用后台驻留标准.docx(token: R5yPbvzsaoQ5yxxW9Z6cUGqenR0,未尝试下载)

👉 总结:驻留模型整体看 P1 > Magic8 Pro > OPPO FINDX9Pro > VIVO X300Pro

  • 前第1-5驻留能力: P1 > Magic8 Pro > OPPO FINDX9Pro > VIVO X300Pro
  • 应用平均驻留数量:P1 > Magic8 Pro > OPPO FINDX9Pro > VIVO X300Pro
  • 最小驻留数量: P1 = Magic8 Pro = VIVO X300Pro > OPPO FINDX9Pro

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet 9YRoCC

进程后台启动管控

👉 总结:

  • 存在20个应用进程后台查杀后频繁拉起现象

    • 应用开发部:7个 (进度:1/7)
    • 核心系统部:5个
    • 安全技术部:4个(进度:1/4)
    • 互联网业务部:2个
    • 通信技术部:1个
    • Vela研发部:1个
  • 20个应用进程:小米特有13个,剩余7个里面友商vivo存在同样频繁拉起现象的仅有1个

  • 下一步措施

    • 业务团队拆解频繁拉起合理性,如果确实需要拉起,上性能功耗TMG评审,评审合理性

12.20号进展:

  • 已拆解13个SR,其中1个SR为异常拉起工具开发和大数据打点,另外12个SR对应业务进程异常拉起拆解优化
  • 当前仅 远程秘钥 和 htmlviewer 提交了异常拉起澄清文档

📊 嵌入飞书表格(token Pl9zsRfv1hSLcttIwhdcz0bQnXf,sheet GDDXXX

下一步规划

内存标准制定

👉 前台标准,后台标准制定- 标准需要刷新 -内存标准5.0 @王健 @姚旺来 @Ping1 Xiong 熊平

【外部】小米应用内存标准4.0(sheet 8uKRmW

开机/老化内存占用建立进程级别标准及看护责任田(诉求:测试部内部也建立对应的测试责任田)

头部自研应用场景前后台内存的刷新(结合竞品及内存拆解工具进行刷新)

应用驻留模型及标准刷新(结合用户场景,建立关键用户场景识别及查杀权重)

应用后台拉起行为控制(标准新增,解决当前识别出的痛点)

内存拆解优化

👉 专项目标:Q18开机内存占用优化1.4GB(对标最佳竞品),挑战2.3GB(优于最佳竞品20%);

  • 一方应用高频场景,前台峰值内存平均降低xxMB(对标最佳竞品),后台峰值内存平均降低xxMB(对标最佳竞品)

开机内存占用拆解(P1相比荣耀Magic8 Pro 多32%(1.4GB))

  • 系统预留内存:DDR大小 - MemTotal。
  • 内核内存: Shmem + SlabUnreclaim + VmallocUsed + PageTables + SecPageTables + CmaUsed。
  • 系统关键进程内存:系统守护进程和系统关键进程的Pss之和(oom_adj < PERSISTENT_PROC_ADJ)。
  • 常驻高优进程内存:系统重要服务、焦点及可见应用、可感知应用及服务等进程的Pss之和(PERSISTENT_PROC_ADJ oom_adj < PREVIOUS_APP_ADJ)。
  • 常驻进程个数 差距明显:P1比荣耀Magic8 pro多28%(58个)内存数据统计
  • 系统服务和一方应用的开机内存差距明显:其中Phone,P1比Magic8Pro多278%(111M);systemUI,P1比Magic8Pro多96%(162M);SystemServer,P1比Magic8Pro多89%(282M);camera.provider,P1比Magic8Pro多32%(74M);
领域子领域模块/进程小米P1Magic8 pro差距(MB)责任人
系统预留(合计)12781137141
系统预留硬件保留
系统预留内核代码和数据
系统预留内核内存管理开销
内核(合计)103994198
内核Shmem2229-7
内核SlabUnReclaimable52847553
内核VmallocUsed34527570
内核PageTables144163-19
内核SecPageTables17170
内核CmaUsed190281-91
系统关键进程(合计)19521401551
系统关键进程系统守护进程(NATIVE)1353(进程数:207)1085(进程数:171)268
系统关键进程系统守护进程vendor.qti.camera.provider-service_6430523174
系统关键进程系统守护进程surfaceflinger17314429
系统关键进程系统守护进程vendor.qti.hardware.display.composer-service432221
系统关键进程系统关键进程(SYSTEM)600(进程数:1)318(进程数:1)282
系统关键进程系统关键进程SystemServer600318282
常驻高优进程(合计)1659998661
常驻高优进程系统重要服务(PERSISTENT_PROC,PERSISTENT_SERVICE)838(进程数:27)472(进程数:19)366
常驻高优进程系统重要服务com.android.systemui330168162
常驻高优进程系统重要服务com.android.phone15140111
常驻高优进程系统重要服务com.android.bluetooth482424
常驻高优进程焦点及可见应用(FOREGROUND_APP,PERCEPTIBLE_RECENT_FOREGROUND_APP,VISIBLE_APP)749(进程数:18)419(进程数:11)330
常驻高优进程焦点及可见应用com.miui.home / com.hihonor.android.launcher22019921
常驻高优进程焦点及可见应用com.miui.securitycenter.remote / com.hihonor.systemmanager:service733439
常驻高优进程焦点及可见应用com.xiaomi.bluetooth3535
常驻高优进程可感知应用及服务(PERCEPTIBLE_APP,PERCEPTIBLE_MEDIUM_APP,PERCEPTIBLE_LOW_APP,BACKUP_APP)167(进程数:6)51(进程数:1)116
常驻高优进程可感知应用及服务com.baidu.input_mi / com.sohu.inputmethod.sogou.honor785127
常驻高优进程可感知应用及服务com.xiaomi.aicr:cognitionService / com.hihonor.searchservice.monitor43835
常驻高优进程可感知应用及服务com.xiaomi.metoknlp1111
常驻高优进程应用服务进程(HEAVY_WEIGHT_APP,SERVICE)61(进程数:3)16(进程数:1)45
常驻高优进程应用服务进程com.xiaomi.xmsf:services / com.hihonor.android.pushagent.HiPushService20911
常驻高优进程应用服务进程com.xiaomi.joyose1818

👉 内存治理与优化方案

  1. 减少内存需求:通过业务瘦身、业务规格分级、内存按需申请、减少常驻进程、减少内存访问等手段,从源头减少内存整体的申请量。
  2. 增加内存容量:通过内存压缩、数据换出、释放缓存,以及必要时查杀用户无感知应用等手段,提升系统整体可使用的内存容量。
  3. 提升内存利用率:通过增加系统可管理内存、增加可回收内存、以及增加数据共享等手段,提升内存利用率,间接达成增加内存容量的目的。

白板流程图(内存治理与优化):

  • 内存治理与优化
    • 速率
      • 保驻留
        • 少杀应用
        • 保留热点数据
      • 预加载
        • 应用预加载
        • 资源预加载
        • cache预加载
      • 硬件加速
        • 硬件解压
        • 调频率
        • 保带宽
    • 容量
      • 增加容量
        • 压缩
          • 提升压缩率
          • 增加压缩量
        • 换出
          • 增加换出量
        • 释放缓存
          • 释放文件缓存
          • 释放业务可重建数据
          • 业务主动释放资源
        • 杀进程
          • 按用户影响程度杀进程
      • 减少需求
        • 业务瘦身
          • 算法优化
          • 数据格式化压缩
        • 业务规格分级
          • 功能分级
          • DFX分级
        • 按需申请
          • 静态改动态
          • 动态懒加载
          • 避免备份
        • 减少访问
          • 增强数据局部性
          • 减少后台运行
        • 减少常驻进程
          • 减少进程开机自启动
          • 减少进程相互拉起
      • 提升利用率
        • 增加可管理内存
          • 硬件预留改CMA
        • 增加可回收量
          • dmabuf支持回收
          • graphic内存支持回收
          • 驱动内存支持回收
        • 增加数据共享
          • 增加跨语言共享
          • 增加跨模块共享
          • 增加跨进程共享
          • 增加跨硬件共享

内存拆解工具

👉 提供一套内存拆解工具,提供在多设备多场景下对各类内存统计指标快速定位和函数级别拆解对比能力

左 (48.5%)右 (51.5%)
内存问题拆解方案:抓手为smaps节点信息解析、分类、对比能力及UI展示。分为虚拟页、RSS、object等信息展示,及java堆、native堆、线程栈等分类对比。还呈现了内存分配的两种方式,以及2025.11.30前后的内存分配方式及工具使用情况。内存拆解工具内容:上方列出内存典型场景及统计指标(启动、滑动场景、内存增量、消耗时延);中间为内存采集工具(运行进程、java堆、native堆、时间指令数、pagefault);下方为快速定位和联合Perfetto UI分析(smaps解析/分类、数据格式自定义、启动插件自定义)。

👉 工具展示1(java/native堆内存分配火焰图

Java/Native堆内存分配火焰图:Top 100 / Top 10 / Top 1 多色条形展示

👉 工具展示2(库/函数级内存分配差异对比

库/函数级内存分配差异对比表:列含 funcname、libname、O1_size、P1_size、size_diff_O1_vs_P1、size_diff_O1_vs_O1。total 行:O1=21834.838B,P1=42615.895B,差异=20781.057B,O1 差异=-3472.05B

3.4 内存大数据监控

👉 专项目标: Top100三方前/后台内存占用 及 所有系统进程和一方应用监控(超内存4.0标准基线)