【问题标题】:Scheduler data structures调度程序数据结构
【发布时间】:2015-11-17 18:28:34
【问题描述】:

是否有人知道 CFS 调度算法的数据(例如挂起或就绪队列的内容、任务持续时间……)在 Linux 中存储在哪里? (有没有针对这个目标的特殊文件或数据结构?)

谢谢。

【问题讨论】:

    标签: linux-kernel scheduling cfs


    【解决方案1】:

    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 目录。

    【讨论】:

    • 谢谢克劳迪奥。它们非常有用但我正在寻找的是一个特定的文件或目录或数据结构,其中包含 CFS 的运行时数据,例如队列。你能给我一个线索吗?
    • 检查我的新答案是否回答了您的问题。
    • 非常感谢克劳迪奥。非常好。但有点详细,我想问你,有没有可能通过一些技巧,在运行时查看 cfs_rq 或 task_struct 的内容? (我认为这些在运行时可能会在主内存中疼痛,但我问是否会有技巧)。
    • 如果您的内核已使用调试符号编译,那么您可以在运行时使用调试器检查数据结构,例如 GDB(只读)或 KGDB。看看elinux.org/Debugging_The_Linux_Kernel_Using_Gdb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多