目前,我想深入研究 Linux 调度。我有一个带有 lubuntu 和 4.10.0-37-generic 内核的测试设置。我想知道 CFS 任务的最短执行时间可以多长时间而不会自行产生。这里很好地概述了如何调整调度程序。我认为 sysctl 参数 kernel.sched_min_granularity_ns (setup = 1.500.000) 是正确的查看位置。但我没有找到有关调度程序频率的任何参考。在 CFS 文档(CFS 文档) 调度的独立性和 jiffies (从系统定时器中断以 1/HZ 周期计算)。但是在一些文档中我再也找不到它了,内核中的所有频率都依赖于这个 HZ 值。我当前的 HZ 值为 250(默认值),因此如果在 jiffy 定时器中断内调用调度程序,则仅每 4 毫秒就会发生重新调度。这与 1.5 毫秒 sched_min_granularity_ns 形成对比。调度程序如何比系统中断更快?
问问题
452 次
1 回答
1
我当前的 HZ 值为 250(默认值),因此如果在 jiffy 定时器中断内调用调度程序,则仅每 4 毫秒就会发生重新调度。这与 1.5 毫秒 sched_min_granularity_ns 形成对比。调度程序如何比系统中断更快?
请参阅提交 8f4d37ec073c,“sched: high-res preemption tick”,通过此评论在有关更改的线程中找到:https ://lwn.net/Articles/549754/ 。
当 hrtimer 可用时(并且仅在何时),CPU 调度程序将使用它们来更频繁地中断。请注意,这也允许它根据需要减少中断频率,这样会更有效率。
hrtimers 应该在大多数系统上都可用。
(如果您查看Kconfig.hz
提交,请不要担心 SCHED_HRTICK 依赖于 X86。该要求似乎已在最近的一些提交中被删除)。
于 2018-09-02T13:22:02.020 回答