Skip to content

Build233 首段缺失与多指标断点修复 ​

Owner 2026-10-29 批准本方案并要求同一 AI 顺序实施,随后交 Owner 真机复测。基线 c3feef22、内部 Build233;本批不重开正式指标验收,仍为 55/66、其余 11 项暂停。既有 Session 和其他未提交文件只读保留;不操作手机、不修改目标 App。此处 E4 仅指问题输入来自真机 Session,不代表修复已获 E4 验证。

冻结证据与问题分类 ​

本次真机 Session A(标识、路径和逐槽原件仅留私有证据):会话起于 09:40:21.351,Collector ready 09:40:24.553,首 sysmontap 原始事件约 09:40:26.966,首产品样本 09:40:29.056;首样本已跳过四个 1s 发布槽。09:40:31.073→35.702 的样本间隔 4.629s,另跳三槽;sysmontap/Graphics/进程网络同窗相邻 Raw 间隔约 4–5s。事件循环最大延迟 4127.157ms;CoreProfile payloadNormalizeActive 最大 4203.451ms。CoreProfile 观察约 729MB/237 chunk。现有 _payload 先 json_safe_raw(raw) 将大字节编码 Base64,随后用原始 bytes 覆盖 chunk,造成无效转换;需单独计时区分该路径与 stackshot/写入等其他成本,不将相关性当唯一根因。

58 条样本中进程 CPU/物理内存/线程为 54,调度和磁盘率 49,FrameTime 25,P95/刷新率 0。调度/磁盘缺失审计包含 source-observation-already-published 与 source-observation-expired(观察年龄约 1.54s 超 1.5s 门槛),因此不得重复旧值、补零或直接调宽 TTL。Startup→frame handoff gap 约 8s,display coverage gap 约 2.824s,口径独立。Raw、派生、产品及报告原件 SHA 在实施前后核同。

固定修复决策 ​

  1. P0 大块 CoreProfile 路径:从 JSON 转换输入中剥离 bytes chunk,元数据照旧转换,原始 chunk 直达有序 writer;非 bytes 路径/stackshot、配置、身份、时间、序列与 Raw hash 契约不变。以相同大块输入比较 wall/CPU/RSS/分配、输出字节和派生一致性。若 stackshot 等仍造成同步停顿,先以分段时序定位,只有保证单 worker 有序与有界内存、Stop/drain 后才迁移离线重活,不做盲目并发。
  2. P1 首响应:发布器尽早在 ready 后启动,刷新率首源等待不得串行阻塞其他指标。设备指标按独立有效源,进程指标按已核目标身份,差分指标按完整基线与窗口,帧指标按真实新帧发布;不可用保持 missing 与状态。真实 startedAt、source receipt 和 publication clock 保留;错过的 deadline 记录而不回放/倒填。UI 区分准备、等待目标、预热、无新源、迟到和无新帧,不将缺失画成零或跨缺口连线。
  3. P2 零星断点:先离线逐槽重建 Raw→窗口→派生→有界队列→单次发布→产品。只有证明合格新窗口被代码误丢,才改相应源的缓存/相位;同一窗口最多发布一次,计数器重置、epoch/代次/目标变化、迟到和过期继续 fail closed。默认 1.5s TTL 不变。
  4. P3 显示专项:FrameTime 的无新帧、切换空窗、来源能力、异常和投影漏发分类;P95/刷新率先查能力及窗口门,不为填图降低门槛。不同帧源只在设备时钟、身份、顺序和去重可证时合并,不插值。

轻量化、效率和测试门 ​

关键路径为来源→接收/轻量封装→有界有序处理→指标窗口→1s 产品发布。CoreProfile 非 chunk 元数据转换为 O(元数据),不随原始 chunk 再做一次 Base64 分配;各指标缓冲固定容量、单次 O(1),不随 Session 线性增长;单一解码 worker、有界并发、过载有明确 partial/overflow 记录。诊断使用有界计数和阶段时序,不高频全量日志或扫描。首次响应、长期完成时间、最差大块、吞吐、CPU、RSS、I/O 与 Build233 同输入前后比较;无对照不得称资源门完成。

E2 测试:大 chunk 字节等价、无效转换未发生、源缺失/迟到/乱序/重复/重置、ready 后首样本、刷新率缺失不阻塞其他指标、发布跳槽、身份变化、Stop/drain、CoreProfile 切换和静态画面;旧 Session 只读复算并 SHA 核同。E3:真实构建、Developer ID 严格签名、DMG 与独立解包、空闲后同址安装及回滚保全。E4 由 Owner 新测试逐秒核对 Raw/派生/产品/UI、首响应、最大源间隔、事件循环 stall 和真实帧缺口;本批 AI 不自行宣布指标 PASS。公证、stapling、Gatekeeper、GPL 法务、双远程、站点及通知分别按实际结果报告,缺门记 partial。

实施边界与交接 ​

先 P0/P1,再据此会话逐槽审计 P2/P3。改动只限已证缺陷,不改已有公式、scope、来源、目标 App、安全设置或历史报告。Implementation/Validation Update 追加于本文;完成后 C2/C3 归档和时间线、必要的知识/首页联动及交付状态分别记录。Owner 真机复测前软件/包验证仅能标 E2/E3;保留 Build233 回滚与本次不可变 Session。

2026-10-29 · Implementation Update ​

本批唯一 type 为 devlog;实现继续按批准的 P0→P1→P2/P3 顺序,不恢复正式验收队列,不操作手机。

已实现范围 ​

  • MacApp/Sidecar/perfowl_collector_core/adapters.py:CoreProfile 的原生 bytes chunk 在 json_safe_raw 之前从转换图中剥离,元数据仍按原规则转换,chunk 对象不复制;stackshot 解析从事件循环移至该 adapter 顺序等待的后台任务,身份取已生成 envelope,不在完成后读取可变 target。取消等待不会取消真实线程,保留受保护 future;同一 iterator 的重启先等前次解析完成,避免取消后重叠提交。解析完成/最长耗时/仍在解析/取消持有 envelope 数量均进入有界诊断,异常仍有 unsupported-schema 与异常类型。
  • MacApp/Sidecar/perfowl_collector_core/realtime.py:发布任务在真实 ready 边界注册,取消刷新率首源对整批样本的串行等待;目标尚未核准的槽只记 suppressed,不生成目标指标。重连不重复 ready、不改 Session 原始网格,但在新身份绑定后保证本 cycle 发布任务已启动。Stop 仍按辅助任务立即取消,Raw consumer 按原有预算 drain。
  • 测试覆盖 bytes 等价/禁止 Base64、非 bytes 兼容、后台解析顺序/身份/失败/取消后不重叠、ready→身份等待槽、Stop 前无倒填,以及既有四类 Energy 目标重连。发布节拍测试从首个真实发表点起测,避免把可变准备耗时误算为发表频率;身份延迟测试核对“已抑制槽 + 已披露跳槽 = 之前全部网格槽”,不要求忙碌主机零调度跳槽。

已证实与仍待证实 ​

P2 使用原始 Collector 发表回执逐槽关联 Raw 前后累计计数、原生差分窗口、已封存派生帧及产品样本,不用模拟时钟或按 receipt 顺序重放冒充原运行调度。4 项率各 58 槽:49 个新源、7 个过期、2 个已消费;196 个有效数值的 Raw 端点、公式、派生值、产品值、新鲜度和单次消费全部核同,核对错误 0。没有证明合格窗口被产品投影误丢,因此 TTL、公式及缺值语义不改。主机 receipt 排序重放缺少原消费者完成时序,曾出现与真实发表不同的结果;它仅为探索过程,已改用原始回执,不据此发明缺陷或修复。

P3 原件显示 ActivityTrace 收到 22,499 条消息、FrameLifetime 匹配 0;大量 UIKit/Transaction 消息不等价于显示帧。CoreProfile 封存 427 个呈现事件、425 个区间、2 个 epoch;本次 FrameTime 有值 25/58,P95 与刷新率没有有效点。静态无新帧、handoff 空窗和来源未匹配继续独立保留;本批不把这些未知空值写成 0、不从 CoreProfile FrameTime 借造 P95/刷新率,FrameLifetime 来源覆盖与持续帧覆盖仍为未关闭问题。

同输入效率对照(E2,限定局部路径) ​

基线 c3feef22 与候选使用相同 bytes、元数据及重复数,独立子进程各 3 次取中位数;原 chunk SHA 与元数据核同。

输入与次数转换 wall 旧→新进程 CPU 旧→新子进程峰 RSS 旧→新单 chunk 临时分配旧→新
3 MiB × 2402357.435→2.247 ms2245.748→2.198 ms40,800,256→32,387,072 B8,388,754→488 B
16 MiB × 302277.772→0.278 ms2035.243→0.262 ms90,828,800→45,940,736 B44,739,394→488 B

上述为重复引用不可变输入的payload 封装微基准,不是设备吞吐;封装吞吐分别约 102→106,819 chunk/s、13→107,754 chunk/s。rusage block I/O 增量均为 0,未测物理 I/O 峰值;不包含接收、stackshot、writer、真实长会话或全链首响应。它证实消除了随 chunk 大小增长的废弃 Base64 分配,不证明真机会话中的 4 秒停顿全部来自此处,也不关闭全链资源/E4 门。

当前验证与交付门 ​

原始 Session A 的 90 个文件在本轮重新逐个 SHA 核同,变动 0。新增 P0/P1 集合 23/23 通过(E2);此前相关 143 项通过在后续取消路径强化前执行,不充当最终全回归。首次 system Python 全集漏载可选 native 扩展,3094 项有 18 失败/10 错误;显式 native 集合 3096 项有 7 失败/2 错误,包含本批测试对零调度跳槽的过严断言(已改为完整槽计数核对)、基线合同失败及负载敏感失败,均保留原日志。最终以打包所用 Python 3.12.3 / pymobiledevice3 11.3.1、显式 ABI 匹配 native 执行新的完整回归,其实际终态在后续 Validation Update 追加,当前不称全回归通过。

当前安装仍为 Build233;尚未用候选覆盖。候选包、签名/公证/Gatekeeper、安装树、源码冻结核同、双推、站点及通知均按最终独立收据报告;未验证项目保持 partial。正式仍55/66、余11项暂停;下一步先完成软件回归与失败基线归因,再交内部候选给 Owner 做新真机复测。

2026-10-29 · Validation / Internal Candidate Update ​

  • 最终软件回归:打包使用的Python 3.12.3 / pymobiledevice3 11.3.1与显式ABI匹配native运行3,097项,230.430秒;1失败、1错误、无skip,不称全绿。两个结果均在完整未改基线c3feef22的相同环境独立复现:旧capture-selection测试仍断言混合Startup+Frame选择关闭续采,与已批准10月28日合同不一致;SW-1身份不匹配负例的合成Raw在第5行违反host单调时序。保持原失败,不改产品门禁或扩大本批范围;本批新增/相关路径没有在最终全集发现新的失败。此前System Python及负载敏感失败仍保留,不回改历史测试数字。
  • Swift:完整438项、12skip、0失败,49.330秒(E2)。Swift产品源未改;跳过项不是通过。
  • 真实内部候选:Build234已Developer ID严格签名,签名DMG完整性核对、独立只读挂载、12,912文件/30symlink/330个x86_64原生组件及依赖核同;105个冻结Python源码模块与当前候选核同。安装前无活动Session、Collector或客户端,Build233 ZIP回滚独立解包核同后,于11:35同址替换标准App;安装树与DMG一致。脱离源码目录且清除PYTHONPATH的安装版probe返回ready/nativeReady=true,未操作手机或启动采集。
  • 产物:MacApp/dist/Perfowl-234-macos-x86_64-internal.dmg,147,257,085 B;SHA-256 2bf28ac4a5d0012fcabba5e09785787889d80d832c105d6114d071acea033822,配套sha文件。dist仅保留此包与校验;旧233包与必要回滚保留私有归档。已核同的构建App副本删除,仅保留标准安装;LaunchServices注销返回-10814(未找到既有登记),不把该返回称为成功注销。
  • 分发门仍开放:沿用Owner内部测试的公证暂缓策略;本包未提交公证、未staple,stapler验证exit65,Gatekeeper exit3、Unnotarized Developer ID。系统安全设置未更改。当前只是限定范围E2/E3内部候选,GPL法务/公证/Gatekeeper、两项基线测试、全链最差资源和Owner E4均未关闭,整体交付记partial。
  • 展示边界:现有准备/等待目标状态与逐指标missing/warmup语义保留,未新增一套UI状态机。新增身份前抑制槽属于内部发表诊断,不生成伪数值。P3 FrameLifetime匹配与持续帧覆盖仍待证据,本批不承诺所有曲线连续。
  • 文档与同步:同批更新质量知识页、总览、首页与恢复入口;本段快照归档并注册时间线。站点构建、双远程与通知以本批最终私有收据及交付汇报为准;当前分支不擅自合并main或把旧线上内容称为本批已发布。

Owner复测与下一阶段 ​

打开标准安装的内部234,在与问题会话相同的勾选项下做一轮新测试:开始后先观察首次点,再连续滑动/转场,随后静置,再恢复操作;可附一轮短测/主动停止验证收尾。保留完整Session与原始诊断,核对ready→身份→首源→首点、共享来源最大间隔、事件循环stall、四项率缺失原因,以及FrameTime/P95/刷新率来源覆盖。静态无新帧留空是允许结果,不以填满曲线为门槛。

下一步由Owner给出新Session;再做当前234的E4对照与独立审计,决定共享停顿是否消除及是否需要新的FrameLifetime/帧连续性专项方案。未获得新证据前不宣布整体问题修复完成,不进入剩余11项正式验收;总体仍55/66。

Perfowl · Performance Observer