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

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) 调度算法,这是一个基于上一篇文章中介绍的多级反馈队列算法的调度实现...3.1 O(1) 调度的实现 首先,O(1) 调度最明显的改进是为每个 CPU 都实现了一套队列,并且实现了一套负载均衡算法,每当新的任务到来时,这个负载均衡器会动态决定将进程分配到哪个 CPU

2.2K20

Linux 内核】调度 ① ( 调度概念 | 调度目的 | 调度主要工作 | 调度位置 | 进程优先级 | 抢占式调度 | Linux 进程状态 | Linux 内核进程状态 )

文章目录 一、调度 0、调度概念 1、调度目的 2、调度主要工作 3、调度位置 4、进程优先级 5、抢占式调度 二、Linux 内核进程状态 API 简介 三、Linux 进程状态 一、调度...---- 0、调度概念 Linux 内核的 " 进程调度 " 是按照 设计好的调度算法 安排的 , 该算法对应的功能模块 称为 " 调度 " , 英文名称是 Scheduler ; 1、调度目的...进程调度 目的是 最大限度利用 CPU 资源 , 也就是 CPU 时间片 ; 2、调度主要工作 " 调度 " 主要的工作 : ① 就绪 -> 执行 : 选择 " 就绪状态 " 的进程执行 ; (..." 抢占式调度 " 概念 : 如果 " 调度 " 支持 " 就绪状态 " 与 " 运行状态 " 之间可以相互转换 , 则该调度称为 " 抢占式调度 " ; 二、Linux 内核进程状态 API...终止后的状态 ; 状态之间的转换 , 参考 【Linux 内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态

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

    基于调度CPU 调频机制--schedutil

    对于 CPU 的负载,没有谁比调度还清楚的了。所以 cpufreq governor 完全没必要自己去做负载采样,应该从内核调度那里获取。...而基于调度的 cpufreq governor 就是这样引出来的。...schedutil 内核调度中的 CFS 调度类是通过 PELT(per entity load tracking) 来统计各个 Task 的负载(capacity),并映射到 0 ~ 1024(最大值可在编译时指定...而基于调度的 cpufreq governor 的主要原理就是把各个 CPU 的 capacity 映射到 CPU 频率,来完成调频动作,capacity 越高,当前 CPU 负载越高,所以频率也调的很高...并且schedutil 支持快速freq 切换(fast path),当调度有loading 变化时,就及时的callback schedutil ,schedutil计算下一个freq 并且把相关freq

    9K30

    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调度策略

    调度CPU时间的管理员。Linux调度需要负责做两件事:一件事是选择某些就绪的进程来执行;另一件事是打断某些执行中的进程,让它们变回就绪状态。不过,并不是所有的调度都有第二个功能。...当计算机中有大量进程在运行时,这个调度的性能将会被大大降低。也就是说,O(n)调度没有很好的可拓展性。O(n)调度Linux 2.6之前使用的进程调度。...当Java语言逐渐流行后,由于Java虚拟机会创建大量进程,调度的性能问题变得更加明显。 为了解决O(n)调度的性能问题,O(1)调度被发明了出来,并从Linux 2.6内核开始使用。...完全公平调度 从2007年发布的Linux 2.6.23版本起,完全公平调度(CFS,Completely Fair Scheduler)取代了O(1)调度。...以上就是调度的基本原理,以及Linux用过的几种调度策略。调度可以更加合理地把CPU时间分配给进程。现代计算机都是多任务系统,调度在多任务系统中起着顶梁柱的作用。

    2.1K21

    Linux 进程调度之schdule主调度

    至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行 一、调度单位简介 1.1 task_struct 结构体简介 对于Linux内核来说,调度的基本单位是任务,...,也许在等待调度调度只会选择在该状态下的任务进行调度。...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(1)调度

    O(n)调度的缺陷: 时间复杂度是O(n) SMP系统扩展不好,访问runqueue需要加锁 实时进程不能及时调度 CPU空转的现象存在 进程在各个CPU之间跳跃,性能影响 O(1)调度的引入 基于...O(n)调度的种种问题,linux内核社区则在2.6内核版本引入了O(1)调度,当然了引入的目的也正是要解决O(n)调度面临的问题。...我们这片文章以Linux2.6.2版本来学习,在Linux内核文档中有一篇关于O(1)调度的目的,如何设计的,以及实现有一个详细的介绍:sched-design.txt文档,有兴趣的可以去阅读。...总结: O(1)调度的引入主要是为了解决O(n)调度的不足 O(1)调度在赏罚机制上比O(n)调度考虑的因素比较多,不再时像O(1)那样直接考时间片的大小来调度 但是O(n)和O(1)调度算法上核心还是通过判断一个进程的行为...当然了时代还是要前进的,O(n)和O(1)调度是为CFS调度出现地提供了很好的环境。

    2.9K21

    Linux O(n)调度

    前面我们学习了调度的设计需要关注的几个点,在这里复习下: 吞吐量(对应的是CPU消耗型进程) 响应速度(对应的是IO消耗型进程) 公平性,确保每个进程都可以有机会运行到 移动设备的功耗 Linux调度的设计...经常睡眠的进程尝试增大下优先级,经常长占CPU的适当减少优先级 本节我们先来学习Linux早期的调度算法的设计,先从最早的调度算法开始,此调度时间复杂度是O(n),所以也可以称为O(n)调度算法。...我们选择的内核版本是linux-2.4.19。 O(n)调度的实现原理 O(n)代表的是寻找一个合适的进程的时间复杂度。...时间片的计算 O(n)调度采用的是TICK的方式,根据对应进程的nice值来计算对应的时间片的。...总之O(n)调度有很多问题,不过有问题肯定要解决的。所以在Linux2.6引入了O(1)的调度

    3.3K20

    iOS 任务调度:为 CPU 和内存减负

    异步任务量级过大导致 CPU 和内存压力过高如何优化? 解决类似的问题可以用几个思路:降频、淘汰、优先级调度。...当然 DEMO 中按照屏幕的物理像素处理,就算不使用任务调度组件快速滑动列表也基本不会有掉帧的现象。...考虑到老旧设备或者技术人员的水平,很多时候这种需求会导致严重的 CPU 和内存负担,甚至导致闪退。...快速滑动列表,大量的异步任务直接交由 CPU 执行,然而滑出屏幕的图片已经没有处理它的意义了。所以可以提前删除掉已经滑出屏幕的异步任务,以此来降低 CPU 和内存压力。...使用priority_queue优先队列来处理自定义的优先级调度,它的缺点是不能删除低优先级节点,为了节约时间成本姑且够用。

    1.4K10

    几种CPU调度策略

    CPU调度 我们知道,程序需要获得CPU的资源才能被调度和执行,那么当一个进程由于某种原因放弃CPU然后进入阻塞状态,下一个获得CPU资源去被调度执行的进程会是谁呢?...下图中,进程1因为阻塞放弃CPU资源,此时,进程2刚IO操作结束,可以获得CPU资源去被调度,进程3的时间片轮转结束,也同样可以获得CPU资源去被调度,那么,此时的操作系统应该安排哪个进程去获得CPU资源呢...这就涉及到我们操作系统的CPU调度策略了。 ?...由此,产生了以下一些CPU调度算法。 各种CPU调度算法 1.First Come,First Served(FCFS) 就是先来先服务的调度算法,哪个任务先进来,就为哪个任务先服务。 ?...等等这些问题到现在都在疯狂地探讨和研究当中,有兴趣向这方面进行深入了解的可以阅读相关文献,或者阅读以下linuxCPU调度算法源码。

    5.4K10

    Linux进程核心调度之主调度schedule--Linux进程的管理与调度(十九)

    调度 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志TLF_NEDD_RESCHED...schedule(); ...... } 1.2 schedule函数 schedule就是主调度的函数, 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度函数..., 去查找最优的那个进程, 当然因为大多数情况下, 系统中全是CFS调度的非实时进程, 因而linux内核也有一些优化的策略 其执行流程如下 如果当前cpu上所有的进程都是cfs调度的普通非实时进程,..., 也就是说多数情形下, 我们的linux中进程全是cfs调度的 而likely这个宏业表明了这点, 这也是gcc内建的一个编译选项, 它其实就是告诉编译表达式很大的情况下为真, 编译可以对此做出优化...内核中的进程被堵塞的时候 2 总结 2.1 schedule调度流程 schedule就是主调度的函数, 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度函数

    3.7K31

    linux内核调度算法(2)–CPU时间片如何分配

    双核CPU,实际上最多只能有两个进程在同时运行,大家在top、vmstat命令里看到的正在运行的进程,并不是真的在占有着CPU哈。...比如你的服务有8颗CPU,那么nginx worker应当只有8个,当你多于8个时,内核可能会放超过多个nginx worker进程到1个runqueue里,会发生什么呢?...CPU时间片了。...换句话说,内核是偏心的,它喜欢的是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识的多分配CPU运行时间给这类进程。而CPU消耗进程内核就不太关心了。这有道理吗?...很简单,如果CPU用得多的进程,就把nice值调高点,等价于优先级调低点。CPU用得少的进程,认为它是交互性为主的进程,则会把nice值调低点,也就是优先级调高点。

    6.9K40

    Linux进程调度概述--Linux进程的管理与调度(十五)

    2 linux进程的分类 2.1 进程的分类 当涉及有关调度的问题时, 传统上把进程分类为”I/O受限(I/O-dound)”或”CPU受限(CPU-bound)”....), 也可能是CPU受限的(比如图形绘制程序) 2.2 实时进程与普通进程 在linux中, 调度算法可以明确的确认所有实时进程的身份, 但是没办法区分交互式程序和批处理程序(统称为普通进程), linux2.6...传统Linux调度提高交互式应用的优先级,使得它们能更快地被调度。而CFS和RSDL等新的调度的核心思想是”完全公平”。...,调度本身就会耗费不少时间,所以,从linux2.5开始引入赫赫有名的O(1)调度 然而,linux是集全球很多程序员的聪明才智而发展起来的超级内核,没有最好,只有更好,在O(1)调度风光了没几天就又被另一个更优秀的调度取代了...CFS调度 linux-2.6~至今 4 Linux调度设计 4 Linux调度设计 2个调度 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制

    3.5K20

    Linux进程调度的设计--Linux进程的管理与调度(十七)

    , linux总是希望寻找一个最接近于完美的调度策略来公平快速的调度进程. 1.4 linux调度的演变 一开始的调度是复杂度为O(n)的始调度算法(实际上每次会遍历所有任务,所以复杂度为O(n))...CFS的算法和实现都相当简单,众多的测试表明其性能也非常优越 字段 版本 O(n)的始调度算法 linux-0.11~2.4 O(1)调度 linux-2.5 CFS调度 linux-2.6~至今...2 Linux调度组成 2.1 2个调度 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要...早期的内核中就绪队列是全局的, 即即有全局唯一的rq, 但是 在Linux-2.6内核时代,为了更好的支持多核,Linux调度普遍采用了per-cpu的run queue,从而克服了多CPU系统中,全局唯一的...参照 linux调度源码分析 - 概述(一) 通过的调度策略对象–调度linux下每个进程都由自身所属的调度类进行管理, sched_class结构体表示调度类, 调度类提供了通用调度和各个调度之间的关联

    3.6K41

    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

    探索CPU调度原理

    我们将寄存的这些信息称为CPU的上下文,也叫硬件上下文。 OS在切换运行任务时,将上一任务的上下文保存下来,并将即将运行的任务的上下文加载到CPU寄存上的这一动作,被称为CPU上下文切换。...而且A阻塞在I/O操作期间,调度并没有切换到B,导致了CPU的空转!...该调度方案是建立在假设5之上的,也即要求调度预先知道A和B的运行时长、I/O操作时间长等信息,才能如此充分地利用CPU。...然而,实际的情况远比这复杂,I/O阻塞时长不会每次都一样,调度也无法准确知道A和B的运行信息。当假设5也被打破时,调度又该如何实现才能最大程度保证CPU利用率,以及调度的合理性呢?...CFS:Linux的完全公平调度 本节我们将介绍一个平时打交道最多的调度算法,Linux系统下的CFS(Completely Fair Scheduler,完全公平调度)。

    86340

    Linux 内核】CFS 调度 ② ( CFS 调度 “ 权重 “ 概念 | CFS 调度调度实例 | 计算进程 “ 实际运行时间 “ )

    文章目录 一、CFS 调度 " 权重 " 概念 二、CFS 调度调度实例 ( 计算进程 " 实际运行时间 " ) 一、CFS 调度 " 权重 " 概念 ---- CFS 调度 ( Completely...Fair Scheduler ) " 完全公平调度 " , 实际运行过程中 , 会涉及到 具有 不同 " 进程优先级 " 的 进程 之间的调度 , 有些进程 优先级高 , 有些进程 优先级低 ,...为了避免 优先级低 的进程 始终无法得到 CPU 时间 执行 , 向每个进程提供 公平 调度 , CFS 调度 引入了 " 权重 " 概念 , CFS 使用 " 权重 " 值 , 替代 进程的 优先级..., 不同 " 进程优先级 " 的进程 会按照 权重比例 , 分配 CPU 的执行时间 ; 二、CFS 调度调度实例 ( 计算进程 " 实际运行时间 " ) ---- 有 2 个进程 A 和 B...CPU调度区 大小 , 则 进程 在 CPU 上执行的进程 可获取到的 CPU 时间 计算公式如下 : \rm 进程获取的CPU 时间 = 调度区 \times \cfrac{进程权重}{所有进程的权重之和

    1.8K30

    如何更改 Linux 的 IO 调度

    Linux 的 I/O 调度是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度。...Linux I/O 调度的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先级更高以及何时下发 I/O 到块设备,以此来减少磁盘寻道时间,从而提高系统的吞吐量。...目前 Linux 上有如下几种 I/O 调度算法: noop – 通常用于内存存储的设备。 cfq – 完全公平调度。进程平均使用IO带宽。...Deadline – 针对延迟的调度,每一个 I/O,都有一个最晚执行时间。 Anticipatory – 启发式调度,类似 Deadline 算法,但是引入预测机制提高性能。... anticipatory deadline [cfq] 如何改变硬盘设备 I/O 调度 (adsbygoogle = window.adsbygoogle || []).push(

    4.5K20
    领券