Files
logan a84319bb2f fix(mods): add MidnightLib 1.10.0 to fix startup CME crash
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).
2026-10-15 17:07:52 -04:00

5.7 KiB
Raw Permalink Blame History

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

  1. 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.
  2. Verify uncapped frametimes: one run_scene.py --variant C1 --scene s1 run; expect p99 well under 16.7 ms (vsync previously locked it). Do not proceed to B0 until FPS is visibly uncapped.
  3. 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.zip copies. Verify S2 shafts rotate (re-place motors by hand if the /fill network didn't initialise) and S3 villager count. DH pregenerate per §2 step 5 (radius 256, tour, generatorPlan=DISABLED afterwards). Leave world at S1, save, zip as bench-world-v1.zip (record sha256).
  4. 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.
  5. Ship: write winners into proposed-configs/build.py (DEFAULT/DECK/HIGH layers), build.py --ship, packwiz refresh, commit (after git checkout -- config/). Ship config/modernfix-mixins.properties only if B6 passes (see the SHIP comment in build.py). New mod adds (B12b winners) ⇒ re-run B0 first.
  6. 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.