Vintage Story 12 min read

Synergy and Tungsten on a Vintage Story Server: Benchmarked Alone and Together (1.22.7)

Synergy and Tungsten measured on one of our own 4-core, 6 GB Vintage Story servers, alone and together, empty and with a player online: what each really does.

The short version

  • With a player online, Synergy cuts the tick under creature load by 38% and the lag spikes in half: mean tick 5.44 ms to 3.36 ms, 99th percentile 18.7 ms to 9.1 ms, GC pauses down 39%.
  • Most of that is Synergy doing less, by design. Creatures more than 48 blocks from a player go to sleep; vanilla simulates them out to 128 blocks. About 440 of our 500 creatures were asleep. Turn that off and the gain on the mean tick drops from 23% to 5%.
  • Tungsten is a pure optimisation: 14% off the mean tick with a player online and nothing simulated differently. On an empty server its effect was zero.
  • On an empty server Synergy still trims the idle tick by a quarter (1.16 ms to 0.87 ms), because it skips sleeping wild animals when nobody is online.
  • Startup, world generation, reload time and memory did not change with either mod.
−38%
mean tick under creature load
5.44 to 3.36 ms with Synergy, one player online
−51%
lag spikes (99th-percentile tick)
18.7 to 9.1 ms with Synergy, one player online
−14%
mean tick, Tungsten alone
5.44 to 4.67 ms, no change to gameplay
9 in 10
creatures Synergy stops simulating
anything 48 to 128 blocks from a player sleeps

Synergy and Tungsten are the two server-side performance mods Vintage Story server owners ask us about most. Both are by the same author, both are built to run together, and both make numbers-heavy claims: Synergy promises 15 to 40% off tick time, Tungsten 30 to 40% less garbage-collection pause. We host a lot of Vintage Story servers, so we wanted to know what they do on the kind of server our customers rent.

We benchmarked the unmodded 1.22.7 server, each mod on its own, and both together, inside an ordinary 4-core, 6 GB game server on one of our production nodes. We did it twice: once on an empty server, and once with a player online, because that turns out to matter a great deal for one of them.

Short answer: Synergy makes a busy server noticeably smoother, mostly by not simulating creatures far from players. Tungsten is a smaller, pure optimisation with no gameplay trade.

The mods

ModVersion testedAuthorMod DB
Synergy1.1.25Zaldaryonmods.vintagestory.at/synergy
Tungsten1.3.7Zaldaryonmods.vintagestory.at/tungsten

Both are server-only: your players keep using the normal client. Both patch the server's code at startup rather than replacing files, and both were the newest releases on the mod database when we ran this. They are tagged for 1.22.6 and loaded on 1.22.7 without complaint. Tungsten reports all 26 of its optimisations enabled; Synergy reports 13 active (its network features need the companion client mod). Both ran with default settings unless stated otherwise.

Synergy calls itself "coordinated server-side performance and fluidity optimizations". Its big feature is an entity activation range: creatures more than 48 blocks from any player are not ticked, apart from a short list of behaviours such as breathing, health and growth. Around that it adds distance-based throttles for AI, pathfinding and entity repulsion, a collision fast path for stationary entities, pooled buffers, an inventory dirty-scan, an auto-save optimisation and a garbage-collector mode that suppresses blocking full collections. Every one of them is a switch in its config file.

Tungsten is "server-side only performance optimization". Its 26 changes are the unglamorous kind: reusing lists instead of allocating them in entity ticking, block operations, drops and events; faster chunk loading and unloading; LINQ removed from hot paths; frozen registries; and three world-generation changes. None of them changes what the game simulates.

How we tested

The benchmark server is a normal Vintage Story server created through our panel on our NY 8 node (AMD Ryzen 9 9950X), with a typical plan's limits of 4 cores and 6 GB, running the official 1.22.7 dedicated server. A small server-side mod of our own drives every run so each one does identical work:

  1. Startup is timed from process launch until the server reports it is running the game, on a fresh world with a fixed seed.
  2. World generation: the mod requests 1,681 chunk columns (13,448 chunks) around spawn and waits until every one is loaded.
  3. Idle: twenty seconds of nothing, every tick measured.
  4. Creatures: 500 creatures (wolves, drifters, deer, foxes, hares) are spawned and ticks are measured for 45 seconds.
  5. The mod writes its results and shuts the server down. A second run restarts on the same world and times reloading it from disk.

We ran that in two scenarios:

  • Empty server. No player connected. The spawned creatures are flagged always-active so every server simulates all 500, as in our Stratum benchmark. The clean, like-for-like comparison.
  • One player online. A headless client of our own joins each server and stands at spawn. Creatures are spawned within 96 blocks of it and left to the game's own rules: vanilla simulates a creature while it is within 128 blocks of a player. The realistic case, and the only one in which Synergy's distance-based features do anything.

Each mod set ran four times per scenario on a fresh world, order alternating between rounds so noise on the node hits every set equally. Every figure below is the median of the four. Ticks are timed with a hook around the server's main loop, so the figures exclude the sleep between ticks.

Empty server: a quarter off idle, little else

Nothing connected, every spawned creature forced active. This is the fairest comparison and the least flattering to Synergy.

Bar chart of idle tick time, vanilla against both mods together: mean 1.16 versus 0.90 ms, median 1.09 versus 0.84, 95th percentile 1.81 versus 1.46, 99th percentile 2.31 versus 1.94
Main-thread tick time at idle with 1,681 chunk columns loaded and no players, vanilla against both mods together. Lower is better.
Idle, no playersVanillaSynergyTungstenBoth
Mean tick1.16 ms0.87 ms (−25%)1.16 ms0.90 ms (−22%)
99th percentile2.31 ms2.10 ms (−9%)2.29 ms1.94 ms (−16%)
Process CPU, % of one core4.5%3.7% (−19%)4.5%3.8% (−16%)

Synergy's quarter off the idle tick comes from the wild animals. About 1,100 animals spawn naturally in the loaded area. With nobody online the unmodded server keeps them inactive but still spends 0.65 ms per tick on them. Synergy skips sleeping entities entirely when no player is connected, and that cost drops to 0.27 ms. A real saving on a server that sits empty most of the day, worth about 0.8% of a core. Tungsten does nothing at idle, which is exactly what its description says.

With 500 creatures forced active, the mods are worth a few percent. Synergy took the mean tick from 3.88 ms to 3.67 ms (−5%), both together to 3.58 ms (−8%); Tungsten alone was within noise. The tail did not move in any direction we can stand behind: across the four vanilla runs alone the 99th-percentile tick ranged from 8 to 19 ms, and the mods' runs fell inside that spread.

One player online: where Synergy earns its name

Now the realistic case. A player stands at spawn, 500 creatures are spawned within 96 blocks of them, and the game decides what to simulate: everything within 128 blocks. That is 1,500 loaded entities including the wild animals, with around 450 of them active on the unmodded server.

Idle, one playerVanillaSynergyTungstenBoth
Mean tick1.62 ms1.35 ms (−17%)1.52 ms (−7%)1.38 ms (−15%)
99th percentile5.90 ms4.70 ms (−20%)4.95 ms (−16%)4.24 ms (−28%)
GC pause over 20 s67 ms50 ms55 ms41 ms

A connected player costs the unmodded server about half a millisecond per tick on its own (chunk sending, tracking, position packets). Both mods claw some of it back. Tungsten now registers, because several of its optimisations live in exactly the player-related queries an empty server never calls.

Bar chart of tick time with 500 creatures and one player online for vanilla, Synergy, Tungsten and both: mean 5.44, 3.36, 4.67 and 3.36 ms; 99th percentile 18.7, 9.1, 17.7 and 8.6 ms
Main-thread tick time with 500 creatures around one player, simulated by the game's own rules. Lower is better; the budget is 33.3 ms.
500 creatures, one playerVanillaSynergyTungstenBoth
Mean tick5.44 ms3.36 ms (−38%)4.67 ms (−14%)3.36 ms (−38%)
Median4.51 ms2.89 ms (−36%)3.99 ms (−12%)2.92 ms (−35%)
95th percentile9.10 ms5.24 ms (−42%)7.95 ms (−13%)5.29 ms (−42%)
99th percentile18.7 ms9.1 ms (−51%)17.7 ms (−5%)8.6 ms (−54%)
Process CPU, % of one core23%15%20%14%
GC pause over 45 s345 ms210 ms (−39%)333 ms198 ms (−43%)
Gen-0 collections82538054
Line chart of the share of ticks at or below each duration with one player online; the curve for both mods sits left of vanilla's and reaches 100% sooner
Every tick from every run with a player online, pooled: vanilla against both mods together. Further left is faster; a curve that reaches 100% sooner has fewer slow ticks.

Synergy's numbers are large, and they are mostly the activation range. Synergy prints its own statistics while running, and during this phase they read, run after run, roughly "60 active, 1,450 sleeping, 60% AI throttled". Of the 500 creatures we spawned, about 60 were inside the 48-block radius and got a full simulation. The other 440 were asleep, with only the whitelisted behaviours running, and the AI of the ones still awake ran less often the further away they stood. The unmodded server simulated all of them. Per-system timing agrees: entity simulation fell from 2.81 ms to 1.47 ms per tick, and the game-tick listeners (which include the physics and AI drivers) from 2.60 ms to 1.90 ms.

Whether that is acceptable is a gameplay question, not a performance one. A wolf 80 blocks from the nearest player stops hunting. A drifter stops wandering towards your base. Animals in a far pasture stop moving until someone comes within 48 blocks. Synergy exempts entities in lava, fire or water, lets you exclude entity codes, and all of it can be switched off in its config. So we measured that too:

500 creatures, one player (separate pass, 3 rounds)VanillaSynergy, defaultsSynergy, activation range off
Mean tick6.75 ms5.19 ms (−23%)6.40 ms (−5%)
95th percentile10.4 ms6.9 ms (−34%)9.9 ms (−5%)
99th percentile19.6 ms10.4 ms (−47%)17.6 ms (−10%)
GC pause over 45 s356 ms207 ms (−42%)286 ms (−20%)
Creatures Synergy reports asleepn/aabout 4400

This pass's vanilla figure is higher than the main pass's (6.75 ms against 5.44 ms). The node was equally quiet both times; the difference is what the creatures happened to do, so compare within the row. Switch the activation range off and three quarters of Synergy's gain goes with it. The mean-tick improvement drops from 23% to 5% and the tail improvement from 47% to 10%. What remains is still not quite free: the AI throttle is a separate switch and was still active, reporting 86 to 92% of AI decisions throttled by distance. Only the garbage-collector mode, the collision fast path and the pooled buffers are optimisations in the strict sense, and together they are worth a few percent of tick time and a fifth of the GC pause.

Tungsten's 14% is the kind of gain you can take without reading the fine print. Nothing is simulated less; the same entity ticks allocate and search less. Its distribution curve is a parallel shift of vanilla's rather than a different shape, which is what an across-the-board optimisation looks like.

Garbage collection is Synergy's second real optimisation. Its sustained-low-latency GC mode and pooled pathfinding nodes cut gen-0 collections during the creature phase from 82 to 53 and the time paused for collection by 39%. On an empty server this effect was invisible; it needs the allocation churn a player brings.

What did not change

  • Startup: 15.9 s on a fresh world for vanilla, every mod set within 0.6 s of it; 10.3 s on an existing world, every set within 0.8 s.
  • World generation: 39.0 s for 1,681 columns on vanilla, every set within 0.5 s. Tungsten's terrain changes cut gen-0 collections during generation by a quarter, which never reached the wall clock because 1.22.7's worldgen is bound by CPU work, not allocation.
  • Reloading the world from disk: 1.5 to 1.7 s in every set.
  • Memory: peak working set 1,763 MB on vanilla without a player and 1,837 MB with one; every set within 50 MB of that.
  • Forced-active creature ladder: with every creature forced active, spawned in steps up to 10,000, all four servers sat on the same curve. Neither mod makes simulating a creature cheaper.
  • Tick rate: every set held 29.8 ticks per second in every 500-creature test. The mods change how long a tick takes inside the budget, not whether the server keeps up at this load.

Should you install them?

  • Synergy is the one that changes how a busy server feels, and the one to understand before installing. With its defaults it stops simulating creatures 48 to 128 blocks from every player and throttles the AI of the rest; that is where most of its 38% comes from. If you are fine with distant creatures freezing, and on a public server with players scattered across a continent most owners will be, it is the largest improvement available short of changing servers. Its GC mode and idle-server savings are real and come without that trade; with the activation range off, expect a few percent on the tick and a fifth less GC pause, not the headline figures.
  • Tungsten is safe to install on any server: 14% off the busy tick with a player online and a quarter fewer collections during world generation, with nothing simulated differently. You will not notice it on an empty server.
  • Neither affects memory, world generation speed or startup in any way that matters.

Either mod goes into your server's Mods folder like any other; the knowledgebase covers installing mods from the control panel. Take a backup first, as with any server-side mod.

Caveats

  • One player, standing still. Nothing a mod does per player (packets, inventories, delta encoding) scales up in this test, and Synergy's bandwidth features were not measured.
  • Creatures within 96 blocks of one spot is a dense herd, which flatters anything that throttles by distance. Players spread out will see smaller absolute gains from the activation range and the same mechanism at work.
  • The empty-server pass forces every creature active, which is harsher than any live server.
  • Default configurations throughout, except the one Synergy variant noted. Versions after 1.1.25 and 1.3.7 may differ.
  • Vanilla's creature-load tick is noisy between runs of the identical setup (4.5 to 6.0 ms in the main pass). The node was quiet and our container never throttled; the slower runs did more work (more entity simulation, more collections), so where the creatures landed and what they chose to do is the variable. Mod effects are always read against the vanilla runs of the same pass.
  • One node, one plan size, no other mods. Relative costs should transfer; absolute numbers will not. A content mod that adds its own creature behaviours could change how both of these mods perform.

Host your Vintage Story server with us

Plans from $8.25/month. Ryzen 9 nodes, NVMe storage, instant setup and a 14-day money-back guarantee.

View Vintage Story plans

Questions about this

With default settings, yes. Creatures more than 48 blocks from every player stop being simulated (only behaviours like breathing, health and growth keep running), and the AI of nearer creatures runs less often with distance. Vanilla simulates everything within 128 blocks. The activation range and the AI throttle are both switches in Synergy's config file.
No. Tungsten only changes how the server does the same work: fewer allocations, faster lookups, no LINQ in hot paths. Nothing is simulated less, which is why its gains are smaller and why it has no effect on an empty server.
Tungsten on its own is the choice if you want vanilla behaviour; Synergy if you accept distant creatures sleeping; both if you want Synergy's gameplay with Tungsten's optimisations on top.
In our test with 500 creatures around one player, the mean tick fell 38% (5.44 ms to 3.36 ms) and the 99th-percentile tick 51% (18.7 ms to 9.1 ms). With the activation range switched off the mean-tick gain was about 5%. On an empty server the idle tick fell by a quarter.
The versions we tested, Synergy 1.1.25 and Tungsten 1.3.7, are tagged for 1.22.6 and loaded on 1.22.7 without errors. Check the mod database pages for newer releases before installing.
No. Startup, world generation, reloading from disk and peak memory were all within run-to-run noise of vanilla for every mod set. Tungsten reduces garbage collection during world generation, but that did not change the wall-clock time.

Something Unique Hosting is not affiliated with either mod or their author. Benchmarked by us on our NY 8 node (AMD Ryzen 9 9950X, 4 cores, 6 GB) with Vintage Story 1.22.7, Synergy 1.1.25 and Tungsten 1.3.7. Benchmark mod, headless client, raw results and charts: github.com/Something-Unique-Hosting/vintagestory-mod-benchmark.