Skip to content

Whole modpack benchmark

BonsUnleashed edited this page Oct 7, 2026 · 6 revisions

Whole-modpack benchmark

Minecraft 1.20.1 / Forge: this page documents that build and its measurements. For the separate 170-control Minecraft 1.21.1 port, see Minecraft 1.21.1 NeoForge.

Measured on top of an already optimized modpack

5.6× faster world generation. 4.8× faster spawn preparation. Previously measured: +10% average FPS with 64 animated mobs and +29% 1% lows in a GPU-bound scene.

These gains are ON TOP of the major performance mods already running in the test pack. Both sides of the comparison keep ModernFix, FerriteCore, Radium and C2ME; the client also keeps Embeddium, ImmediatelyFast and EntityCulling, along with Oculus, Distant Horizons, Complementary shaders and Fresh Animations. The comparison adds or removes Bons and Furious from that existing setup. The figures below separate the latest 1.0.26 benchmark from the earlier clean FPS test.

Latest whole-pack results — 1.0.26, 2 October 2026

Four matched runs per arm, ABBA-ABBA order, same PC and seed; the reference pack had 471 server / 510 client mod JARs at the snapshot. C2ME was enabled on both sides, with reduceLockRadius=false throughout this test.

Workload With Bons and Furious 1.0.26 Same stack without Bons Result
Dedicated server, 512 new chunks 102 s 567 s 5.6× throughput
First 4 chunks of a new world 23.5 s 238 s 90% less time
New singleplayer world, spawn preparation 58 s 277 s 4.8× faster
Game launch to standing in a new world 242 s 482 s 50% less time
CPU time per generated chunk 0.56 s 2.91 s 81% less CPU
Memory allocated per generated chunk 308 MB 2,460 MB 87% less allocation
Distant Horizons LOD records, same 4-minute session 8,259 1,960 4.2× as many records built

Client start-up before loading a world was 128 vs 136 s (6% faster). Server start-up was unchanged; live heap after server start-up was 70 MB higher (2.30 vs 2.23 GB). Allocation saved while generating is separate from memory retained. These are whole-modpack results for this PC, pack and seed, not promises for every setup.

Measured FPS gains — earlier 1.0.21 benchmark, 30 September 2026

The same saved scenes were drawn with the client optimization stack above enabled in both arms, shaders and resource packs on, Distant Horizons generation off, four runs each. These are measured 1.0.21 results, retained as historical evidence; they are not a new 1.0.26 FPS measurement.

Same-scene rendering workload With Bons 1.0.21 Same stack without Bons Result
64 animated mobs, average FPS 72.6 66.1 +10%
64 animated mobs, 1% low FPS 40 35 +16% (from unrounded data)
GPU-bound overlook, 1% low FPS 89 69 +29%
GPU-bound overlook, average FPS 172 171 No significant change

The 1.0.26 saved-world baseline froze its integrated server in all four runs, while the Bons runs kept 20 TPS. That is documented as a stability result, not used to inflate the FPS comparison. New-world sessions also draw more terrain with Bons, so their frame rates are not a like-for-like comparison.

The individual runs, baseline versions and method follow below.

Charts

Measured 1.0.26 gains on top of the existing performance stack Historical measured FPS gains from 1.0.21, same client optimization stack

Optimization stack retained in both arms

Mod Tested version Where
ModernFix 5.27.77 Client and dedicated server
FerriteCore 6.0.1 Client and dedicated server
Radium Re-Reforged 0.14.3 Client and dedicated server
C2ME (Forge port) 0.2.0+alpha.12 Client and dedicated server
Embeddium 0.3.31+mc1.20.1 Client
ImmediatelyFast 1.5.5 Forge Client
EntityCulling 1.10.5 Client

The earlier FPS test also retained this client stack. Its dedicated-server generation arm had C2ME off, which is why the old 8.2× generation result and the current 5.6× result must not be compared as if only Bons changed. The newest benchmark uses C2ME on the server too. Other performance and compatibility mods remain part of each pack snapshot; these are the prominent baseline components, not an exhaustive mod list.

The 510 figure is the managed client snapshot count; the client rig's manifest records 508 base JARs before adding back Kismet Gigabyte and the on/absent Bons choice, plus the benchmark probe. The dedicated rig records 471 with Bons and 470 without. The absent arm uses a rig-only Kismet Gigabyte copy differing only in the dependency declaration required to launch without Bons; no code is changed. The same shaders, resource packs, settings and workload are used within each comparison.

Full historical 1.0.21 benchmark and FPS data

Test hardware

AMD Ryzen 9 5900X, 64 GB RAM, GeForce RTX 3080, Windows 10; Temurin 21.0.12.1, Forge 47.4.16. Client at 1920 × 1080, render distance 11, FPS cap removed.

Where the world-generation gain comes from (one run each)

Run (512 chunks) Switches on Time
on (median of 4) 127 of 127 101.8 s
srv11_nogivenback: the 8 switches that turn other mods' disabled options back on, off 119 of 127 100.8 s
srv10_noterrain: only the 3 vanilla terrain switches off 124 of 127 543.2 s
absent (median of 4) mod removed 567.1 s
srv09_off: every switch off 0 of 127 560.9 s

Same answer as the first benchmark: the generation gain is the three terrain switches (terrain_density_memo, terrain_final_density_reuse, terrain_surface_estimate_share); every switch off gives no gain; and the 1.0.22/1.0.25 "options given back" switches (Radium/ModernFix/DH/ImmediatelyFast with C2ME) make no difference to this pregen workload.

The singleplayer freeze without Bons

In the same-scene test both versions load one saved world (1,185 chunks, a 21,852-record Distant Horizons database made complete beforehand by a 10-minute settle session, DH distant generation off). In all four runs without Bons the integrated server stopped ticking 22-25 s after joining and never recovered before the run ended: ModernFix's watchdog logged "A single server tick has taken 40001, more than 40000 milliseconds", 0 ticks were recorded in the overlook and mob phases, and the game took 3-4 minutes to shut down. With Bons the server ran at 20 TPS throughout (600 ticks per 30 s phase, 13 s shutdown).

The watchdog's thread dump shows the server thread stuck in recursively nested chunk waits: ServerChunkCache.getChunk → managedBlock → runs another queued task → which is another getChunk (submitted from a non-server thread via ServerChunkCache$MainThreadExecutor) → managedBlock → ... many levels deep. That is the pattern of chunk reads from worker threads being routed through the main thread; in this pack the most likely source is Distant Horizons reading saved chunks while C2ME is installed, which is what 1.0.25's distanthorizons_c2me_direct_reads ("keeps Distant Horizons reading saved chunks itself") addresses. The switch is not proven to be the cause: no client attribution run was made. Cheapest proof: one fixed-profile client run with Bons on and only that switch off.

The new-world sessions (fresh world) did not freeze in either version.

Frame rate: what can and cannot be claimed

  • Same scene (fixed profile): with Bons the overlook ran 119 vs 115 FPS (+3%, not significant) and the 64-mob scene 72 vs 67 FPS (+7%, not significant); 1% lows +45% and +55%, frames over 50 ms 0 vs 3. But the version without Bons was drawing on top of a frozen server, so this is not a clean rendering comparison; do not quote these as frame-rate gains. The first benchmark's clean same-scene result (1.0.21, no freeze): +10% average FPS with 64 mobs, unchanged when GPU-bound.
  • New-world sessions: with Bons far more terrain and 4.2× the Distant Horizons LOD data are loaded and drawn (sprint 175 vs 259 FPS, overlook 152 vs 175, mob scene 61 vs 68). The two versions draw different scenes; never quote these.
  • The integrated-server and start-up numbers above are unaffected by this and stand.

Same world, faster

Biomes were identical in every compared section of every pair (552 fully generated chunks, 24,288 sections per pair). Block sections equal: with vs without 91.7% and 91.4%; same version without 91.8% and 91.6%; same version with 92.3% and 90.7% (the world-identity comparisons). The pack's own run-to-run variation grew from about 7% to 8-9% of sections with C2ME on; the with/without difference is inside it.

Conditions and caveats

  • Pack as of the morning of 2026-10-02: server 471 mods with C2ME, its own Temurin 21.0.12.1 (run.bat), G1 GC log, DH server threads 8, spark tickguard.2 at stock settings in both arms; client 510 mods with C2ME, the Complementary + Euphoria Patches + ACLight shader pack, Fresh Animations and the other active resource packs.
  • C2ME threadedWorldGen.reduceLockRadius was false throughout. A later pack configuration change to true is not part of these measurements.
  • One PC, one pack, one seed; 4 runs per arm; the three attribution runs are single runs. The absent arm used the rig-only Kismet Gigabyte copy without its bons_and_furious dependency (no EncodedBurst error in any run).
  • The session running the harness stayed idle between check-ins; background CPU from other programs was 0.55 vs 0.54 cores during the pregen windows (equal in both arms).
  • Valid-run rules: exit 0, the expected start-up line ("Bons and Furious 1.0.26: 127 of 127" / 0 / 124 / 119 of 127, none without the jar), all pregen areas complete, no crash report.

Per-run values

Server (in run order):

Run Arm Start-up (s) First 4 chunks (s) 512 chunks (s) Chunks/s CPU-s/chunk MB/chunk Live heap (MB)
srv01_on on 121.2 24.2 102.8 4.98 0.61 299 2,296
srv02_absent absent 123.3 235.3 562.9 0.91 2.86 2456 2,238
srv03_absent absent 123.2 241.3 569.9 0.90 2.91 2464 2,225
srv04_on on 116.7 22.7 102.9 4.98 0.57 324 2,276
srv05_on on 121.4 21.2 99.3 5.16 0.55 311 2,309
srv06_absent absent 122.7 244.9 580.0 0.88 2.95 2481 2,207
srv07_absent absent 123.3 233.3 564.4 0.91 2.91 2432 2,234
srv08_on on 129.1 24.2 100.9 5.08 0.56 304 2,303
srv09_off off 134.4 234.8 560.9 0.91 2.89 2437 2,274
srv10_noterrain noterrain 120.9 231.8 543.2 0.94 2.60 2272 2,250
srv11_nogivenback nogivenback 120.0 21.2 100.8 5.08 0.59 304 2,243

Client, new world as played:

Run Arm Start-up (s) Spawn area (s) World start to in game (s) Sprint chunks mean / fewest Chunks saved DH records
cli01_on on 126.5 57.9 114.8 412 / 261 1,163 7,978
cli02_absent absent 137.0 266.3 335.0 310 / 67 905 1,953
cli03_absent absent 135.7 282.4 350.7 313 / 65 917 1,940
cli04_on on 129.5 58.0 113.7 411 / 260 1,160 8,539
cli05_on on 127.4 57.7 113.0 408 / 255 1,177 7,918
cli06_absent absent 139.2 271.4 338.9 315 / 69 919 2,001
cli07_absent absent 135.4 286.8 355.9 311 / 64 916 1,966
cli08_on on 128.8 58.1 114.3 409 / 258 1,184 9,226

Client, saved world (same scene; server ticks in the 30 s overlook phase, 600 = 20 TPS, 0 = frozen):

Run Arm World start to in game (s) First 30 s FPS First 30 s TPS Overlook FPS / 1% low Mobs FPS / 1% low Overlook server ticks
fix01_on on 54.0 66.7 20.1 120.3 / 53.5 72.7 / 41.9 600
fix02_absent absent 67.1 53.0 14.2 114.6 / 37.7 68.4 / 28.6 0
fix03_absent absent 68.5 54.4 16.4 115.2 / 35.2 69.6 / 29.3 0
fix04_on on 54.8 64.0 20.2 109.6 / 39.8 70.7 / 41.5 600
fix05_on on 54.0 65.8 20.1 118.9 / 54.7 67.6 / 37.6 601
fix06_absent absent 68.2 55.5 15.4 116.0 / 35.2 65.7 / 19.5 0
fix07_absent absent 68.3 55.2 12.6 115.3 / 37.3 62.8 / 25.1 0
fix08_on on 54.1 66.8 20.2 119.3 / 51.4 74.3 / 42.2 601

The tables above retain the individual run values. Machine-readable summaries are in benchmarks.

Bons and Furious

Minecraft 1.20.1 / Forge 1.0.34

Compatibility

Controls by mod

Links

Clone this wiki locally