在Linux SCHED_FIFO和SCHED_RR上

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

哪一个调度程序适合于一个小而严格的监视守护进程,哪个优先级是合理安全的? 试图理解两者之间的差异时,我仍然有点模糊。

我的程序是分配在3K以下(并使用mlockall()),它写入大约600字节xenbus然后睡觉,但它不可能告诉多less时间(以毫秒为单位)将实际写入数据..因为什么写入取决于一个configuration文件。

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

Solutions Collecting From Web of "在Linux SCHED_FIFO和SCHED_RR上"

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

该程序是臭名昭着的,因为它是在GPL下发布的,作者试图撤回GPL 。 这一举动引发了一场小规模的暴风雪。 无论如何,你可以在http://frequal.com/pmn/pchdtvr.html找到最近的版本去学习。

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

SCHED_RR可以被一个时间段(被执行的进程的延迟)抢占。

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

我不是调度计划的专家,但看看

 man sched_setscheduler 

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

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

当心不要锁定你的系统。 我会亲自做一些经验性的测试,看看哪个优先考虑的最好,以及他们的表现如何。

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

所以在一个正常的系统上,它没有任何区别。 先进先出是最容易理解,所以使用,我猜。

如果你有几个不同优先级的任务,只有更高的任务才能运行(而且只有一个CPU内核)