# R288 / position16 最小 real skip 实验 ## 结论 1. **完整求解结果逐位一致。** 0–10 s 全轨迹,896 个 132×132 Jacobian(15,611,904 个元素)及每个 t/y、states、outputs、事件、最终状态与既有基线一致;没有使用数值容差。 2. **896/896 次真实 skip;自然 reject/fallback 为 0。** commit 896 次,原目标 native operation 实际执行 0 次,Reference 双路执行 0 次。 3. **当前 replay 更贵。** 7 轮中位数:原 operation 1.143 µs/次,validation + overlay/patch + commit 22.521 µs/次(19.70 倍)。目标完整路径 control 1.186 µs/次,real skip 22.913 µs/次。 4. **暂不把这一实现直接扩展到 position52。** 正确性门槛已满足,净收益门槛未满足。应先降低 metadata 采集、事务复制和解释执行成本;本轮不能据此推断 position52 或其他 interval 的收益。 ## 范围与实现 - 全部改动仅在独立生成的实验 worker 及 `tests/manual`;生产路径、默认开关、property cache 语义、原 whole-context guard 未改动。 - 入口仅为 `lp_color == 6 && region == 288` 的 `case 16`,位于原 `lp_reuse` 失败之后。其他位置继续原执行。 - baseline position16 用单独命名空间的 kernels 采集必需的有序事件 metadata。其他 operation 使用原 kernels,没有全局访问插桩。 - guard 来自已验证的 shadow 源码,构建时校验其 SHA-256,并断言 guard 函数保持一致;唯一变量替换是将原事务入口 count 改为当前真实 probe 入口 count。 - 复制当前 probe 到私有 overlay;按当前 entries 验证 first-match/miss,重定位逻辑 slot,从当前 count 追加。通过后构造地址已转换的有序 write set,再 commit。已有 entries、未写字段和其他 pipe slots 保持原值。 - Observer、capacity/scratch、memo lifetime/value、消费字段、valid、pipe branch、未知副作用/非有限值等原保护条件保留;失败只回退原 operation。 - 性能版不执行 Reference、不导出访问日志或 Jacobian、不逐次比较完整 context。保留运行所需 metadata、严格 guard、overlay/patch、计时和累计计数。 ## 正确性证据 | 检查 | 结果 | |---|---:| | Jacobian、t/y 与既有 all-audit 文件逐字节比较 | 896/896 一致 | | 每个 Jacobian 的 baseline + 27 group evaluator 出口 | 25,088/25,088 一致 | | 目标 operation 入口 / 出口 | 896 / 896 一致 | | 返回状态、dy/w、active property entries 有序字段/valid、全部 pipe slots | 逐位一致 | | memo 每次 Jacobian 的表内容、owner 绑定、recording 生命周期 | 一致 | | 所有 probe 的 memo entries 只读检查 | 通过 | | gas memo 内容、kernel 绑定及计数 | 一致 | | errno、x87/SSE flags/rounding、warning/observer | 一致 | | count 差异 / slot relocation 的目标 probe | 638 / 571 | | 顺序 append | 1,658 | | PT miss → PT miss / 近零流量无查询 | 829 / 67 | Audit 对照来自**独立 control 进程真实执行当前 probe**的出口,约 1.88 GB 二进制数据。跨进程地址比较采用 owner/function 绑定身份,数值字段保持原始位模式;不把 C padding 当成数值。memo 表逐 Jacobian 比较,后续每个 probe 同时检查整表未变。目标入口、出口与所有 group 的完整 evaluator 出口均参与比较。audit 的 I/O 保留并恢复 errno、x87 和 SSE 环境。 | 求解器计数 | control / real skip | |---|---:| | accepted / rejected | 10840 / 918 | | Newton iterations / convergence failures | 19371 / 798 | | nfev / njev / nlu | 44467 / 896 / 3106 | | solverStarts / stateTransitions | 4 / 1 | 额外负例:每 128 个目标 probe 注入一次晚期 nonfinite-output reject,发生在 overlay 已执行有序更新之后。7 次 reject 均完成无污染检查,fallback/native 原执行各 7 次,commit/skip 各 889 次;全轨迹仍与同一 control 和既有基线逐位一致。没有放宽 guard,也未改变容差。 ## 性能方法与原始数据 Windows / MinGW GCC,原构建优化选项(`-O3 -ffp-contract=off -fno-fast-math`)。完成正确性和回退测试后单独编译性能 worker;control、skip 各预热一次,再交替串行运行 7 组。表中顺序就是实际顺序。每轮 states/outputs/events 指纹和全部指定求解器计数保持一致,skip 每轮均为 896、reject 0、原执行 0。 QPC 粗粒度计时;累计整数 tick,积分过程中不做浮点时间换算。validation 包括语义校验所必需的临时有序更新;overlay/patch 包括当前 context 复制及提交 write set 构造;commit 是真实字段写回。完整 target 路径另计,包含调度、计数和额外计时开销。未减去计时器自身成本,未使用 shadow/audit 时间推断性能。 | 运行顺序 | 原执行 µs/次 | validation µs/次 | overlay/patch µs/次 | commit µs/次 | fallback ms | target 总 ms | baseline pos16 总 ms | Jacobian s | 积分 CPU s | 积分 wall s | skip/reject | |---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| | pair-1-control | 1.562 | 0.000 | 0.000 | 0.000 | 0.000 | 1.439 | 1.760 | 2.190858 | 6.375000 | 6.564619 | 0/0 | | pair-1-skip | 0.000 | 6.172 | 15.011 | 0.434 | 0.000 | 19.785 | 19.239 | 2.007014 | 5.953125 | 6.076049 | 896/0 | | pair-2-skip | 0.000 | 6.451 | 14.713 | 0.435 | 0.000 | 19.716 | 18.944 | 1.971936 | 5.921875 | 5.910387 | 896/0 | | pair-2-control | 1.170 | 0.000 | 0.000 | 0.000 | 0.000 | 1.088 | 1.533 | 2.000030 | 6.046875 | 6.140446 | 0/0 | | pair-3-control | 1.143 | 0.000 | 0.000 | 0.000 | 0.000 | 1.063 | 1.540 | 2.018777 | 6.015625 | 6.213678 | 0/0 | | pair-3-skip | 0.000 | 6.831 | 15.331 | 0.436 | 0.000 | 20.563 | 19.928 | 2.014426 | 6.031250 | 6.120732 | 896/0 | | pair-4-skip | 0.000 | 7.101 | 15.141 | 0.434 | 0.000 | 20.651 | 19.911 | 2.035451 | 6.015625 | 6.135601 | 896/0 | | pair-4-control | 1.093 | 0.000 | 0.000 | 0.000 | 0.000 | 1.017 | 1.508 | 1.933127 | 5.921875 | 5.940958 | 0/0 | | pair-5-control | 1.080 | 0.000 | 0.000 | 0.000 | 0.000 | 1.009 | 1.676 | 1.935641 | 5.906250 | 5.900561 | 0/0 | | pair-5-skip | 0.000 | 6.334 | 15.975 | 0.451 | 0.000 | 20.720 | 19.466 | 2.038743 | 5.984375 | 6.166865 | 896/0 | | pair-6-skip | 0.000 | 6.508 | 14.442 | 0.444 | 0.000 | 19.496 | 19.729 | 2.016491 | 5.906250 | 6.033967 | 896/0 | | pair-6-control | 1.177 | 0.000 | 0.000 | 0.000 | 0.000 | 1.093 | 1.512 | 2.030009 | 6.250000 | 6.418474 | 0/0 | | pair-7-control | 1.119 | 0.000 | 0.000 | 0.000 | 0.000 | 1.039 | 1.499 | 1.970795 | 5.953125 | 6.030361 | 0/0 | | pair-7-skip | 0.000 | 6.166 | 15.893 | 0.462 | 0.000 | 20.530 | 19.112 | 2.008419 | 6.078125 | 6.126521 | 896/0 | baseline pos16:control 为原 baseline operation;skip 包含原 baseline operation + 本次 replay 必需 metadata 采集,不能漏算这部分成本。性能各轮没有自然 reject,因此 fallback 总时间为 0;这不代表一次 fallback 的成本为零,本轮未估计该分支的单次性能。 ### 中位数及 min/max | 项目 | control 中位数 [min, max] | real skip 中位数 [min, max] | |---|---:|---:| | originalSeconds(s,896 次累计) | 0.001024400 [0.000967700, 0.001399500] | 0.000000000 [0.000000000, 0.000000000] | | validationSeconds(s,896 次累计) | 0.000000000 [0.000000000, 0.000000000] | 0.005780000 [0.005525000, 0.006362100] | | overlayPatchSeconds(s,896 次累计) | 0.000000000 [0.000000000, 0.000000000] | 0.013566200 [0.012939600, 0.014314000] | | commitSeconds(s,896 次累计) | 0.000000000 [0.000000000, 0.000000000] | 0.000390700 [0.000388500, 0.000414100] | | fallbackSeconds(s,896 次累计) | 0.000000000 [0.000000000, 0.000000000] | 0.000000000 [0.000000000, 0.000000000] | | pathSeconds(s,896 次累计) | 0.001062600 [0.001009100, 0.001439000] | 0.020530400 [0.019496400, 0.020720200] | | baselineRecordSeconds(s,896 次累计) | 0.001533400 [0.001499200, 0.001760000] | 0.019465900 [0.018944100, 0.019927500] | | jacobianSeconds(s,896 次累计) | 2.000029500 [1.933127300, 2.190857900] | 2.014426400 [1.971935900, 2.038742900] | | solveCpuSeconds(s,896 次累计) | 6.015625000 [5.906250000, 6.375000000] | 5.984375000 [5.906250000, 6.078125000] | | solveSeconds(s,896 次累计) | 6.140445900 [5.900561100, 6.564618800] | 6.120731700 [5.910387000, 6.166865500] | ### 配对差值 | 组 | 原计算 − replay 三阶段 ms | target 完整路径净节省 ms | 新增 metadata 采集 ms | Jacobian Δ s | 积分 CPU Δ s | 积分 wall Δ s | |---|---:|---:|---:|---:|---:|---:| | 1 | -17.969 | -18.346 | 17.479 | -0.183844 | -0.421875 | -0.488570 | | 2 | -18.304 | -18.628 | 17.411 | -0.028094 | -0.125000 | -0.230059 | | 3 | -19.224 | -19.501 | 18.387 | -0.004351 | 0.015625 | -0.092946 | | 4 | -19.338 | -19.633 | 18.403 | 0.102324 | 0.093750 | 0.194642 | | 5 | -19.425 | -19.711 | 17.790 | 0.103102 | 0.078125 | 0.266304 | | 6 | -18.114 | -18.404 | 18.217 | -0.013517 | -0.343750 | -0.384508 | | 7 | -19.176 | -19.492 | 17.613 | 0.037623 | 0.125000 | 0.096160 | 净节省为正表示节省,Δ = skip − control。 - 原计算成本 − replay 三阶段成本:配对中位数 **-19.176 ms / 896 次**。 - target 完整路径净节省:配对中位数 **-19.492 ms / 896 次**;范围 [-19.711, -18.346] ms。 - 此外 baseline metadata 采集增加:配对中位数 **17.790 ms**。 - Jacobian callback 配对 Δ:中位数 -0.004351 s,范围 [-0.183844, 0.103102] s。 - 积分 wall 配对 Δ:中位数 -0.092946 s,范围 [-0.488570, 0.266304] s。 全局时间受调频、调度和系统负载影响,不能把某轮 Jacobian/积分变快归因于这个 operation。目标路径在全部配对中均更慢,已经足以否定当前实现的局部净收益;本轮不预测整个 local probe 的最终加速比例。 ## 成本解释及下一阶段条件 原 operation 在现有 Jacobian memo 的只读复用环境下已经很便宜;当前严格 replay 仍要初始化/复制 156,816 B 的 overlay(含完整 memo),解释事件并构造 write set。运行所需有效 metadata 为 2,224–23,344 B,Plan 固定预留 90,224 B,patch 预留 16,384 B。这些是当前隔离实现的实际成本,不是机制理论上的下限。 因此,本轮证明了目标路径可以安全真实跳过,但没有证明性能优化成立。下一步应先针对事务存储和 metadata 表达做最小化,再重复同样的正确性与交替性能验收;不因 position16 正确就直接扩大到 position52/整个 R475/全部 reuse interval。 ## 复现与证据位置 运行目录:`test/r288-real-skip-20260917/`。依赖上一轮生成的 local-probe worker、context-access worker 和 shadow-certified 源码;工具链复用原实验配置,不安装依赖。 ```powershell .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py prepare --audit .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py prepare --audit --skip .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py run --audit .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py run --audit --skip .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py run --audit --skip --label audit-forced-reject --force 128 .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py prepare .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py prepare --skip .venv-win/Scripts/python.exe tests/manual/real_skip_experiment.py benchmark --pairs 7 .venv-win/Scripts/python.exe tests/manual/analyze_real_skip.py ``` - `audit-{control,skip}-run/validation.json`:正确性、独立执行计数、完整求解器计数及文件指纹。 - `audit-forced-reject/validation.json`:真实回退及 rollback 检查。 - `byte-comparison.json`:全部 Jacobian/t/y、states、outputs、events 与原始基线的逐字节比较。 - `audit-control-run/audit.bin`:所有 group 和目标 operation 的实际执行对照出口。 - `performance.json`:14 次按实际顺序记录的原始数据;各轮目录保留独立日志和结果。 - `performance-summary.json`:中位数、min/max 和逐对差值。 - `{audit,perf}-{control,skip}/build.json`:源文件哈希、guard 一致性和构建记录。