linux - Linux 中的任务调度程序行为

标签 linux multithreading kernel task scheduling

<分区>

目前,我正在研究 Linux 任务调度器的行为。我有一些问题需要澄清-

  1. 在多核架构的情况下,调度程序线程(内核线程)在每个内核上运行,或者中央内核调度程序在专用内核上运行以处理所有调度任务。

  2. 典型的调度程序节拍(中断)发生的频率如何?特定优先级的任务(线程)的典型时间片是多少?

  3. 在调度程序 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 调度程序在给定任务计划执行之前计算时间片。它的长度是可变的(动态的),直接取决于它的静态优先级和运行队列的当前负载,即队列中任务的数量和优先级

最佳答案

如果我对您的问题做出假设,我认为您指的是 CFS(完全公平调度程序),它在 2007 年 9 月左右实现。通过浏览代码,您可能更容易找到问题的答案。 ( http://lxr.free-electrons.com/source/kernel/sched/fair.c ),这是公平的调度程序, ( http://lxr.free-electrons.com/source/kernel/sched/sched.h ) 是定义,其中一些你在这里询问。此外,您可能会发现 ( Understading the Linux Kernel Scheduler) 很有趣。

关于linux - Linux 中的任务调度程序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422824/

相关文章:

linux - Apache服务器在ubuntu上无法上线

java - 内核支持的线程是否运行在内核态?

linux - Linux 上的 USB HID 设备轮询间隔

C - Linux - 内核模块 - TCP header

linux - linux内核页表更新

linux - 更新 .sql 文件时 Docker 不更新卷

c++ - gcc (Linux/MinGW) 是否存在编译器标志以在运行时引发被零除的错误?

java - 在 Timer.Schedule() 中抛出空指针异常;

.NET 检测线程从外部代码退出?

java - 在 asynctask 线程 Android 中运行 View 监听器回调代码