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://en.wikipedia.org/wiki/Brain_Fuck_Scheduler
  • http://en.wikipedia.org/wiki/Completely_Fair_Scheduler
  • http://en.wikipedia.org/wiki/O%281%29_scheduler
  • 仅举几例。

    链接地址: http://www.djcxy.com/p/84819.html

    上一篇: Task scheduler behaviour in Linux

    下一篇: how to move packet from NF