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

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 锚点; 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)时刻ΔION说明
① 孵化0→0.66s≈0 (199→113 回落)app spawn (T1=0.57s), daemon 待命
② 初波0.78→1.5s+1615MB峰值 5.04GB/s (284MB/55ms); 直配层+初波池(101)+scouting 池
③ M3+1.144s—初波中段; M3 前 ION +1287MB (70%), dmabuf 已建 ≈1GB
④ 补深1.5→2.5s+375MBmovingPhoto 41→136, NS.8 scouting 62→223; 池深按需补 (650 池事件至 7.5s)
⑤ 平台2.5→4.4s≈0 (1988)全平
⑥ Hebc 重构+4.44s+364/−390池事件 4.46~4.93s: 拆 scouting 池 → 建正式拍摄栈; ION 瞬时 2352→稳态 1963
⑦ 稳态>5.5s0dmabuf 1536MB, daemon RSS 312
post 退出+24s kill回 87MB 基线dmabuf 残留 87≈轮前基线 → 增量 100% 释放, cache 回填
进程 (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 在别处计)—
启动窗口 (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
结构发现 (hitrace 下钻确认): 三层建池 + 一次重构, 全部前装。 ①直配层 (无池 trace, SNAP 1.05s 已在, ≈650MB): ShareMemoryPool 家族 (SMARTISP_MODEL_FRAME 60 / MSC 26 / MULTI 26), movingPhoto 136 (allocator 代持), NULL 134, DynamicMap1+2 178, "1758" 62, HDC_PREVIEWSurface 34, AiCompositionModel 38, ipp_sve_mem 55 —— 初波主力, 分配路径不打池 trace。 ②初波 BufferPool 层 (trace 首配 0.79~1.0s, 101 池, 稳态存留 ≈105MB): PostImageStream 72 / XStyleOutput 30 / MSC_SOURCE.3 22 / VIDHANCE_EISAUTO.8 40 / WarpBuf 族 ~45 —— 池多量小。 ③Hebc 重构层 (trace 4.46~4.93s, 51 池, 稳态 ≈270MB): NORMAL_SOURCE 家族 ~283MB (主池 106 + .1 60 + .21 41 + .26 41 + .22 19 + .24 10 + .23 6) + SmartIsp AI 特性包 + ARSR + Ppraw 正式版; 同时拆除 scouting 层 (NS.8 62→223 侦察版 + Ppraw 侦察 31) —— scouting 池 → 正式拍摄栈的换装, ION 瞬时 2352 → 稳态 1963。 allocator 侧 trace: DmaHeapAlloc 210MB / rtMallocIon 94MB —— 仅覆盖 HDF dmabuf-heap 显式路径, 大头 (直配/内核池) 不走该 trace 点 (诚实记录覆盖不全)。 利用率: 稳态 dmabuf 1536MB (vs 旧机 1231MB, 仅 1.26×——变体内存大不代表相机池等比加深) / ION 1963MB (dmabuf↔ION 差 ~430MB 内部池); daemon RSS 337→312 (无过冲); 退出后 ION 回 87MB 基线 (增量 100% 释放); ION cache 被借 −1.4G 后回填。 诚实清单: SNAP 稳态累加 bug 踩了两次 (analyzer v1/v2 均修为单快照); 业务归因曾跨轮缝合 (已同轮自洽); 740ms 口径曾把波速报 1.49GB/s (50ms 实测峰值 5.0~5.2GB/s, 分辨率教训); M3 四轮 1139~1446ms; Hebc 触发时机 4.4~7.8s 浮动; hitrace 自耗 ~4.5% CPU; app RSS 0→270 增长在发现间隙内; pgfault 恒 0 无 faults 佐证; DmaHeapAlloc 覆盖不全 (见上)。

三、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 层); 旧机另有四相快照
锚点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) · ohos/C5/tp2 (旧机) · 分析器 analyze_ohos_staged.py / analyze_staged_buf.py · 生成器 build_mem_site.py