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).
74 lines
4.6 KiB
Markdown
74 lines
4.6 KiB
Markdown
# 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 `.packwizignore`d — 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.**
|