Linux调度程序抢占低优先级线程的时间过长

Linux调度程序抢占低优先级线程的时间过长,linux,arm,scheduler,thread-priority,Linux,Arm,Scheduler,Thread Priority,我正在开发一个多进程应用程序,它运行在运行Linux3.0.35的iMX6四核CPU上。 我正在运行的一个进程/线程需要比其他进程/线程更高的优先级 因此,我对该线程使用SCHED_FIFO,对其他线程使用SCHED_OTHER 当机器处于重载状态时,我注意到以下场景(使用DS5 Streamline profiling tool): 低优先级线程被CPU上的高优先级线程抢占 十, 当高优先级线程位于CPU x中时,其他低优先级线程在其他CPU上获得CPU时间。但不是原始线程-它在很长一段时间

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

因此,我对该线程使用SCHED_FIFO,对其他线程使用SCHED_OTHER

当机器处于重载状态时,我注意到以下场景(使用DS5 Streamline profiling tool):

  • 低优先级线程被CPU上的高优先级线程抢占 十,
  • 当高优先级线程位于CPU x中时,其他低优先级线程在其他CPU上获得CPU时间。但不是原始线程-它在很长一段时间(甚至几秒钟)内没有CPU时间
  • 当使用CPU x完成高优先级线程时,即使机器上的负载很重(10多个线程需要CPU),CPU仍会保持空闲很长时间(最多2秒)(在分析工具中将CPU标记为空闲)
我在想办法理解这意味着什么 -linux调度程序不应该在抢占线程被踢出CPU x后给它CPU时间吗? -为什么即使有许多线程需要CPU时间,CPU也会闲置这么长时间

我在看什么

如果有帮助的话,我可以完全访问内核代码和其他一些分析工具

谢谢,
Ofer

要确认这是一个一般性问题,而不是特定于此环境的问题,也许您可以使用不同的CPU配置和不同的Linux版本(可能是2.x系列中的某个版本)运行一些测试。祝您好运。在CPU之间迁移进程非常耗时。移动它们不是瞬间的。这些进程具有CPU相关性。我恐怕没有足够的资源在不同的处理器上运行测试。我将看看我能为不同的linux内核版本做些什么,尽管我怀疑这对我来说是可行的…不自然-使用探查器,我注意到一些线程交换了几次内核,而这一个特定的线程没有CPU时间(最多5秒!)。所以我觉得这不是一种正常的行为……你有没有注意到一个特定的线程没有等待互斥锁,等等?还有,这条线有什么不同?这是主线吗?它是否创建了SCHED_FIFO线程等。