以实时优先级运行的进程有什么缺点吗(chrt -f 99
)?
我的假设是,这与亲和力相结合将确保我的进程的任何抢先都是最小的,因此任何抖动(特别是网络延迟)都将被最小化 - 这对整体延迟没有帮助,但此刻我更与抖动有关。
(内核:2.6.16/3.0)
答案1
运行实时进程最直接的缺点是该进程很容易使系统上的所有其他进程都处于饥饿状态。从您的角度来看,结果将是,只要实时进程正在使用 CPU,计算机就对键盘、鼠标甚至网络完全没有响应。如果出现问题并且进程进入无限循环,甚至如果进程开始长时间运行的计算而没有定期等待输入,则可能会发生这种情况。 (因此,例如,不要以实时优先级运行 SETI@home。)
多核 CPU 上的单独单线程进程不太可能导致此问题,因为低优先级进程可以使用其他内核。但是,如果该进程创建任何子进程,它们将继承相同的实时优先级,因此如果您不小心,事情可能会失控。
这sched_setscheduler(2)
手册页有很好的建议:
由于在 SCHED_FIFO 或 SCHED_RR 下调度的进程中的非阻塞无限循环将永远阻塞所有优先级较低的进程,因此软件开发人员应始终在控制台上保持在比测试的应用程序更高的静态优先级下调度的 shell 可用。这将允许紧急终止经过测试的实时应用程序,这些应用程序不会按预期阻止或终止。另请参阅 getrlimit(2) 中 RLIMIT_RTTIME 资源限制的描述。
那应该是一个壳在控制台上-- 不在 Xterm 下,除非您也想给予所有 X 实时优先级。