Linux 调度器实现:从 CFS 到 EEVDF
从 CFS 的红黑树与 vruntime 出发,讲解 Linux 6.6 的 EEVDF 调度器如何用 lag 与虚拟截止时间替代权重比例分配,剖析五大调度类与 nice 权重换算,深入调度域负载均衡、PELT 跟踪、CPU 亲和性与隔离,并结合 sched_ext 与 perf sched 给出排查清单。
tag
从 CFS 的红黑树与 vruntime 出发,讲解 Linux 6.6 的 EEVDF 调度器如何用 lag 与虚拟截止时间替代权重比例分配,剖析五大调度类与 nice 权重换算,深入调度域负载均衡、PELT 跟踪、CPU 亲和性与隔离,并结合 sched_ext 与 perf sched 给出排查清单。
深入 Linux IO 栈:从 VFS、页缓存、文件系统到块层与设备驱动,讲解缓冲 IO 与直接 IO 的区别、blk-mq 与 mq-deadline/none 调度器、io_uring 异步 IO 原理、RAID/LVM 布局、iostat/iowait 指标解读、fio 压测方法,以及一套可落地的存储性能调优清单。
BEAM 运行时与进程调度深度解析:BEAM 虚拟机架构(寄存器/模拟器)、进程与调度器(Scheduler)模型、调度策略(公平/抢占/削减)、ETS 与进程协作、内存管理与垃圾回收、复制式写语义(COW)、性能监控与调优、与 OS 线程的映射。
调度循环长什么样、work stealing 怎么工作,站内专题讲过原理。本节只写增量:用 schedtrace 的每-P 队列长度和 runtime/metrics 的 goroutine 状态计数,实测窃取的痕迹;再顺着 proc.go:schedule→findRunnable→stealWork→runqsteal 把代码走一遍;最后给一张「队列分布→结论」的决策表。
G/M/P 是什么,站内 Go 专题已经讲过。本节只写增量:用 GODEBUG=scheddetail=1 的真实回显,把每个 goroutine 的 status 与 waitreason 逐字段读出来,再定位到 src/runtime/runtime2.go 的状态常量与 g/m/p 结构体,最后给出一张可直接对照的状态迁移表。
深入解析 Go runtime 调度器的 G-M-P 模型,从 goroutine 创建到 M 线程绑定、P 处理器负载均衡,结合源码逐行剖析与可视化流程图