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

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

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

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

有帮助吗?

解决方案

臭名昭着的 pchdtvr 程序捕获数字电视信号,使用 SCHED_FIFO 确保无论如何将电视数据包写入磁盘。它可以在旧计算机上播放Doom时一次捕获4个节目。

该程序臭名昭着,因为它是根据GPL发布的,作者试图撤销GPL追溯。这一举动引发了一场小小的风暴。无论如何,您可以在 http://frequal.com/pmn/pchdtvr.html <找到最新版本进行学习。 / A>

其他提示

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

SCHED_RR可以被时间量子(给予进程执行的延迟)抢占。

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

我不是调度方案的专家,但看看

man sched_setscheduler

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

  

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

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

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

因此,在正常的系统上它没有任何区别。 FIFO是最容易理解的,所以请使用我猜。

如果你有几个不同优先级的任务,只要它们都准备好运行(并且只有一个CPU核心),只会运行更高的任务

scroll top