mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 10:03:23 +09:00
- 144 commits from785fed0b0onward were rewritten to drop the Co-Authored-By trailer the project forbids; origin/feat/disaggregated moved from 1135c664 to3c80cd62(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
214 lines
15 KiB
Markdown
214 lines
15 KiB
Markdown
# docs-closeout-progress — `CURRENT_STAGE_PROGRESS.md` 的 P6 收官写入报告
|
||
|
||
2026-09-22。工作树 `C:/Users/geekerwan/AndroidStudioProjects/FoldCraftLauncher/MobileGL-disagg`,
|
||
分支 `feat/disaggregated`,**现头 `4e7bf0fe`**,与 `origin/feat/disaggregated` 同步。任务书给的
|
||
头 `94c130d6` 是**两轮测量的源头**(门 7 报告记 `75dd0cb1`、门 8 的 wire 计数器与真机第二轮记
|
||
`94c130d6`);它之后分支又落了两个 P6.5 设计提交(`872370ba`、`4e7bf0fe`),非本报告所加。
|
||
|
||
**只改了一份文档**:`docs/Disaggregated/CURRENT_STAGE_PROGRESS.md`。未 commit。工作树里既有的
|
||
未提交改动(`MobileGL/MG_Remote/**`、`MobileGL/MG_Util/**`、`tools/device_bench/pin_device.sh`、
|
||
`tools/trace_replay/run_android_retrace_local.py`、`tools/device_bench/p6/`)**一个字节未动**。
|
||
另外两份(`CURRENT_STAGE_PROGRESS.md` 之外的两份并行代理文档)未触碰;只读证据
|
||
`notes/p6/gate7-device-ab.md`、`gate8-doorbell-device.md`、`gate8-wire-counters.md`、
|
||
`git-worktree-fix.md` 只读未改。
|
||
|
||
---
|
||
|
||
## 0 改动总览
|
||
|
||
| # | 位置 | 改动 | 行数 |
|
||
|---|---|---|---|
|
||
| 1 | 头部状态段 | 「实现完成、出口性能/设备数待补」→「**P6 已收官(2026-09-22)**」+ 门 7 tie / 门 8 三个数齐 / G1 0/0/0/0 + 分支头事实 | 改写,+6 / −4 |
|
||
| 2 | 新增 §1.1「收尾(2026-09-22)」 | 包状态表之后补五条:wire 计数器、`ServerMain` 武装(红一次证据)、STATS_FILE 角色派生、`pin_device.sh` `2f7cbe2e` 行、工具入库 + 测试数 | 新增 39 行 |
|
||
| 3 | §2 出口门表第 7 行 | ⏳ → ✅,写两轮会话的 boot id / 臂序 / 臂数 / client CPU 数 / tie 判读 / 证据文件 | 改写 |
|
||
| 4 | §2 出口门表第 8 行 | ⏳ → ✅,写三个强制性能数 + 诚实判读 + 证据文件 | 改写 |
|
||
| 5 | §2 表后新增一段 | `MEASUREMENTS.md:342` 的「分块后分布不存在」据此关闭 | 新增 5 行 |
|
||
| 6 | §2.1 标题与首条 | 标题改为「出口门之外仍欠」;首条 `PipeStats` 结构性零由「修复进行中」改为「**已修**,0 → 29 行」 | 改写 2 行 |
|
||
| 7 | §3 新增 §3.1 / §3.2 / §3.3 | 配对 A/B、门 8① 门铃账、门 8②③ wire 计数器 | 新增 61 行 |
|
||
| 8 | §5 | 删去已解决的「出口门 7、8」条目;补两条结构性限制 | 净 +17 行 |
|
||
|
||
净变化:`134 insertions(+), 11 deletions(-)`(`git diff --stat docs/Disaggregated/CURRENT_STAGE_PROGRESS.md`;
|
||
本报告写完后又校过一遍,行数随 §2 一段的口径修正微调过)。无段落被误删:`DirectVulkan` 分歧、
|
||
P6.5、Ph、P12、seq/op 五条**逐字保留**(仅 `DirectVulkan` 条尾加了"见 §3 与 `ROADMAP.md` P7 行")。
|
||
|
||
---
|
||
|
||
## 1 逐处对照(事实基线 → 落文)
|
||
|
||
### 1.1 头部状态段
|
||
|
||
旧:「状态(2026-09-21):P6 全部包已落地(a6…t6),出口门第 1–6 项达成;第 7 项…第 8 项…尚未
|
||
正式采集,因此 P6 记为「实现完成、出口性能/设备数待补」,**未宣布收官**。分支 … 头 `77cbd176`」
|
||
|
||
新:`P6 已收官(2026-09-22)`,并把分支头写成**三层事实**,因为任务书要求"照实说"而
|
||
`94c130d6` 已不是树头:
|
||
|
||
- 门 7 报告头 `75dd0cb1`(`gate7-device-ab.md:3`)、门 8 第二轮头 `94c130d6`
|
||
(`gate8-doorbell-device.md:3`、`gate8-wire-counters.md:3`)——**测量期的源头**;
|
||
- 其后两个提交 `872370ba`、`4e7bf0fe` 是 P6.5 设计(已核实:`872370ba` 的 diff 只含
|
||
`CONTRACT-P6.md` / `StreamLink.h`(+5 行注释) / `ARCHITECTURE.md` / `CURRENT_STAGE_PROGRESS.md` /
|
||
`P6-ENDSTATE-REVIEW.md` / `ROADMAP.md`;`4e7bf0fe` 只含 `ROADMAP.md`);
|
||
- 现头 `4e7bf0fe`,与 `origin` 同步(`git rev-parse origin/feat/disaggregated` = `4e7bf0fe…`);
|
||
**工作树另有未提交的 P6 收尾改动**,指向 §1.1。
|
||
|
||
### 1.2 §1.1 收尾(2026-09-22)
|
||
|
||
任务书要求的六项全部落文,并各自指出处:
|
||
|
||
| 任务书要求 | 落文内容 |
|
||
|---|---|
|
||
| wire 计数器(seg=/wrec= + 直方图) | `ByteClass::StageSegmentBytes` 唯一收口 `PipeWireCodec.cpp:878`;`CallClass::WireRecords` `:1188`;staged-blob 直方图复用 `PayloadBucketOf`;汇总行 `seg=` / `wrec=` / `wrec/f=`;push-only |
|
||
| ServerMain PipeStats 武装(红一次证据) | 「修复前 spawn server **0** 条汇总行、修复后 **29** 条,同一条 spawn trace、两侧 SSIM 均 1.000000」;`Init()` 的两处顺序承重点 |
|
||
| STATS_FILE 角色派生 | `<base>.client.json` / `<base>.server.json`、基名不指向文件、`RoleLogPath` 导出不复制;G1 红三次(`.text +24` / 1 symbol resized / `.rodata +64`) |
|
||
| pin_device.sh `2f7cbe2e` 条目 | 本板钳 **1050 MHz**(`thermal_pwrlevel` 写 0 读回 1、`max_gpuclk` 只读 1 050 000 000);**与 1100 MHz 时代的 `35d0befa` 行不可比,只有同会话配对可比** |
|
||
| tools/device_bench/p6 入库 | `{ab_session.py,render_ab.py,README.md}` + `run_android_retrace_local.py`(+19 行 `MOBILEGL_TRACE_PACKAGE`);四文件**未提交** |
|
||
| 单测 2367/2367 与 spawn 102/102 | 落文;另加 `PipeStats 25/25` 与 G1 `.text` 两侧各 10 158 850 字节 `cmp` 无差异 |
|
||
|
||
### 1.3 §2 出口门表
|
||
|
||
第 7 行与第 8 行从 ⏳ 改 ✅,数字逐字取自只读证据,**不改写、不重算、不挑好看的**:
|
||
|
||
- 会话 1:boot id `e69d0329…`→`107f24d3…`,六臂 `monolith,inproc,spawn,inproc,monolith,spawn`
|
||
× best-of-3,18/18 exit 0、36/36 `PINNED`、0 `Fatal{`;client CPU p50 ms/帧
|
||
inproc **7.880/7.889**、spawn **7.876/7.869**(均值 −0.15%,臂内散布 0.2–4.2%),monolith 约贵 30%。
|
||
- 会话 2:boot id `107f24d3…`→`7e6c6e9f…`,交错 × best-of-2,4/4 OK、8/8 `PINNED`、0 `Fatal`;
|
||
**7.987/7.989 vs 7.992/8.009**(+0.16%)。
|
||
- 第 8 行:① client 121.1 waits/帧、5.6–6.1 parks/帧(run total 30 401–30 407);server inproc
|
||
10 866–11 963、spawn 10 415–10 416;park 率 0.042–0.06%;clipark/f 6.07 vs 5.60/5.75。
|
||
② OpenRA 130.8 KB median / 8.01 MB steady mean(含负载 8.07 MB);rd12 816.2 KB median /
|
||
1.53 MB steady mean(含负载 10.79 MB)。③ OpenRA 211/206;rd12 7 497/7 504;`maxrec=1808`。
|
||
|
||
第 8 行末尾的**诚实判读**逐句保留证据里的定性:socket 阻塞读**既不更便宜也不更贵**、契约 §9
|
||
「阻塞读可能更便宜」**未兑现**、spawn server waits 少 8.9–12.9% 归因于 handoff 纪律而非门铃本身、
|
||
clipark/f 是唯一 socket 略差的列(每帧多约 0.4 次 park)。第 7 行明写 **tie** 与「不设门」。
|
||
|
||
### 1.4 §2.1 与 §5
|
||
|
||
- §2.1 首条的旧文写「修法是在 server 进程里…(工作区中进行中,未提交)」——**已过时**,改为
|
||
「**已修**…spawn server 汇总行 0 → 29 条,SSIM 1.0 不变」。标题 `收官前另欠` 已不成立(出口门
|
||
1–8 全达成),改成 `出口门之外仍欠`,并注明这些是门外的债。
|
||
- §5 删去 `**出口门 7、8**(真机配对 A/B、三个性能数)——待采集,见 §2。` 一条(已解决)。
|
||
其余五条保留。新增两条**结构性限制**(任务书指定):
|
||
1. spawn client 无 `OnPresent` → 窗口字段 `frames=0 window=0` 无效应,但 `PublishGauge` 是 store
|
||
所以 `cli`/`clipark` 与**发射侧直接 Add** 的 `resid`/`csob-blob`/`seg`/`wrec` 的 run total 有效;
|
||
并给出逐 role 取数规则(`srv` 读 server.log、`cli` 读 client.log、spawn client 只有 `Shutdown`
|
||
终行或 0 行)。
|
||
2. `MOBILEGL_PIPE_STATS_FILE` 已改角色派生 `<base>.client.json` / `<base>.server.json`,基名不指向
|
||
文件;inproc 只产出 `.client.json` 是**正确**的。
|
||
|
||
### 1.5 §3 真机验收
|
||
|
||
原有三条功能行、`DirectVulkan` 分歧段、llvmpipe `iterationrp` 段**逐字未动**,在其后新增
|
||
§3.1(配对 A/B)、§3.2(门 8① 门铃账,含读法警告)、§3.3(门 8②③ wire 计数器,含
|
||
framing 警告、负控、逐 blob 分布、`tex +194%` 未解释记为证据不作结论)。
|
||
|
||
任务书指定的两个必须如实写的点都在:**OpenRA 真机辅负载「未跑」**(§3.3 末段),以及
|
||
**gate8-wire-counters.md §6 的数据来自 WSL + llvmpipe,门 8②③ 是桌面 inproc 数**(同一段)。
|
||
|
||
---
|
||
|
||
## 2 引用检查输出
|
||
|
||
脚本 `scripts/check_doc_citations.py` 的 `documents` 是**位置参数(`nargs="+"`),不接受空参**,
|
||
所以任务书里那条裸命令跑不出来:
|
||
|
||
```
|
||
$ python scripts/check_doc_citations.py
|
||
usage: check_doc_citations.py [-h] [--rev REV] [--strict]
|
||
documents [documents ...]
|
||
check_doc_citations.py: error: the following arguments are required: documents
|
||
EXIT=2
|
||
```
|
||
|
||
按脚本自己的用法(`python3 scripts/check_doc_citations.py docs/Disaggregated/*.md`)跑,结果如下。
|
||
|
||
**目标文档(本报告唯一改动的文件):**
|
||
|
||
```
|
||
$ cd MobileGL-disagg && python scripts/check_doc_citations.py docs/Disaggregated/CURRENT_STAGE_PROGRESS.md
|
||
check_doc_citations: 3 citations in 1 document(s) against HEAD, 0 problem(s)
|
||
EXIT=0
|
||
```
|
||
|
||
(这是**改动后**的结果。改动前同一命令报 `2 citations … 0 problem(s)`;计数从 2 升到 3 是因为新增了
|
||
`PipeWireCodec.cpp:878` 一处被正则捕获的引用——另外两处 `MEASUREMENTS.md:342`、`PipeStats.h:256` 是
|
||
原有的。同段里的 `:1188` 因无文件名前缀,按脚本自己的注释「`:12-13` is NOT matched on purpose」不计数。)
|
||
|
||
**全量(覆盖 `docs/Disaggregated`,含只读证据与三份并行代理文档):**
|
||
|
||
```
|
||
$ cd MobileGL-disagg && python scripts/check_doc_citations.py docs/Disaggregated/*.md
|
||
check_doc_citations: 179 citations in 11 document(s) against HEAD, 1 problem(s)
|
||
docs/Disaggregated/P6-ENDSTATE-REVIEW.md:284: `Init.cpp:184-211` -> ambiguous: MobileGL/Init.cpp, MobileGL/MG_Backend/Init.cpp, MobileGL/MG_Impl/Init.cpp
|
||
EXIT=0
|
||
```
|
||
|
||
该脚本**确实覆盖 `docs/Disaggregated`**(上表 11 份文档含 `docs/Disaggregated/*.md`),
|
||
但**不递归**:`notes/p6/*.md` 不在通配里。唯一 1 条 problem 是 `P6-ENDSTATE-REVIEW.md` 里
|
||
**既有的** basename 歧义(非本次改动引入,且该文件由并行代理负责,未碰),无 `--strict` 时退出码 0。
|
||
|
||
**扩展核查**(把只读证据与 `notes/p6` 一并喂进去,确认我引用的三个证据文件本身的状态):
|
||
|
||
```
|
||
$ cd MobileGL-disagg && python scripts/check_doc_citations.py \
|
||
docs/Disaggregated/CURRENT_STAGE_PROGRESS.md \
|
||
docs/Disaggregated/notes/p6/gate7-device-ab.md \
|
||
docs/Disaggregated/notes/p6/gate8-doorbell-device.md \
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md
|
||
check_doc_citations: 55 citations in 4 document(s) against HEAD, 9 problem(s)
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:141: `MobileGL/MG_Util/Metrics/PipeStats.h:382-386` -> MobileGL/MG_Util/Metrics/PipeStats.h has 372 lines at HEAD
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:145: `MobileGL/MG_Util/Metrics/PipeStats.cpp:708` -> MobileGL/MG_Util/Metrics/PipeStats.cpp has 646 lines at HEAD
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:613: `retrace_main.cpp:258` -> no such file at HEAD
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:614: `retrace_main.cpp:1482` -> no such file at HEAD
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:669: `Init.cpp:123` -> ambiguous: MobileGL/Init.cpp, MobileGL/MG_Backend/Init.cpp, MobileGL/MG_Impl/Init.cpp
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:681: `ServerMain.cpp:442` -> MobileGL/MG_Remote/Server/ServerMain.cpp has 395 lines at HEAD
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:699: `Init.cpp:59` -> ambiguous: MobileGL/Init.cpp, MobileGL/MG_Backend/Init.cpp, MobileGL/MG_Impl/Init.cpp
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:826: `PipeStats.cpp:787` -> MobileGL/MG_Util/Metrics/PipeStats.cpp has 646 lines at HEAD
|
||
docs/Disaggregated/notes/p6/gate8-wire-counters.md:826: `PipeStats.h:463` -> MobileGL/MG_Util/Metrics/PipeStats.h has 372 lines at HEAD
|
||
EXIT=0
|
||
```
|
||
|
||
**这 9 条全部落在 `notes/p6/gate8-wire-counters.md`(只读证据,非本报告改动的文件),而且全部是
|
||
"对着工作树而非 HEAD 写的行号"** —— 正是它自己 §3 开头写的"行号为改后内容":
|
||
|
||
- **5 条**(`:141`、`:145`、`:681`、`:826` ×2)引的是**未提交的工作树行号**——正是它自己 §3 开头
|
||
写的"行号为改后内容"。实测两侧行数:`PipeStats.h` 工作树 **466** vs HEAD **372**、
|
||
`PipeStats.cpp` 工作树 **800** vs HEAD **646**、`ServerMain.cpp` 工作树 **445** vs HEAD **395**。
|
||
脚本按 `HEAD` 解析,故报超界。**这 5 条对着工作树是对的**,对着 HEAD 才红。
|
||
- **2 条**(`:613`、`:614`)引 `retrace_main.cpp`,该文件在 `3rdparty/apitrace` 子模块内,
|
||
不在本仓库的 `ls-tree` 里,脚本解析不到。
|
||
- **2 条**(`:669`、`:699`)是 `Init.cpp` 的既有 basename 歧义(`MobileGL/Init.cpp` /
|
||
`MG_Backend/Init.cpp` / `MG_Impl/Init.cpp`)。
|
||
|
||
**目标文档 `CURRENT_STAGE_PROGRESS.md` 自身 0 problem。** 三处行号引用按 HEAD 解析都在界内:
|
||
`PipeStats.h:256`(HEAD 372 行)、`PipeWireCodec.cpp:878`(HEAD 2299 行)、
|
||
`MEASUREMENTS.md:342`(HEAD 599 行)。`:1188`(`EncodeRecord`)写在中间点前无文件名,按脚本设计不计;
|
||
它与 `:878` 都取**证据文件 `gate8-wire-counters.md` §3 的同一口径(改后行号)**——
|
||
`PipeWireCodec.cpp` 工作树 2335 / HEAD 2299,两个行号在两侧都成立,所以这条无需改口径。
|
||
|
||
**链接目标存在性**(我新加的 markdown 相对链接逐个 `test -f`):
|
||
|
||
```
|
||
OK docs/Disaggregated/notes/p6/gate7-device-ab.md
|
||
OK docs/Disaggregated/notes/p6/gate8-doorbell-device.md
|
||
OK docs/Disaggregated/notes/p6/gate8-wire-counters.md
|
||
OK tools/device_bench/p6/ab_session.py
|
||
OK tools/device_bench/p6/render_ab.py
|
||
OK tools/device_bench/p6/README.md
|
||
```
|
||
|
||
---
|
||
|
||
## 3 边界与未做
|
||
|
||
- **未 commit**:只写了工作树文件。任务书明确禁止 `git commit`。
|
||
- **未碰**其余两份并行代理文档,也未碰 `ROADMAP.md` / `MEASUREMENTS.md` / `ARCHITECTURE.md`
|
||
(`ROADMAP.md` 的 P6 行与 `MEASUREMENTS.md:342` 仍是旧口径——本报告把"可关闭"写在
|
||
`CURRENT_STAGE_PROGRESS.md` 里,**没有替它们改**,那不在本次授权内)。
|
||
- **`CURRENT_STAGE_PROGRESS.md` 的既有 `MEASUREMENTS.md:342` 句子未删**,只在其下增写了关闭依据;
|
||
删除该句属 `MEASUREMENTS.md` 自身的改动,留待该文件的责任方。
|
||
- **未新增引用**到 `gate8-doorbell-device.md` 之外的新证据文件;`git-worktree-fix.md` 未在本文档引用
|
||
(它是 git 元数据修复,与阶段进度无关)。
|
||
- 文档定位保持为「只记当前阶段(P6)」:新增内容全部是 P6 的收官事实与门 8 的数,
|
||
P6.5 / Ph / P12 只在 §5 以「不属于 P6」的身份出现,入口提示段(顶部 blockquote)逐字未动。
|