Files
MobileGL/docs/Disaggregated/notes/p6/docs-closeout-roadmap.md
T
swung0x48 8a445a3098 [docs] (P7): every cited feat/disaggregated commit is the rewritten one without the attribution trailer
- 144 commits from 785fed0b0 onward were rewritten to drop the Co-Authored-By trailer the
  project forbids; origin/feat/disaggregated moved from 1135c664 to 3c80cd62 (same trees)
- the old->new map is ~/w7/logs/sha-map-20260922.txt; every 7..40-hex citation in the
  Disaggregated docs and the MG_Remote contracts that matched an old SHA is replaced by the
  same-length prefix of its rewrite; no other content changes
2026-09-22 20:51:15 -04:00

182 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P6 收官事实写入 `ROADMAP.md` —— 改动报告
> 日期 2026-09-22;工作树 `C:\Users\geekerwan\AndroidStudioProjects\FoldCraftLauncher\MobileGL-disagg`,
> 分支 `feat/disaggregated`。**只改 `docs/Disaggregated/ROADMAP.md` 一份文档**,另两份(由并行代理负责)
> 未触碰;未 `git commit`;未触碰工作树里已有的未提交代码改动。
>
> 证据只读引用(未修改):`notes/p6/gate7-device-ab.md`、`notes/p6/gate8-doorbell-device.md`、
> `notes/p6/gate8-wire-counters.md`、`notes/p6/git-worktree-fix.md`。
---
## 0 一句话
把 P6 的收官事实(门 7 / 门 8 已采、判读 tie、收尾四项落地)写进 `ROADMAP.md`,
**6 行改动**:顶部 blockquote、阶段表 P6 行的状态列 / 落地列 / 验收门列、里程碑列表两条、一处引用了
`ServerMain.cpp`「正在被门 8 的工作修改」的行内说明、一处写「门 8 的树上工作正在补」的开放问题。
其余全部逐字未动(含债务表整张、其余阶段行、P6.5「立即的下一项」整节)。
---
## 1 逐处改动(行号按改前 / 改后对照)
### 1.1 顶部状态 blockquote(第 3 行)
**改前**:`P6 全部包(a6 / c6 / lk / so / sm / cp / hs / dl / st / t6)已落地于 feat/disaggregated
(头 77cbd176,2026-09-21);出口门第 1–6 项达成,第 7 项(真机配对 A/B 热窗口)与第 8 项
(三个强制性能数)尚未正式采集,故 P6 记为「实现完成、出口性能/设备数待补」,未宣布收官**。
**改后**:`P6 已收官(2026-09-22)`:全部包已落地(头 `77cbd176`,2026-09-21),出口门第 1–6 项此前已达成;
第 7 项(Redmi `2f7cbe2e` 的 reboot-clean 同热窗口配对 A/B)与第 8 项(三个强制性能数)已于 2026-09-22 采齐
——门 7 判读 **tie**(client CPU p50 差 −0.15% / +0.16%,均在臂内散布 0.2–4.2% 之内,符号随臂序翻转;
monolith 约贵 30%),门 8 三数齐;证据链 `notes/p6/gate7-device-ab.md` / `gate8-doorbell-device.md` /
`gate8-wire-counters.md`。
**未动**:同一 blockquote 里的 P5f 验收代码句、P5e 债句、CI / inproc 收官句;第 5 行(Magma run-ahead)
与第 7 行(终局改判)整句原样——这两行的「P6 / P7 全阶段状态不因此改变」与「P6.5 关键路径」结论
不受收官影响。
### 1.2 阶段表 P6 行(第 37 行)
- **状态列**:`⏳ 全部包已落地(2026-09-21,头 77cbd176);出口门 1–6 达成,7/8 待采` →
`✅ 已收官(2026-09-22)`,并保留十包落地信息。原「收官前另欠」三项改写为:server 进程 `PipeStats`
从未初始化**已在收尾中修好**;184 符号棘轮门与 hs 的 `LinkTerms` / `Refuse` / 指纹拆分**未落地、移交 P6.5**。
(只改「已在收尾中修好」这一处口径,未落地项原样保留——契约 §12.1 的棘轮门与 hs 三行确实仍未做。)
- **落地什么列**:原有十包链与 a6 / P6-ENDSTATE-REVIEW 引用逐字保留,**追加收尾四项**:
wire 计数器(`PipeWireCodec.cpp:878` `StageAllocate` 唯一收口、`:1188` `EncodeRecord` 提交路径、
staged-blob 直方图、汇总行 `seg=` / `wrec=`);`ServerMain.cpp` 补 `PipeStats::Init()` / `Shutdown()`
(修前 0 条汇总行 / 修后 29 条、SSIM 1.0 不变);`MOBILEGL_PIPE_STATS_FILE` 角色派生
`<base>.client.json` / `<base>.server.json`;工具入库 `tools/device_bench/p6/{ab_session.py,render_ab.py,README.md}`
与 `tools/trace_replay/run_android_retrace_local.py`(+19 行),`pin_device.sh` 新增 `2f7cbe2e` 条目。
- **验收门列**:`7/8 待采:……尚未正式记录` → `7/8 已采(2026-09-22)` 的达成摘要,逐字使用基线数字:
- 门 7:Redmi `2f7cbe2e` / M332BF / SM8750 / Adreno 830v2、CPU 定频 little 1555200 / big 1958400、
GPU 钳 1050 MHz、rd12-in-world + DirectGLES、~1471 draws/帧;六臂交错 × best-of-3 =
18/18 runner 退出 0、36/36 `PINNED`、0 `Fatal`;inproc 7.880/7.889 vs spawn 7.876/7.869(−0.15%)、
第二会话 7.987/7.989 vs 7.992/8.009(+0.16%);判读 **tie**,如实记录、不设门;monolith 约贵 30%。
- 门 8①:client 121.1 waits/帧、5.6–6.1 parks/帧、两传输逐字相同(run total 30 401–30 407);
server inproc 10 866–11 963 / 5.0–6.2,spawn 10 415–10 416 / 4.66–4.90;
socket 阻塞读**既不更便宜也不更贵**(契约 §9 未兑现);spawn server waits 少 8.9–12.9% 归因 handoff 纪律;
唯一略差列 `clipark/f` 6.07 vs 5.60/5.75。
- 门 8②③:OpenRA `seg` 130.8 KB median / 8.01 MB steady mean(含负载 8.07 MB)、记录 211 / 206;
rd12 `seg` 816.2 KB median / 1.53 MB steady mean(含负载 10.79 MB、首帧 981 654 draws vs 稳态 ~1471、
run-wide mean 约 7× 稳态,两个读法都报)、记录 7 497 / 7 504;`maxrec=1808` 与分块前相同。
- 证据链接三条按任务书给出的相对路径写入。
### 1.3 里程碑列表(第 228–229 行)
采用任务书给的**改写旧条**方案(文件惯例是里程碑与阶段表的日期条目一一对应,新增一条会留下
「未宣布收官」与「已收官」两句并存):
- 第 228 行:「P6 全部包落地(2026-09-21)」→「**P6 收官(2026-09-22)**」。十包合入、三种传输
retrace 对上 golden、device-lost 闩 123 s → 5.7 s、`Session::Fail` 93→4 等历史事实逐字保留;
出口门句改为「1–6 ✅;门 7 / 8 于 2026-09-22 采齐」并写入 tie 判读、monolith 约贵 30%、
门 8 三数齐、G1 0/0/0/0 且 `.text` 逐字节相同,收尾为「P6 就此收官,未设性能门(只记录)」。
- 第 229 行「终局改判」条内,把「server 进程 `PipeStats` 结构性零」标注为**收尾中已修**
(否则会与 1.2 的状态列自相矛盾)。该条其余内容与第 230 行「仍是方向……」「再基线检查点」
逐字未动。
### 1.4 两处「门 8 还在做」的残留说明(第 61、266 行)
这两处若不改,会与新的收官状态直接冲突(一句说门 8 还在改代码、一句说门 8 的量还在补):
- 第 61 行 P6.5 表格里 `ServerMain.cpp` 的出处列:「正在被门 8 的工作修改,不引行号」→
「门 8 的收尾修改已落入该文件,本表不引行号」。**仍未引行号**(该表本来就不引,保持原风格)。
- 第 266 行开放问题 11 末句:「MC in-world / Create 的占用分布仍未量(门 8 的树上工作正在补)」→
「(门 8 已给出两条负载的字节/帧与记录/帧,逐 blob 分布只在 integration 车道取到)」。
这一改与 `gate8-wire-counters.md` §6.5 / §7.1 一致:逐 blob 分布只从 integration 车道的 JSON dump 拿到,
retrace 的 snapshot 模式因不走 `cleanUp→Destroy` 拿不到。该问题其余文字(含「仍未答」的
program archive 与 `draw_vbo` range 尾)逐字未动。
### 1.5 明确**未**改动(逐字保留)
- P6.5 行(第 38 行)与「立即的下一项」整节(第 51–158 行):其「今天还跑不了」「正在被门 8 的工作修改」
之类的 P6.5 语境与本次收官无关,除 §1.4 那一处外未动。
- 债务表(第 234–250 行)**整张逐字未动**,含「A3 指纹 → P6.5 wf / nd」「默认 32 MiB staging」
「max record bytes」等行。
- 其余阶段行(P0…P5f、Ph、P3b/P4b、P7…P13)逐字未动;P5c 历史节、审计清单表、开放问题 1–24
除 §1.4 那一句外逐字未动。
- 第 226 行「P5f 出口……P6 前提解除,实施未开始」是**当时**的事实陈述,保留(该条的历史价值高于
与今天的对照,且下行第 228 行已给出实施与收官时间线)。
---
## 2 与基线数字的一致性自查
| 事实 | 写入位置 | 与证据文档是否逐字一致 |
|---|---|---|
| 门 7:18/18 退出 0、36/36 `PINNED`、0 `Fatal` | blockquote(概述)、阶段表、里程碑 | 是(`gate7-device-ab.md` §1 表) |
| 门 7:7.880/7.889 vs 7.876/7.869 = −0.15% | blockquote、阶段表 | 是(§2.2 / §2.3;臂内散布 0.2–4.2%) |
| 门 7 第二会话:4/4 OK、8/8 `PINNED`、0 `Fatal`、7.987/7.989 vs 7.992/8.009 = +0.16% | 阶段表 | 是(`gate8-doorbell-device.md` §1、§4) |
| monolith 约贵 30%(−29.8% / −29.9%) | blockquote、阶段表、里程碑 | 是(`gate7-device-ab.md` §2.4) |
| 门 8①:121.1 waits/帧、5.6–6.1 parks/帧、30 401–30 407 | 阶段表 | 是(两文档 §3 表;5.60/5.75 与 6.07/6.08) |
| 门 8①:server inproc 10 866–11 963 / spawn 10 415–10 416 | 阶段表 | 是(`gate8-doorbell-device.md` §3) |
| 门 8①:spawn server waits 少 8.9–12.9%、`clipark` 6.07 vs 5.60/5.75 | 阶段表 | 是(§3、§3.1、§7) |
| 门 8②③:OpenRA 130.8 KB / 8.01 MB、211 / 206 | 阶段表 | 是(`gate8-wire-counters.md` §6.4) |
| 门 8②③:rd12 816.2 KB / 1.53 MB、7 497 / 7 504、含负载 8.07 / 10.79 MB | 阶段表 | 是(§6.4) |
| rd12 首帧 981 654 draws、run-wide mean 约 7× 稳态 | 阶段表 | 是(§6.4 读法注意) |
| `maxrec=1808` 与分块前相同、默认 8 MiB chunk 未被触发 | 阶段表 | 是(§6.4 / §7.2) |
| 收尾四项(878 / 1188 / ServerMain Init+Shutdown / 角色派生 / 工具与 pin 条目) | 阶段表落地列 | 是(`gate8-wire-counters.md` §3、§9.2、§9.7、§9.7.1) |
| 修前 0 条 / 修后 29 条汇总行、SSIM 1.0 不变 | 阶段表落地列 | 是(§9.4(c)) |
| 本板 GPU 钳 1050 MHz(写 0 读回 1、`max_gpuclk` 只读 1 050 000 000)、与 `35d0befa` 行不可比 | 阶段表状态列与验收门列 | 是(`gate7-device-ab.md` §1、§5.1 与 `pin_device.sh` 的 `2f7cbe2e` 行) |
**未写入**(任务书未列、且属于证据文档范围的数):负控 `MOBILEGL_IPC_STAGE_MB=1` 的
`seg` 运行总量逐字节相同 / `wrec` +0.11% / 同 A/B 下 `tex` +194%(未解释)、逐 blob 分布首测
(70 records、8 blobs、bucket 3–12)、G1 `.text` 10158850 与 symbols 27863。这些留在
`notes/p6/gate8-wire-counters.md`,`ROADMAP.md` 只在其开放问题 11 保留了「分块」的既有论述。
---
## 3 引用检查
在工作树根目录按任务书要求运行:
```
$ python scripts/check_doc_citations.py docs/Disaggregated/ROADMAP.md
check_doc_citations: 75 citations in 1 document(s) against HEAD, 0 problem(s)
rc=0
```
(改前同一条命令:`74 citations … 0 problem(s)`;+1 是本轮新写入的 `PipeWireCodec.cpp:1188`。
**该脚本覆盖 `docs/Disaggregated`**:它按参数吃任意 markdown,仓库里就是靠
`docs/Disaggregated/*.md` 调用的。为完整性另跑了一次全域:
```
$ python scripts/check_doc_citations.py docs/Disaggregated/*.md docs/Disaggregated/notes/p6/*.md
check_doc_citations: 1257 citations in 21 document(s) against HEAD, 27 problem(s)
rc=0
```
那 27 条**全部在只读证据文档里,与本轮改动无关**,且分三类:
1. **21 条 basename 歧义**(`Init.cpp` 命中 `MobileGL/Init.cpp`、`MG_Backend/Init.cpp`、`MG_Impl/Init.cpp`;
1 条 `Core.cpp`)——脚本按 basename 解析时要求唯一。
2. **5 条 `path:line` 超出 HEAD 行数**——`PipeStats.h` / `PipeStats.cpp` / `ServerMain.cpp` /
`PipeWireCodec.cpp` 的行号来自**工作树**(未提交的收尾改动),而脚本对 `HEAD` 解析。
`notes/p6/gate8-wire-counters.md` §3 自己声明的就是「行号为改后内容」。
3. **2 条 `retrace_main.cpp` 第 258 / 1482 行的引用无此文件**——该文件属于 apitrace 子模块的 vendored 源码,
不在 `git ls-tree -r HEAD` 的顶层路径集合里(脚本只解析仓库自身文件)。
按任务书要求,这些只读证据文档**未改动**,问题如实列出;`ROADMAP.md` 自身 0 problem。
---
## 4 边界与未做项
1. **没有 `git commit`**,也没有触碰工作树里已有的未提交改动
(`MobileGL/MG_Remote/{Wire/PipeWireCodec.cpp,Server/ServerMain.cpp}`、
`MG_Util/{Metrics/PipeStats.cpp,Metrics/PipeStats.h,Debug/Log.cpp,Debug/Log.h}`、
`MG_Test/Util/PipeStatsTest.cpp`、`tools/device_bench/pin_device.sh`、
`tools/trace_replay/run_android_retrace_local.py` 与新增的 `tools/device_bench/p6/`)。
改动的只有 `docs/Disaggregated/ROADMAP.md`(6 行)与本报告文件。
2. **另两份文档未碰**:`CURRENT_STAGE_PROGRESS.md`(含 §2.1「收官前另欠」、§3「出口门 7、8 …… 待采集」)
与 `MEASUREMENTS.md` 由并行代理负责;本报告不引用它们的行号,`ROADMAP.md` 里对
`CURRENT_STAGE_PROGRESS.md` / `MEASUREMENTS.md` 的既有链接逐字保留。**注意**:在它们被同一轮收官改完之前,
`ROADMAP.md` 说的「P6 已收官」与 `CURRENT_STAGE_PROGRESS.md` §2.1 / §3 的「未宣布收官 / 7、8 待采」
会短暂并存,这是并行分工的中间态,不是本报告遗漏。
3. **里程碑采用「改写旧条」而非「新增一条」**(任务书允许二选一):这样同一列表里不存在
「未宣布收官」与「已收官」两句。若并行代理在 `CURRENT_STAGE_PROGRESS.md` 里选择了另一种写法,
需要把两处措辞对齐时以 `ROADMAP.md` 第 228 行的口径为准。
4. **`git status` 里 12 条 ` m` 子模块与 flatbuffers 的 6 条 ` M` 是既有 stat 噪声**
(见 `notes/p6/git-worktree-fix.md` §7.1),与本轮改动无关,未处理。