Build51 启动归因保留与主动排空

日期:2026-09-13 · 证据:E2 + E4 · 状态:implemented · partial

根因与实施

v6 在首次目标线程归因后停止后续归因扫描,可能漏掉启动后期才由 PERF_THD_Data 绑定的 Initial Frame 线程;同时设备端会把后半段 lifecycle chunk 保留到用户 stop。v7 对每个目标线程只保留第一条精确映射,并在同一 DTX owner 中串行执行 startup tap 主动 drain 与 frame-only tap 续接。任何时刻最多一个 tap 持有 kperf。

20 轮真机

门禁结果
stop 前阶段 revision / 后续 sample20/20 / 20/20
Total / Initial Frame19/20(95%)
首次 revision P50 / P951690.685 / 1879.858 ms
Total Wire 相对 launch P50 / P954771.236 / 5342.684 ms
Total chunk→Wire P50 / P9586.126 / 268.276 ms
frame 源停止前恢复20/20
rotation gap P50 / P955152.740 / 5292.041 ms
restart→首 frame chunk P50 / P951239.140 / 1303.487 ms
startup live queue drop20/20 为 0
drain timeout / 全源 drop high-water6/20 / Max 118

E2 资源与语义

五份 2.13M~2.94M records 真机 Raw 的 v7 fast/exhaustive 业务语义 5/5 一致;fast 1.449~2.074s,exhaustive 9.242~12.745s,chunk P95 最大 195.976ms、Max 221.222ms。15s E4 会话 CoreProfile Raw P50 161.448MiB、P95 190.957MiB。五会话双 decoder 对照容器峰值 RSS 1,886,822,400 bytes,仅为基准上界。

结论

Total 停止前覆盖率从 Build50 的 80% 提升到 95%,阶段 revision 和普通性能 sample 均持续 20/20。

Total Wire P95 仍为 5.343s,rotation gap P95 5.292s,并存在 drain timeout 与全源队列 drop;即时性、连续性和资源门禁未关闭,整体保持 partial。缺失值继续 missing,不补 0。

测试与测试包

Python 304/304;Swift 127 通过 / 3 项显式资源 benchmark 默认跳过。Build51 x86_64 内部测试包使用 Developer ID Application + hardened runtime 签名,严格签名、独立解包、独立启动与 SHA-256 通过。本机缺 Notary Service profile,未 notarize/staple,Gatekeeper 为 unnotarized;GPL-3.0 法务门禁独立开放。