The full picture
- Why vruntime is elegant: I/O-bound tasks accumulate little vruntime while blocked → on wake they're far 'behind' → scheduled promptly. Interactivity falls out of the accounting — no heuristics about what's 'interactive'.
- The weight math: vruntime advances at rate
actual_time × (base_weight / task_weight)— high-weight tasks age slower, earning more CPU. Nice −5 vs 0 ≈ 3× share; cgroupcpu.weightdoes the same between containers. - Group fairness: CFS is hierarchical — first fairness between cgroups, then between tasks within one. A pod with 10 threads doesn't get 10× the CPU of a pod with 1.
- EEVDF in one line: same weighted fairness, plus per-task virtual deadlines so latency-sensitive tasks get scheduled soon, not just eventually — replacing a pile of CFS wakeup heuristics.