Linux内核调度器负责决定哪个进程在CPU上运行。从O(n)调度器到O(1)调度器,再到CFS(完全公平调度器),以及最新的EEVDF(最早 Eligible 虚拟截止时间优先),Linux调度器不断演进。
CFS基于红黑树实现,每个进程维护vruntime(虚拟运行时间):
vruntime += delta_exec * (NICE_0_LOAD / weight)
vruntime最小的进程优先运行,确保公平性。
保证在调度延迟周期内,所有 runnable 进程都能获得运行时间。
EEVDF在CFS基础上引入虚拟截止时间概念:
deadline = vrune + slice; // 虚拟运行时间 + 时间片
优先选择deadline最早的进程,更好处理实时性和功耗。
cat /proc/sched_debug cat /proc/[pid]/sched
nice -n -5 ./program # 提高优先级 renice -n 5 -p 1234 # 调整运行中进程
taskset -c 0-3 ./program # 绑定到CPU 0-3
perf sched record -- sleep 60 perf sched latency perf sched map