From 76f75f3a0c0e4e8002dff8e639da179f8dfff3a6 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 29 Sep 2026 13:46:37 -0400 Subject: [PATCH] [Docs] (P11): ruling ID-P11-15 on the M2 dev merge - the scattered-upload fix completed on the split arms, the trim fence re-audited on the split server, the census and ratchet notes; DEBTS closes the two merged dev bugs and takes M2 leftovers --- docs/Disaggregated/notes/DEBTS.md | 6 ++++-- docs/Disaggregated/notes/p11/INTEGRATOR-DECISIONS-P11.md | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/Disaggregated/notes/DEBTS.md b/docs/Disaggregated/notes/DEBTS.md index 7bf15ab0..77c8e435 100644 --- a/docs/Disaggregated/notes/DEBTS.md +++ b/docs/Disaggregated/notes/DEBTS.md @@ -9,10 +9,12 @@ | P10 转出:`GL_ARB_gpu_shader_fp64` 按 server 的 `MOBILEGL_ADVERTISE_FP64` 宣告,fp64 收窄却在 client 的编译里;tcp 下 server 环境不同时两者不一致(与已修的 `GL_KHR_parallel_shader_compile` 同类,挂点 `CapsMirror::Adopt`,ID-P10-10) | 小修,无触发报告 | | P10 转出(性能):设备上 tcp loopback 的 rd12 每帧 19.4 ms 中 ~11.2 ms 是生产者在 stream 传输里的停车(发送 + 环 / stage / ack 等待),credit 等待只有 ~0.2 ms(`notes/p10/C-MEASUREMENTS.md` §2,ID-P10-13) | 路线图推完后的性能工作 | | 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 转出:Espryt 对零散写入按并集框上传,把影子里的旧纹素盖到框内 GPU 写过的空隙上(8×8 探针 41 个错,pull 与全部 Espryt 臂;Magma 对);dev `568090f0` 的 `AdoptDriverLevelIntoShadow` 有同样的并集框近似(读代码) | **dev 已修**(`9524c688` + 测试 `21c7e8cd`),下次合并 dev 带进本线 | -| P11 转出:Magma 单进程重放 rd12 在加载帧耗尽 `vm.max_map_count`(65530,其中 57–60k 是 `/dev/kgsl-3d0` 映射)而 abort;split 的 Magma 与 Espryt 都正常 | **dev 已修**(`d20c2d01`:根因是 rd12 的首帧——trace 里第一次交换前 98 万次 draw、没有任何 flush / fence——全录进一个命令缓冲,Adreno 按 16 KiB 分块映射;改为每 16384 次 draw 提交一次并限流;测试 `4d3d677a`、`9c32d9fa`;真机峰值 kgsl 映射约 60k → 4.8k,报告 `~/w7/notes/kgsl/report.md`),下次合并 dev 带进本线 | | P11 转出:client 与 server 共用日志前缀时,client 以 `"w"` 打开 `.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 转出(M2):上传仍有两种有损形状,各记一次日志——一层的精确写入框超过 4096 个时按存储的矩形表覆盖发出;applier 一个条目累计超过 4096 个区域时并成并集框。纹理带 GPU 写时两者都会把影子盖进空隙 | 小修,无触发报告 | +| P11 转出(M2):超过 stage 分块预算的大层按分片发出,没有写入框覆盖的分片仍带自己的整框(server 要靠它拼层图),server 会把这片的影子盖到 GPU 写过的地方;修法要一个两个 server 都跳过的「只定位」区域写法(split 专属,早于 P11) | 待排 | +| P11 转出(M2,性能):split server 上纹理无 GPU 写时,Espryt 改为自己按存储的阈值取舍精确写入框,非 ring 路径上可能多发几个小框;设备上未量 | 记录 | +| P11 转出(M2,给 dev):dev 的 `DirectVulkan.SplitRecording.` 车道没有 `RESOURCE_LOCK`、其用例读字面日志路径——`-j` 下可能互相截断;P11 线的副本已修 | 下次向 dev 回流时带上 | | P11 转出:pull 构建没有任何门跑集成测试(`TextureRemintPullScenario` 在 pull 上自 P9 起就是红的,P11 M 修) | CI / 门的覆盖,需裁定 | | `GetCaps` 的两个 blobref | 一旦运输,必须有 server → client 的 carrier rule,不能套 `SEG_STAGE` | | E1 对照的重定义(ID-122) | 无主(开放问题 24) | diff --git a/docs/Disaggregated/notes/p11/INTEGRATOR-DECISIONS-P11.md b/docs/Disaggregated/notes/p11/INTEGRATOR-DECISIONS-P11.md index c82a8833..3108c46a 100644 --- a/docs/Disaggregated/notes/p11/INTEGRATOR-DECISIONS-P11.md +++ b/docs/Disaggregated/notes/p11/INTEGRATOR-DECISIONS-P11.md @@ -18,3 +18,4 @@ | ID-P11-12 | 2026-09-29 | **PAIR**:socket client 的控制与辅助连接按 nonce 配对。client 在两条连接上各先发一条 `PairBind{nonce, aux}`(控制连接上 Hello 紧随其后);server 用 `PairAcceptor` 取代 `SocketTransport::AcceptPair`(已删):跨调用保留未配对的连接,不读 `PairBind` 之后的字节,同 nonce、角色相反才配对;什么都不发就关的连接(就绪探测)静默关闭,2 s 内没有 `PairBind` 或没等到另一半的具名拒绝后关闭,最多 16 条待配对。`protocol.fbs` 追加一张表与联合末位成员,控制协议修订 **3 → 4**(按 pin 脚本的程序);rev-3 client 连新 server 得 `Refuse{WireFingerprint}`,不会被配对。门:`PairAcceptorTest` 8 例 × unix / tcp(探测后接真 client、四条连接交错、孤立辅助连接过期后下一个 client 正常、Hello 在前的旧 client 具名拒绝)加一个真 server 的端到端用例;按到达顺序配对放回后 8 例全红、端到端 rc=6(与设备上一致)。B1 注意:代 client 建连接的 Service 必须自己写这两条 `PairBind`。 | 就绪探测与并发连接会让会话配错;B1 的 broker 更会同时代多个 client 建连接。 | `MG_Remote/Transport/*`、`Server/PairAcceptor.*`、`ServerMain.cpp`、`protocol.fbs`、`CONTRACT-P11.md` | | ID-P11-13 | 2026-09-29 | B1 的原生路线按用户裁定(app_process helper + IPC 令牌)可行(`HSPIKE.md`):helper 经隐藏 `IActivityManager` 发显式广播交出自己的 Binder,server app 的 broker 核令牌、连自己的端点两次、以 `ParcelFileDescriptor` 交回,client 走 `fd:,`;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` |