<分区>
目前,我正在研究 Linux 任务调度器的行为。我有一些问题需要澄清-
在多核架构的情况下,调度程序线程(内核线程)在每个内核上运行,或者中央内核调度程序在专用内核上运行以处理所有调度任务。
典型的调度程序节拍(中断)发生的频率如何?特定优先级的任务(线程)的典型时间片是多少?
在调度程序 tick 之后,是否必须从运行队列中执行另一个任务,即使当前任务没有完成它的时间片?
问题 2 的部分答案(感谢 Dervin Thunk):
CFS(进程的默认调度器)没有固定的时间片。这个时间片总是介于 sysctl_sched_min_granularity 和 sysctl_sched_latency(epoch 长度)之间。这意味着时间片不能小于 sysctl_sched_min_granularity。这些参数的默认值分别为 0.75 ms 和 6 ms,并在 kernel/sched/fair.c 中定义。
沿线 CFS 调度程序在给定任务计划执行之前计算时间片。它的长度是可变的(动态的),直接取决于它的静态优先级和运行队列的当前负载,即队列中任务的数量和优先级