You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ba54f52
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -191,10 +191,10 @@ Every variable below is consumed by the container entrypoint, so it applies iden
191
191
|`FILES_WAIT_TIMEOUT_SECONDS`|`0`| 0 = wait forever for `WindowsServer/` to appear before launching. Only relevant when `WINDROSE_SERVER_SOURCE=files`. |
192
192
|`PROTON_USE_XALIA`|`0`| Xalia crashes on headless Proton; leave off. |
193
193
194
-
**Idle-CPU patch**
194
+
**Legacy idle-CPU patch**
195
195
| Env var | Default | Purpose |
196
196
|---|---|---|
197
-
|`WINDROSE_PATCH_IDLE_CPU`|`0`|`1`→ entrypoint builds a `WindroseServer-Win64-Shipping.patched.exe` sibling of the Steam-managed original on every start (caching by source md5), and launches that instead. The original is never modified, so SteamCMD's app_update has nothing to revert. **Experimental, no warranty** — see Caveats and the script header. Bare-Linux `install.sh` prompts for confirmation when flipping to `1`; set `WINDROSE_PATCH_ACK_RISK=1` to bypass for headless operators. |
197
+
|`WINDROSE_PATCH_IDLE_CPU`|`0`|Legacy workaround for older/pinned server builds that predate Windrose's official idle-CPU fix. Current SteamCMD builds should leave this `0`. `1` builds a `WindroseServer-Win64-Shipping.patched.exe` sibling of the Steam-managed original and launches that instead. The original is never modified, so SteamCMD's app_update has nothing to revert. **Experimental, no warranty** — see Caveats and the script header. Bare-Linux `install.sh` prompts for confirmation when flipping to `1`; set `WINDROSE_PATCH_ACK_RISK=1` to bypass for headless operators. |
198
198
|`WINDROSE_PATCH_OVERRIDE_FILE`|`$R5_DIR/.idle-patch-override`| Runtime override written by the admin UI's Idle-CPU card. `disabled` forces OFF (patched sibling is removed on next restart, game launches original); `enabled` forces ON regardless of env. Absent = follow `WINDROSE_PATCH_IDLE_CPU`. |
199
199
200
200
**Admin UI (`windrose-ui` sidecar)**
@@ -532,9 +532,9 @@ CI runs these plus JSON validation and YAML lint.
532
532
--from-file=app.js=./ui/app.js
533
533
```
534
534
Point nginx's `root` or `alias` at the mount and `proxy_pass` the `/api/*` location to the windrose Service.
535
-
- **Unpatched idleCPU is ~2 cores** — a known upstream spin-loop bug in `boost::asio::detail::socket_select_interrupter::reset()`, unreachable from Engine.ini / launch args / Proton env (see `memory/windrose_idle_cpu_known_bug.md`). Optional binary patch at `scripts/patch-idle-cpu.py` injects a `Sleep(1)` into the hot loop; ~97% reduction on the builds measured so far. Opt in via `WINDROSE_PATCH_IDLE_CPU=1` (Helm: `patchIdleCpu: "1"`). The script auto-derives offsets from a unique byte signature so it tolerates Windrose rebuilds — it refuses cleanly if the signature moves. The UI's Idle-CPU card has a runtime override for rollback without redeploying. **Offered as-is with no warranty and no guarantees.** Operators run it against their own SteamCMD-pulled copy; this project does not distribute modified binaries. Applying may conflict with the Windrose EULA or Steam Subscriber Agreement — review the terms before enabling; full risk rests with you.
535
+
- **Legacy idle-CPU patch.** Older Windrose dedicated-server builds had an upstream spin-loop bug in `boost::asio::detail::socket_select_interrupter::reset()` that burned ~2 CPU cores while idle (see `memory/windrose_idle_cpu_known_bug.md`). Windrose's April 30, 2026 server update includes an official CPU fix, so current SteamCMD installs should keep `WINDROSE_PATCH_IDLE_CPU=0` (Helm: `patchIdleCpu: "0"`). The optional binary patch remains only for operators running older/pinned server files that still exhibit the historical spin. It injects a `Sleep(1)` into the old hot loop and refuses cleanly if the signature is not present. **Offered as-is with no warranty and no guarantees.** Operators run it against their own SteamCMD-pulled copy; this project does not distribute modified binaries. Applying may conflict with the Windrose EULA or Steam Subscriber Agreement — review the terms before enabling; full risk rests with you.
536
536
537
-
Sizing floors (validated on DigitalOcean bare-Linux droplets 2026-04-18/19, unpatched):
537
+
Historical sizing floors (validated on DigitalOcean bare-Linux droplets 2026-04-18/19 before the official idle-CPU fix):
538
538
- **1 vCPU / any RAM**: unplayable. Idle bug pegs the core, no headroom forthe P2P handshake; client times outin`UePreloginVerified` and Coturn resets after ~180 s.
539
539
- **2 vCPU / 2 GB**: unplayable for a different reason — a delayed ~500 MiB allocation at t≈9 min crashes page reclamation regardless of swap.
540
540
- **2 vCPU / 4 GB, fresh world**: marginal. On slower shared vCPUs (typical DO / Hetzner / Linode small tiers) terrain generation saturates both cores during the first-connect handshake; Coturn times out at ~180 s and the client bounces to menu.
|`protonUseXalia`|`"0"`| Keep off; Xalia crashes on headless Proton. |
281
-
|`patchIdleCpu`|`"0"`|**Experimental.**`"1"` enables the idle-CPU binary patch at boot. See[main README § Caveats](../../README.md) for the disclaimer. |
281
+
|`patchIdleCpu`|`"0"`|Legacy workaround for older/pinned server builds before Windrose's official idle-CPU fix. Current SteamCMD installs should keep `"0"`. `"1"` enables the experimental binary patch at boot; see[main README § Caveats](../../README.md). |
<pclass="muted">Community binary patch that throttles the Boost.Asio drain-loop spin in <code>socket_select_interrupter::reset()</code>. Drops idleCPU from ~200% to ~5% on a canary. Applied by the entrypoint on next container restart when enabled; revertable byte-for-byte. <strong>See <ahref="https://github.com/shipstuff/windrose-self-hosted/blob/main/tools/patch-idle-cpu.py#L24" target="_blank" rel="noopener">the script docstring</a> for disclaimer and derivation details.</strong></p>
366
+
<pclass="muted">Legacy community binary patch for older/pinned server builds that predate Windrose's official idle-CPU fix. Current SteamCMD installs should keep it off. Applied by the entrypoint on next container restart when enabled; revertable byte-for-byte. <strong>See <ahref="https://github.com/shipstuff/windrose-self-hosted/blob/main/scripts/patch-idle-cpu.py#L24" target="_blank" rel="noopener">the script docstring</a> for disclaimer and derivation details.</strong></p>
0 commit comments