diff --git a/docs/Disaggregated/notes/p5f/magma-runahead.md b/docs/Disaggregated/notes/p5f/magma-runahead.md index 01181fa2..2f52591d 100644 --- a/docs/Disaggregated/notes/p5f/magma-runahead.md +++ b/docs/Disaggregated/notes/p5f/magma-runahead.md @@ -2,6 +2,10 @@ **已完成,2026-09-20**。最终生产与实机行为头 `194382c96a8a5f51ef23f412fdccfbd40a82bf78`。 +后续同包的 **render distance 32 四组合性能测量**见 [rd32-fourway.md](rd32-fourway.md)。 +该轮默认动态频率下,Espryt monolith/inproc 为62.18/64.02 FPS,Magma 为116.08/86.85 FPS; +不要将下面的功能验证窗口替代这份高负载性能记录。 + 本次是在已完成的 P5f 与 Magma inproc 游戏修复上继续实现异步排队, 不是重开 P5f 包,也不宣称 P6 spawn 或 P7/P8 全量实现。 契约见 `MobileGL/MG_Remote/CONTRACT-MAGMA-RUNAHEAD.md`。 diff --git a/docs/Disaggregated/notes/p5f/rd32-fourway.json b/docs/Disaggregated/notes/p5f/rd32-fourway.json new file mode 100644 index 00000000..c51b0153 --- /dev/null +++ b/docs/Disaggregated/notes/p5f/rd32-fourway.json @@ -0,0 +1,594 @@ +{ + "date": "2026-09-20", + "source": "194382c96a8a5f51ef23f412fdccfbd40a82bf78", + "library_sha256": "046d86c288ce891b16770148578ba1a6fea4057783b69c2359f5830e58b7b223", + "clock_control": "stock-dvfs", + "render_distance": 32, + "simulation_distance": 12, + "warmup_seconds": 180, + "fan_target": 2, + "arms": [ + { + "name": "Espryt-monolith", + "mean_fps": 62.178237711677376, + "median_interval_fps": 59.97003214006533, + "p10_interval_fps": 56.94306106612412, + "sample_seconds": 60.020999908447266, + "intervals": 60, + "boot_id": "b19a24d3-bf9d-4c99-a64e-1e70fac40f0f", + "hardware_window": { + "samples": 11, + "all_observed_pins_match": null, + "fixed_clock_evaluation": "not_applicable_stock_dvfs", + "drift_samples": null, + "observed_clock_ranges": { + "policy0_min": { + "min": 556800, + "max": 556800, + "observed_values": [ + 556800 + ] + }, + "policy0_max": { + "min": 1555200, + "max": 1996800, + "observed_values": [ + 1555200, + 1785600, + 1996800 + ] + }, + "policy0_cur": { + "min": 1555200, + "max": 1996800, + "observed_values": [ + 1555200, + 1785600, + 1996800 + ] + }, + "policy6_min": { + "min": 1017600, + "max": 1017600, + "observed_values": [ + 1017600 + ] + }, + "policy6_max": { + "min": 1689600, + "max": 1958400, + "observed_values": [ + 1689600, + 1958400 + ] + }, + "policy6_cur": { + "min": 1689600, + "max": 1958400, + "observed_values": [ + 1689600, + 1958400 + ] + }, + "gpu": { + "min": 525000000, + "max": 660000000, + "observed_values": [ + 525000000, + 607000000, + 660000000 + ] + }, + "gpu_min": { + "min": 12, + "max": 12, + "observed_values": [ + 12 + ] + }, + "gpu_max": { + "min": 0, + "max": 0, + "observed_values": [ + 0 + ] + }, + "busy": { + "min": 65, + "max": 81, + "observed_values": [ + 65, + 66, + 69, + 70, + 71, + 77, + 80, + 81 + ] + } + }, + "fan_observed_values": { + "fan_rpm": [ + "14466", + "14487", + "14570", + "14591" + ], + "fan_target": [ + "2" + ] + }, + "temperature_c_min": 53.1, + "temperature_c_max": 55.8, + "sample_elapsed_seconds": [ + 219.111, + 224.585, + 230.177, + 235.749, + 241.223, + 246.748, + 252.337, + 257.904, + 263.443, + 269.017, + 274.616 + ] + }, + "actual_runtime": { + "backend_names": [ + "Direct (OpenGL ES)" + ], + "ipc_lines": [], + "run_ahead_armed": false, + "caps_call_masks": [], + "run_ahead_cap_bit_seen": false, + "stats_rows": 137, + "residual_pulls_max": 0.0 + }, + "source_directory": "C:\\Users\\geekerwan\\.codex\\tmp\\rd32-fourway-20260920-stock-fan2-espryt\\Espryt-monolith" + }, + { + "name": "Espryt-inproc", + "mean_fps": 64.02439006486937, + "median_interval_fps": 63.0, + "p10_interval_fps": 58.94104917019154, + "sample_seconds": 60.02400016784668, + "intervals": 60, + "boot_id": "ede56fd0-78de-44ec-8f52-125ea4c072b1", + "hardware_window": { + "samples": 11, + "all_observed_pins_match": null, + "fixed_clock_evaluation": "not_applicable_stock_dvfs", + "drift_samples": null, + "observed_clock_ranges": { + "policy0_min": { + "min": 556800, + "max": 556800, + "observed_values": [ + 556800 + ] + }, + "policy0_max": { + "min": 1555200, + "max": 1785600, + "observed_values": [ + 1555200, + 1785600 + ] + }, + "policy0_cur": { + "min": 1555200, + "max": 1785600, + "observed_values": [ + 1555200, + 1785600 + ] + }, + "policy6_min": { + "min": 1017600, + "max": 1017600, + "observed_values": [ + 1017600 + ] + }, + "policy6_max": { + "min": 1689600, + "max": 1689600, + "observed_values": [ + 1689600 + ] + }, + "policy6_cur": { + "min": 1689600, + "max": 1689600, + "observed_values": [ + 1689600 + ] + }, + "gpu": { + "min": 443000000, + "max": 607000000, + "observed_values": [ + 443000000, + 525000000, + 607000000 + ] + }, + "gpu_min": { + "min": 12, + "max": 12, + "observed_values": [ + 12 + ] + }, + "gpu_max": { + "min": 0, + "max": 0, + "observed_values": [ + 0 + ] + }, + "busy": { + "min": 68, + "max": 83, + "observed_values": [ + 68, + 73, + 77, + 78, + 79, + 83 + ] + } + }, + "fan_observed_values": { + "fan_rpm": [ + "14163", + "14262", + "14363" + ], + "fan_target": [ + "2" + ] + }, + "temperature_c_min": 53.9, + "temperature_c_max": 56.6, + "sample_elapsed_seconds": [ + 215.636, + 221.183, + 226.728, + 232.298, + 237.875, + 243.496, + 249.053, + 254.657, + 260.27, + 265.886, + 271.475 + ] + }, + "actual_runtime": { + "backend_names": [ + "Direct (OpenGL ES)" + ], + "ipc_lines": [ + "Config: IPC ring=8MiB stage=256MiB spin=50us persistent-block=64KiB adopt-tier=2 verb-barrier=1 run-ahead=1 present-credit=1 strict=1 audit=0 role-split-state=1 affinity='auto'" + ], + "run_ahead_armed": true, + "caps_call_masks": [ + "0x0", + "0x3fff00000600" + ], + "run_ahead_cap_bit_seen": true, + "stats_rows": 137, + "residual_pulls_max": 0.0 + }, + "source_directory": "C:\\Users\\geekerwan\\.codex\\tmp\\rd32-fourway-20260920-stock\\Espryt-inproc" + }, + { + "name": "Magma-monolith", + "mean_fps": 116.07722925432384, + "median_interval_fps": 116.0, + "p10_interval_fps": 114.8736338247419, + "sample_seconds": 60.02900004386902, + "intervals": 60, + "boot_id": "addd73b6-b29a-4f65-a359-7c2a39bb60a0", + "hardware_window": { + "samples": 11, + "all_observed_pins_match": null, + "fixed_clock_evaluation": "not_applicable_stock_dvfs", + "drift_samples": null, + "observed_clock_ranges": { + "policy0_min": { + "min": 556800, + "max": 556800, + "observed_values": [ + 556800 + ] + }, + "policy0_max": { + "min": 1555200, + "max": 1555200, + "observed_values": [ + 1555200 + ] + }, + "policy0_cur": { + "min": 1555200, + "max": 1555200, + "observed_values": [ + 1555200 + ] + }, + "policy6_min": { + "min": 1017600, + "max": 1017600, + "observed_values": [ + 1017600 + ] + }, + "policy6_max": { + "min": 1689600, + "max": 1689600, + "observed_values": [ + 1689600 + ] + }, + "policy6_cur": { + "min": 1689600, + "max": 1689600, + "observed_values": [ + 1689600 + ] + }, + "gpu": { + "min": 832000000, + "max": 900000000, + "observed_values": [ + 832000000, + 900000000 + ] + }, + "gpu_min": { + "min": 12, + "max": 12, + "observed_values": [ + 12 + ] + }, + "gpu_max": { + "min": 0, + "max": 0, + "observed_values": [ + 0 + ] + }, + "busy": { + "min": 73, + "max": 78, + "observed_values": [ + 73, + 74, + 75, + 76, + 78 + ] + } + }, + "fan_observed_values": { + "fan_rpm": [ + "14163", + "14182", + "14363", + "14384", + "14487" + ], + "fan_target": [ + "2" + ] + }, + "temperature_c_min": 55.8, + "temperature_c_max": 56.6, + "sample_elapsed_seconds": [ + 216.537, + 222.12, + 227.724, + 233.316, + 238.927, + 244.534, + 250.192, + 255.859, + 261.488, + 267.099, + 272.72 + ] + }, + "actual_runtime": { + "backend_names": [ + "Direct (Vulkan)" + ], + "ipc_lines": [], + "run_ahead_armed": false, + "caps_call_masks": [], + "run_ahead_cap_bit_seen": false, + "stats_rows": 251, + "residual_pulls_max": 0.0 + }, + "source_directory": "C:\\Users\\geekerwan\\.codex\\tmp\\rd32-fourway-20260920-stock\\Magma-monolith" + }, + { + "name": "Magma-inproc", + "mean_fps": 86.85293459363007, + "median_interval_fps": 84.5, + "p10_interval_fps": 70.0, + "sample_seconds": 60.021000146865845, + "intervals": 60, + "boot_id": "7627b982-c264-4d2f-a9cb-1ecf40146c9c", + "hardware_window": { + "samples": 11, + "all_observed_pins_match": null, + "fixed_clock_evaluation": "not_applicable_stock_dvfs", + "drift_samples": null, + "observed_clock_ranges": { + "policy0_min": { + "min": 556800, + "max": 556800, + "observed_values": [ + 556800 + ] + }, + "policy0_max": { + "min": 1555200, + "max": 1996800, + "observed_values": [ + 1555200, + 1996800 + ] + }, + "policy0_cur": { + "min": 1363200, + "max": 1996800, + "observed_values": [ + 1363200, + 1555200, + 1785600, + 1996800 + ] + }, + "policy6_min": { + "min": 1017600, + "max": 1017600, + "observed_values": [ + 1017600 + ] + }, + "policy6_max": { + "min": 1689600, + "max": 1958400, + "observed_values": [ + 1689600, + 1958400 + ] + }, + "policy6_cur": { + "min": 1689600, + "max": 1958400, + "observed_values": [ + 1689600, + 1958400 + ] + }, + "gpu": { + "min": 525000000, + "max": 734000000, + "observed_values": [ + 525000000, + 607000000, + 660000000, + 734000000 + ] + }, + "gpu_min": { + "min": 12, + "max": 12, + "observed_values": [ + 12 + ] + }, + "gpu_max": { + "min": 0, + "max": 0, + "observed_values": [ + 0 + ] + }, + "busy": { + "min": 73, + "max": 82, + "observed_values": [ + 73, + 75, + 76, + 78, + 79, + 80, + 82 + ] + } + }, + "fan_observed_values": { + "fan_rpm": [ + "14570", + "14591", + "14697", + "14783", + "14804" + ], + "fan_target": [ + "2" + ] + }, + "temperature_c_min": 52.3, + "temperature_c_max": 56.2, + "sample_elapsed_seconds": [ + 216.05, + 221.629, + 227.22, + 232.809, + 238.395, + 243.946, + 249.485, + 255.097, + 260.705, + 266.288, + 271.93 + ] + }, + "actual_runtime": { + "backend_names": [ + "Direct (Vulkan)" + ], + "ipc_lines": [ + "Config: IPC ring=8MiB stage=256MiB spin=50us persistent-block=64KiB adopt-tier=2 verb-barrier=1 run-ahead=1 present-credit=1 strict=1 audit=0 role-split-state=1 affinity='auto'" + ], + "run_ahead_armed": true, + "caps_call_masks": [ + "0x0", + "0x3fff00000400" + ], + "run_ahead_cap_bit_seen": true, + "stats_rows": 183, + "residual_pulls_max": 0.0 + }, + "source_directory": "C:\\Users\\geekerwan\\.codex\\tmp\\rd32-fourway-20260920-stock\\Magma-inproc" + } + ], + "comparisons": [ + { + "backend": "Espryt", + "monolith_fps": 62.178237711677376, + "inproc_fps": 64.02439006486937, + "inproc_over_monolith_ratio": 1.0296912942716816, + "scope": "One round of observed sustained stock-DVFS performance; clocks may differ across arms, so this is not isolated architecture overhead." + }, + { + "backend": "Magma", + "monolith_fps": 116.07722925432384, + "inproc_fps": 86.85293459363007, + "inproc_over_monolith_ratio": 0.7482340434172177, + "scope": "One round of observed sustained stock-DVFS performance; clocks may differ across arms, so this is not isolated architecture overhead." + } + ], + "restoration": { + "world_files": 61, + "world_hashes_match_backup": true, + "config": { + "options.txt": "4d1cd0cb595819d924f8d5823910b643c865f12b3f59b6900abd54b04e2ee646", + "mg_env.txt": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "mg_transport.txt": "1d80cf637af2284a1763196d824b41f6f12bea849aa81f95ab8db0e5ce043c95" + }, + "fan_target": "0", + "installed_library_sha256": "046d86c288ce891b16770148578ba1a6fea4057783b69c2359f5830e58b7b223" + } +} diff --git a/docs/Disaggregated/notes/p5f/rd32-fourway.md b/docs/Disaggregated/notes/p5f/rd32-fourway.md new file mode 100644 index 00000000..d1a1ef3b --- /dev/null +++ b/docs/Disaggregated/notes/p5f/rd32-fourway.md @@ -0,0 +1,82 @@ +# Redmi RD32 四组合性能记录 + +2026-09-20。用户要求把 Espryt / Magma × monolith / inproc 的 render distance 都设为32,实测一轮。 +最终每组合选入一次完整窗口;原始数据、排除项与复算方法均保留。 + +## 结果 + +| 组合 | 平均 FPS | 秒区间 FPS 中位数 | 秒区间 FPS P10 | 有效秒数 / 区间数 | +|---|---:|---:|---:|---:| +| Espryt-monolith | 62.18 | 59.97 | 56.94 | 60.021 / 60 | +| Espryt-inproc | 64.02 | 63.00 | 58.94 | 60.024 / 60 | +| Magma-monolith | 116.08 | 116.00 | 114.87 | 60.029 / 60 | +| Magma-inproc | 86.85 | 84.50 | 70.00 | 60.021 / 60 | + +这轮 Espryt inproc / monolith 为 **1.030 倍**,小差异不足以确立稳定优势; +Magma inproc / monolith 为 **0.748 倍**,即本轮平均低约 **25.2%**。 +Magma monolith 仍在约120 FPS的平台附近,不能据此推断其无上限吞吐。 +两种 inproc 均实际 `run-ahead ARMED`;不是把 Magma lockstep 混作 inproc 结果。 + +这是**单轮默认动态频率下的持续性能观测**,不是隔离出的固定频率架构开销。 +不能把差值全部归因于线程拆分,也不能把它与此前 RD12、未统一条件的旧结果作严格倍率比较。 + +## 共同条件与采样 + +- Redmi M332BF `2f7cbe2e`;FCL `com.tungsten.fcl.mgdebug.debug`;Minecraft `26.3-rc-3`。 +- 同一 APK / MobileGL 行为代码 `194382c96a8a5f51ef23f412fdccfbd40a82bf78`,测试期间未安装新库。 + `libMobileGL.so` SHA256:`046d86c288ce891b16770148578ba1a6fea4057783b69c2359f5830e58b7b223`,测试结束仍一致。 + APK 身份继承 [run-ahead 报告](magma-runahead.md);后续 Git 提交仅文档。 +- `renderDistance:32`、`simulationDistance:12`、`overrideWidth:2620`、`overrideHeight:1280`、 + `enableVsync:false`、`maxFps:260`、`inactivityFpsLimit:"minimized"`。F3关闭,FCL FPS计数开启。 + 测前/测后 options 均保留,并核对关键值。 +- 原世界完整保留,在副本上固定初始相机、晴天和正午,关闭时间/天气推进与新生物生成; + 每组恢复同一个副本快照,不依赖 force-stop 阻止自动保存。既有生物模拟仍保留。 +- 每组独立重启,`cpuss-0-0` 入场低于40°C,进入世界后预热180秒,再独立采样至少60秒。 + 所选四组有四个不同 boot-id,八张 pre-window/final 图均人工检查;场景、方向与HUD正常。 +- 所选四组测量窗所有硬件观测均为风扇档位2、RPM>0。CPU/GPU由系统DVFS与温控管理, + 没有关闭温控。每约5秒记录频率、温度、GPU busy与风扇状态。 +- FCL `getFps()` 返回的是自上次读取的 swap 计数。以同PID相邻 `FCLFPS` 日志的真实时间差归一化, + 只保留完整落在测量窗内的区间;平均为总帧数/总时间。P10与中位数是这些约一秒区间的FPS分位, + **不是逐帧1% low**。MGPipe的120帧窗口计数仅作近似交叉核对,不作为主结果。 +- 每组实际 backend/transport、capability 与 `rsp=0` 均核查。inproc使用strict=1、role-split=1、 + stage=256 MiB、present credit=1;monolith实际无IPC配置、`vbs=0`。 + +## 测量窗硬件观测 + +| 组合 | CPU温度 °C | 大核实际频率 GHz | GPU实际频率 MHz | 风扇 RPM | +|---|---:|---:|---:|---:| +| Espryt-monolith | 53.1–55.8 | 1.690–1.958 | 525–660 | 14466–14591 | +| Espryt-inproc | 53.9–56.6 | 1.690–1.690 | 443–607 | 14163–14363 | +| Magma-monolith | 55.8–56.6 | 1.690–1.690 | 832–900 | 14163–14487 | +| Magma-inproc | 52.3–56.2 | 1.690–1.958 | 525–734 | 14570–14804 | + +表中为有限采样点的范围,不表示采样间绝无变化。部分截图有读取硬件状态时产生的 +Shell root toast;所有组使用相同遥测方式,未把它当作游戏图形错误。 +Magma monolith的屏幕缺口留白在右侧,其余组在左侧;前后图方向一致,游戏视口均为2620×1280。 + +## 排除与恢复 + +最初按历史档案尝试固定频率:1100 MHz被厂商限到1050,1050持续负载又降到900, +900尝试则在正式窗口开始后发现大核被温控从1958.4改到1689.6 MHz。这些尝试均作废, +不进入表格,也没有通过关闭保护来强行维持频率。 + +第一份 stock Espryt monolith 结果为59.884 FPS,但窗口风扇全程为0/RPM0;它保留为排除控制。 +补测的fan2结果62.178 FPS替代它,未合并、未平均或挑选多个有效窗口中的最好者。 +其他三组原始窗口直接选入。选择映射与原因保存在 `selection.json`。 + +结束后原世界61个文件逐一SHA256核对完全一致;options.txt、mg_env.txt、mg_transport.txt +逐字节恢复(包括原RD12设置),风扇恢复0。临时设备世界副本已清理,主机证据保留。 +既有Gradle修改与父FCL未合并索引未改动;本轮没有改渲染代码。 + +## 证据 + +最终选入证据:`C:/Users/geekerwan/.codex/tmp/rd32-fourway-20260920-final/`,包括: + +- `performance.json`:从原始日志重算的完整区间、硬件观测与运行模式检查; +- `root-signoff.json`、`restoration-verified.json`、`fixture-hashes.json`:验图与真实恢复核验; +- `selection.json` 与四组原始summary、完整library/logcat、before/after截图; +- 原采样脚本在 `../rd32-fourway-20260920-stock/benchmark.py`;补测在 + `../rd32-fourway-20260920-stock-fan2-espryt/benchmark.py`;离线分析器在 + `../rd32-fourway-20260920-1050/analyze.py`,支持 `--root <目录> --require-complete`。 + +仓库内精简机读数据见 [rd32-fourway.json](rd32-fourway.json)。