相机内存拆解: 阶段 × 业务 × 利用率

iPhone 12 Pro (iOS 14.8, 越狱) vs HUAWEI Mate 80 Pro (HarmonyOS 7) · 实测 2026-10-13/14 · 配套: 启动速率主报告 · 轻重载与申请效率专页
+1.06GB
iOS M3 首帧前完成构建 (721ms 内, wired 818+msd 215+app 27)
~14GB/s
iOS 大波速率 (793MB wired / 55ms, faults Δ13653)
721 vs 1144ms
M3 首帧 iOS vs OHOS (4 轮 1139~1446; 双方初波主体都在 M3 前完成)
+1287MB
OHOS M3 前 ION (70%, 两轮 69~70% — 与 iOS 68% 同比例)
5.0GB/s
OHOS 初波峰值 (两轮 50ms: 5.20/5.04, 与 iOS 差 2.7×; 740ms 口径曾低估 3.5×)
100%
双方退出释放率 (无跨启动预分配, 再证 lifecycle)

一、iOS: 阶段拆解 (idle 冷启动, fpwatch 50ms 修正轮)

fpwatch (compare/tooling/fpwatch.c): 每采样重扫进程表 (Camera pid +110ms 即被捕获, 无发现延迟), 系统页计数 + faults/zero-fill 活动计数器, 绝对 wall 时间对齐; syslog 毫秒锚点。锚点链: +189 FrontBoard 受理 → +214 M1 spawn → +216 msd 客户端注册 → +711 首帧交付 → +721 M3 "Preview started" (app 自报 0.446s, 与 C5 基线 446ms 完全一致) → +902 UI 动画完成。

iOS 阶段 (idle 冷启动)时刻Δwired (IOKit)Δmsd_fpΔcam_fp业务
① T0→spawn0→214ms0+1MB+19MBFrontBoard 受理+孵化, 框架装载
② msd 管线建立214→273ms0+198MB0HNISP 客户端注册+管线对象
③ 蓄势273→490ms0+11MB+2MB属性探测/建流配置
④ 大波490→545ms+793MB+1MB0IOKit/ISP 缓冲池 wired (~14GB/s, faults Δ13653)
⑤ 首波下发→M3 首帧545→721ms+25MB+5MB+5MB6 池初始缓冲下发固件→首帧交付+Preview started
⑥ M3→二波前721→1182ms0+120MB0UI 动画完成, 深管线启动
⑦ 二波 (AI/深管线)1182→1554ms+185MB+190MB0ANE/AI 模型+深管线池 (二波 7 池下发)
⑧ 尾部收敛1554→2105ms−22MB+11MB0稳态: 2.1s 起全平
post 退出+26s killall−848MB (500ms内)588→51MB0全量快放, free +1.2GB
聚合窗口wiredmsd_fpCamera app合计
M3 前 (T0→721ms)+818MB+215MB+27MB≈ +1.06GB
M3 后 (721ms→2.1s)+163MB+319MB0≈ +0.50GB
全程+998MB+554MB+27MB≈ 1.56GB
启动窗口 (T0→+2.5s) · wired(IOKit) / mediaserverd / Camera app · fpwatch 50ms 实测
0 300 600 900 1200 1500 1800 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ M1 spawn 214 711 首帧交付 · 721 M3 二波 ANE/AI 1182 M3 前 ≈ +1.06GB (wire 818 + msd 215 + app 27) M3 后 ≈ +0.50GB (AI/深管线) ② +198MB HNISP 管线对象 ④ 大波 +793MB wired · 55ms ~14GB/s (faults Δ13653) ⑦ +185w / +190m wired (IOKit) 1629 mediaserverd 582 Camera app 峰值仅 27MB (同轴 ×1) ↘ T0+0s T0+0.5s T0+1s T0+1.5s T0+2s T0+2.5s
释放窗口 (killall@+26s) · 全量快放
0 600 1200 1800 killall +26s 500ms 内: wire −848MB · msd 588→51 · free +1.2GB wired 1596→748→667 (回基线) T0+24s T0+26s T0+28s T0+30s T0+32s
⚠ 勘误 (2026-10-14): 本页首版曾发布"首帧轻装 <5MB / 大头全在首帧后"的结论——那是分析错误: 上一轮 camwatch 在 T0 前 2s 启动, 其相对时间 t=0 被误当 T0, 全部"阶段窗"实际落在发射前, 采到的是发射前的平静段。fpwatch 修正轮 (绝对时间对齐) 推翻该结论。正确结论见上表: 大头 (~2/3, ≈1.06GB) 在首帧前急建。两工具在修正 2s 偏移后波形一致 (大波均在 T0+0~0.5s)。

池业务: 初始缓冲下发 (固件池)

下发波poolID初始下发/poolSize预填率
+584ms (主通道, 首帧前)0 / 2 / 1 / 816/24, 10/18, 3/13, 13/1467% / 56% / 23% / 93%
+662ms (次通道)170 / 17316/27, 10/1559% / 67%
+1150~1279ms (二通道, 首帧后)136/138/137/144/34/36/4216/28, 10/22, 3/13, 13/14, 16/23, 10/17, 13/1457%~23%
结构发现: 前装直付 (front-loaded & instant)。启动窗口 (T0→M3 721ms) 内完成 ≈1.06GB 构建: 顺序是 app 框架 (+19MB) → msd 管线对象 (+198MB) → IOKit/ISP 池 wired 大波 +793MB → 首波 6 池下发固件 → 首帧。"启动 <1s"与"1.6GB 内存构建"自洽的原因不是需求少, 而是申请瞬时: idle 供给分层下 (free 2.8GB ≫ 793MB), 大波 55ms 内完成 (~14GB/s, faults Δ13653 印证页触碰), 内核态 wiring 比用户态 mmap+mlock 直付 (5~6GB/s) 还快。M3 后仅剩 AI/深管线 ≈0.5GB (二波)。 进程拓扑: Camera app 本体 27MB (UI 壳), 相机管线全住 mediaserverd (48→582MB, 无跨启动预热)。 利用率: 峰值≈稳态 (2.1s 后全平, 无过冲); 退出 killall 后 500ms 内 wire −848MB / msd 588→51MB (全量快放); 池预填率 23~93% (initial send/poolSize, 其余按需补)。 与 C5/L7 互证: 重载 p3 同样的前装需求 M3 仅 +75ms——文件页捐赠路径 (L0 分层) 快; L7 "分批不提速"结论不变——瞬时性来自供给分层, 与分批无关。

二、OHOS: 阶段拆解 (新机 16GB 变体, 对齐 iOS 协议)

新连设备 = 同型号不同机器 (序列 018566257M003177, MemTotal 15.1GB vs 旧机 11.2GB)。主轮 staged4: ohfpwatch 50ms 采样 + hitrace 六 tag (zcamera hdf zimage graphic binder sched, 256MB buffer) 同窗抓 DMA 分配 trace 点 + 1.5s dmabuf 快照 + hilog 锚点; 辅轮 staged5: hiprofiler memory-plugin 250ms 逐 ino DMA 事件; T0 = aa start 请求 (boottime 经 /proc/uptime 对齐)。锚点: +661ms OpenCamera → +1144ms M3 isFirstFrame=1 → +4435ms LoadFirstFrameHebc (重构)。方差 (4 轮): M3 1139/1280/1446/1144ms; Hebc 4.4~7.8s (触发时机浮动); 峰值速率 5.20/5.04GB/s; M3 前占比 69/70% — 结构跨轮稳定。本节曲线/锚点/业务全部出自 staged4 同轮。

OHOS 阶段 (staged4, 50ms + hitrace)时刻ΔIONtrace 证据 (池事件/allocator)说明
① 孵化0→0.66s≈0 (199→113 回落)0 池事件app spawn (T1=0.57s), daemon 待命
② 初波0.78→1.5s+1615MB101 池首配 0.79~1.0s; DmaHeapAlloc 208 事件/109MB峰值 5.04GB/s (284MB/55ms); 管线直配 + scouting 池
③ M3+1.144s—池事件仍在进行初波中段; M3 前 ION +1287MB (70%)
④ 补深1.5→2.5s+375MB650 池补深事件/57 池 (至 7.5s)AI 模型权重加载 + 池加深 (见下表)
⑤ 平台2.5→4.4s≈0 (1988)0全平, 无任何申请
⑥ Hebc 重构+4.44s+364/−39051 池首配 4.46~4.93s拆 scouting → 建正式拍摄栈; ION 瞬时 2352→1963
⑦ 稳态>5.5s0WarpBuf 池低频换手dmabuf 1536MB, daemon RSS 312
post 退出+24s kill回 87MB 基线—增量 100% 释放
进程 (MB, staged4)基线峰值稳态对照 iOS
CameraDaemon184337 (+153)312mediaserverd 48→582 (含管线对象)
相机 app (ArkTS)— (首采 +861ms 即 270)270266Camera app 仅 27MB (10×差)
hiaiserver (NPU)182523AI 权重在 msd wired 内
camera_service213030—
allocator_host333 (dmabuf 在别处计)—

阶段 × 业务 × 申请量 (hitrace 池事件毫秒首配 + 1.5s dmabuf 快照逐标签差分, 同轮 join; dmabuf 为相机系口径, ION 含全系统+内核池):

阶段语义分组业务明细 (ΔMB)量证据来源
② 初波 0.78~1.5s硬件管线直配NULL +129 · DynamicMap1 +90 · SMARTISP_MODEL_FRAME +60 · movingPhoto +41 · HDC_PREVIEWSurface +34 · MSC/MULTI 各 +26 · ISP 权重 RDP/PSF ~48 · SceneRecognition +10 · THUMBNAIL +11≈533MBSNAP 差分 (直配路径不打池 trace)
② 初波初波池层·scoutingNS.8 +62 · Ppraw +31 · SmartIspBufPack +27 (侦察版, 后被拆)≈120MBtrace 首配 0.79~1.0s
② 初波初波池层·常驻PostImageStream +24 · VIDHANCE_EISAUTO.8/.9 +26 · XStyleOutput +10 · MSC_SOURCE.3 +7 · WarpBuf_TNR +5≈77MBtrace 首配 0.79~1.0s (共 101 池)
④ 补深 1.5~2.5sAI 模型/权重AiComposition 38+20 · PP:AIComposition 24 · SMARTISP_AIAF 10 · AiAes 9+5 · SMART_PALETTE 8 · opflow 6 · CIE人脸 4 · bodyReid 4 · PonitTracker 4 · AWB_MASKNET 4≈138MBSNAP 差分 (权重经 ShareMemoryPool 直配)
④ 补深池加深/数据缓冲NS.8 scouting +161 · movingPhoto +95 · DynamicMap2 +89 · VIDHANCE +20 · NS scouting 家族 +50≈413MBSNAP 差分 + trace 650 补深事件
⑤ 平台 2.5~4.4s—无任何业务申请 (−2MB)0全平
⑥ Hebc 重构 4.44~4.93s新建·正式拍摄栈NS.8 正式 +106 · ipp_sve_mem +55 · Ppraw 正式 +33 · VidHanceFilterFake +32 · SmartIsp AI 包 +33 · ARSR +20 · NS.1/.21/.26/.22 +54≈340MBtrace 首配 4.46~4.93s (51 池)
⑥ Hebc 重构拆除·scoutingNS.8 −223 · Ppraw −31 · SmartIsp −33 · NS 家族 −78≈−365MBSNAP 差分 (换装净 −25MB)
⑦ 稳态存留构成movingPhoto 136 · NULL 134 · NS.8 106 · DynamicMap1+2 178 · 1758 62 · SMARTISP_MODEL_FRAME 60 · ipp_sve 55 · VIDHANCE 40 · AiComposition 38 · HDC 341536MBSNAP 单快照

hiprofiler 轮 (staged5, 熄屏冷启变体) — memory-plugin report_dma_mem_info 250ms 逐 ino 差分 (= 分配/释放事件), 配置语法经二进制逆向破解 (plugin_name "memory-plugin" + config_data { 扁平字段 }, cmd 自序列化)。与 hitrace 互补: 覆盖 hitrace 抓不到的直配层 (movingPhoto/ShareMemoryPool/AI 权重全有 ino 级事件)。

staged5 发现 (熄屏冷启, 与 staged4 亮屏轮对照)值解读
稳态规模2347MB vs 1536MB (+53%)同为 aa start 协议, 但本轮从熄屏冷启 (IsScreenOn=0, aa start 唤屏) — 相机稳态足迹与启动场景/模式强相关 (三轮: 1552/1536/2347)
主波+0.90s 首配 (movingPhoto/SMARTISP_MODEL_FRAME/MSC/PostImageStream) → +1.43s 主波 → +3.07s 峰值 2810MB比亮屏轮更长的构建窗 (0.9~3.1s vs 0.78~1.5s)
瞬时过冲2810 → 2347 (−463MB @+3.1~3.4s 修剪)NS.8 瞬时建 670MB → 修剪到 106MB — scouting→正式 换装在这轮以「过冲-修剪」形态出现
迟到业务ipp_sve_mem +54.5 @+2.66s · VidHanceFilterFake +31.7 / ARSR +19.8 @+2.90s与 staged4 的 Hebc 层同族, 但没有集中重构锚点 (本轮 Hebc 在窗外)
+13.7~15.8s+400MB 驻留波动 (2347→2814)LivePhoto/EIS 活动 (hilog: LivePhotoAdapter/EIS 事件密集)
+16.1s全量销毁 (2812→20MB)屏幕 15s 超时熄灭 → 相机暂停销毁 — 非脚本所为; 尾部数据因此只取 T0→+6.5s
覆盖对比hiprofiler DMA: 相机系 2347MB 全可见 (逐 ino); hitrace DmaHeapAlloc: 仅 210MBhiprofiler 是字节级全覆盖的 DMA 事件源, 代价是 250ms 粒度 (插件读 /proc/process_dmabuf_info 的耗时)
硬件管线直配+533MB池·scouting+120MB+161MB池·常驻+77MBAI 模型/权重+138MB池加深/数据+413MBHebc·新建正式栈+340MBHebc·拆除 scouting−365MBM3Hebc 重构+0s+1s+2s+3s+4s+5s阶段×业务 泳道 (T0 相对, 条=申请窗, 标签=ΔMB)
业务泳道: 初波=管线+scouting/常驻池 · 补深=AI 权重+池加深 · Hebc=换装 (新建/拆除对冲)
启动窗口 (T0→+5.5s) · ION used / MemAvailable · 50ms 采样 · 新机 16GB · hitrace 同窗轮
0G 1G 3G 5G 6G 8G OpenCamera 661 M3 1144 Hebc 重构 4435 M3 前 ION +1287MB (70%) M3 后 +676 (补深) + Hebc 重构 (+364/−390) 初波 +1615MB 峰值5.04GB/s 补深 → 平台1988 Hebc 重构 1988→2352→1963 ION 113→1963MB MA 7.0→4.7G T0+0s T0+1s T0+2s T0+3s T0+4s T0+5s
全窗 (0→46s) · 迟到波 (+7.8s Hebc) 与释放 (kill@+24s)
0G 2G 5G 8G Hebc 重构 +4.4s kill@+24s ION 2.0G→112MB 地板 · dmabuf 释放 98% · MA 回升 ION cache (被借 −1.4G → 回填 +2.6G) T0+0s T0+10s T0+20s T0+24s T0+30s T0+40s T0+46s
结构概念 (明细见上表): 三层建池 + 一次重构——①直配层 (ShareMemoryPool/代持/内核路径, 不打池 trace) 承担初波主力; ②池层 池多量小且分两批 (初波 101 池 → Hebc 51 池), scouting 池是"先侦察后正式"的换装结构 (NS.8 侦察 62→223 拆除 → 正式 106); ③AI 权重层 全部落在补深相位 (M3 后)。 口径: 表中 MB 为 dmabuf 相机系 (daemon+allocator+hiai 进程) 快照差分; ION 曲线为全系统——初波 ION +1615 vs dmabuf 相机系 +768, 差额为非相机进程 (render/graphic) + 内核内部 ION 池 (~430MB) 。 allocator 侧 trace 覆盖: DmaHeapAlloc 210MB / rtMallocIon 94MB, 仅 HDF dmabuf-heap 显式路径——大头不走该 trace 点 (诚实记录)。 诚实清单: SNAP 稳态累加 bug 踩两次 (analyzer v1/v2 均修单快照); 业务归因曾跨轮缝合 (现全 staged4 同轮); 740ms 口径曾把波速报 1.49GB/s (50ms 实测 5.0~5.2); M3 四轮 1139~1446ms; Hebc 触发 4.4~7.8s 浮动; hitrace 自耗 ~4.5% CPU; app RSS 0→270 在发现间隙内; pgfault 恒 0; 直配层无法毫秒归因 (仅 1.5s 快照差分下界, staged5 hiprofiler 后缩至 250ms); staged5 教训: ps -ef 显示 [wei.hmos.camera] 括号名致 settle 漏检 (轮前相机已在跑 2347MB 稳态, 首轮作废); staged5 为熄屏冷启场景 (稳态 2347 vs 亮屏 1536, 场景强相关) 且尾部 +16.1s 被屏幕超时销毁污染 (只取 T0→+6.5s)。

三、OHOS (旧机 12GB): 业务分布 (dmabuf 四相审计)

/sys/kernel/debug/dma_buf/bufinfo 全表快照 ×4 相位 (pre/steady+12s/late+45s/post)。相机归属 = CameraDaemon 全部 + hiaiserver 全部 + allocator_host 增量 (排除系统常驻数字 tag)。

OHOS 业务组 (steady)池数buffersMB占比
① 图像源流水线 NORMAL_SOURCE100—307.124%
② 动态映射缓冲 (对齐/畸变)22178.014%
④ SmartISP 共享内存/工作区136—169.613%
⑨ 未标记 (daemon 内部)117—108.88%
⑩ 其他小池222—102.38%
③ AI 模型权重 (NPU .om)20—94.97%
⑥ 拍照后处理/XStyle69—86.57%
⑧ RAW/MSC 处理13—85.46%
⑤ 显示/预览通路22—52.84%
⑦ VIDHANCE 防抖20—45.93%
OHOS 相位CameraDaemonallocator_host (代持)hiaiserver (NPU)说明
pre (相机关)0137.8MB (系统常驻)0floor
steady (+12s)972.8MB223.9MB (+86 相机)172.4MB急建完成, 合计 ~1231MB
late (+45s)972.8MB (平)223.9MB (平)181.8MB (+9.4)仅 NPU 模型延迟加载
post (退出+8s)0140.3MB (≈pre)0100% 释放
相位事实: pre 全零 → steady 全量 (启动窗口内急建 100%) → late 几乎零增长 (仅 hiaiserver NPU 模型 +9.4MB 延迟加载) → post 全释放。NORMAL_SOURCE 池深 8~20 buffers。dmabuf 视角 1231MB vs ION 物理 1846MB——~615MB 在内核内部 ION 池, dmabuf 层不可归因。

四、跨平台对齐 (iOS 12Pro vs OHOS 新机, 同协议 idle 实测)

维度iPhone 12 Pro (iOS 14.8)Mate 80 Pro (HarmonyOS 7)
M3 首帧721ms (app 自报 446ms, C5 一致)1144ms (4 轮 1139~1446, isFirstFrame=1)
M3 首帧前构建量≈1.06GB (wired 818+msd 215+app 27; 大波提前 176ms 完成)ION +1506MB (85%) (大波提前 ~140ms 完成)
M3 后构建量≈0.50GB (AI/深管线, 至 2.1s)补深 0.38GB + Hebc 重构 (瞬时+0.36/净−0.03GB)
大波速率~14GB/s (793MB/55ms, faults Δ13653)初波峰值 5.04~5.20GB/s (两轮 50ms, 2.7×差)
大波供给free 直付 (free 2.8GB≫需求, 压缩Δ=0)ION cache 驱逐 −1411MB (过路资金) + MA −1.15GB
首帧等大波?是 (波完成→176ms→M3)初波主体在 M3 前完成 (70%); 首帧不等补深/重构层
进程拓扑Camera app 27MB (壳) + mediaserverd 48→582MBapp 266MB (ArkTS runtime 在进程内, 10×) + daemon RSS 312 + ION 1963
AI/模型内存ANE 模型 wired +185MB 于二波 (M3 后 1.18~1.55s)AiCompositionModel 38MB (直配层) + SmartIsp AI 包/ARSR (Hebc 重构层)
图像源池ISP 池 13 个 (预填 23~93%, 按需补)NORMAL_SOURCE 家族 283MB (Hebc 层) + DynamicMap 178 (直配层)
峰值 vs 稳态wired 回落 2% (无过冲)daemon RSS 324→308 (无过冲)
退出释放率100% (500ms 内 wire −848MB)100% 增量 (ION 回 112MB 地板, 残留 87≈轮前基线 85)
跨启动预热无 (msd 48MB 地板起步)无 (ION 176MB 地板起步)
与 L7 (分批 vs 一次性) 互证: iOS 大头 (793MB 大波) 在首帧前完成且瞬时 (~14GB/s)——瞬时性来自供给分层直付 (L0 headroom/文件页捐赠, 压缩Δ=0), 与"分批"无关 (L7 已证 JIT 回收下分批零收益)。重载 p3 下同样前装需求 M3 仅 +75ms (捐赠路径快)。两平台真正差异: ① idle 建池速率 ~14GB/s vs 重载 OHOS ~170MB/s; ② 重载下 OHOS 首帧路径的分配排队 (59~62MB/s 有效追赶), iOS 分层直付。 对 C5 表述的修正: "p3 wired +1058MB → 首帧 +14%" 的因果已重写——那 +1GB 在首帧后, +75ms 罚金来自孵化/初始小缓冲的轻度挤压, 不是大分配挤占。

四、方法论与诚实清单

项iOSOHOS
采样fpwatch 50ms (页计数+faults 计数+双进程 fp; 首版 camwatch 有 2s 时间偏移分析错误, 已勘误)ohfpwatch 50ms (913 拍) + 1.5s dmabuf 快照 + hitrace DMA 分配 trace 点 (tag 映射实测: zcamera/hdf→池层, zimage/graphic/binder→allocator 层) + hiprofiler memory-plugin 250ms 逐 ino DMA 事件 (staged5, 覆盖直配层); 旧机另有四相快照
锚点syslog 毫秒 (HNISP/ANE/CMSession)hilog 毫秒 + hitrace 池事件毫秒 (boottime↔wall 经 /proc/uptime 对齐)
业务标签syslog 池消息 (poolID/count/size)dmabuf usage tag + 池事件 join (池id↔tag) + SNAP 单快照口径
细粒度阶段已测 (fpwatch 50ms)已测 (50ms×913 拍 + hitrace 毫秒池事件)
wired 语义IOKit wired 代理 (mlock 类比已校准)—
失败记录熄屏锁拒启(code=7)已重跑; camwatch 2s 偏移已勘误新机缺 tr (v1 RSS 全灭); aa start pid 竞态 (v2 劫持, v3 尾锚修复)
已知盲区iOS 无 per-buffer 审计 (池消息只有初始下发)dmabuf↔ION 差 615MB 内核池不可归因; 池内 touch 率不可测
数据归档: ios/staged/staged2-103948 (fpwatch) · ohos/staged/staged4-114133 (50ms+hitrace) · staged5-151641 (hiprofiler 250ms) · ohos/C5/tp2 (旧机) · 分析器 analyze_ohos_staged.py / analyze_staged_buf.py · 生成器 build_mem_site.py