首页
学习
活动
专区
工具
TVP
发布

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

本文是《Linux内核设计与实现》第四章的阅读笔记,代码则是摘自最新的4.6版本linux源码(github),转载请注明出处。...Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...Linux调度算法 调度器类 Linux调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...Linux调度的实现 下面我们来看看CFS是如何实现的,一般我们把它分为4个主要的部分来分析。...在Linux中,只要重新调度是安全的,内核就可以在任何时间抢占正在执行的任务,这个安全是指,只要没有持有锁,就可以进行抢占。

14.7K113

Linux 内核的 4 大 IO 调度算法

Linux 内核包含4个IO调度器,分别是 Noop IO scheduler、Anticipatory IO scheduler、Deadline IO scheduler 与 CFQ IO scheduler...anticipatory, 预期的;提早发生的;期待着的 通常磁盘的读写影响是由磁头到柱面移动造成了延迟,解决这种延迟内核主要采用两种策略:缓存和IO调度算法来进行弥补. 本文做一简单介绍....IO调度器在内核栈中所处位置如下: ? ? 块设备最悲剧的地方就是磁盘转动,这个过程会很耗时间。...从Linux 2.6.18起,CFQ作为默认的IO调度算法。对于通用的服务器来说,CFQ是较好的选择。...为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。

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

Linux内核】进程调度

Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。...有效管理时间片能使调度程序从系统全局的角度做出调度决定,这样做还可以避免个别进程独占系统资源。 相反,在非抢占式多任务模式下,除非进程自己主动停止运行,否则它会一直执行。...进程优先级 调度算法中最基本的类就是基于优先级的调度。 这是一种根据进程的价值和其对处理器时间的需求来对进程分级的想法。...优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度(一个接一个,重复进行)。在包括Linux在内的某些系统中,优先级高的进程使用的时间片也较长。...进程抢占 像前面所说的,Linux 系统是抢占式的。当-个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正在执行的进程。

2.8K20

Linux内核调度器源码分析 - 初始化

为了能够理解 Linux 调度器的设计与实现,我们将以 Linux kernel 5.4 版本(TencentOS Server3 默认内核版本)为对象,从调度器子系统的初始化代码开始,分析 Linux...本(系列)文通过分析 Linux 调度器(主要针对 CFS)的设计与实现,希望能够让读者了解: 调度器的基本概念 调度器的初始化(包括调度域相关的种种) 进程的创建、执行与销毁 进程切换原理与实现 CFS...调度器初始化(sched_init) 下面进入正题,开始分析内核调度器的初始化流程,希望能通过这里的分析,让大家了解: 1、运行队列是如何被初始化的 2、组调度是如何与 rq 关联起来的(只有关联之后才能通过...结语 本文主要介绍了内核调度器的基本概念,并通过分析5.4内核调度器的初始化代码,介绍了调度域、调度组等基本概念的具体落地方式。...混部殇-论云原生资源隔离技术CPU隔离(一) 腾讯云内核&容器产品团队 长期招聘中~ ?

1.6K30

linux内核调度算法(3)–多核系统的负载均衡

Linux内核是如何在多核间调度进程的呢?又是内核又是CPU核,两个核有点绕,下面称CPU处理器来代替CPU核。...实际上,如果你没有对你的进程做过特殊处理的话,LINUX内核是有可能把它放到多个CPU处理器上运行的,这是内核的负载均衡。...上文说过,每个处理器上有一个runqueue队列,表示这颗处理器上处于run状态的进程链表,在多处理器的内核中,就会有多个runqueue,而如果他们的大小很不均衡,就会触发内核的load_balance...当然,多核CPU也有许多种,例如INTEL的超线程技术,而LINUX内核对一个INTEL超线程CPU会看成多个不同的CPU处理器。...上面说过,如果你没有对你的进程做过特殊处理的话,LINUX内核是有可能把它放到多个CPU处理器上运行的,但是,有时我们如果希望我们的进程一直运行在某个CPU处理器上,可以做到吗?

3.7K30

Spark内核分析Scheduler资源调度机制

废话不多说,直接上源码进行分析(本篇所述内容比较重要,请耐心看完)。 ? Driver调度机制图 ?...我们来分析一下上面这段代码: 1.首先过滤出 所有的worker进行过滤操作,获得所有正常工作的worker,然后将其进行shuffle操作; 2.遍历等待调度的Driver,判断当前的Driver...非spreadOutApps策略 分析完Driver的scheduler机制后,我们来看看Application适合调度的,Application的调度有两种方式,如上图所示,其实说白了就是一种是平均分配策略和非平均分配策略...,现在来分析一下源码是如何实现的; 基于平均分配算法: 1.遍历需要调度的Application,且该Application还需要被分配CPU; 2.遍历拿到所有可用的worker,然后获得每个worker...如需转载,请注明: 上一篇:Spark内核分析Spark的HA源码分析 本篇:Spark内核分析Scheduler资源调度机制

43820

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

内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有的进程仿佛同时在执行。...内核分配时间片是有策略和倾向性的。换句话说,内核是偏心的,它喜欢的是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识的多分配CPU运行时间给这类进程。...虽然内核尽量多的分配时间片给IO消耗型进程,但IO消耗进程常常在睡觉,给它的时间片根本用不掉。很合理吧? 那么内核具体是怎么实现这种偏心呢?...先说内核如何决定时间片的长度。 对每一个进程,有一个整型static_prio表示用户设置的静态优先级,内核里它与nice值是对应的。看看进程描述结构里的static_prio成员。...内核就是这么偏爱交互型进程,从上面的优先级和时间片分配上都能看出来。实际上,内核还有方法对交互型进程搞优待。

6.4K40

聊聊Linux内核进程调度下篇

进程优先级 Linux内核中进程优先级一般分为动态优先级和静态优先级,动态优先级是内核根据进程的nice值、IO密集行为或者计算密集行为以及等待时间等因素,设置给普通的进程;静态优先级是用户态应用设置给实时进程...实际调度调度器通用元素 CFS(完全公平)调度Linux内核中所有动态优先级的进程都是有CFS调度器处理,通常Linux内核中大部分都是非实时进程,所以CFS进程调度器也是最繁忙的调度器。...Linux内核中支持实时进程,它们是由实时调度器来进行调度。...rt进程被分配了静态优先级,并且在内核中保持不变。于CFS不同,实时调度器采用了每个优先级1~99的单链表,并非采红黑树作为运行队列。...,在Linux内核的3.14开始引入了,deadline调度器基于全局最早的截止期优先和固定带宽服务器算法,于预先确定其运行时的需求。

1.1K20

一文搞懂 | Linux 内核的 4 大 IO 调度算法

1 Linux 内核包含4个IO调度器: Noop IO scheduler Anticipatory IO scheduler Deadline IO scheduler CFQ IO scheduler...anticipatory, 预期的;提早发生的;期待着的 通常磁盘的读写影响是由磁头到柱面移动造成了延迟,解决这种延迟内核主要采用两种策略:缓存和IO调度算法来进行弥补。 本文做一简单介绍。...IO调度器在内核栈中所处位置如下: 块设备最悲剧的地方就是磁盘转动,这个过程会很耗时间。...从Linux 2.6.18起,CFQ作为默认的IO调度算法。对于通用的服务器来说,CFQ是较好的选择。...为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。

1.2K11

linux内核调度算法(1)–快速找到最高优先级进程

为什么要了解内核调度策略呢?呵呵,因为它值得我们学习,不算是废话吧。...内核调度程序很先进很强大,管理你的Linux上跑的大量的乱七八糟的进程,同时还保持着对用户操作的高灵敏响应,如果可能,为什么不把这种思想放到自己的应用程序里呢?...如果我有一个程序,既有IO消耗又有CPU消耗,怎么让多核更好的调度我的程序呢? 又多了几个问题。来看看内核调度程序吧,我们先从它的优先队列谈起吧。...调度程序代码就在内核源码的kernel/sched.c的schedule函数中。 首先看下面的优先级队列,每一个runqueue都有。runqueue是什么?...等待某个CPU来处理的进程中,可能包含许多种优先级的进程,但,LINUX是个抢占式调度算法的操作系统,就是说,需要调度时一定是找到最高优先级的进程执行。

2.4K20

聊聊Linux内核进程调度上篇

基本介绍 Linux的进程调度器是内核中最重要的核心组件,它决定了一个进程合适获取CPU的时间以及占用CPU的时间。...Linux进程调度器采用类似于vfs的设计采用简单的两层结构模式,第一层是通用调度器,定义作为进程调度器的入口抽象层;第二层是调度器的具体实现,根据调度策略实现进程的调度的器的具体实现。...sched_class rt_sched_class)、完全公平调度器(struct sched_class fair_sched_class) 内核中运行队列包含了所有的进程,每个CPU都有一个运行队列...内核中进程运行队列是通过struct rq来定义 // 省略大部分字段,着重描述下运行队列中的一些字段 struct rq { // 每个CPU的运行队列的锁 raw_spinlock_t lock...进程调度是调用进程第一层的通用调度器,内核是从__schedule()函数开始,该函数是挑选下一个最佳的可运行的进程任务。

61920

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

文章目录 一、调度器 0、调度器概念 1、调度器目的 2、调度器主要工作 3、调度器位置 4、进程优先级 5、抢占式调度器 二、Linux 内核进程状态 API 简介 三、Linux 进程状态 一、调度器...---- 0、调度器概念 Linux 内核的 " 进程调度 " 是按照 设计好的调度算法 安排的 , 该算法对应的功能模块 称为 " 调度器 " , 英文名称是 Scheduler ; 1、调度器目的..." 进行 进程调度 ; 进程优先级 参考 【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 |..." 抢占式调度器 " 概念 : 如果 " 调度器 " 支持 " 就绪状态 " 与 " 运行状态 " 之间可以相互转换 , 则该调度器称为 " 抢占式调度器 " ; 二、Linux 内核进程状态 API...不可中断睡眠状态 __TASK_STOPPED 进程停止状态 EXIT_ZOMBIE 僵尸状态 上面的 5 种状态是 Linux 内核中定义的状态 , 详细细节参考 【Linux 内核】进程管理

5.2K20

Linux进程调度分析

有两种方式:由用户程序指定、由内核调度程序动态调整。(下面会说到) linux内核将进程分成两个级别:普通进程和实时进程。实时进程的优先级都高于普通进程,除此之外,它们的调度策略也有所不同。...普通进程具体的调度算法非常复杂,并且随linux内核版本的演变也在不断更替(不仅仅是简单的调整),所以本文就不继续深入了。...有兴趣的朋友可以参考下面的链接: 《Linux 调度器发展简述》 《鼠眼看Linux调度器》 《鼠眼再看Linux调度器[1]》 《鼠眼再看Linux调度器[2]》 调度程序的效率 “优先级”明确了哪个进程应该被调度执行...而O(1)的算法是基于一组数目不大的 链表来实现的,按我的理解,这使得优先级的取值范围很小(区分度很低),不能满足公平性的需求。...必须等到返回用户态时才会触发调度(确切的说,是在返回用户态之前,内核会专门检查一下是否需要调度); linux 2.6则实现了内核抢占,但是在很多地方还是为了保护临界区资源而需要临时性的禁用内核抢占。

2.2K31

Linux内核分析内核编程

、原理及组成框架,主要分析Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux 内核,精通Linux内核编程。...第2章“进程及进程调度分析了进程结构及进程调度算法。 第3章“内核同步机制”介绍了内核的互斥机制:自旋锁、原子操作和信号量。还说明了RCU读写机制,及内核与用户空间进行通信的机制。...第19章“Linux内核调试”分析内核调试的方法,控制台驱动程序以及如何将打印信息显示在控制台上,阐述了日志系统是如何工作的,还说明了ptrace调试跟踪的原理。...、原理及组成框架,主要分析Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux 内核,精通Linux内核编程。...第2章“进程及进程调度分析了进程结构及进程调度算法。 第3章“内核同步机制”介绍了内核的互斥机制:自旋锁、原子操作和信号量。还说明了RCU读写机制,及内核与用户空间进行通信的机制。

11K20

Linux 内核架构分析

硬件控制层:该子系统由Linux安装中的所有可能的物理设备组成;例如,CPU,内存硬件,硬盘和网络硬件都是该子系统的成员 2.内核架构 2.1 内核之作用 Linux内核为用户进程提供了虚拟机接口。...2.2 内核结构 内核主要由以下五大组成部分: 进程调度器(SCHED)负责控制对CPU的进程访问。调度程序执行一项调度策略,以确保进程可以公平地访问CPU,同时确保内核按时执行必要的硬件操作。...进程间通信(IPC)子系统实现在单个Linux系统上进行进程间通信的多种机制。 从依赖性的角度分析: 进程调度程序子系统使用内存管理器为恢复特定进程的特定进程调整硬件内存映射。...2.3 内核重要数据结构 任务链表(Task List):流程调度程序为每个活动的流程维护一个数据块。这些数据块存储在称为任务列表的链接列表中。进程调度程序始终维护一个指示当前活动进程的当前指针。...3.各子系统架构分析 3.1 进程调度器架构 进程调度器是Linux内核中最重要的子系统。其目的是控制对计算机CPU的访问。这不仅包括用户进程的访问,还包括其他内核子系统的访问。

2.7K30

Linux内核Crash分析

在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。...对每一个进程来说,Linux内核都会把两个不同的数据结构紧凑的存放在一个单独为进程分配的存储空间中:一个是内核态的进程堆栈,另一个是紧挨进程描述符的数据结构thread_info,叫线程描述符。...在Linux-2.6.32内核中thread_info.h文件中有对内核堆栈的定义: #define THREAD_SIZE 8192 在Linux内核中使用下面的联合结构体表示一个进程的线程描述符和内核栈...,在内核中文件include/linux/sched.h。...用于实现信号机制*/ }; PS:(1)flag 用于保存各种特定的进程标志,最重要的两个是:TIF_SIGPENDING,如果进程有待处理的信号就置位,TIF_NEED_RESCHED表示进程应该需要调度器选择另一个进程替换本进程执行

4.3K20

Linux内核学习(一)Linux内核源码目录

内核目录文件解析: 现在我们开始来具体分析linux内核目录的一些文件到底是什么意思,我们大概要明白主体文件到底是干用的,具体细节可以去各个文件下的内容就一目了然: root@txp-virtual-machine...,首先我先从单个文件来分析,下面有些文件我截图了,有些没用截图,详细大家可以下载源码来看哦: .gitignore: 这个文件主要是说用git工具来管理linux内核版本 .mailmap: 这个文件主要是记录了一些大神维护内核的名字和...这个文件就是linux内核特有的内核编译体系需要用到的文件 MAINTAINERS:这个文件主要是介绍了维护人员列表以及如何提交内核更改 Makefile:这个是linux内核的总makefile,整个内核工程用这个...block目录下放的是一些linux存储体系中关于块设备管理的代码 crypto:英文意思是加密。这个目录下放了一些各种常见的加密算法的C语言代码实现。...一些具体原理分析,再去分析IotOS的配置分析就简单多了。

10.5K51

Linux内核修炼之道》 高效学习Linux内核

这本书如果对您有用,乃我幸事,如果无用,就在此先诚惶诚恐的向大家拜个不是了。 在6月份做过一次《高效学习Linux内核》的presentation,下面是前面的一部分内容及讲义,或许对大家有用吧。...这时我们就需要这样的一幅内核地图来帮助我们去定位所要分析的目标代码,并缩小目标代码的范围与代码量。 接下来是第七句话:分析内核源码,态度决定一切。...我们很多人或许有这样的困惑,也分析浏览了很多内核的源码,可总是觉得分析完浏览完脑子里还是空空的,并没有感觉到多大的收获。这个时候我们或许可以去看看是不是自己在分析代码时的态度出现了问题。...内核一方面负责与计算机硬件进行交互,实现对硬件的控制,调度对硬件资源的访问,另一方面为用户应用程序提供一个高级的执行环境和访问硬件的虚拟接口。...文件系统是内核提供的比较明显的一种抽象,我们可以说它是位于台前的,而相对还有一些是位于幕后的,比如进程调度。在 linux 上,任何 一个时间,都可能有好几个进程或者程序等待着运行。

9.7K30
领券