具有实时优先级的正在运行的进程是否定的?


9

运行具有实时优先级(chrt -f 99)的进程是否有不利影响?

我的假设是,结合亲和力将确保我的进程的任何抢占是最小的,因此,任何抖动(特别是网络延迟)都将降到最小-这对总体延迟没有帮助,但此刻我会更与抖动有关。

(内核:2.6.16 / 3.0)


2
这对您似乎很有帮助:如何减少Java的抖动?
ire_and_curses 2012年

@ire_and_curses,当前进程在其自己的隔离核心(至少是主处理线程)上运行,但是中断未在同一核心上进行调度(无法执行此操作,因为有多个类似的进程依赖于同一网络接口),这更多的是最后的努力。APIC频率很有趣,我之前从未遇到过。
2012年

Answers:


4

运行实时进程最直接的缺点是,该进程很容易使系统上的所有其他进程都饿死。从您的角度来看,只要实时进程正在使用CPU,计算机将完全不响应键盘,鼠标以及可能的网络。如果出现问题并且流程进入无限循环,或者如果流程开始长时间运行的计算而不定期等待输入,则可能会发生这种情况。(因此,例如,不要以实时优先级运行SETI @ home。)

多核CPU上的单个单线程进程不太可能引起此问题,因为低优先级进程可以使用其他内核。但是,如果该进程创建任何子进程,它们将继承相同的实时优先级,因此如果您不小心,事情可能会失控。

sched_setscheduler(2)手册页有很好的建议:

由于在SCHED_FIFO或SCHED_RR下调度的进程中的无阻塞无限循环将永远阻塞优先级较低的所有进程,因此软件开发人员应始终在控制台上保持以比测试应用程序更高的静态优先级调度的Shell在控制台上可用。这样可以紧急终止未按预期阻塞或终止的经过测试的实时应用程序。另请参阅getrlimit(2)中对RLIMIT_RTTIME资源限制的描述。

那应该是控制台上的外壳程序,而不是Xterm下的外壳程序,除非您还希望同时给所有X实时优先级。


是的-这是我似乎遇到的主要问题。缺少阅读内核代码来确定需要具有更高优先级的所有进程的唯一方法,唯一的选择就是将除进程之外的所有其他进程都饿死,然后将需要任何形式的io的任何内容移至其他内核... hmmm。 ..
Nim 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.