# Declarative encoding of BENCH-MATRIX.md §4 (blocks B0-B14) for the proxy bench machine # (Ryzen 9 9900X / RX 7800 XT). Driven by matrix.py; every session becomes one # `python3 bench.py session ...` launch. BENCH-MATRIX.md is authoritative - if this file # disagrees with it, fix this file. # # Session keys: # variant proposed-configs/out/ (or an entry in [[missing_variants]] -> blocked) # plan scenes in S1->S5 order: s1,s2,s2s,s3,s4,s5 (S6 is not automatable) # reps windows per scene inside the session (phase0: 3 runs) # repeat separate sessions (= cold launches) of the same config (B0: 3) # tag distinguishes sessions that share a variant but differ by flags; the # bench label becomes "." so analyze.py groups them apart # jvm/heap BENCH-MATRIX JVM set / MaxMemAlloc MB # shader shaderpack file name or "off"; shader_profile = the pack's profile name # shader_options Iris per-pack options file (harness-relative), copied to # shaderpacks/.txt; gen_shader_profiles.py builds them from the zips # dh "on" | "off" (dh-off row of B3) # disable_mods globs matched in the instance mods/ (B12a) # add_mods jar paths/globs added for the session only (B12b) # world key of [worlds]; restored from the zip before the session # warmup/capture per-window seconds (bench.py defaults 15 / 30; S5 is fixed 10 + 120) # manual true = cannot run unattended; `run` skips it unless --include-manual # note free text shown by `plan` # ${name} in variant/jvm/plan is a block parameter, supplied with `--param name=value`. [defaults] reps = 3 warmup = 15 capture = 30 settle = 45 # post-join settle; B0 v1 showed rep 1 still warming at settle 10 display = "gamescope-headless" res = "1920x1080" world = "v1" shader = "off" # pin: a shader/DH state must never leak from one session to the next dh = "on" launch_overhead_s = 60 # launch->join (~31 s measured) + world-zip restore + teardown [worlds] # BENCH-MATRIX §2. Built 2026-10-16 (sha256 in .pi/journal.md). `run --live-world` # uses the instance's saves/onionbench as-is (no restore). v1 = "~/onion-bench/worlds/bench-world-v1.zip" s4-0 = "~/onion-bench/worlds/bench-world-v1-s4-0.zip" s4-1 = "~/onion-bench/worlds/bench-world-v1-s4-1.zip" s4-4 = "~/onion-bench/worlds/bench-world-v1.zip" # the main zip carries all 4 ships [trials] # B12b trial jars (NeoForge 1.21.1, Modrinth, sha512-verified 2026-10-16; see /tmp/pi-trials.md # or the journal). Each glob matches exactly one file in ~/onion-bench/trials/. gnetum = "~/onion-bench/trials/gnetum-3.3.6.jar" better_block_entities = "~/onion-bench/trials/bbe-neoforge-1.3.4+mc1.21.1.jar" flerovium = "~/onion-bench/trials/flerovium-neoforge-1.21.1-1.1.2-all.jar" super_resolution = "~/onion-bench/trials/super_resolution-neoforge-*-0.9.2-alpha.2+opengl.jar" ixeris = "~/onion-bench/trials/Ixeris-4.6.8+1.21.1-neoforge.jar" iris_flywheel_compat = "~/onion-bench/trials/iris-flywheel-compat-NeoForge-2.4.0.jar" cull_leaves = "~/onion-bench/trials/cullleaves-neoforge-4.1.1+1.21.1.jar" # Variants a block needs that build.py does not generate. Sessions using them are # reported as blocked until they exist in proposed-configs/out/. (C1-fa, C1-fa-ext, # emf-lod20-fa, emf-lod8-fa and C1-bl are now generated by build.py; every bench # variant pins options.txt resourcePacks.) [[missing_variants]] id = "dh-off" blocks = [] contents = """Not needed as a directory: BENCH-MATRIX defines dh-off as C1 with DH rendering \ toggled off in the GUI. Encoded as variant C1 + `dh = "off"` (bench.py --dh off).""" # --------------------------------------------------------------------------------------- [[block]] id = "B0" title = "noise floor" rule = "Defines each machine's threshold. P2 also checks `MemAvailable` drift (phase0 Step 4)." proxy_note = "Single proxy machine. Re-run whenever the mod set changes (matrix.py warns)." manual_checks = ["MemAvailable drift: compare mem_available_mb before/after across the 3 sessions (recorded per row)"] sessions = [ { variant = "C0", plan = "s1", repeat = 3 }, ] [[block]] id = "B1" title = "baseline" rule = "Reference numbers for everything below" manual_checks = [ "S6 (GUI/JEI overlay) needs a key press - run by hand", "/sparkc heapsummary after S1 loads", "VRAM peak", ] sessions = [ { variant = "C0", plan = "s1,s2,s3,s4,s5" }, ] [[block]] id = "B2" title = "composite" rule = "If C1 isn't a win on ≥ 2 machines, stop and bisect with B3–B11 before shipping anything" proxy_note = "Proxy runs all three composites; one machine = single-machine evidence, fleet confirmation pending. Baseline is C0 (pooled from B1)." manual_checks = ["S6 by hand", "/sparkc heapsummary after S1 loads", "VRAM peak"] sessions = [ { variant = "C1", plan = "s1,s2,s3,s4,s5" }, { variant = "C1-deck", plan = "s1,s2,s3,s4,s5" }, { variant = "C1-high", plan = "s1,s2,s3,s4,s5" }, ] [[block]] id = "B3" title = "Distant Horizons" rule = """**Radius per tier** = the largest radius meeting the FPS floor on S1 *and* S5: P0 → deck, P1 → default, P2 → high. \ | Adopt SSAO-off / LOW-quality for that tier on a win. \ | Keep 2 threads unless 4 is a win on S5 *and* not a loss on S1""" proxy_note = "Absolute floors are fleet values; on the proxy use relative wins only. P0/P1-only rows (dh-ssao, dh-qlow) run here too." manual_checks = ["DH memory in F3"] sessions = [ { variant = "dh-r256", plan = "s1,s5" }, { variant = "dh-r192", plan = "s1,s5" }, { variant = "C1", plan = "s1,s5" }, { variant = "dh-r64", plan = "s1,s5" }, { variant = "C1", plan = "s1,s5", dh = "off", tag = "dh-off" }, { variant = "dh-ssao", plan = "s1" }, { variant = "dh-qlow", plan = "s1" }, { variant = "dh-thr4", plan = "s1,s5" }, ] [[block]] id = "B4" title = "heap & GC: GC" rule = "GC = best S5 1 % low. Heap = the smallest size within the spread of the best. Feeds `PLAYER-TUNING.md` §2. P1 isn't run (32 GB, not a constraint)." proxy_note = "P2 values (-Xmx6G) on the proxy; the heap ladder (B4h) adds 8 G as the top rung." manual_checks = ["/sparkc gc after S5 (pause count / max / total)", "swap delta"] sessions = [ { variant = "C1", plan = "s2,s5", jvm = "J0", heap = 6144, tag = "J0" }, { variant = "C1", plan = "s2,s5", jvm = "J1", heap = 6144, tag = "J1" }, { variant = "C1", plan = "s2,s5", jvm = "J2", heap = 6144, tag = "J2" }, { variant = "C1", plan = "s2,s5", jvm = "J3", heap = 6144, tag = "J3" }, ] [[block]] id = "B4h" title = "heap & GC: heap ladder for the GC winner" rule = "GC = best S5 1 % low. Heap = the smallest size within the spread of the best. Feeds `PLAYER-TUNING.md` §2. P1 isn't run (32 GB, not a constraint)." params = ["gc"] proxy_note = "Run after B4 with --param gc=." sessions = [ { variant = "C1", plan = "s2,s5", jvm = "${gc}", heap = 4096, tag = "heap4" }, { variant = "C1", plan = "s2,s5", jvm = "${gc}", heap = 5120, tag = "heap5" }, { variant = "C1", plan = "s2,s5", jvm = "${gc}", heap = 6144, tag = "heap6" }, { variant = "C1", plan = "s2,s5", jvm = "${gc}", heap = 8192, tag = "heap8" }, ] [[block]] id = "B5" title = "Sable / SSRD" deferred = true rule = """SSRD per tier = the largest value meeting the floor with 4 ships. sable-noshade ships only on a win *and* if it looks acceptable. \ | Decay > spread is a Sable #1011-class finding: report it, no config fix""" proxy_note = "Fleet-only (P0/P1) per BENCH-MATRIX; deferred on the proxy. Needs the S4 world zips. The 45-min decay run exceeds mangohud-local log_duration=1800 and needs FPS at 0/15/30/45 min + heapsummary by hand." manual_checks = ["sub-level count", "sable-noshade visual acceptability", "/sparkc heapsummary at 0/15/30/45 min"] sessions = [ { variant = "C1", plan = "s4", world = "s4-0", tag = "ships0" }, { variant = "C1", plan = "s4", world = "s4-1", tag = "ships1" }, { variant = "C1", plan = "s4", world = "s4-4", tag = "ships4" }, { variant = "ssrd-32", plan = "s4", world = "s4-4" }, { variant = "ssrd-64", plan = "s4", world = "s4-4" }, { variant = "ssrd-128", plan = "s4", world = "s4-4" }, { variant = "sable-noshade", plan = "s4", world = "s4-4" }, { variant = "C1", plan = "s4", world = "s4-4", jvm = "J0", reps = 1, capture = 2700, repeat = 2, tag = "decay", manual = true, note = "45-min decay; CSV capped at 30 min by mangohud-local" }, ] [[block]] id = "B6" title = "ModernFix dynamic_resources" rule = "Ship `dynamic_resources=true` only if: heap −300 MB or more *or* startup faster beyond spread, **and** zero missing textures, **and** no crash in 3 launches" interleave = true manual_checks = [ "S6 by hand", "heap after load (/sparkc heapsummary)", "Missing-texture check: JEI @chipped/@rechiseled/@handcrafted, 4x4 Rechiseled CTM wall", ] sessions = [ { variant = "C1", plan = "s1,s2", repeat = 3 }, { variant = "mf-dynres-off", plan = "s1,s2", repeat = 3 }, ] [[block]] id = "B7" title = "shaders" rule = "Data for the owner's shader policy, no auto-decision. Report the FPS cost per profile and whether ship corruption appears with shadow profiles" proxy_note = "Profiles are reproduced by shader-profiles/*.txt (gen_shader_profiles.py resolves the pack's profile.NAME into an Iris options file); rows run unattended. Visual checks stay manual." manual_checks = ["Flywheel backend line in F3 (expect off with shaders)", "visual check for Iris #3164 on ships (shadow profiles: makeup-medium, compl-medium)", "confirm Iris' shader screen shows the intended profile once per pack"] sessions = [ { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "off", tag = "noshader" }, { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "MakeUp-UltraFast-9.5f.zip", shader_profile = "shadowless_medium", shader_options = "shader-profiles/MakeUp-UltraFast-9.5f.shadowless_medium.txt", tag = "makeup-shadowless" }, { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "MakeUp-UltraFast-9.5f.zip", shader_profile = "medium", shader_options = "shader-profiles/MakeUp-UltraFast-9.5f.medium.txt", tag = "makeup-medium" }, { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "ComplementaryReimagined_r5.9.3.zip", shader_profile = "LOW", shader_options = "shader-profiles/ComplementaryReimagined_r5.9.3.LOW.txt", tag = "compl-low" }, { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "ComplementaryReimagined_r5.9.3.zip", shader_profile = "MEDIUM", shader_options = "shader-profiles/ComplementaryReimagined_r5.9.3.MEDIUM.txt", tag = "compl-medium" }, ] [[block]] id = "B8" title = "entities" rule = "EMF: adopt the smallest LOD that's a win with FA on. LDL: per tier, the cheapest mode that's a win. FA guidance → `PLAYER-TUNING.md` §4" sessions = [ { variant = "C1", plan = "s3" }, { variant = "C1-fa", plan = "s3" }, { variant = "C1-fa-ext", plan = "s3" }, { variant = "emf-lod20-fa", plan = "s3" }, { variant = "emf-lod8-fa", plan = "s3" }, { variant = "ldl-fancy", plan = "s3" }, { variant = "ldl-fastest", plan = "s3" }, ] [[block]] id = "B9" title = "Flywheel" rule = "Per tier: the smoothest value meeting the floor" sessions = [ { variant = "fw-flat", plan = "s2", shader = "off" }, { variant = "C1", plan = "s2", shader = "off" }, { variant = "fw-smooth", plan = "s2", shader = "off" }, ] [[block]] id = "B10" title = "Sound Physics" rule = "Adopt each change that's a win. Listen for obvious audio breakage." manual_checks = ["listen for audio breakage"] sessions = [ { variant = "spr-up", plan = "s2s" }, { variant = "C1", plan = "s2s" }, { variant = "spr-strict", plan = "s2s" }, { variant = "spr-nocap", plan = "s2s" }, ] [[block]] id = "B11" title = "vanilla / Sodium" rule = """3 threads only if S5 wins and S1 doesn't lose \ | Lowest blend radius that's a win, per tier \ | Mip 4 for mid/high only if VRAM peak ≤ 5.5 GB and no loss""" proxy_note = "C1 baseline session added in-block so analyze.py compares within the label." manual_checks = ["VRAM peak for opt-mip4"] sessions = [ { variant = "C1", plan = "s1,s2,s5", tag = "baseline" }, { variant = "sod-thr3", plan = "s1,s5" }, { variant = "opt-blend2", plan = "s5" }, { variant = "opt-blend0", plan = "s5" }, { variant = "opt-mip4", plan = "s1,s2" }, ] [[block]] id = "B12a" title = "added-mod ablation" rule = "Keep the mod unless removing it is a win (it costs FPS) or it breaks something visible. Sodium Extra + RSO stay regardless for their per-machine options." sessions = [ { variant = "C1", plan = "s1,s2s,s3" }, { variant = "C1", plan = "s1,s2s,s3", disable_mods = ["BadOptimizations-*.jar"], tag = "no-badopt" }, { variant = "C1", plan = "s1,s2s,s3", disable_mods = ["particle_core-*.jar"], tag = "no-particlecore" }, { variant = "C1", plan = "s1,s2s,s3", disable_mods = ["sodium-extra-*.jar"], tag = "no-sodiumextra" }, ] [[block]] id = "B12b" title = "trial mods" rule = "Owner pre-approved helpful adds. Add with `packwiz modrinth add` only on a win with no breakage. **Not More Culling**: its NeoForge build declares `minecraft [1.21,1.21.1)`. A new mod set means re-running B0 first." proxy_note = "add_mods entries name [trials] keys. Trials are temporary for the session; a permanent add changes the mod set and invalidates B0." manual_checks = ["breakage check per trial", "S6 for Gnetum/Flerovium (GUI paths) by hand"] sessions = [ { variant = "C1", plan = "s1,s2,s3,s5", tag = "baseline" }, { variant = "C1", plan = "s1,s2,s3,s5", add_mods = ["gnetum"], tag = "gnetum" }, { variant = "C1", plan = "s2,s3", add_mods = ["better_block_entities"], tag = "bbe" }, { variant = "C1-fa", plan = "s3", tag = "fa-baseline" }, { variant = "C1-fa", plan = "s3", add_mods = ["better_block_entities"], tag = "bbe-fa" }, { variant = "C1", plan = "s1,s2,s3,s5", add_mods = ["flerovium"], tag = "flerovium" }, { variant = "C1", plan = "s1,s2,s5", add_mods = ["super_resolution"], tag = "superres" }, { variant = "C1", plan = "s1,s2,s5", add_mods = ["ixeris"], tag = "ixeris" }, { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "MakeUp-UltraFast-9.5f.zip", tag = "shader-baseline" }, { variant = "C1", plan = "s1,s2,s4", world = "s4-4", shader = "MakeUp-UltraFast-9.5f.zip", add_mods = ["iris_flywheel_compat"], tag = "irisflw" }, { variant = "C1-bl", plan = "s1,s5", tag = "bl-baseline" }, { variant = "C1-bl", plan = "s1,s5", add_mods = ["cull_leaves"], tag = "cull-leaves", note = "MidnightLib is already in the pack (1.10.0)" }, ] [[block]] id = "B13" title = "profile" rule = "Flag any mod over 5 % of render-thread time that isn't Sodium, Iris, DH or Flywheel" params = ["scene"] proxy_note = "Scene = the worst scene from B2 under C1 (--param scene=sN)." manual_checks = ["/sparkc profiler start --timeout 60 during the capture; save the report"] sessions = [ { variant = "C1", plan = "${scene}", reps = 1, capture = 75, manual = true, note = "/sparkc is a client command; start it by hand at BENCH_MARK start" }, ] [[block]] id = "B14" title = "spawn tuning" manual = true rule = "Procedure and keep/back-off rule: `SPAWN-TUNING.md` §B14" proxy_note = "Singleplayer fresh world `onionspawn`; river, jungle, warm ocean 10 min each; per-species and total entity counts, defaults vs shipped spawn files. Not a frametime session - run by hand." sessions = []