Linux进程调度相关知识
文章平均质量分 95
进程调度常规源码跟踪
追捕的风
这个作者很懒,什么都没留下…
展开
-
(六)Linux进程调度-实时调度器
1. 概述在Linux内核中,实时进程总是比普通进程的优先级要高,实时进程的调度是由Real Time Scheduler(RT调度器)来管理,而普通进程由CFS调度器来管理。实时进程支持的调度策略为:SCHED_FIFO和SCHED_RR。前边的系列文章都是针对CFS调度器来分析的,包括了CPU负载、组调度、Bandwidth控制等,本文的RT调度器也会从这些角度来分析,如果看过之前的系列文章,那么这篇文章理解起来就会更容易点了。前戏不多,直奔主题。2. 数据结构有必要把关键的结构体转载 2022-01-04 21:00:45 · 1054 阅读 · 0 评论 -
(五)Linux进程调度-CFS调度器
1. 概述Completely Fair Scheduler,完全公平调度器,用于Linux系统中普通进程的调度。 CFS采用了红黑树算法来管理所有的调度实体sched_entity,算法效率为O(log(n))。CFS跟踪调度实体sched_entity的虚拟运行时间vruntime,平等对待运行队列中的调度实体sched_entity,将执行时间少的调度实体sched_entity排列到红黑树的左边。 调度实体sched_entity通过enqueue_entity()和dequeue_enti转载 2022-01-04 20:56:19 · 604 阅读 · 0 评论 -
(四)Linux进程调度-组调度及带宽控制
1. 概述组调度(task_group)是使用Linuxcgroup(control group)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。比如,看一个实际的例子:A和B两个用户使用同一台机器,A用户16个进程,B用户2个进程,如果按照进程的个数来分配CPU资源,显然A用户会占据大量的CPU时间,这对于B用户是不公平的。组调度就可以解决这个问题,分别将A、B用户进程划分成组,并将两组的权重设置成占比50%即可。带宽(bandwidth)控制,是用于控制用户组(task.转载 2022-01-04 20:50:02 · 797 阅读 · 0 评论 -
(三)Linux进程调度器-进程切换
1. 概述进程切换:内核将CPU上正在运行的进程挂起,选择下一个进程来运行。ARM架构中,CPU上一次只能运行一个任务,内核需要为任务分配运行时间来进行调度,以便同时能处理多个任务请求。如下图所示:当进行任务切换的时候,思考下两个问题:怎样通过抢占来实现进程的切换? 当进程切换的时候,到底切换的什么,是怎么实现的?这两个问题,也是本文探讨的主题了。2. 抢占2.1 用户抢占2.1.1 抢占触发点可以触发抢占的情况很多,比如进程的时间片耗尽、进程等待在某些资源上被唤醒时转载 2022-01-04 20:47:53 · 2383 阅读 · 1 评论 -
(二)Linux进程调度器-CPU负载
1. 概述CPU负载(cpu load)指的是某个时间点进程对系统产生的压力。来张图来类比下(参考Understanding Linux CPU Load)CPU的运行能力,就如大桥的通行能力,分别有满负荷,非满负荷,超负荷等状态,这几种状态对应不同的cpu load值; 单CPU满负荷运行时cpu_load为1,当多个CPU或多核时,相当于大桥有多个车道,满负荷运行时cpu_load值为CPU数或多核数; CPU负载的计算(以单CPU为例),假设一分钟内执行10个任务代表满负荷,当一分钟转载 2022-01-04 20:46:19 · 1111 阅读 · 0 评论 -
(一)Linux进程调度器-基础
1. 概述从这篇文章开始,将开始Linux调度器的系列研究了。本文也会从一些基础的概念及数据结构入手,先打造一个粗略的轮廓,后续的文章将逐渐深入。2. 概念2.1 进程从教科书上,我们都能知道:进程是资源分配的最小单位,而线程是CPU调度的的最小单位。 进程不仅包括可执行程序的代码段,还包括一系列的资源,比如:打开的文件、内存、CPU时间、信号量、多个执行线程流等等。而线程可以共享进程内的资源空间。 在Linux内核中,进程和线程都使用struct task_struct结构来进行转载 2022-01-04 20:43:39 · 930 阅读 · 0 评论