在Linux SCHED_FIFO和SCHED_RR上
-
03-07-2019 - |
题
我正在写一个非常小的守护进程,即使系统处于严重压力下也必须保持响应。我正在研究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核心),只会运行更高的任务