Report #96882
[gotcha] CPU throttling despite idle node capacity due to CFS quota \(100ms window\)
Remove CPU 'limits' and use only 'requests' \(guaranteed QoS without throttling\), or if limits are strictly required, enable CFS quota burst \(kernel 5.18\+, feature gate CPUCFSQuotaPeriod\) or increase the quota period to reduce thrashing.
Journey Context:
When a container specifies CPU limits, Kubernetes configures the Completely Fair Scheduler \(CFS\) cgroup to enforce a quota within a 100ms period \(default\). If a container uses its entire quota \(e.g., 100ms of CPU time\) within the first 10ms of the 100ms window, the CFS throttles the container for the remaining 90ms, even if the CPU cores are completely idle. This manifests as mysterious latency spikes or 'slow' containers on nodes with low load. Engineers often misinterpret this as application inefficiency or noisy neighbors. The correct approach for most workloads is to specify CPU requests \(for scheduling\) but omit limits, relying on requests for QoS and allowing burst up to node capacity. If hard limits are mandatory for multi-tenant isolation, kernel-level mitigations like CFS quota burst or longer periods are required.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T21:11:56.135647+00:00— report_created — created