What is the Linux kernel scheduling (CFS)?
Why Interviewers Ask This
This is a differentiating question used for senior and lead roles. Interviewers want to see if you can explain not just what happens, but why — and what the trade-offs are in different approaches.
Answer
The Completely Fair Scheduler (CFS) is Linux's default CPU scheduler (since kernel 2.6.23), replacing the O(1) scheduler. CFS aims to give each runnable task a fair share of CPU time — as if we had an ideal multi-tasking processor. Core concept — virtual runtime (vruntime): CFS tracks how much CPU time each task has consumed via a "virtual runtime" counter. The task with the smallest vruntime gets to run next — it's the task that has received the least CPU time relative to its weight (priority). vruntime increases faster for tasks with lower priority (nice level). Red-black tree: CFS stores tasks in a red-black tree ordered by vruntime. The leftmost node (smallest vruntime) is always the next task to run — O(log n) to find, O(1) cached in min_vruntime. Weight (nice levels): each task has a weight based on its nice value (-20 to +19). Nice -20 (highest priority) = 9× more weight than nice 0. Weight determines how fast vruntime increases: high-priority tasks accumulate vruntime slowly (run longer before being preempted). Scheduling latency: the target period for all tasks to run at least once. Default: 6ms for ≤8 tasks; scales with task count. Minimum granularity: 0.75ms (prevents too-frequent context switches). Load balancing: CFS balances load across CPUs and NUMA nodes. Periodically migrates tasks to underloaded CPUs. Control groups (cgroups): CFS supports hierarchical scheduling via cgroups — limit CPU percentage per group (containers, user sessions). EEVDF (Earliest Eligible Virtual Deadline First): scheduled to replace CFS in Linux 6.6+ — more responsive, better for latency-sensitive workloads.
Pro Tip
Back up your answer with a specific project or situation. Saying 'In my last Operating Systems project, I used this when...' immediately makes your answer more credible and memorable.
Previous
What is priority inversion?
Next
What is the difference between mutex, semaphore, and condition variable?
More Operating Systems Questions
View all →- Advanced What is the difference between mutex, semaphore, and condition variable?
- Advanced What is virtual memory in detail — TLB, page tables, huge pages?
- Advanced What is the boot process of a Linux system?
- Advanced What is NUMA (Non-Uniform Memory Access)?
- Advanced What is cgroups (control groups) in Linux?