Skip to content

APP CPU

APP CPU 指目标进程的 CPU 利用率,来源于 iOS 开发服务的 sysmontap 进程表,只统计被绑定目标进程自身的 CPU 时间占比。

指标标识

metricIDios.process.cpu.non_normalized
显示名APPCpu
scopeprocess(目标进程)
unitpercent
底层系统服务com.apple.instruments.server.services.sysmontap (DTX 传输通道)
采集命令/实现pymobiledevice3.services.dvt.instruments.sysmontap.Sysmontap.create(provider, interval=500)
来源字段ProcessesAttributes 映射之 Processes[target_pid].cpuUsage
归一化raw-dvt-process-gauge;多核累加原始口径
当前可用性available · Experimental

底层采集与计算公式

  • 计算方式:Sysmontap 以 500ms 间隔向客户端推送进程表快照。Perfowl 在 metric_engine.py 中通过 target_pid 定位到目标进程属性向量,直接读取 cpuUsage: $$\text{APPCpu} = \text{Processes}[\text{target_pid}].\text{cpuUsage}$$
  • 多核累加特性:该值为传统多核未归一化口径。例如在 6 核设备上,若目标进程占满 1 个核心,其值为 100%;若多线程满载 2 个核心,其值为 200%。Perfowl 在采集基座中保持原始 raw 物理真值,不强行按总核心数压缩到 100% 以免失真。

目标身份如何保证

APP CPU 的可信度完全取决于"绑对了进程"。Perfowl 通过三重校验:

  1. Mac 端显式传递所选 Bundle ID(不只传 executable 名);
  2. Collector 通过 Bundle ID 只读解析 PID,再用进程表的 bundleIdentifier 二次核对
  3. 目标重启时重新解析;身份不一致时 fail-closed(输出空值 + 原因),绝不回退到"第一个同名进程"。

历史上曾因同名 executable 误绑导致 162 个样本 CPU 全 0,此事故的完整复盘见开发记录(2026-09-03 · 0 值正确性复核)。

质量语义

  • valid:身份 verified 且数值来自真实进程表;
  • suspect-static:CPU 与多个累计 counter 连续 10 个样本完全不变时标记,提示绑定可能异常或进程确实静止;
  • missing:身份不一致或进程表无该进程——显示空值,不写 0。

当前校准状态

Experimental。 iOS 上该值为传统未归一化进程口径(官方 PerfDog 资料同样标注 iOS 为传统 CPU),与 Xcode / PerfDog 的同场误差对照尚未完成,见开发记录 · B-VAL 门禁

版本历史

版本日期变更
v1.12026-09-06补全底层服务标识符、PMD3 采集调用命令与精确计算公式规范
v12026-09-04首次发布;依据 Metric Registry 与 0 值复核后的身份校验语义

来源批次:Batch A 实施结果 · 0 值复核

Perfowl · Performance Observer