Fright's Delight jar-in-jars MidnightLib 1.9.2, whose MidnightConfig.init races during NeoForge parallel mod construction (ConcurrentModificationException). The broken mod state left mod_resources unloaded, so WATUT's reloadShaders mixin crashed on particle.json - WATUT was the victim, not the cause. 1.10.0 synchronizes the entries map (upstream 1fe69729); FML selects it over the JiJ copy. Verified: 10/10 clean cold launches to world join. Also adds analysis/state/ (Phase 2 state capture).
5.7 KiB
5.7 KiB
Remaining plan (with current status)
The authoritative run sheet is analysis/client-perf/BENCH-MATRIX.md — read it fully
before benching. This file summarizes it, marks what's done, and adds proxy-machine
notes. Win = median p99 improves by more than the machine's B0 noise spread AND
1%-low does not worsen by more than the spread; ties keep upstream defaults.
Floors (fleet): P0 1%-low ≥ 30, P1/P2 ≥ 60 — on this proxy, floors don't map; use
relative wins only.
Next actions, in order
- WATUT crash (open): reproduce (repeated world loads in the OnionBench instance), capture a crash report, then fix via config/patch/retry. Owner says remove no mods. If unfixable, document a reliable workaround for bench runs.
- Verify uncapped frametimes: one
run_scene.py --variant C1 --scene s1run; expect p99 well under 16.7 ms (vsync previously locked it). Do not proceed to B0 until FPS is visibly uncapped. - Finish the bench world (BENCH-MATRIX §2): build S4 — ONE Aeronautics ship
(~5×7×15, planks+glass+1 propeller) hovering y≈170, copied via Create schematic to
4 ships at z = 32/96/192/384; produce
bench-world-v1-s4-0/1/4.zipcopies. Verify S2 shafts rotate (re-place motors by hand if the/fillnetwork didn't initialise) and S3 villager count. DH pregenerate per §2 step 5 (radius 256, tour,generatorPlan=DISABLEDafterwards). Leave world at S1, save, zip asbench-world-v1.zip(record sha256). - Run the matrix B0 → B1 → B2 → B3 → B4 → B6 → B7 → B8 → B9 → B10 → B11 →
B12a → B12b → B13 → B14 (B5 deferred, fleet-only). Budget ≈25 h machine time.
Apply variants with
apply_variant.py; relaunch per config change; scenes in S1→S6 order per session; record with--record. - Ship: write winners into
proposed-configs/build.py(DEFAULT/DECK/HIGH layers),build.py --ship,packwiz refresh, commit (aftergit checkout -- config/). Shipconfig/modernfix-mixins.propertiesonly if B6 passes (see theSHIPcomment inbuild.py). New mod adds (B12b winners) ⇒ re-run B0 first. - Report to owner: B7 shader-policy data, B12b trial verdicts, B14 spawn-tuning measurement, and any proxy-vs-fleet caveats.
Matrix blocks (one line each; decision rules verbatim from BENCH-MATRIX §4)
| Block | Tests | Decision rule |
|---|---|---|
| B0 | noise floor: C0 ×3 on S1 | defines each machine's win threshold; watch MemAvailable drift |
| B1 | baseline: C0 on S1–S6 | reference numbers only (startup, atlas, heap summary, VRAM) |
| B2 | composite: C1 / C1-deck / C1-high, all scenes | if C1 isn't a win on ≥2 machines, STOP and bisect via B3–B11 before shipping anything |
| B3 | DH: radius ladder + SSAO/quality/threads | per tier: largest radius meeting the floor on S1+S5; SSAO-off on a win; threads stay 2 unless 4 wins S5 w/o losing S1 |
| B4 | heap & GC: C1 × J0–J3, then heap 4/5/6 G | GC = best S5 1%-low; heap = smallest within winner's spread |
| B5 | Sable/SSRD sub-levels + decay (fleet P0/P1 only) | SSRD = largest meeting floor with 4 ships; sable-noshade only on win + acceptable looks; decay beyond spread = report, no config fix |
| B6 | ModernFix dynamic_resources |
ship only if heap −300 MB or faster startup beyond spread AND zero missing textures AND 3 clean cold launches |
| B7 | shaders ×4 profiles on S2/S1/S4 | data for owner, no auto-decision; verify Flywheel backends drop under shaders; watch Iris #3164 corruption |
| B8 | entities: FA/Extensions, EMF LOD 20/8, LDL modes on S3 | smallest winning EMF LOD; cheapest winning LDL mode per tier |
| B9 | Flywheel lightSmoothness flat/C1/smooth on S2 | smoothest value meeting the floor, per tier |
| B10 | Sound Physics: spr-up/strict/nocap on S2s | adopt each winning change; listen for audio breakage |
| B11 | vanilla/Sodium: threads 3, blend 0/2, mip 4 | adopt only wins (S5 + not losing S1; mip4 needs VRAM ≤ 5.5 GB on P1) |
| B12a | added-mod ablation (BadOptimizations / Particle Core / Sodium Extra out) | keep unless removal wins or mod breaks something; Sodium Extra + RSO stay regardless |
| B12b | trial mods (Gnetum, Better Block Entities, Flerovium, Super Resolution, Ixeris, Iris Flywheel Compat, Cull Leaves) | add only on win w/o breakage via packwiz modrinth add; new mod set ⇒ re-run B0; not More Culling (excludes 1.21.1) |
| B13 | spark profile of worst B2 scene under C1 | flag any mod >5% of render-thread time that isn't Sodium/Iris/DH/Flywheel |
| B14 | spawn tuning: defaults vs shipped, river/jungle/warm ocean ×10 min | keep if totals drop and every species still appears; back off if one effectively disappears (SPAWN-TUNING §B14) |
Scenes and JVM sets (fixed inputs)
- S1 vista (terrain + DH) · S2 Create floor, 2304 kinetic BEs · S2s = S2 + 24-sounds/tick storm · S3 mob pen (30 villagers, allays w/ torches = moving LDL sources) · S4 0/1/4 Sable airship sub-levels · S5 24-teleport tour, 120 s, no warm-up discard · S6 GUI/JEI overlay at S1.
- J0 phase0 G1 baseline · J1 brucethemoose G1 · J2 generational ZGC ·
J3 Shenandoah (plain; NOT
ShenandoahGCMode=iu— aborts JDK 21). All parse- checked on OpenJDK 21.0.12. Default heap here: 8 G (instance), matrix suggests 6 G for P2 / 5 G for P0.
Proxy-machine adaptations to document as you go
- B2's "≥2 machines" gate: run C1 vs C0 here; treat as single-machine evidence and mark fleet confirmation as pending.
- B5 has no Sable-decay proxy path as specified — either adapt (4-ship scene exists once S4 is built) or record as deferred.
- B4 heap ladder should use the instance's 8 G as the top rung.
- Absolute floors (30/60 fps) are fleet values; use relative wins on this box.