第 40 章 在实时内核和解决方案中调度问题
实时内核中的调度有时可能会导致。通过使用提供的信息,您可以了解调度策略、调度程序节流和线程不足状态的问题,以及潜在的解决方案。
40.1. 实时内核的调度策略 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
实时调度策略共享一个主要特征:它们运行直到高优先级线程通过休眠或执行 I/O 中断线程或线程等待。
对于 SCHED_RR,操作系统会中断一个正在运行的线程,以便相同 SCHED_RR 优先级的另一个线程可以运行。在这两种情况下,POSIX 规格不会进行置备,该规范定义了允许较低优先级线程获得任何 CPU 时间的策略。实时线程的这种特性意味着,可轻松编写应用程序,这会对给定 CPU 的 100% 进行单调。但是,这会导致操作系统出现问题。例如,操作系统负责管理系统范围和每个 CPU 资源,必须定期检查描述这些资源的数据结构,并使用它们执行内务操作。但是,如果内核被 SCHED_FIFO 线程 monopolized,则无法执行其内务任务。最终,整个系统变得不稳定,并可能导致崩溃。
在 RHEL for Real Time 内核中,中断处理程序作为具有 SCHED_FIFO 优先级的线程运行。默认优先级为 50。高于中断处理器线程的 SCHED_FIFO 或 SCHED_RR 策略的 cpu-hog 线程可能会阻止中断处理程序运行。这会导致程序等待这些中断信号的数据,并失败。