有谁知道 CFS 调度算法的数据(例如挂起或就绪队列的内容、任务持续时间……)存储在 Linux 中的什么位置?(是否有针对此目标的特殊文件或数据结构?)
谢谢。
有谁知道 CFS 调度算法的数据(例如挂起或就绪队列的内容、任务持续时间……)存储在 Linux 中的什么位置?(是否有针对此目标的特殊文件或数据结构?)
谢谢。
CFS 为系统中的每个处理单元保留不同的运行队列(即,它不是全局调度程序,而是依赖于不同运行队列之间的任务迁移)。数据结构为kernel/sched/sched.h文件中的struct cfs_rq 。
然后,每个运行队列在内部保持任务通过红黑树数据结构排序。该数据结构的实现包含在include/linux/rbtree.h文件中。从某种意义上说,它是一个通用的实现,它与调度没有严格的关系,因此它可以被任何需要用这种数据结构保持数据排序的内核组件使用。
在内核代码中,包含有关进程(或线程)信息的数据结构是task_struct,包含在include/linux/sched.h中。这是所有调度策略(即SCHED_FAIR、SCHED_FIFO/SCHED_RR、SCHED_DEADLINE等)使用的主要任务数据结构
Documentation/scheduler目录中包含有关 CFS 如何工作的良好文档。