【发布时间】:2015-11-17 18:28:34
【问题描述】:
是否有人知道 CFS 调度算法的数据(例如挂起或就绪队列的内容、任务持续时间……)在 Linux 中存储在哪里? (有没有针对这个目标的特殊文件或数据结构?)
谢谢。
【问题讨论】:
标签: linux-kernel scheduling cfs
是否有人知道 CFS 调度算法的数据(例如挂起或就绪队列的内容、任务持续时间……)在 Linux 中存储在哪里? (有没有针对这个目标的特殊文件或数据结构?)
谢谢。
【问题讨论】:
标签: linux-kernel scheduling cfs
CFS 为系统中的每个处理单元保留不同的 runqueue(即,它不是全局调度程序,而是依赖于不同运行队列之间的任务迁移)。数据结构为kernel/sched/sched.h文件中的struct cfs_rq。
然后,每个运行队列在内部通过Red-Black Tree 数据结构保持任务排序。这个数据结构的实现包含在include/linux/rbtree.h 文件中。从某种意义上说,它是一个通用的实现,它与调度没有严格的关系,因此它可以被任何需要使用这种数据结构保持数据排序的内核组件使用。
在内核代码中,包含进程(或线程)信息的数据结构是task_struct,包含在include/linux/sched.h 中。这是所有调度策略(即SCHED_FAIR, SCHED_FIFO/SCHED_RR, SCHED_DEADLINE等)使用的主要任务数据结构
good documentation 包含有关 CFS 工作原理的 Documentation/scheduler 目录。
【讨论】: