Most latency guides stop at the kernel. Below the kernel sits firmware, and a surprising share of avoidable game-server jitter originates there: C-states that let cores idle into wake-up penalties, power limits that clock cores down mid-tick, NUMA interleaving that spreads a hot thread’s memory across sockets. This guide walks through the firmware settings that measurably reduce tail latency on bare metal, with realistic effect sizes rather than folklore.
Why Firmware Settings Move the Needle
A game tick runs on one core and must finish inside its budget, commonly 50 ms for a 20-tick server or 15.6 ms for a 64-tick shooter. Any event that delays a single tick by a few milliseconds is visible to players as a hitch. Firmware governs several of those events: how fast a core wakes from a deep idle state, how aggressively the platform boosts, and where memory allocations physically land. Kernel tuning can paper over some of this, but fixing it at the source is cheaper in CPU cycles.
| Setting | Default | Recommended | Typical effect on p99 tick |
|---|---|---|---|
| C-states | C6 enabled | C0/C1 only | -0.5 to -3 ms |
| C1E autonomous | Enabled | Disabled | -0.2 to -1 ms |
| P-state governor | Balanced | Performance | -0.3 to -2 ms |
| Turbo / boost | Enabled | Enabled | keep on |
| NUMA interleave | Interleaved | Local only | -1 to -5 ms |
| Frequency scaling | SpeedStep on | Off, fixed clock | -0.3 to -1.5 ms |
| Hyperthreading | On | On for most titles | neutral to +5% capacity |
C-States: The Single Biggest Win
When a core enters a deep C-state, waking it costs tens of microseconds to several milliseconds, and the wake-up happens precisely when a tick arrives — the worst possible moment. Disabling states below C1 keeps every core in a shallow idle that responds almost instantly. The trade-off is idle power: expect a node to draw an extra 15 to 60 watts permanently. On a 200 USD per month node that is real money, but if you are running competitive tick-sensitive titles, it is the highest-value firmware change available. Verify with turbostat that cores never report residency in C3 or deeper.
NUMA: Keep Hot Threads Local
On dual-socket nodes, interleaved memory means a thread’s allocation can land on the remote socket, adding 60 to 120 ns per access. That sounds trivial until a tick touches thousands of cache lines and the cost compounds into milliseconds. Set the BIOS memory mode to local or NUMA-aware rather than interleaved, then bind the game process to cores on one socket so its memory stays local. For multi-instance hosts, assign instances to sockets consistently and never let a hot instance straddle both.
Power and Clock Behaviour Under Load
- Disable energy-efficient turbo. It trades peak frequency for efficiency and lowers the ceiling right when your tick needs headroom.
- Set a fixed frequency rather than letting the governor chase load; a stable clock avoids the transition latency between P-states.
- Check the power cap. A capped package will clock down under sustained all-core load, which is exactly the state a full game server lives in. Confirm the BIOS power limit matches the CPU’s rated TDP.
- Watch thermals. Thermal throttling and power throttling look identical in logs; capture package power and core temperature together during a load test.
After any change, re-run the same load test and compare p99 tick time, not averages. Averages hide the tail that players feel. If p99 does not improve, revert the change; firmware tuning is empirical, and vendor defaults differ enough that copying a guide blindly can make things worse.
A Practical Rollout Order
- Baseline: run your load test and record p50, p99 and p99.9 tick time.
- Disable deep C-states and C1E autonomous; re-test.
- Fix the clock at the rated frequency, governor to performance; re-test.
- Switch memory mode to local and re-bind instances to sockets; re-test.
- Confirm power limits and re-test under full all-core load.
- Only then move to kernel tuning, so you are not layering variables on top of each other.
You need BIOS access for any of this, which is one concrete reason to prefer bare metal over virtualised instances: a hypervisor hides the C-state and NUMA settings entirely, and you inherit the host’s jitter with no way to fix it. That control is part of what you are buying with dedicated web hosting servers, and it pairs with the clock headroom a bare-metal server gives you, so use it — ask your provider whether BIOS access is included before you order, because not every host offers it.
Verifying Changes With turbostat and perf
Firmware changes are invisible unless you measure them. After each rollout step, confirm the platform is doing what you asked: turbostat will show C-state residency, package power and actual clock frequency under load, which is the only reliable way to know whether your C-state disable and fixed-clock settings took effect. If turbostat still reports deep-state residency, the firmware change did not apply, and no amount of kernel tuning will compensate.
Pair it with a scheduler-latency check to quantify the tail. A short run of cyclictest or a perf sched latency trace on an idle core reveals the worst-case wake-up delay, and it should drop noticeably once deep idle states are gone. Record the before and after numbers in your runbook. When a future patch or firmware update resets your settings, the runbook is what gets you back to the tuned state in minutes instead of rediscovering every value from scratch.


Leave a Reply
You must be logged in to post a comment.