Linux 进程调度器:CFS 原理与调优

概述 进程调度器是操作系统内核的核心组件,它决定了哪个进程在哪个 CPU 上运行、运行多长时间。Linux 自 2.6.23 起采用 CFS(Completely Fair Scheduler)作为默认调度器,经过多年演进,在 6.6 内核中又引入了 EEVDF(Earliest Eligible Virtual Deadline First)替代 CFS。本文深入理解 CFS 的工作原理、nice/cgroup CPU 控制、实时调度、CPU 亲和性等核心主题,并分享生产环境的调优经验。 CFS 调度器原理 设计哲学 CFS 的核心目标是"完全公平"——每个进程按照其权重比例获得 CPU 时间。与传统调度器基于时间片不同,CFS 使用"虚拟运行时间"(vruntime)来跟踪每个进程的 CPU 消耗: vruntime = 实际运行时间 × (NICE_0_LOAD / 进程权重) nice 值为 0 的进程权重为 1024(NICE_0_LOAD) nice 值越低,权重越大,vruntime 增长越慢,获得更多 CPU 时间 CFS 始终选择 vruntime 最小的进程运行 红黑树与调度队列 CFS 使用红黑树维护运行队列,按 vruntime 排序: [vruntime=50] / \ [vruntime=20] [vruntime=80] / \ [vruntime=10] [vruntime=35] 最左节点(vruntime 最小)是下一个被调度的进程 进程运行后 vruntime 增加,被重新插入红黑树 查找、插入、删除均为 O(log N) 调度周期与最小粒度 # 调度周期(目标延迟):所有进程在这段时间内至少运行一次 $ sysctl kernel....

May 29, 2024 · 7 分钟 · 1330 字 · 徐保金