[Docs] (P11): ruling ID-P11-16 on B1 (fd: endpoint, token broker pairing at hand-off, app_process helper, per-peer apply affinity, the HyperOS battery requirement, the device pass), the B1 debts, the status page, the phase README and the roadmap row

This commit is contained in:
2026-09-29 16:14:18 -04:00
parent 64b5794bc9
commit 37c7aede31
5 changed files with 13 additions and 5 deletions
+7 -3
View File
@@ -16,12 +16,16 @@
| A2 断言 arena 落在哪一档、三臂登记 | ✅ 两后端 |
| A3 T0 在 app 域 | ✅ 两后端 GO(含 128 MiB 与持续锁定) |
| A4 采纳基线(Adreno 830) | ✅ 采纳省 RSS 360–480 MB、不改帧时;split T2 在 MC 26.3 上 RSS 1.4–2×、p99 Espryt +37–42% / Magma 约 2.5×(`notes/p11/A-DEVICE.md`) |
| B0 跨 app client 探针 | 进行中(shell 里的 retrace 可执行文件 → 另一个 app 里的 server;再在 app 域复核) |
| B1 外部 client 的共享内存数据面 / B2 T0 | 待 B0 |
| B0 跨 app client 探针 | ✅ SELinux 挡连接,连上后共享段可用(`notes/p11/B0-CROSS-APP.md`) |
| PAIR 连接按 nonce 配对 | ✅ 控制协议修订 3 → 4 |
| helper 可行性探针 | ✅ 无 Context 的 `app_process` helper 经 Binder 拿到连接(依赖 ROM,`HSPIKE.md`) |
| 合并 dev(M2) | ✅ KGSL 分段提交、零散写入按矩形(补齐 split 半边)、描述符池 |
| B1 同机外部 client 走共享内存 | ✅ `fd:` 端点 + 令牌 broker + helper + 启动命令 + 外部 client 的 apply 线程策略;rd12 Espryt 约 119 vs tcp 40–53 fps |
| B2 T0 零拷贝导入(可开关,`ADOPT_TIER` 0;默认 2 = 共享内存推送) | 下一步 |
| 主机门(集成头) | ✅ 全绿,数字见 ID-P11-9 |
## 下一步
B0 结果 → B1(通道 + 共享内存数据面)→ B2(T0 导入,两后端)。转出的 dev 缺陷(Espryt 零散写入并集框、Magma 单进程 rd12 映射耗尽)已开独立任务,见 [`notes/DEBTS.md`](notes/DEBTS.md)。
B2:T0 导入(两后端,经 B1 的通道;第一项真机检查是 AHardwareBuffer 的 dma-buf fd 跨 app 传递),保留开关。转出的 dev 缺陷(Espryt 零散写入并集框、Magma 单进程 rd12 映射耗尽)已开独立任务,见 [`notes/DEBTS.md`](notes/DEBTS.md)。
**阻塞**:没有需要决策的事项。
+1 -1
View File
@@ -36,7 +36,7 @@ client(跑应用的一方)与 server(跑驱动的一方)可以在**不
| [P8](notes/p8/README.md) | 把剩余的仿真路径挪到正确的一侧,补齐协议 | 待排 |
| [**P9**](notes/p9/README.md) | **反向通道:回读、日志、重铸不再同步等待 client** | ✅ 09-29:PACK-PBO 回读 fire-and-forget(两后端)、日志分级转发、重铸无拉取(`OnLog` / `OnTexturePullRequest` 删,回调 9 → 7),F1 / F2;契约 `MG_Remote/CONTRACT-P9.md`;G1 成立;事件量批处理无实测需求不做;余项进 [`DEBTS.md`](notes/DEBTS.md) |
| [**P10**](notes/p10/README.md) | **同步对象、查询与帧节奏** | ✅ 09-29:fence 轮询由 server 报告本地作答(`kEventFenceSignaled`、`MOBILEGL_IPC_POLL_ESCALATE`;主机 Magma·tcp −37%,Adreno 830 上两后端 0 次往返);`SetSwapInterval` 转发、class C 清零;query / XFB / AsyncCompile 登记 split 各臂;credit 1/2/3 设备 loopback 在噪声内;契约 `MG_Remote/CONTRACT-P10.md`;G1 成立;余项进 [`DEBTS.md`](notes/DEBTS.md) |
| [**P11**](notes/p11/README.md) | **同机大缓冲零拷贝共享** | 进行中(09-29):已合并 dev;采纳档位在握手时定、落档断言三臂登记;T0 在 app 域两后端 GO;B(同机外部 client 的共享内存 + T0)已排期,B0 探针在跑 |
| [**P11**](notes/p11/README.md) | **同机大缓冲零拷贝共享** | 进行中(09-29):已合并 dev;采纳档位在握手时定;连接按 nonce 配对(修订 4);同机外部 client(Termux 类)经 helper 与令牌 broker 走共享内存(B1);下一步 T0 零拷贝(可开关) |
| [P13](notes/p13/README.md) | 删掉旧的"后端直接读前端"路径 | 待排 |
## 另见
+3
View File
@@ -11,6 +11,9 @@
| P11 转出(性能):设备上 MC 26.3,split T2 相对单进程采纳的 p99 Espryt +37–42%、Magma 约 2.5×,RSS 1.4–2×;其中一部分是线程落位——server apply 线程钉在 6–7 核,client GL 线程多半落到慢核,每帧 CPU 约 2.3×(`notes/p11/A-DEVICE.md`) | 路线图推完后的性能工作;RSS 由 B(T0)处理 |
| P11 转出:client 与 server 共用日志前缀时,client 以 `"w"` 打开 `<base>.server.log` 写转发来的 server 日志,会截断 server 自己的文件(依赖 server 日志行的 P12 装置测试可能受影响) | 小修 |
| P11 转出(B0 F1):HyperOS 熄屏时冻结 server app 的整个 uid(FGS 进程、supervisor、会话子进程同一 cgroup),在飞会话 120 s 后 `Fatal{BarrierTimeout}`;FCL 同机用法同样受影响(`notes/p11/B0-CROSS-APP.md`) | B1 的防冻结一项;FCL 侧另议 |
| P11 转出(B1):会话位被一个慢启动程序占着时,第二个 client 若 2 s 内发 Hello 得具名 `Refuse{Busy}`,更慢的只见发送失败(那条路径不读待发的拒绝);已写进契约 | 小修 |
| P11 转出(B1):会话启动失败后 client 还多报一个误导性的 `Fatal{CapsBeforeFirstSnapshot}`(早于 B1,helper 用户每次被拒都会看到) | 小修 |
| P11 转出(B1):外部 client 的 apply 线程策略只在红米一台(两大核)上量过;Magma openra 两个数据面都卡在 server(约 285 fps),共享内存无收益 | 需要第二种拓扑的设备时再量 |
| P11 转出(M2):上传仍有两种有损形状,各记一次日志——一层的精确写入框超过 4096 个时按存储的矩形表覆盖发出;applier 一个条目累计超过 4096 个区域时并成并集框。纹理带 GPU 写时两者都会把影子盖进空隙 | 小修,无触发报告 |
| P11 转出(M2):超过 stage 分块预算的大层按分片发出,没有写入框覆盖的分片仍带自己的整框(server 要靠它拼层图),server 会把这片的影子盖到 GPU 写过的地方;修法要一个两个 server 都跳过的「只定位」区域写法(split 专属,早于 P11) | 待排 |
| P11 转出(M2,性能):split server 上纹理无 GPU 写时,Espryt 改为自己按存储的阈值取舍精确写入框,非 ring 路径上可能多发几个小框;设备上未量 | 记录 |
@@ -19,3 +19,4 @@
| ID-P11-13 | 2026-09-29 | B1 的原生路线按用户裁定(app_process helper + IPC 令牌)可行(`HSPIKE.md`):helper 经隐藏 `IActivityManager` 发显式广播交出自己的 Binder,server app 的 broker 核令牌、连自己的端点两次、以 `ParcelFileDescriptor` 交回,client 走 `fd:<control>,<aux>`;shell 与另一 app 的 uid 下都通,令牌错按名拒绝。B1 只做这一种 broker(广播 + helper Binder,Java client 同样可用),`bindService` 等有消费者再加。依赖 ROM:直接跑的 `app_process` 不受隐藏 API 黑名单约束,若某 ROM 强制则原生路线断。`p11/hspike` 保留到 B 落地。 | 用户点名的消费者是原生程序;探针证明了唯一未验证的一环。 | `HSPIKE.md` |
| ID-P11-14 | 2026-09-29 | **零拷贝必须可开关**(用户):开关即 `MOBILEGL_IPC_ADOPT_TIER`——`2`(默认)= 今天的共享内存 + client 推送(T2),`0` = T0 零拷贝导入。开了但本会话用不了(server 自测不通过、server 端禁用、Stream 数据面)→ 退回 T2 加一行具名日志,不 Fatal;A1 在共享段上对 0/1 的握手期 Fatal 随 B2 改成这个回退。server 端另设允许 / 禁止零拷贝的开关。默认值在 B2 真机门之后按数据再议。 | 零拷贝依赖 AHB 导入与 ROM 行为,必须能退回已验证的共享内存路径。 | `PLAN-P11.md` §2 B2;B2 实现 |
| ID-P11-15 | 2026-09-29 | **合并 dev `c14283ee`**(M2:Espryt 零散写入按矩形上传、Magma 每 16384 次 draw 分段提交、Magma 描述符池几何增长与整槽回收),合并提交 `c3715998` 加 8 个跟进。要点:dev 的零散写入修复只在单进程成立——split 各臂的 client 仍发存储合并后的矩形表(跨过空隙),合并头上 30 例红(两后端、三臂);改为 client 发精确写入框、server 区域上限 256 → 4096、Espryt server 在纹理无 GPU 写时自行做原来的框 / 矩形取舍(`91454338`)。dev 在按句柄查纹理的 server 路径上补的「GPU 可能写过」标记是承重的(去掉帧缓冲附件那一处即 12 例红)。分段提交也覆盖 split server 的 draw / dispatch。描述符池:回收的围栏在 split server 上重核成立(只从 Present 等完整个槽或空闲排空到达,线上各 flush 点不到达);普查用例只在 Magma Split 跑(Spawn / Tcp 的池在 server 进程,按名跳过),要等 server 应用完再读;server 每 2048 个 set 回卷。link ratchet 171 → 172(dev 新的虚函数经纹理占位对象可达,重设基线)。G1:对旧基线 +108 / −81,具名 +25 / −0 与 dev 自己的增量相同,`.text` a56413 → a5b933,新基线已写。门(`de996d53`):unit 2676、split / spawn / tcp 408 / 325 / 337、Magma 238 / 215 / 191 / 629、gpu 2617×2、verify 2676 / 1330 / 1264、retrace 230 / 236(iterationrp 6 项)。 | 两边改的是同一条上传路径与同一套描述符管理,dev 的修复在 split 下还缺一半。 | `~/w7/notes/p11/m2-report.md` |
| ID-P11-16 | 2026-09-29 | **B1 落地**(协议与行为见 `CONTRACT-P11.md` B1 节):`fd:<control>,<aux>` client 端点;两个 flavour 的 server app 都有导出的令牌 broker(令牌 ≥ 16 字节、核对运行中 server 自己的令牌,拒绝一律具名带退出码;server 只开 TCP 时走旁边的私有 abstract 监听);`app_process` helper(令牌走环境变量或文件、不走 argv,经隐藏 `IActivityManager` 发广播);server 界面「复制启动命令」「生成令牌」。**broker 在交出时就写好两条 `PairBind`**(ID-P11-12),helper 以 `MOBILEGL_IPC_FD_PAIRED=1` 告诉 client 跳过自己的;配对后的 unix 会话等 Hello 不设时限、以 EOF 为界(`kPairedUnixHelloWaitMs`),TCP 保留预认证时限——代价是一个永不发 Hello 的程序占着会话位直到它退出。**apply 线程策略按对端与数据面**:外部进程 + 共享段时 apply 线程在最低的那个大核、自旋 50 µs,唯一大核时不占它(退到别的大核或不绑);TCP、同 app spawn、inproc 不变(把 apply 放小核会把 TCP 从 51 拖到 27 fps)。server 把实际保留的核通过 broker 告诉 helper,helper 默认 `taskset` 避开它(`--keep-affinity` 关闭),核的规则只在 C++ 一处。用户须知:令牌 ≥ 16 字节、server 以离屏模式启动、HyperOS 电池对 server app 与 client 所在 app 都设「无限制」(否则熄屏或后台会被冻结)。真机(`df826f42` APK,默认环境、无解冻器):rd12 两后端 × 路线 (a)(b) ssim 全过、shm 全部胜 tcp(Espryt 119.3 / 53.2、118.7 / 39.8;Magma 36.4 / 20.3、32.5 / 20.4);程序晚 10 s 才初始化 EGL 仍能连上;插件 flavour 跑通。主机门(`8dfdd3ba`,之后只改了 Java 一行与契约):G1 0/0、ratchet 172、修订 4、卫生 12/12、unit 2692、各车道全绿;5 个 red-once。 | 用户点名的消费者是同机的原生程序;B0 / HSPIKE 已证明通道可行。 | `CONTRACT-P11.md` B1 节;`~/w7/notes/p11/b1-report.md` |
+1 -1
View File
@@ -1,6 +1,6 @@
# P11 — persistent map 与 ≥16 MiB 采纳(进行中)
> **2026-09-29 开工**。计划与范围重划 [`PLAN-P11.md`](PLAN-P11.md)(B 已排期:消费者是同机从其他 app 启动的 GL 程序);裁定 [`INTEGRATOR-DECISIONS-P11.md`](INTEGRATOR-DECISIONS-P11.md);真机测量 [`A-DEVICE.md`](A-DEVICE.md);协议 `MobileGL/MG_Remote/CONTRACT-P11.md`。已落地:合并 dev、A1 / A2(档位在握手时定、断言落档、三臂登记)、A3(T0 在 app 域两后端 GO)、A4(基线重测)。进行中:B0。
> **2026-09-29 开工**。计划与范围重划 [`PLAN-P11.md`](PLAN-P11.md)(B 已排期:消费者是同机从其他 app 启动的 GL 程序);裁定 [`INTEGRATOR-DECISIONS-P11.md`](INTEGRATOR-DECISIONS-P11.md);真机测量 [`A-DEVICE.md`](A-DEVICE.md);协议 `MobileGL/MG_Remote/CONTRACT-P11.md`。已落地:合并 dev(两次)、A1 / A2、A3(T0 在 app 域两后端 GO)、A4(基线重测)、B0 / HSPIKE(跨 app 通道)、PAIR(连接按 nonce 配对,修订 4)、B1(同机外部 client 经 helper 与令牌 broker 走共享内存)。下一步:B2(T0,可开关)。
>
> 下面是该阶段在路线图上的原始范围与出口门(2026-09-24 从 [`ROADMAP.md`](../../ROADMAP.md) 阶段表移入,原文照录)。