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

Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )

文章目录 一、调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二、 实时调度类 rt_sched_class 源码 一、调度类 ( 停机调度类 | 限期调度类...| 实时调度类 | 公平调度类 | 空闲调度类 ) ---- 在 linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义的...sched_class 字段 , 表示该进程所属的调度类 ; const struct sched_class *sched_class; 源码地址 : linux-5.6.18\include\linux...\sched.h#680 上述可设置的调度类参考 【Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类...由高到低排列为 : 停机调度类 > 限期调度类 > 实时调度类 > 公平调度类 > 空闲调度类 二、 实时调度类 rt_sched_class 源码 ---- 实时调度类 , 是 sched_class

69710

Linux 内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )

文章目录 一、进程分类 ( 实时进程 | 普通进程 ) 二、Linux 内核调度策略 1、SCHED_FIFO 调度策略 2、SCHED_RR 调度策略 三、实时调度实体 sched_rt_entity...一、进程分类 ( 实时进程 | 普通进程 ) ---- Linux 进程分为 " 实时进程 " 和 " 普通进程 " 两类 ; " 实时进程 " 优先级 高于 " 普通进程 " , 如果当前 Linux...内核】调度器 ⑧ ( 进程优先级源码 include\linux\sched\prio.h | 进程分类 | 实时进程 | 普通进程 | 进程优先级数值 | 0 ~ 99 实时进程 ) 博客 ; 二、...| SCHED_BATCH策略 ) 博客中 , 介绍了 Linux 内核相关的调度策略 ; 1、SCHED_FIFO 调度策略 SCHED_FIFO 是 " 实时进程调度策略 " , 这是一种 先进先出...sched_rt_entity ---- 实时调度实体 在 Linux 内核源码中通过 sched_rt_entity 结构体 表现 , sched_rt_entity 结构体 , 定义在 Linux

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

实时调度

按照POSIX标准的强制要求,除了“普通”进程之外, Linux还支持两种实时调度类。调度器结构使得实时进程可以平滑地集成到内核中,而无需修改核心调度器,这显然是调度类带来的好处。...rt_task宏通过检查其优先级来证实给定进程是否是实时进程,而task_has_rt_policy则检测进程是否关联到实时调度策略。 1.1....性质 实时进程与普通进程有一个根本的不同之处:如果系统中有一个实时进程且可运行,那么调度器总是会选中它运行,除非有另一个优先级更高的实时进程。 现有的两种实时类,不同之处如下所示。....put_prev_task = put_prev_task_rt, .set_curr_task = set_curr_task_rt, .task_tick = task_tick_rt, }; 实时调度器类的实现比完全公平调度器简单...在task_struct中设置实时优先级和调度类。 重新激活进程 如果进程此前不在任何就绪队列上,那么只需要设置调度类和新的优先级数值。停止进程活动和重激活则是不必要的。

75620

Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类 | 公平调度类 | 空闲调度类 )

文章目录 一、调度器类型 二、调度器类型源码定义 三、停机调度类 ( stop_sched_class ) 四、限期调度类 ( dl_sched_class ) 五、实时调度类 ( rt_sched_class...) 六、公平调度类 ( fair_sched_class ) 七、空闲调度类 ( idle_sched_class ) 一、调度器类型 ---- 在 Linux 内核中 , sched_class 调度器...分为以下 5 种类型 : stop_sched_class : 停机调度类 ; dl_sched_class : 限期调度类 ; rt_sched_class : 实时调度类 ; fair_sched_class...: 公平调度类 ; idle_sched_class : 空闲调度类 ; 上述每种 " 调度类 " 都有自己的 调度策略 ; 调度类 优先级 由高到低排列为 : 停机调度类 > 限期调度类 > 实时调度类...> 公平调度类 > 空闲调度类 二、调度器类型源码定义 ---- 调度器类型 , 定义在 Linux 内核源码 linux-5.6.18\kernel\sched\sched.h 头文件中的 1792

1.3K20

Linux 内核】实时调度类 ⑤ ( 实时调度类 rt_sched_class 源码分析 | 结构体字段及函数指针分析 )

内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 ) 博客中 , 简单介绍了 实时调度类 rt_sched_class 结构体 , 下面开始分析该结构体的具体字段含义...类型 , 该结构体的 字段 和 函数指针 含义在 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h...) 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 ) 【Linux 内核】调度器...④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 ) 【Linux 内核】调度器 ⑤ (..." 调度类 " 链表中 , 下一个 " 调度类 " 指针 , 指向一个 公平调度类 地址 ; .next = &fair_sched_class, 参考资料 : 【Linux 内核】调度器 ③ (

1.1K10

跨国实时网络调度系统设计

分享内容覆盖四个领域,分别是实时音视频和跨国应用场景,跨国实时网络的部署,跨国调度系统的架构设计,以及跨国调度系统的挑战和应对的方法。 1....实时音视频系统架构图 关于实时音视频系统架构图有两点需要说明。第一点是对于实时传输网络,我们要考虑其实时性和成本。...3.调度系统的架构设计 跨国实时网络的拓扑图 上图是跨国实时网络的拓扑图,其中基本包括了四类实体,一类是用户终端;第二类是普通的媒体节点;第三类是调度中心;第四类是服务节点。...在动态回源的过程中也会主动的做一些实时的测速,根据测速的结果综合考虑动态回源的决策。 4. 调度系统的挑战和应对 就近接入-IP库问题 关于调度系统挑战的应对,首先看第一个问题,即IP库的问题。...智能选路-网络故障的问题 在网络故障的情况发生时,我们会进行路线重新调度,如果要能够实时的重新调度另外一个路线,就必须存在多个备用方案。

78220

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

Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...为了保证交互式应用和桌面系统的性能,一般Linux更倾向于优先调度I/O消耗型进程。 进程优先级 Linux采用了两种不同的优先级范围。 使用nice值:越大的nice值意味着更低的优先级。...(-19 ~ 20之间) 实时优先级:可配置,越高意味着进程优先级越高。 任何实时的进程优先级都高于普通的进程,因此上面的两种优先级范围处于互不相交的范畴。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...Linux调度的实现 下面我们来看看CFS是如何实现的,一般我们把它分为4个主要的部分来分析。

14.7K113

机械师实时调度示例(I) - 实时规划

OptaPlanner创办人Geoffrey De Smet及其团队,在Red Hat 技术峰会上主题会场上,演示了一个通过OptaPlanner实现实时规划与调度的示例。...在7000人面前,我们演示了一个实时调度程序,该程序可以实现对现场观众通过手机App的输入进行实时反应。...在过去两个月里,我们的团队和其它中间件的团队一起协同,在Burr Sutter的出色指导下,创建了这个实时调度程序。...幸亏,OptaPlanner为帮我们调度这些机械师,它会实时地对机台健康的变化作出反映,如视频所示:https://youtu.be/Y4wyPU_B2gU (下面讨论一下规划程序的具体设计) 这个规划问题的挑战...如果想自己调度这个程序,可以从这里下载并根据readme的介绍进行调度。 End.

88220

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

Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...对于实时调度策略分为两种:SCHED_FIFO 和 SCHED_RR: 这两种进程都比任何普通进程的优先级更高(SCHED_NORMAL),都会比他们更先得到调度。...当 SCHED_RR 耗尽时间后,同一优先级的其他实时进程被轮流调度。 上述两种实时算法都是静态的优先级。...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。

20.5K10

Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )

rt_sched_class 结构体变量 中的各个 函数指针 指向的 函数源码 ; rt_sched_class 结构体 在 Linux 内核源码的 linux-5.6.18\kernel\sched...\rt.c 源文件中定义 , 实时调度 相关的 核心函数 也定义在该源码中 ; 一、dequeue_task_rt 函数 ( 从执行队列中移除进程 ) ---- dequeue_task_rt 函数简介...: dequeue_task_rt 函数用于 更新 " 调度信息 " , 将 " 实时调度实体 " sched_rt_entity 从 " 执行队列 " ( 红黑树 ) 中 删除 , 然后将 被删除的..." 实时调度实体 " 添加到 " 执行队列 " ( 红黑树 ) 末尾 ; dequeue_task_rt 函数分析 : update_curr_rt(rq); 的作用是 更新 " 调度信息 " , dequeue_rt_entity...(rt_se, flags); 作用是 将 " 实时调度实体 " rt_se , 从 " 执行队列 " ( 红黑树 ) 中删除 , 被删除的 " 实时调度实体 " 添加到 " 执行队列 " ( 红黑树

39920

linux进程调度

任何时候,实时进程的优先级都高于普通进程,实时进程只会被更高级的实时进程抢占,同级实时进程之间是按照FIFO(一次机会做完)或者RR(多次轮转)规则调度的。...不同与普通进程,系统调度时,实时优先级高的进程总是先于优先级低的进程执行。知道实时优先级高的实时进程无法执行。实时进程总是被认为处于活动状态。...总而言之,对于实时进程,高优先级的进程先执行,它执行到没法执行了,才轮到低优先级的进程执行。 2.非实时进程的调度 Linux对普通的进程,根据动态优先级进行调度。...Linux下,静态优先级是用户不可见的,隐藏在内核中。...Linux2.6 在这方面有了较大的提高。Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去的睡眠时间越多,则越有可能属于交互式进程。

3.2K140

Linux线程调度

Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元...Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。...和SCHED_RR是实时策略,他们的调度值范围是1到99,数值越大优先级越高,另外实时调度策略的线程总是比前面三种通常的调度策略优先级更高。...下面介绍几种常见的调度策略: SCHED_OTHER:该策略是是默认的Linux分时调度(time-sharing scheduling)策略,它是Linux线程默认的调度策略。...使用top命令,如果PR列的值为RT,则说明该进程采用的是实时策略,即调度策略是SCHED_FIFO或者为SCHED_RR,而对于非实时调度策略(比如SCHED_OTHER)的进程,该列的值是NI+20

4K20

linux进程调度

调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...,还为每个进程的task_struct中配有优先级,需要注意的是优先级数越小优先级越高,实时进程的优先级处于099之间,普通进程的优先级处于100139。...实时调度策略有SCHED_RR, SCHED_FIFO, SCHED_DEADLINE。 SCHED_FIFO,对于高优先级可以抢占低优先级,对于同等优先级先来先服务。...se; //完全调度实体 struct sched_rt_entity rt; // 实时调度实体 struct sched_dl_entity dl; // deadline调度实体 CFS算法中将...完整调度 每颗cpu都有一个运行队列rq,这个队列中又存在多个子队列例如rt_rq(实时运行队列),cfs_rq。

8K20

机械师实时调度示例(I) - OptaPlanner实时规划

OptaPlanner创办人Geoffrey De Smet及其团队,在Red Hat 技术峰会上主题会场上,演示了一个通过OptaPlanner实现实时规划与调度的示例。...在7000人面前,我们演示了一个实时调度程序,该程序可以实现对现场观众通过手机App的输入进行实时反应。...在过去两个月里,我们的团队和其它中间件的团队一起协同,在Burr Sutter的出色指导下,创建了这个实时调度程序。...幸亏,OptaPlanner为帮我们调度这些机械师,它会实时地对机台健康的变化作出反映,如视频所示: 视频内容 (下面讨论一下规划程序的具体设计) 这个规划问题的挑战 规划目标只有一个:不能让做任意一个机台的健康值掉到

1K30

Linux 内核】实时调度类 ② ( 实时调度实体 sched_rt_entity 源码分析 | run_list、timeout、watchdog_stamp、time_slice 字段 )

内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity ) 引入了 实时调度实体...sched_rt_entity 结构体源码 , 在 Linux 内核源码的 linux-5.6.18\include\linux\sched.h 头文件中 ; 下面开始分析该 实时调度实体 sched_rt_entity...sched_rt_entity *parent; 7、rt_rq 字段 sched_rt_entity 结构体的 rt_rq 字段 , 表示 " 实时调度实体 " 所属的 " 实时运行队列 " ;..." 实时调度实体 " 加入到 优先级队列 中的 unsigned long timeout; // 用于 设置 调度 超时时间 unsigned long watchdog_stamp;...this entity is (to be) queued: */ struct rt_rq *rt_rq; // 表示 " 实时调度实体 " 所属的 " 实时运行队列 " /* rq

22210

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

实时进程(Real-Time Process):优先级高、需要尽快被执行的进程。它们一定不能被普通进程所阻挡,例如视频播放、各种监测系统。...实时进程由Linux操作系统创造,普通用户只能创建普通进程。两种进程的优先级不同,实时进程的优先级永远高于普通进程。进程的优先级是一个0到139的整数。数字越小,优先级越高。...当计算机中有大量进程在运行时,这个调度器的性能将会被大大降低。也就是说,O(n)调度器没有很好的可拓展性。O(n)调度器是Linux 2.6之前使用的进程调度器。...完全公平调度器 从2007年发布的Linux 2.6.23版本起,完全公平调度器(CFS,Completely Fair Scheduler)取代了O(1)调度器。...以上就是调度器的基本原理,以及Linux用过的几种调度策略。调度器可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度器在多任务系统中起着顶梁柱的作用。

2K21

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.7K20

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

Linux是一个支持多任务的操作系统,而多个任务之间的切换是通过 调度器 来完成,调度器 使用不同的调度算法会有不同的效果。...而Linux2.6开始替换成名为 O(1)调度算法,顾名思义,其时间复杂度为O(1)。...虽然在后面的版本开始使用 CFS调度算法(完全公平调度算法),但了解 O(1)调度算法 对学习Linux调度器还是有很大帮助的,所以本文主要介绍 O(1)调度算法 的原理与实现。...实时进程调度 实时进程分为 FIFO(先进先出) 和 RR(时间轮询) 两种,其调度算法比较简单,如下: 先进先出的实时进程调度:如果调度器在执行某个先进先出的实时进程,那么调度器会一直运行这个进程,直至其主动放弃运行权...时间轮询的实时进程调度:如果调度器在执行某个时间轮询的实时进程,那么调度器会判断当前进程的时间片是否用完,如果用完的话,那么重新分配时间片给它,并且重新放置回 active 队列中,然后调度到其他同优先级或者优先级更高的实时进程进行运行

4.6K81

Linux进程调度(三)

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

2.3K10

linux线程调度策略

目录 linux线程调度策略 linux线程调度策略 这是一篇非常好的关于线程调度的资料,翻译自shed 从Linux 2.6.23开始,默认的调度器为CFS,即"完全公平调度器"(Completely...SCHED_OTHER是标准的Linux分时调度策略(不需要实时机制)。 如何从静态优先级为0的列表中选择运行的线程取决于列表中的dynamic优先级。...Privileges and resource limits 在Linux 2.6.12之前,只有拥有特权(CAP_SYS_NICE)的线程才能设置非0的静态优先级(即设置实时调度策略)。...从Linux 2.6.25开始,Linux提供了2个/proc文件来为非实时进程保留CPU时间。保留的CPU也可以为shell预留资源来停止正在允许的进程。...cgroup的配置会覆盖autogroup Real-time features in the mainline Linux kernel 从Linux 2.6.18开始,Linux逐渐具备实时功能,其中大部分来源于

4.6K30
领券