0

我正在开发一个多进程应用程序,它在运行 linux 3.0.35 的 iMX6 四核 CPU 上运行。我正在运行的进程/线程之一需要比其他进程/线程更高的优先级。

所以我对那个线程使用 SCHED_FIFO,对其他线程使用 SCHED_OTHER。

当机器负载很重时,我注意到以下场景(使用 DS5 Streamline 分析工具):

  • 低优先级线程被 CPU x 上的高优先级线程抢占。
  • 当高优先级线程在 CPU x 中时,其他低优先级线程在其他 CPU 上获得 CPU 时间。但不是原始线程 - 它在很长一段时间内(甚至几秒钟)都没有获得 CPU 时间
  • 当使用 CPU x 完成高优先级线程时,即使机器负载很重(10+ 线程需要 CPU),CPU 也会长时间保持空闲(最多 2 秒)(CPU 被标记为空闲在分析工具中)

我正在寻找方法来理解这意味着什么 - linux调度程序是否应该在被抢占的线程被踢出 CPU x 后给予 CPU 时间?- 为什么有很多线程需要CPU时间,CPU却闲置了这么久?

我在看什么?

如果有帮助,我可以完全访问内核代码和更多分析工具。

谢谢, 奥弗

4

0 回答 0