Files
onion-mc/analysis/state/01-pack-and-environment.md
T
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

4.6 KiB

Pack and environment

The pack

  • Onion MC — curated NeoForge modpack managed with packwiz; MC 1.21.1, NeoForge 21.1.251, 217 mods at HEAD e5e369a.
  • The repo doubles as the dedicated-server directory (/home/logan/onion-mc). The live server runs from here (see 03-current-state.md). world/, libraries/, logs/, crash-reports/, *.jar are .packwizignored — never blanket-un-ignore.
  • Remote: ssh://git@git.ljones.me:2222/logan/onion-mc.git, branch main.
  • Conventional Commits, imperative subject, body explains why. Don't commit or push unless asked / plan calls for it.
  • packwiz lives at ~/go/bin/packwiz (build ef87d96). On this machine it is on PATH.
  • Config shipping is opt-in: .packwizignore ignores config/*; shipping a file needs a negation at the bottom of .packwizignore (last match wins; negations must not end in / or packwiz SkipDirs the parent).
  • Hand-set side = "server" on petprotect, c2me-neoforge, noisium is silently reset by bulk packwiz update (single-mod update is safe).
  • Tuned defaults ship via the Default Options mod (config/defaultoptions/), copy-if-absent → reaches fresh installs only. Change values only through analysis/client-perf/proposed-configs/build.py, never by hand-editing outputs.
  • .pi/ and analysis/ are packwizignored — safe to commit to git, never shipped to players.

This machine — the Phase 2 "proxy" bench box (Manjaro)

The three fleet machines (Steam Deck, 7700K/1060, 6700K/1080 Ti — see phase0/) are unreachable; all Phase 2 data so far is from this high-tier proxy. Label all results as proxy data: absolute FPS floors do not map to tier decisions.

Item Value
OS Manjaro Linux, kernel 7.1.8
CPU AMD Ryzen 9 9900X, 12C/24T
GPU AMD RX 7800 XT (DRI_PRIME=1 used in launch scripts) + Granite Ridge iGPU
RAM 91 GB, no swap (good for p99 validity)
Disk / 84% used, 140 GB free
Java OpenJDK 21.0.12 at /usr/lib/jvm/java-21-openjdk
Display Harness hardcodes DISPLAY=:1, XAUTHORITY=/run/user/1000/xauth_HvvPAq; runs must happen on the desktop session owning :1. X sockets X0/X1/X99 exist.
git / python git 2.55.0, python 3.14.6

Tool and data paths on this machine

What Path
packwiz ~/go/bin/packwiz
Prism data dir (bench, launched with -d) ~/onion-bench/prism
Bench Prism instance ~/onion-bench/prism/instances/OnionBench
Instance game dir .../OnionBench/.minecraft (provisioned; saves/onionbench 26 MB; Default Options seeded; BENCH_VARIANT.txt = C1 = last applied variant; MaxMemAlloc 8192)
Instance PreLaunchCommand empty (intentional — no packwiz self-update mid-matrix, per BENCH-MATRIX §1)
Bench worldgen server ~/onion-bench/server-bench (full NeoForge server; benchworld/ = the generated world source, 26 MB)
MangoHud user-local build: ~/.local/mangohud, wrapper ~/.local/bin/mangohud-local (sets LD_PRELOAD shim, output_folder=~/onion-bench/mangologs, autostart, 1800 s cap, fps_limit=0, vblank off). System mangohud NOT in PATH.
MangoHud frametime CSVs ~/onion-bench/mangologs/
Harness results CSV ~/onion-bench/harness-results.csv (append via run_scene.py --record)
Bench launch scripts ~/onion-bench/launch-{bench,gui,online,xvfb,...}.sh (launch-bench.sh exports DISPLAY/XAUTHORITY/DRI_PRIME and launches OnionBench offline as user Tester)
Jar cache for jarscan /tmp/onion/jars — currently absent (ephemeral). Refetch with analysis/audit/fetch.py only if re-running jarscan.
xdotool /usr/bin/xdotool (present)

Harness wiring (quick reference)

  • analysis/client-perf/harness/run_scene.py — apply variant → launch Prism into world onionbench under MangoHud → drive scenes via xdotool → slice p50/p95/p99/ peak/1%-low from the MangoHud CSV. Constants: ROOT=~/onion-bench/prism, INSTANCE=OnionBench, GAME=$ROOT/instances/OnionBench/.minecraft, MANGOLOGS=~/onion-bench/mangologs, WORLD=onionbench. CLI: python3 run_scene.py --variant C1 --scene s1 [--warmup 15] [--capture 30] [--runs 1] [--record FILE] [--pre storm_on]. Scenes: s1 s2 s2s s3 s4 s5. Waits for "Sound engine started" in the instance log. --record appends one CSV row.
  • analysis/client-perf/harness/rcon.py — stdlib RCON client; args are host port password command. No config file.
  • analysis/client-perf/proposed-configs/apply_variant.py — applies variant <ID> from proposed-configs/out/<ID>/ into the game dir and writes BENCH_VARIANT.txt. Relaunch for every config change.