目前,我想深入研究Linux日程安排。我有一个使用lubuntu和一个4.10.0-37通用内核的测试设置。我想知道使用CFS任务执行的最短时间可以多长时间没有自我屈服。 Here给出了如何调整调度程序的一个很好的概述。我认为sysctl参数kernel.sched_min_granularity_ns(setup = 1.500.000)是正确的选择。但我没有找到任何关于调度程序频率的参考。在CFS文档(CFS doc)中,调度和jiffies的独立性(从1 / HZ周期的系统定时器中断计算)。但在某些文档中,我无法再发现内核中的所有频率都依赖于此HZ值。我当前的HZ值是250(默认值),因此如果在jiffy定时器中断内调用调度程序,则只需4 ms就可以进行重新调度。这与1.5 ms sched_min_granularity_ns形成对比。调度程序如何比系统中断更快?
答案 0 :(得分:1)
我当前的HZ值为250(默认值),因此,如果仅在4毫秒的计时器中断内调用调度程序,则可能会发生重新调度。这与1.5 ms的sched_min_granularity_ns相反。调度程序如何比系统中断更快?
请参见commit 8f4d37ec073c, "sched: high-res preemption tick",该评论是在有关更改的线程中通过此评论发现的:https://lwn.net/Articles/549754/。
当hrtimer可用时(并且仅在)时,CPU调度程序将使用它们来更频繁地中断。请注意,这还使它可以根据需要频繁地中断 less ,这会更有效率。
hrtimers应该在大多数系统上都可用。
(如果您在提交中查看Kconfig.hz
,请不必担心SCHED_HRTICK依赖于X86。在最近的提交中似乎已删除了该要求)。