linux - linux调度器在哪里触发?

标签 linux scheduler granularity cfs

目前,我想深入研究 Linux 调度。我有一个带有 lubuntu 和 4.10.0-37-generic 内核的测试设置。我想知道在没有 self 屈服的情况下,CFS 任务的最短执行时间有多长。 Here很好地概述了如何调整调度程序。我认为 sysctl 参数 kernel.sched_min_granularity_ns (setup = 1.500.000) 是值得关注的地方。但我没有找到任何关于调度程序频率的引用。在 CFS 文档 (CFS doc) 中,调度的独立性和 jiffies(从具有 1/HZ 周期的系统定时器中断开始计算)。但是在一些我找不到的文档中,内核中的所有频率都依赖于这个 HZ 值。我当前的 HZ 值为 250(默认值),因此如果在 jiffy 定时器中断内调用调度程序,则仅每 4 毫秒就会发生重新调度。这与 1.5 ms sched_min_granularity_ns 形成对比。调度程序如何比系统中断更快?

最佳答案

My current HZ value is 250 (default), so if the scheduler is called within the jiffy timer interrupt only ever 4 ms a reschedule can happen. This is in contrast to the 1.5 ms sched_min_granularity_ns. How the scheduler could be faster than the system interrupt?

参见 commit 8f4d37ec073c, "sched: high-res preemption tick" ,通过有关更改的线程中的此评论找到:https://lwn.net/Articles/549754/ .

当 hrtimer 可用时(且仅当可用时),CPU 调度程序将使用它们来更频繁地中断。请注意,如果需要,这还允许它较少中断,这样会更有效率。

hrtimers 应该在大多数系统上可用。

(如果您查看提交中的 Kconfig.hz,请不要担心 SCHED_HRTICK 依赖于 X86。该要求似乎已在最近的提交中删除)。

关于linux - linux调度器在哪里触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48489099/

相关文章:

Python 内联 linux 命令

linux - 监听网络端口并将数据保存到文本文件

linux - 寻找具有操作系统调度程序支持的 Linux 线程池 api

oop - OOP中粒度的含义

c++ - 对齐和字长

linux - ssh 配置名称别名不适用于 scp

linux - dlopening 一个有依赖关系的库

scala - 如何使用 scala 在 Spark 中使用数据集?

linux - 中断处理程序和进程调度程序

go - Golang 中给定粒度范围内的随机数