每个CPU核心是否都拥有CFS调度器专属的红黑树?
CFS调度器红黑树架构结论
Linux内核的CFS调度器采用的是每个CPU核心对应一棵独立红黑树的设计,你猜测的后者架构是正确的。
设计逻辑与佐证
- 该架构的核心设计目标就是提升调度效率,规避多CPU同时操作单棵全局红黑树带来的高频锁竞争开销:每个CPU对应一个独立的运行队列结构体
struct rq,运行队列内部持有专属的CFS调度子队列struct cfs_rq,红黑树就内嵌在cfs_rq结构体中,CPU仅需要操作自身运行队列对应的红黑树即可完成本地常规进程调度。 - 内核源码中可以直接找到对应定义:
struct cfs_rq结构体中包含struct rb_root_cached tasks_timeline成员,这个就是当前CFS队列对应的红黑树根节点,每个CPU的struct rq实例都持有独立的cfs_rq实例,对应独立的红黑树。
补充说明
内核存在跨CPU的负载均衡逻辑,会在合适的时机在不同CPU的红黑树之间迁移进程,平衡各核心的负载,但常规的进程入队、出队、选择下一个运行进程的调度操作,都只操作本地CPU的红黑树,不需要加全局锁跨CPU抢占资源。
内容的提问来源于stack exchange,提问作者sion
相关产品推荐
相关产品推荐

