Benchmarks

What the bench shows

Full method, hardware, raw numbers and caveats. These figures are not a promise for every server: they compare identical scenarios on one machine.

Startup0.6–0.9 svanilla 6.6–11.4 s
20 bots joining, p9511–26 msvanilla 845–860 ms
Peak memory182–236 MiBvanilla 845–929 MiB
Chunk on disk6.9 KBdeflate 6 · vanilla 8.7 KB

Bench and method

Release build, flat world, view distance 2, Java 25 (Temurin) with default JVM settings. Two runs per scenario: 20 s warmup, 45 s measurement. MSPT comes from tick query; TPS from the time query gametime increment.

CPU
Ryzen 9 7945HX
OS
Windows 11
Build
release, HEAD d3b74fd
World
flat, view distance 2
Bots
20
Warmup / measurement
20 s / 45 s
Repetitions
2 per scenario
Java
Temurin 25, default settings

End-to-end scenarios

Join is p95 connection latency. MSPT and memory are from the same run. Lower is better; for TPS, higher is better.

ScenarioChunkwakeVanilla 26.3
Join p95MSPTMemoryJoin p95MSPTMemory
Simultaneous join11.1–25.5 ms0.4–0.5 ms187–188 MiB845–860 ms2.1–2.6 ms907–929 MiB
Movement16.4–47.1 ms0.4–0.5 ms182–190 MiB703–746 ms2.7–3.1 ms860–864 MiB
World exploration25.2–30.4 ms0.8 ms207–209 MiB698–891 ms3.4–4.3 ms868–877 MiB
Redstone, 128 lamps and wires16.1–16.2 ms0.4–0.5 ms189–190 MiB897–960 ms3.4–3.5 ms845–859 MiB
2500 cowsTPS 20 / 4.4–8.616.2 ms3.9–5.6 ms230–236 MiB682–925 ms120–221 ms909–913 MiB

Server startup: Chunkwake 0.6–0.9 s, vanilla 6.6–11.4 s.

What the runs found

  • During the day, zombies, skeletons, creepers and spiders spawned in the flat world and killed bots: 172 deaths versus 30 for vanilla. Light in an unloaded flat-world column read as 0 instead of the template value, and sky darkening used the wrong timeline. After the fix both checks pass and Chunkwake has no deaths.
  • The cow numbers were taken while extra monsters were still around. The botless "Simple" profile is reported as an error on both servers: that is a bench bug, not a server bug.

CPU optimizations

WhatBeforeAfterChange
Random ticks, 400 ticks at 409656.7 s32.5–33.5 s (vanilla 43 s)state kinds in a table; leaves tick only when decaying; deferred distance recompute
/fill 32×16×32 (fill_16k)288 ms35 msone world lock, one light pass, one broadcast queue per batch
Block write with light33.5 µs~28 µsneighbours are read once for observers, fire and leaves

Memory

Measured with scripts/measure-memory.ps1: fresh worlds with seed 12345, 60 s of flight at 20 blocks/s, simulation 6. Private is Windows PrivateMemorySize64; peak is the maximum of samples every 2 s; after is 30 s after the bot leaves.

ProfilePrivate idlePeakAfter 30 sAverage view
A: view 10, baseline391.5 MB1317.3 MB1003.9 MB100.0 %
A: view 10, final normal348.7 MB1222.6 MB965.2 MB100.0 %
B: view 32, baseline391.4 MB1991.3 MB1330.5 MB94.2 %
B: view 32, final normal351.1 MB1818.4 MB1164.6 MB92.5 %
A: view 10, final low339.2 MB776.6 MB445.2 MB99.6 %

Live heap after flight with zero loaded columns: 480 → 417 MB. Process private memory is still three times the live heap: mimalloc keeps pages after the peak. arena_eager_commit=0 was rejected: in profile A low it gave 504.1 MB instead of 445.2 MB.

Storage

Same flight: 13,052 full chunks. A full chunk at deflate 6 is 6.9 KB versus 8.7 KB for vanilla. Free sectors are reused, and a repeated backup with no changes uses hard links.

deflateData, MBIn sectors, MBCompress, µs/chunkDecompress, µs/chunk
112414969–10640–59
390116156–20438–67
685113257–34041–66
983110202038–67

Caveats

  • This is one machine and two runs per scenario. The spread is visible in the ranges; do not project the difference onto any hardware.
  • The cow profile compares load, not identical work: cow AI in Chunkwake is still being verified against vanilla.
  • World settings that Chunkwake does not apply yet cannot be considered equivalent to vanilla. Speed does not replace behaviour checks.
  • Memory is the process peak under a specific scenario, not an -Xmx recommendation. Plugins still need Java 25+.
  • This is a core-only result: the bench runs without user plugins.

Reproduction

Build the lab and the release server, then repeat the run. The lab downloads server.jar from the Mojang manifest if it is not provided and checks for Java 25+.

chunkwake-lab benchshell
cargo build -p chunkwake-lab
cargo build --release -p chunkwake-server

chunkwake-lab bench --chunkwake target/release/chunkwake \
  --jar server.jar --accept-vanilla-eula \
  --profile all --bots 20 --warmup 20 --duration 45 --repetitions 2

Figures come from docs/perf.md and docs/lab.md on ver/26.3. If this page disagrees with the sources, trust the sources.