37898e856b
Horizon no longer fetches anything of Minecraft from Mojang's servers. The client jar, version JSON, libraries and assets come from the user's official launcher install, and the server jar is one they downloaded themselves (--server-jar or HORIZON_SERVER_JAR). Every file is checked against checksums pinned in research-lock.json, and the prepared .local/ layout is byte-identical to the old downloads, so the harnesses and the native client are unchanged. CI keeps the offline checks on GitHub's runners; the vanilla comparisons and the mod build need the game, so they move to a manual job on a self-hosted runner that holds the maintainer's own copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
55 lines
2.7 KiB
Plaintext
55 lines
2.7 KiB
Plaintext
Horizon server @PACK_VERSION@ — Minecraft 26.3, Fabric 0.19.5, Java 25
|
|
|
|
Install Python 3.10+ and native Java 25. Extract this ZIP and open a terminal here.
|
|
This starter never downloads the game: download the Minecraft 26.3 server jar
|
|
yourself (https://www.minecraft.net/download/server while 26.3 is current), then:
|
|
|
|
python3 tools/server.py prepare --server-jar PATH/TO/server.jar
|
|
|
|
Read Minecraft's EULA at https://www.minecraft.net/eula. Create/edit
|
|
.local/server/optimized/eula.txt to contain eula=true if you agree, then:
|
|
|
|
python3 tools/server.py run --heap 4G
|
|
|
|
Windows: use python in place of python3 if needed. Your server jar, mods and
|
|
assets stay in .local. No game code, third-party mod JARs or credentials are bundled.
|
|
Lithium and FerriteCore optimize the original simulation/storage; tick rate and
|
|
vanilla gameplay rules are retained. No Paper-style gameplay configuration.
|
|
|
|
From the server console:
|
|
horizonserver bench populated-50 120
|
|
horizonserver stop
|
|
|
|
From an operator's in-game chat, prefix each command with /. JSON/CSV reports
|
|
appear in the instance's horizon-benchmarks directory. They record actual peak
|
|
players, tick execution durations, observed tick count per elapsed second,
|
|
JVM heap/GC and platform metadata. meanRate is tick execution capacity, NOT TPS.
|
|
An idle server does not establish performance for 50 active players.
|
|
|
|
Baseline:
|
|
python3 tools/server.py prepare --baseline
|
|
python3 tools/server.py run --baseline --heap 4G
|
|
|
|
Use separate world copies with the same seed, settings, Java and maximum heap.
|
|
Only run one at a time unless you give them distinct ports/resources. When
|
|
benchmarking 50 players include normal exploration, entity farms, redstone and
|
|
chunk loading; repeat with 1, 10 and 100. Do not change simulation/view distance
|
|
between matched runs or turn off game logic to manufacture a speedup.
|
|
This first release has not been validated under a 50-player real workload.
|
|
|
|
Optional Java 25 HotSpot experiment: add --compact-headers to the run command.
|
|
Reports capture the actual compact object header flag and collector names.
|
|
Compare against the same workload with the flag omitted; object allocation
|
|
changes do not establish a whole-server RAM/TPS gain.
|
|
|
|
Optional collector comparison: select --gc g1 or --gc zgc on the run command.
|
|
Match world, player activity, heap, Java and header mode; use one collector at a
|
|
time. gc_time_ms includes collector cycle accounting, not a measured pause total.
|
|
Use JFR pause events for pause analysis and compare RSS/CPU/TPS together.
|
|
|
|
Compare generated reports:
|
|
python3 tools/compare_benchmarks.py baseline-ticks.json optimized-ticks.json --strict
|
|
|
|
Baseline must be a separate instance: --baseline adds no optimizers but doesn't
|
|
delete mods from an existing optimized instance. Use clean directories.
|