Summary Civilization VI (Steam, Win64Steam, DX11) runs without crashes or graphical issues, but sits at about 12-13 FPS even in the first ten turns at 1600x900 with mid-to-low graphics. It is much slower than PEAK and Cyberpunk 2077 on the same device, even though it is an older game with no advanced rendering. It also takes about 3 minutes to reach the main menu. Lowering resolution and graphics does not help, so it looks CPU/translation-bound, not GPU-bound.
Environment
- iPad Pro M5 (iPad17,1), iPadOS 27.2 beta 2, 9 cores, 11.5 GB RAM
- Madeira v0.1.3 (4), JIT via StikDebug
- JIT pool 1024 MB requested, Fastsync
Sync mode comparison
- Fastsync: fastest start and highest in-game FPS
- Wine standard sync: slightly slower
- Madsync: the game does not start at all
Findings from the attached log (launch with Run through processing one turn, ~11 min)
- JIT pool is silently capped. The requested 1024 MB is shrunk to 560 MB:
no hole fits a 1024MB pool — SHRINKING to 560MB. So raising the pool setting has no effect here. - The main game thread is CPU-bound. In-game it runs near 100% of one fast core at ~4.1 GHz (IPC ~2). Processing a turn bursts to roughly 3+ cores for a second or two.
- Very high x64 -> ARM64EC transition rate.
[xp-api]reports up to ~6.3M transitions/s (18:12:51), ~2.3M/s (18:08:15) and ~1.8M/s (18:14:25). The hottest sampled addresses are small ucrtbase.dll functions (e.g. ucrtbase.dll+0x61610, +0x62508). This may be why a CPU-heavy game suffers while GPU-heavy games do not. - A thread appears to spin. The final
[thread-sample]burst shows one thread at 98-100% RUN, in the same tight loop (pc 0x14e4619cc / 0x14e4619e0) across three consecutive samples, withEOSSDK-Win64-Shipping.dll+0x4ea0a0as a stack candidate (Epic Online Services SDK, bundled with Civ VI). - Sync is not the bottleneck. Critical-section contention stays at 0-32/s with ~0.4 ms/s of waiting.
- Boot phase. For about 3 minutes (10-180 s after launch), roughly three fast cores stay pegged with unusually high IPC (~6).
- Memory footprint peaked at ~8.2 GB.
Questions
- Can the JIT pool be placed so that more than 560 MB fits?
- Is the cost of x64 -> EC transitions for small CRT calls reducible?
- Is the EOSSDK spin loop a known issue?
- The in-app perf overlay shows only ~3% CPU / ~10% GPU at 12-13 FPS, which does not match the log telemetry. Does the overlay measure something different?
Full civ-6 run log attached from starting the game in windows Run to processing a turn (madeira-log.txt): madeira-log.txt
This issue is partially written with the assist of Claude
Activity
0No activity yet.