首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核】CFS 调度器 ④ ( 调度子系统组件模块 | 主调度器、周期调度器 | 调度器类 )

文章目录 一、调度子系统组件模块 二、主调度器、周期调度器 三、调度器类 一、调度子系统组件模块 ---- 调度器 需要对 被调度的进程 进行 排序 和 调度管理 , 进程管理过程需要 调度器 的 组件模块..., 以及相关 算法 数据结构 来完成 , 如 : 执行队列 ; 二、主调度器、周期调度器 ---- CPU 通过 " 上下文切换 " 选择 " 主调度器 " 或 " 周期调度器 " , " 上下文切换..., 自动调用 scheduler_tick() 函数 , 完成调度 , 这是根据 进程 运行时间 , 自动触发进程调度 ; 三、调度器类 ---- 主调度器 或 周期调度器 根据 不同的 " 选择进程..." 选择不同的 调度器类 , 可选的调度类参考 【Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类...| 公平调度类 | 空闲调度类 ) 博客 , 在 Linux 内核中 , sched_class 调度器 分为以下 5 种类型 : stop_sched_class : 停机调度类 ; dl_sched_class

3.2K10

Linux核心调度器之周期调度器scheduler_tick--Linux进程的管理与调度(十八)

我们前面提到linux有两种方法激活调度器:核心调度器和 周期调度器 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因而内核提供了两个调度器主调度器...对于普通进程则采用CFS完全公平调度器进行调度 1.3 linux调度器的演变 table th:nth-of-type(1){ width: 20%; } 字段 版本 O(n)的始调度算法 linux...-0.11~2.4 O(1)调度linux-2.5 CFS调度linux-2.6~至今 1.4 Linux调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃...CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因此当前linux调度程序由两个调度器组成:主调度器,周期调度器(两者又统称为通用调度器(generic scheduler.... 3 周期调度器的激活 3.1 定时器周期性的激活调度器 定时器是Linux提供的一种定时服务的机制.

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux CFS调度器之task_tick_fair处理周期调度器--Linux进程的管理与调度(二十九)

    CFS如何处理周期调度周期调度器的工作由scheduler_tick函数完成(定义在kernel/sched/core.c, line 2910), 在scheduler_tick中周期调度器通过调用...curr进程所属调度器类sched_class的task_tick函数完成周期调度的工作 周期调度的工作形式上sched_class调度器类的task_tick函数完成, CFS则对应task_tick_fair...函数, 但实际上工作交给entity_tick完成. 2 CFS的周期调度 2.1 task_tick_fair与周期调度 CFS完全公平调度器类通过task_tick_fair函数完成周期调度的工作...周期调度器并不显式进行调度, 而是采用了延迟调度的策略, 如果发现需要抢占, 周期调度器就设置进程的重调度标识TIF_NEED_RESCHED, 然后由主调度器完成调度工作..../sched/core.c, line 2910), 在scheduler_tick中周期调度器通过调用curr进程所属调度器类sched_class的task_tick函数完成周期调度的工作 周期调度的工作形式上

    2.1K30

    Go调度系列--goroutine和调度器生命周期(三)

    前言 调度器schedule和goroutine的生命周期其实在整个go程序中有着极其重要的地位,几乎贯穿go程序的一生,在Go调度系列(二)中,我们把Go调度器的运转原理理了一遍,知道调度器是如何进行调度...go func()经历了哪些流程 go func() 经历了哪些流程,其实我们可以理解为goroutine的生命周期,表示goroutine从创建 --> 入队列 --> 被调度 这些流程。...其实这里就是将goroutine创建和跟p绑定,然后存放位置确定,然后等待调度调度执行。调度器schedule() 可以在《调度实现原理》这篇中找到实现逻辑。...调度器生命周期 再来看go调度器的生命周期,刚好看到有对于调度器生命周期的流程图。...调度器的生命周期几乎占满了一个 Go 程序的一生,runtime.main 的 goroutine 执行之前都是为调度器做准备工作,runtime.main 的 goroutine 运行,才是调度器的真正开始

    1.1K30

    Linux内核调度分析(进程调度

    Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...公平调度(CFS) 出发点:进程调度的效果应该如同系统具备一个理想的多任务处理器——我们可以给任何进程调度无限小的时间周期,所以在任何可测量范围内,可以给n个进程桐乡多的运行时间。...接下来我们考虑调度周期,理论上,调度周期越小,就越接近“完美调度”,但实际上这必然会带来严重的上下文切换消耗。...时间记账 所有的调度器都必须对进程的运行时间记账,换句话说就是要知道当前调度周期内,进程还剩下多少个时间片可用(这将会是抢占的一个重要标准) 1.

    14.9K113

    Linux进程调度_linux进程的查看和调度

    Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...[ 分配给进程的运行时间 = 调度周期 *(进程权重 / 所有进程权重之和) ] CFS 调度器实体结构作为一个名为 se 的 sched_entity 结构,嵌入到进程描述符 struct task_struct...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...在以下时刻: 周期性的时钟中断 时钟中断处理函数会调用scheduler_tick(),这是调度器核心层(scheduler core)的函数,它通过调度类(scheduling class)的task_tick

    20.6K10

    linux进程调度

    前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。...2.非实时进程的调度 Linux对普通的进程,根据动态优先级进行调度。而动态优先级是由静态优先级(static_prio)调整而来。Linux下,静态优先级是用户不可见的,隐藏在内核中。...系统调度时,还会考虑其他因素,因而会计算出一个叫进程动态优先级的东西,根据此来实施调度。因为,不仅要考虑静态优先级,也要考虑进程的属性。...Linux2.6 在这方面有了较大的提高。Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去的睡眠时间越多,则越有可能属于交互式进程。...则系统调度时,会给该进程更多的奖励(bonus),以便该进程有更多的机会能够执行。奖励(bonus)从0到10不等。

    3.2K140

    linux进程调度

    调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...fair_sched_class:普通进程的调度策略 CFS调度算法 CFS(completed fair Schedule)完全公平调度,适用于普通进程调度。...vruntime = 实际运行时间 * NICE_0_LOAD / 权重 使用调度算法首先得有包含vruntime的调度实体,task_struct中有如下调度实体的成员变量: struct sched_entity...se; //完全调度实体 struct sched_rt_entity rt; // 实时调度实体 struct sched_dl_entity dl; // deadline调度实体 CFS算法中将...当cpu需要一个任务执行时,其会先按照优先级选择不同的调度类,不同的调度类操作不同的队列,例如rt_sched_class先被调用,其会在rt_rq中找下一个任务,只有找不到时才轮到fair_sched_class

    8.1K20

    Linux线程调度

    Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元...Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。...在Linux中,调度器是基于线程的调度策略(scheduling policy)和静态调度优先级(static scheduling priority)来决定那个线程来运行。...下面介绍几种常见的调度策略: SCHED_OTHER:该策略是是默认的Linux分时调度(time-sharing scheduling)策略,它是Linux线程默认的调度策略。...那么在Linux中,在什么情况下要执行这个调度程序呢?我们把这种情况叫作调度时机。

    4.1K20

    Linux 进程调度之schdule主调度

    至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行 一、调度单位简介 1.1 task_struct 结构体简介 对于Linux内核来说,调度的基本单位是任务,...用 struct task_struct 表示,定义在include/linux/sched.h文件中,这个结构体包含一个任务的所有信息,结构体成员很多,在这里我只列出与本章内容有关的成员: struct...Linux采用的是每个CPU都有自己的运行队列,这样做的好处: (1)每个CPU在自己的运行队列上选择任务降低了竞争 (2)某个任务位于一个CPU的运行队列上,经过多次调度后,内核趋于选择相同的CPU...在这里我只讨论普通任务的调度,因为linux大部分情况下都是在运行普通任务,普通任务选择的调度器是CFS完全调度。 在调度时,调度器去 CFS 运行队列找是否有任务需要运行。...具体请参考:Linux 进程调度通知机制 struct preempt_ops { void (*sched_in)(struct preempt_notifier *notifier, int cpu

    1.8K20

    调度器简介,以及Linux调度策略

    当计算机中有大量进程在运行时,这个调度器的性能将会被大大降低。也就是说,O(n)调度器没有很好的可拓展性。O(n)调度器是Linux 2.6之前使用的进程调度器。...表1 进程 Linux操作系统中的进程队列(run queue),如表2所示。 ? 表2 进程队列 那么在一个执行周期,被选中的进程依次是先A,然后B和C,随后是D,最后是E。...注意,普通进程的执行策略并没有保证优先级为100的进程会先被执行完进入结束状态,再执行优先级为101的进程,而是在每个对调活跃和过期队列的周期中都有机会被执行,这种设计是为了避免进程饥饿(starvation...完全公平调度器 从2007年发布的Linux 2.6.23版本起,完全公平调度器(CFS,Completely Fair Scheduler)取代了O(1)调度器。...以上就是调度器的基本原理,以及Linux用过的几种调度策略。调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度器在多任务系统中起着顶梁柱的作用。

    2.1K21

    Linux进程调度之 - O(1)调度算法

    Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。...Linux2.4版本使用的调度算法的时间复杂度为O(n),其主要原理是通过轮询所有可运行任务列表,然后挑选一个最合适的任务运行,所以其时间复杂度与可运行任务队列的长度成正比。...而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。...虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。...由于在 Linux 内核中,任务和进程是相同的概念,所以在本文混用了任务和进程这两个名词。

    4.8K81

    Linux进程调度(三)

    一、抢占式调度和主动调度: 前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule 函数可以是在系统调用返回、中断返回等时机被调用,也可以进程在驱动程序中主动调用 我们把在系统调用返回等时机调用...schedule 函数的这种非进程自愿情况称为抢占式调度。...把进程在驱动程序中主动调用 schedule 函数来发生进程切换的这种情况称为主动调度 本文将讨论主动调度,抢占式调度将在下一篇文章中讲解: 二、主动调度的发生的情况: 主动调度一般在应用程序读取某个设备时...,设备此时数据还没有准备好,进程就进入睡眠,发生进程调度切换到其它进程运行 例如应用想从网卡读取数据,但是此时网卡没有数据,那么驱动程序就会让进程睡眠,然后发生进程调度。...四、总结: 进程发生切换总是调用 schedule 函数进行的,进程调度分抢占式调度和主动调度,主动调度表示的是进程主动调用 schedule 函数发生进程切换 schedule 函数主要做了两件事,

    2.4K10

    Linux进程调度分析

    而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。...在linux下,用户程序可以通过sched_setscheduler系统调用来设置进程的调度策略以及相关调度参数;sched_setparam系统调用则只用于设置调度参数。...普通进程具体的调度算法非常复杂,并且随linux内核版本的演变也在不断更替(不仅仅是简单的调整),所以本文就不继续深入了。...有兴趣的朋友可以参考下面的链接: 《Linux 调度器发展简述》 《鼠眼看Linux调度器》 《鼠眼再看Linux调度器[1]》 《鼠眼再看Linux调度器[2]》 调度程序的效率 “优先级”明确了哪个进程应该被调度执行...每次调度调度程序需要从树中找出优先级最高的进程。复杂度为O(logN)。 那么,为什么从linux 2.6早期到近期linux 2.6版本,调度程序选择进程时的复杂度反而增加了呢?

    2.4K31

    linux线程调度策略

    目录 linux线程调度策略 linux线程调度策略 这是一篇非常好的关于线程调度的资料,翻译自shed 从Linux 2.6.23开始,默认的调度器为CFS,即"完全公平调度器"(Completely...Scheduling policies 内核模块使用调度器来决定下一个CPU时钟周期执行的线程。...定义了一个CPU使用周期周期越短,可以越快开始下一个周期 /proc/sys/kernel/sched_rt_runtime_us 该文件中的值指定了实时和deadline调度的进程可以使用的"period...当使能autogrouping时,一个autogroup中的所有成员都属于同一个内核调度器"任务组"。CFS调度器使用了在任务组间均衡分配CPU时钟周期的算法。...在SMP系统上会更加复杂,但整体的表现是一样的:调度器会在任务组之间分配CPU时钟周期,包含大量CPU密集型进程的autogroup并不会以牺牲系统上的其他任务为代价占用CPU周期

    4.7K30

    图解|Linux调度

    为了解决这个问题,Linux 实现了 组调度 这个功能。那么什么是 组调度 呢? 组调度 的实质是:调度时候不再以进程作为调度实体,而是以 进程组 作为调度实体。...在分析之前,为了对 完全公平调度算法 有个大体了解,建议先看看这篇文章:《Linux完全公平调度算法 》。 1. 进程组 在 Linux 内核中,使用 task_group 结构表示一个进程组。...完全公平调度算法 在调度时是通过 cfs_rq 结构完成的,cfs_rq 结构使用一棵红黑树将需要调度的进程或者进程组组织起来,然后选择最左端的节点作为要运行的进程或进程组,详情可以参考文章:《Linux...Linux 调度的时候,就是从上而下(从根进程组开始)地筛选出最优的进程进行运行。 2....调度过程 当 Linux 需要进行进程调度时,会调用 schedule() 函数来完成,其实现如下(经精简后): void __sched schedule(void) { struct task_struct

    3.4K10

    Linux进程调度-组调度及带宽控制

    概述 组调度(task_group)是使用Linux cgroup(control group)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。...在给定周期内,当用户组消耗CPU的时间超过了限额值,该用户组内的任务将会受到限制。 由于组调度和带宽控制紧密联系,因此本文将探讨这两个主题,本文的讨论都基于CFS调度器,开始吧。...2. task_group 组调度,在内核中是通过struct task_group来组织的,task_group本身支持cfs组调度和rt组调度,本文主要分析cfs组调度。...来一张图直观理解一下: 在每个周期内限制在quota的配额下,超过了就throttle,下一个周期重新开始; 3.1 数据结构 内核中使用struct cfs_bandwidth来描述带宽,该结构包含在...:每个周期的到期时间; idle:空闲状态,不需要运行时分配; period_active:周期性计时已经启动; period_timer:高精度周期性定时器,用于重新填充运行时间消耗

    1.9K30

    linux 进程调度器(下) -- 调度器演进

    引言 通过此前的两篇文章,我们系统介绍了 linux 操作系统中的调度算法与其演进: linux 操作系统的进程调度(上) -- 进程调度的基本概念 linux 操作系统的进程调度(中) -- 进程调度算法的演进...本文,我们就来介绍 Linux 操作系统实际使用的进程调度器以及它们的演进。...O(n) 调度器 在早期的 linux 操作系统中,2.4 版本到 2.6 版本之间,linux 采用了实现起来十分简单的 O(n) 调度器。...这里提到了“周期”,那么这个周期以及动态调整的优先级是怎么实现的呢?它们的答案是同一个东西 -- 时间片。每当一个尚未分配时间片的进程出现在队列中时,调度器都会为这个进程分配固定数量的时间片。...O(1) 调度器 在 linux 内核采用 O(n) 调度器的 4 年后,Linux2.6.0 采纳了 Rad Hat 公司设计的 O(1) 调度算法,这是一个基于上一篇文章中介绍的多级反馈队列算法的调度器实现

    2.2K20

    Linux调度浅析

    cgroup 与组调度 linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来划分各种资源。...cgroup支持很多种资源的划分,CPU资源就是其中之一,这就引出了组调度linux内核中,传统的调度程序是基于进程来调度的(参阅《Linux 进程调度浅析》)。...(参见《linux内核SMP负载均衡浅析》。近期会推送给大家) 组的调度策略 组调度的主要数据结构已经理清了,这里还有一个很重要的问题。...(这里讨论的是CPU占有比,因为每个调度组可能有着不同的周期值。)...在这个状态下,这个rt_rq对应的调度实体不会再次进入运行队列。而每个rt_rq都会维护一个周期性的定时器,定时周期为sched_rt_period_us。

    3.5K52

    Linux进程调度学习!

    Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...Linux 调度算法: Linux 中有一个总的调度结构,称之为 调度器类(scheduler class),它允许不同的可动态添加的调度算法并存,总调度器根据调度器类的优先顺序,依次去进行调度器类的中的进程进行调度...[ 分配给进程的运行时间 = 调度周期 *(进程权重 / 所有进程权重之和) ] CFS 调度器实体结构作为一个名为 se 的 sched_entity 结构,嵌入到进程描述符 struct task_struct...Linux 调度时机: 1、进程切换: 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...在以下时刻: 周期性的时钟中断:时钟中断处理函数会调用scheduler_tick(),这是调度器核心层(scheduler core)的函数,它通过调度类(scheduling class)的task_tick

    1.9K30
    领券