Linux CFS 完全公平调度器:从红黑树到组调度与 NUMA 感知的内核工程实战
CFS(Completely Fair Scheduler)自 Linux 2.6.23 起取代 O(1) 调度器成为默认的进程调度器。它不依赖传统的时间片概念,而是通过「虚拟运行时间(vruntime)」实现完美公平的 CPU 时间分配。本文将从 CFS 的核心数据结构出发,深入剖析其调度算法、组调度机制、负载均衡策略以及 NUMA 架构下的感知调度,并结合性能调优参数与排查工具提供完整的工程实战指南。
一、CFS 的设计哲学
CFS 的核心目标非常简单:让每个可调度实体获得等量的 CPU 时间。假系统上有 N 个权重相同的进程,理想情况下每个进程应获得 1/N 的 CPU 时间。CFS 不预分配固定时间片,而是通过持续追踪每个实体的「虚拟运行时间」来决定谁该被调度。
1.1 vruntime 的定义与意义
每个调度实体维护一个 vruntime(virtual runtime),表示该实体在虚拟时钟下已经「消耗」的 CPU 时间。vruntime 增长速率与进程的权重成反比——权重越高的进程,vruntime 增长越慢,从而获得更多的实际 CPU 时间:
// 简化的 vruntime 增量计算
delta_vruntime = (delta_exec * NICE_0_LOAD) / se-

发表评论 取消回复