Linux中的任务调度程序行为
目前,我正在对Linux任务调度程序行为进行一些研究。 我有一些问题需要澄清 -
在多核架构的情况下,每个核心都运行一个调度程序线程(内核线程),或者一个中央内核调度程序运行在专用核心上以处理所有调度任务。
典型的调度器打勾(中断)发生的频率是多少?以及特定优先级的任务(线程)的典型时间片是什么?
在计划程序打勾后,即使当前任务未完成其时间片,是否必须从运行队列中执行另一个任务?
问题2的部分答案(感谢Dervin Thunk):
CFS(进程的默认调度程序)没有固定的时间片。此时间片始终位于sysctl_sched_min_granularity和sysctl_sched_latency(epoch length)之间。 这意味着时间片不能小于sysctl_sched_min_granularity。 这些参数的默认值分别为0.75 ms和6 ms,并在kernel / sched / fair.c中定义。
沿线CFS调度程序在计划执行之前计算给定任务的时间片。 它的长度是可变的(动态的),并且直接取决于其静态优先级和正在运行的队列的当前负载,即队列中任务的数量和优先级
如果我对你的问题作出假设,我认为你的意思是在2007年9月左右实施的CFS(完全公平的调度程序)。 通过浏览代码,您可能更容易找到问题的答案。 (http://lxr.free-electrons.com/source/kernel/sched/fair.c),这是公平的调度程序,和(http://lxr.free-electrons.com/source/kernel/sched/sched .h)是这些定义中的一部分,你在这里询问的一些定义。 另外,您可能会发现(Understading Linux Kernel Scheduler)有趣。
问题是Linux有很多调度程序:
仅举几例。
链接地址: http://www.djcxy.com/p/84819.html