SCHED_FIFO优先级较高的线程是否被SCHED_FIFO优先级较低的线程抢占?

时间:2014-10-01 13:14:19

标签: linux scheduling scheduler rt

我正在Linux RT多核机器上测试我的多线程应用程序。

然而,在测试期间,我们观察到根据SCHED_FIFO策略,Linux RT中的实时线程切换(使用SCHED_FIFO调度策略创建)不会发生。 我们可以在多个地方看到优先级较高的线程执行被优先级较低的线程抢占。

基于我在互联网上做的一些研究,我们发现以下内核参数需要改变

/ proc / sys / kernel / sched_rt_period_us包含1000000 / proc / sys / kernel / sched_rt_runtime_us包含950000

/ proc / sys / kernel / sched_rt_period_us包含1000000 / proc / sys / kernel / sched_rt_runtime_us包含1000000 要么 / proc / sys / kernel / sched_rt_period_us包含-1 / proc / sys / kernel / sched_rt_runtime_us包含-1

我们尝试过这两种方法,但有时候我们仍然面临着这个问题。即使任何系统调用没有暂停更高优先级的线程,我们也面临着这个问题。

如果您了解Linux RT调度中的此类问题和/或有任何解决方案可以根据优先级确定Linux RT调度,那将是非常好的。

优先级较高的线程中没有printfs或任何系统调用,但优先级较高的线程仍会被优先级较低的线程抢占。

此外,我确保使用taskset命令在进程中的所有线程都在单个核心上运行。

1 个答案:

答案 0 :(得分:0)

可能有两个原因:

  • CPU限制:调度程序旨在为非RT任务保留一些CPU时间;你已经通过对 / proc / sys / kernel / 条目
  • 采取行动来禁用它
  • 阻止:您的高优先级任务也会阻止
    • 关于某些同步机制(例如,互斥,信号量)或
    • 对某些阻止调用(例如,malloc,printf,read,write等)