Linux 6.6's new scheduler
A Fair Slice
© Photo by Diana Krotova on Unsplash
Linux 6.6 introduces the EEVDF scheduler, a next-generation CPU scheduling algorithm focused on fairness and responsiveness.
Linux Kernel 6.6 introduced a major update to process scheduling by replacing the almost decade-old Completely Fair Scheduler (CFS) with the Earliest Eligible Virtual Deadline First (EEVDF) scheduler [1]. This new scheduler fulfills the same role as CFS dividing CPU time among processes but does so more efficiently, with lower latency and more predictable behavior. EEVDF is based on an algorithm from a mid-'90s research paper and was merged under the guidance of veteran kernel developer Peter Zijlstra. For those managing Linux systems (from on-premises servers to cloud environments), EEVDF brings potential performance boosts and smoother multitasking without requiring fundamental changes to userspace software. I'll explore how EEVDF works, how to configure and optimize it, and why it matters for modern Linux distributions and workloads.
Unlike its predecessor, EEVDF takes a more algorithmic approach to fairness and responsiveness, removing many of the ad-hoc heuristics and tuning knobs that CFS relied on. The design ensures that tasks which haven't gotten their fair share of CPU are automatically favored, while tasks that overused CPU are gently throttled back in subsequent scheduling decisions. This clean, proportional-share mechanism improves latency for tasks that CFS might inadvertently starve or delay, all without the need for complex tuning parameters. In practical terms, system administrators and developers should see more consistent task scheduling and fewer edge-case issues. The kernel developers caution that a few specific workloads could see initial performance regressions under EEVDF, but these are expected to be rare and are being addressed in follow-up patches.
Why the Scheduler Changed
The CFS had been the default scheduler since Linux 2.6.23 (2007), so replacing it was a big deal. The main motivation was to eliminate the fragile heuristics and guesswork CFS used to handle various workloads, especially latency-sensitive tasks. CFS implemented fairness by tracking each task's virtual runtime and trying to give equal CPU time to all tasks of equal priority. However, to accommodate interactive vs. batch behavior, CFS accumulated many tunable parameters and heuristics. These required careful balancing and could mispredict some scenarios, leading to suboptimal performance or responsiveness. Administrators might recall tweaking CFS parameters or using tools such as nice/renice to influence scheduling, which sometimes felt like a black art in multitenant or high-load systems.
[...]
Buy this article as PDF
(incl. VAT)
