【问题标题】:Does sched_setscheduler() /sched_getscheduler() only affect scheduling policy of the specified process and its child processes?sched_setscheduler() /sched_getscheduler() 是否只影响指定进程及其子进程的调度策略?
【发布时间】:2019-09-03 11:22:38
【问题描述】:

我对@9​​87654321@ 在 Linux 中的工作方式感到困惑。

我的理解是 Linux 在内部使用CFS (SCHED_NORMAL) 进行内核进程调度。当用户空间启动程序(进程)时,将触发clone() 调用以在内核空间中创建相应的调度实体。

所以假设有用户进程 A 和进程 B。 进程 A 调用 sched_setscheduler(pid_A, SCHED_RR) 并产生子进程 A1、A2。 进程 B 调用 sched_setscheduler(pid_B, SCHED_NORMAL) 并产生子进程 B1、B2。

在这种情况下,Linux 将如何调度进程 A 和 B,因为它们使用不同的调度策略? Linux 是否仍然使用其内部默认调度策略在 A 和 B 之间进行选择,但让 A、A2、A1 使用 SCHED_RR 相互竞争,而 B、B1、B2 使用 SCHED_NORMAL

【问题讨论】:

    标签: linux linux-kernel scheduling


    【解决方案1】:

    Linux 内核有一系列“调度类”,它们是决定内核空闲时应该运行哪个线程的模块。

    由于SCHED_RR 是一个实时调度类,它会在SCHED_NORMAL 之前决定将什么调度到空闲内核上。这意味着在某种意义上,A 和它的孩子比 B 和它的孩子有严格的优先级。

    不过,我相信 Linux 会为非实时调度类预留 5% 的 CPU,因此 B 及其子代不应缺乏 CPU。

    【讨论】:

    • 感谢您的快速回复。如果进程 A 和 B 都将它们的策略设置为相同的类别但不同的类(例如,A 设置 SCHED_FIFO,B 设置 SCHED_RR),linux 内核如何确定哪个具有高优先级?
    • @keye,我认为它会查看priority value,但是如果线程处于相同的优先级值,您可能必须查看源以确定哪些线程首先运行。我在快速搜索中没有找到任何参考资料。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2018-04-23
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多