Files
horizon-airdef/docs/core-performance.md
T

119 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Core performance comparison
`core-performance` adds the pinned core performance mods while retaining the
baseline's 12 full-detail chunks, 12 simulation chunks, suggested heap, custom
graphics preset and OpenGL backend. Neither profile installs distant terrain or
Iris shaders; every original experimental controller is disabled. Use this pair
for the first comparison at the same view distance, then test balanced separately
for its additional 128-chunk distant horizon.
The loaded-mod report also exposes dependencies bundled inside those downloads,
such as Transition and Trender in this observed core run. The comparator treats
these software changes as explicit experiment variables. Matching configuration
is not proof of pixel-identical rendering or exhaustive gameplay equivalence.
## Three repeated pairs on 0.20.0
The later series uses the exact published 0.20.0 mod with fresh JVMs and identical
initial private world copies. Each run warms for 180 seconds in focused gameplay,
then records frames and integrated-server ticks for 120 seconds. A separate test
fixture in both profiles holds the same stationary camera. It is absent from
playable packs. The workload remains 12 full-detail / 12 simulation chunks,
1280×800, FOV 70, no LOD/shaders, G1, compact headers and a 3 GiB maximum heap.
Private copies use Peaceful difficulty and a fixed noon clock/weather; distributed
packs retain normal rules. All original experimental controllers are disabled.
| Pair | Baseline FPS | Core FPS | Baseline peak RSS | Core peak RSS | Baseline CPU | Core CPU |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 1 | 5.39 | 6.53 | 2,310.68 MiB | 2,043.46 MiB | 2.931 cores | 2.898 cores |
| 2 | 5.55 | 6.32 | 2,572.06 MiB | 2,031.07 MiB | 2.928 cores | 2.981 cores |
| 3 | 5.39 | 6.52 | 2,172.38 MiB | 2,121.73 MiB | 2.942 cores | 2.950 cores |
Paired average-FPS changes are **+21.28%, +14.00%, +20.96%**. Their arithmetic
mean is +18.75%; this is a descriptive average of three changes, not a pooled
frame estimate or a statistical significance claim. The slowest-1%-average rate
is higher in all pairs, while p95 frame intervals are 8.43–21.25% lower. Peak
sampled RSS changes are **−11.56%, −21.03%, −2.33%**. Memory varies substantially
across fresh processes, so the earlier single pair's 22% reduction is not a
stable memory-saving estimate.
Average process CPU changes are −1.11%, +1.81%, +0.30%: there is no consistent
absolute CPU reduction while rendering more frames. Peak sampled JVM heap is
slightly higher in the third core run. GC accounting time is 113→92 ms, 57→154 ms
and 157→96 ms across the three pairs, so it is mixed too. These are collector
MXBean totals, not JFR stop-the-world pause measurements; no JFR profiling runs
alongside these captures.
Every accepted run has nonempty frame/tick CSVs with verified counts and mean
durations, zero excluded frames or dropped samples, matching captured settings
and no visual-setting changes. Sampled tick-manager state remains normal at
20 configured TPS with no observed freeze, step, sprint or rate changes. Observed
invocation throughput ranges from 19.997 to 20.006 TPS; mean tick execution time
is 26.43–32.91% lower with core. This stationary integrated-server workload does
not establish capacity for a populated dedicated server. Saved cameras, positions,
clock/rules and clean process exits are checked for every run. All three real
JSON/CSV pairs pass desktop/mobile comparison and chart checks.
The original third-pair candidate lost focus when the headless input tool's
single long sleep overflowed and its keyboard disappeared. Its 448 eligible
frames, 211 excluded frame starts and 1,391 measured ticks over about 120 seconds
are excluded. The preceding valid baseline is retained separately as unpaired
data. The complete third pair was repeated from fresh copies after replacing
the long sleep with several shorter sleeps in one persistent process and adding
an input-process liveness check. Neither excluded attempt enters the summary.
The [selected repeated observations](../benchmarks/core-client-repeats-2026-10-04/live-observations.json)
include all six accepted runs, the excluded attempts, each pair's comparison,
loaded mod identities and private capture/fixture hashes. This is still one
stationary view on an i7-7500U Linux **llvmpipe software renderer**. Baseline is
always first within each pair. OS cache, JIT, entity activity and thermal effects
remain uncontrolled variables. Three pairs do not prove a universal improvement;
Apple Silicon/native GPU performance, movement and terrain generation remain to
be measured. See the [Mac first-test guide](mac-first-test.md) for a matched-view
comparison on the user's hardware.
## Earlier single pair on 0.19.0
The selected 4 October 2026 live observations use separate private world copies,
a stationary camera, native Linux x64 Java 25, G1, compact headers and the same
3 GiB maximum heap. The test copies use Peaceful difficulty and a noon clock with
weather/time advancement disabled to reduce lighting variation. Distributed packs
do not change world rules. First saved cameras and saved clock/rules are checked.
JFR begins roughly 121 seconds after demo dismissal; a separate 120-second frame
capture begins roughly 307 seconds after dismissal.
| Observation | Vanilla baseline | Core mods |
| --- | ---: | ---: |
| Eligible frames | 651 | 785 |
| Average frame rate | 5.44 FPS | 6.56 FPS |
| 95th-percentile frame interval | 194.89 ms | 163.18 ms |
| Sampled peak process RSS | 2,710.76 MiB | 2,108.96 MiB |
| Average process CPU | 2.81 cores | 2.88 cores |
| Tick execution mean | 8.98 ms | 6.37 ms |
| Recorded tick samples | 2,401 | 2,402 |
In this single fixed-order, software-rendered pair, average FPS is about 20.7%
higher and sampled peak RSS about 22.2% lower with the core stack. Process CPU is
slightly higher while more frames are rendered. Tick execution durations are
lower; their inverse is execution capacity, not observed TPS. Both captures span
about 120 seconds and record approximately 20 tick samples per elapsed second.
These are descriptive observations, not a statistical or universal speedup claim.
They do not isolate which mod caused a difference. Entity activity, completion
of rendering work, cache/JIT and thermal state remain possible variables. RSS
excludes a complete GPU/unified-memory measurement; Apple Silicon performance
remains unmeasured. Hardware graphics measurements remain needed; the separate repeated series above
uses a different warm-up protocol and must not be pooled with this pair.
Preceding JFR counter rates for the server and render thread are lower with the
core stack, but total and longest measured GC pauses are higher in that profile.
Those recordings precede the frame captures, so rates/pauses must not be treated
as if they covered the later frame interval. Selected observations retain both
findings instead of presenting only favorable measurements.
The [selected raw observations](../benchmarks/core-client-2026-10-04/live-observations.json)
retain software identity, protocol and both positive and negative measurements.
Both clients save and exit with code zero; the core world reloads and saves again.
Actual JSON/CSV viewer and mobile checks pass. Windows, macOS ARM and Linux builds
pass, with byte-identical local and independent Linux production JARs. These are
platform build checks, not game graphics tests on each platform.