【问题标题】:On Linux SCHED_FIFO and SCHED_RR在 Linux SCHED_FIFO 和 SCHED_RR
【发布时间】:2011-02-23 08:58:59
【问题描述】:

我正在编写一个非常小的守护程序,即使系统处于严重压力之下,它也必须保持响应。我正在研究 SCHED_FIFO 和 SCHED_RR 在调度方面的差异,并试图确定一个合理的优先级。

哪个调度程序适合小型但关键的监控守护进程,什么优先级是合理安全的?在试图理解两者之间的差异时,我仍然有点模糊。

我的程序分配在 3k 以下(并使用 mlockall()),它向 xenbus 写入大约 600 个字节然后休眠,但我无法确定实际写入数据需要多少时间(以毫秒为单位)。 . 因为写入的内容取决于配置文件。

提前感谢您的任何建议/解释。

【问题讨论】:

    标签: c linux xen scheduled-tasks


    【解决方案1】:

    臭名昭著的pchdtvr 程序捕获数字电视信号,它使用SCHED_FIFO 确保无论如何将电视数据包写入磁盘。在旧电脑上玩《毁灭战士》时,它可以同时捕捉 4 个节目。

    该程序臭名昭著,因为它是在 GPL 和作者 tried to revoke the GPL retroactively 下发布的。这一行为引发了一场轻微的风暴。不管怎样,你可以在http://frequal.com/pmn/pchdtvr.html找到一个最新版本来学习。

    【讨论】:

    • 看到开发人员选择了他们不理解的许可证,这真的很有趣.. 真的很伤心,但也很有趣。我将使用 FIFO,但是当程序可以并且应该让步并返回正常调度时“退出”,或者当事情变得艰难时返回 RT。我会看看情况如何。
    • @tinkertim:slashdot 上的狂热令人难以置信。 yro.slashdot.org/article.pl?no_d2=1&sid=08/01/26/0341210
    【解决方案2】:

    SCHED_FIFO 不能被抢占(上下文切换到另一个进程),除非另一个更高优先级的进程出现在执行队列中。

    SCHED_RR 可以被时间片抢占(给进程执行延迟)。

    它们都是基于 linux 的调度程序的“实时”优先级。

    【讨论】:

      【解决方案3】:

      我不是调度方案方面的专家,但请看一下

      man sched_setscheduler
      

      它详细说明了不同调度算法之间的区别,并提供了与其他调度功能的链接。 SCHED_FIFO 实际上听起来很危险,但被描述为最激进的调度:

      SCHED_FIFO 进程一直运行,直到它被 I/O 请求阻塞、被更高优先级的进程抢占或调用 sched_yield(2)。

      注意不要锁定您的系统。我个人会做一些实证测试,看看哪些优先级最适合,以及它们的表现如何。

      【讨论】:

      • 感谢您的回复,我查看了搜索中出现的手册页和各种文档。我现在使用 SCHED_FIFO 没有问题,但想知道 RR。我不认为我可以使用 RR,因为我无法知道我是否真的可以在一个切片中完成原子写入。
      • 一旦 sysinfo() 的内容变得令人满意,我(可以)也调用 sched_yield() ......即系统不再处于压力之下。也许我会坚持使用 FIFO,但仅在系统受到(或即将)受到压力时编写逻辑去 RT,然后在系统平静时返回。
      • 嗯,是的,我认为 fifo 对于这项任务来说听起来很合理。
      【解决方案4】:

      如果您的所有其他任务都使用标准调度程序,则没有区别; SCHED_FIFO 和 SCHED_RR 只会影响这些任务的相互调度。

      所以在正常系统上它没有区别。 FIFO 最容易理解,所以我猜就用它吧。

      如果您有多个不同优先级的任务,如果它们都准备好运行(并且只有一个 CPU 内核),则只会运行较高的一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 2022-11-21
        相关资源
        最近更新 更多