11

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

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

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

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

4

4 回答 4

10

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

该程序臭名昭著,因为它是在 GPL 下发布的,而作者试图追溯撤销 GPL。这一行为引发了一场轻微的风暴。无论如何,你可以在http://frequal.com/pmn/pchdtvr.html找到一个最新的版本来学习。

于 2009-01-01T19:33:53.610 回答
7

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

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

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

于 2011-02-23T00:58:59.640 回答
2

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

man sched_setscheduler

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

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

注意不要锁定您的系统。我个人会做一些实证测试,看看什么优先级最适合以及它们的行为方式。

于 2009-01-01T18:38:02.413 回答
2

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

所以在一个正常的系统上没有什么区别。FIFO 是最容易理解的,所以我猜就使用它。

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

于 2009-01-04T14:21:42.433 回答