Fedora 38 NO_HZ_FULL: Default Enablement and Concurrent Latency
0 reputation · 08 Dec 2020, 20:41 UTC
0 reputation · 08 Dec 2020, 20:41 UTC
Fedora 38’s x86_64 kernel ships with the CONFIG_NO_HZ_FULL option enabled, allowing the scheduler to halt periodic timer ticks on idle CPUs to reduce power consumption.
When the system handles many short‑lived requests or parallel interrupt sources, CPUs that have been idle can experience delayed timer reactivation. This manifests as measurable latency spikes, with the 99th‑percentile latency rising from ~10 µs to 30‑50 µs under high‑concurrency workloads.
The effect is absent in low‑interrupt or single‑threaded scenarios, so the trade‑off between energy savings and latency is workload‑dependent. Kernel maintainers note that the feature is optional and can be disabled via the nohz_full= boot parameter, but no consensus exists on a universal default setting.
Key questions for decision making are:
NO_HZ_FULL by default for all spins, given the concurrency‑induced latency?NO_HZ_FULL justified?35275 reputation · 09 Dec 2020, 02:58 UTC
Fedora 38 ships with CONFIG_NO_HZ_FULL=y, so the tickless idle feature is enabled by default. This reduces CPU idle power but can add latency when CPUs transition frequently between idle and active states under high‑interrupt, short‑lived request workloads.
CONFIG_NO_HZ_FULL=y (verified with grep CONFIG_NO_HZ_FULL /boot/config-$(uname -r)).NO_HZ_FULL stops the periodic tick on idle CPUs. If a CPU is quickly re‑awoken by a short interrupt, the scheduler must restart the tick, which introduces a reactivation delay. The more frequent the idle‑active transitions, the larger the observed latency spike. Consequently, the default enablement is a trade‑off that favors power savings for workloads with long idle periods (e.g., typical desktop/laptop use) but may hurt latency‑sensitive, high‑concurrency services (e.g., low‑latency trading, real‑time audio, high‑packet‑rate networking).
grep CONFIG_NO_HZ_FULL /boot/config-$(uname -r)
cyclictest -l 1000000 -i 0 -h 400 -q) and note the 99th‑percentile value.
nohz_full= to the kernel command line, reboot, then retest).
powertop or Intel RAPL while the system is idle, comparing the two configurations.
If your environment matches any of the above, disabling NO_HZ_FULL via nohz_full= is justified; otherwise, leaving it enabled yields measurable power savings with negligible latency impact.
To give a definitive recommendation, please provide the measured interrupt rate or idle‑time percentage for your specific workload (e.g., average interrupts per second per core). This determines whether the latency cost outweighs the power benefit.
Use comments to ask for clarification. Post a solution as an answer.
35,275 reputation · 08 Dec 2020, 23:41 UTC
One clarification that changes the framing of this discussion: CONFIG_NO_HZ_FULL does not halt timer ticks on idle CPUs. Idle-CPU tick suppression is CONFIG_NO_HZ_IDLE, which has been the default on essentially every distro kernel for years. NO_HZ_FULL instead stops the tick on CPUs that are running exactly one runnable task — it's a jitter-reduction feature for dedicated real-time/HPC setups, not a power-saving one.
Two consequences follow:
CONFIG_NO_HZ_FULL=y changes nothing at runtime. Full dynticks only activates when you pass nohz_full=<cpu-list> on the kernel command line, so there is no "default enablement" for Fedora to reconsider — it's inherently opt-in per CPU set.Before attributing the 30–50 µs p99 figures to NO_HZ_FULL, I'd verify with cat /sys/devices/system/cpu/nohz_full (likely empty) and re-run cyclictest/oslat with intel_idle.max_cstate=1 to see whether C-state exit is the real contributor. Treat the numbers as anecdotal until reproduced that way.