Linux2.4与Linux2.6内核调度器的比较研究

发布者:DelightfulWish最新更新时间:2007-07-24 来源: kangu.net关键字:负载  平衡  算法  机制 手机看文章 扫描二维码
随时随地手机看文章
Linux的内核开发是一个漫长的过程,自2001年11月开发出2.5.0以来,Linux内核的发展十分迅速,作了很多重大的改进,性能也有了很大的提高。内核调度器的改进是最主要的进步之一,本文对比研究了Linux2.4和Linux2.6的调度器,全面剖析了Linux2.6对调度器的改进。

一个成功的调度器的基本要求可以概括为以下三点:

(1)减少花在调度上的时间,以增加花在执行程序上的时间;

(2)在多处理器系统上,保持处理器的负载平衡;

(3)对交互式应用有良好的响应速度。

但是,一个成功的调度器是很难设计好的,因为一个真正投入运行的系统受到很多因素的制约。相对于Linux2.6,Linux2.4的调度器有很多的不足之处,2.6版本的Linux内核使用了新的调度器算法,称为0(1)算法,它在高负载的情况下执行得极其出色,并且当有很多处理器时也可以很好地扩展。

O(n)算法,O代表order,括号里的数字代表最坏情况下算法效率的上限取决于算法涉及到的元素的个数,O(1)说明是一个常数,在这种情况下,每次调度的效率是一样的,与涉及的元素的多少没有关系,O(n)表示算法效率取决于算法涉及元素的个数。

1 Linux2.4的调度机制

Linux2.4的调度机制可以用下面的算法来描述,示意图如图1所示。

所有的就绪进程都在一个全局的就绪进程队列中,这个队列没有任何有意义的排序;时间片重算算法是在所有的进程都用尽它们的时间片以后才重新计算。整个队列由一个读/写自旋锁(read/write spinlock)保护着,这样多个处理器可以并行访问,但同时提供写操作的互斥访问。

由算法可以看出,Linux2.4的调度算法可以说是一个O(n)算法,因为调度器挑选执行进程的开销是随系统中就绪进程 的增长而线性增长的。同时,当系统中有多个处理器时,访问就绪进程队列就成了瓶颈,性能也会显著的下降。因而有很多的缺点:

(1)每次调度时,调度器都要线性遍历这个队列,以找出最值得运行的进程执行:当系统负载很高的时候。可执行进程队列会很长,线性搜索的时间是线性增长的,这个时间会很长,当这个时间足够长的时候,有可能出现多个处理器选择了同一个进程的情况,这样,有些处理器会发现,他选择的进程已经分配了其他的处理器,而不得不重新选择,甚至出现选择运行进程的时间比实际执行进程的时间还要长的情况。

(2)当大多数的就绪进程的时间片都用完而又还投有重新分配时间片的时候,SMP系统中有些处理器处于空闲状态,这将影响SMP的效率。

(3)当空闲的处理器开始执行那些时间片尚未用尽而处于等待状态的进程(如果它们自己的处理器忙)时,会导致进程开始在处理器之间“跳跃”,实时进程或者占用内存大的进程在处理器之间跳跃会严重影响系统的性能。

(4)在一个有很多处理器的系统中,当进程用完它们的时间片以后需等待重算,以得到新的时间片,从而导致大部分的处理器处于空闲状态;这将影响SMP的效率。

因此,不难看出当系统中有大量的可执行进程时,选择一个进程去执行可能要花费较长的时间,系统中有多个处理器的时候,难度就更大了,这种调度,在多处理器或者系统负载比较高的情况下,性能受到影响。

2 Linux2.4调度器性能低下的原因

从上面的分析可以看出,造成Linux2.4调度器性能低下的主要原因如下:

(1)系统中调度算法属于O(n),开销是线性增长的;

(2)只有一个全局的就绪进程队列,对多处理器的伸缩性支持不好;

(3)处理器的亲和性不好,容易导致进程在处理器之间“跳跃”;

(4)时间片的重算循环制约了多处理器的效率。

Linux2.6做了很大的改进,它采用O(1)算法,它在高负载的情况下执行得极其出色,并且当有很多处理器时也可以很好地扩展,不但大大改善了对SMP的支持,同时也兼顾了单CPU或者双CPU系统的要求。

3 Linux2.6调度器的改进目标

为了改善Linux2.4的上述不足,Linux2.6的调度器可以通过提供下列新的特性来改善调度器的性能:

(1)提供完全的O(1)调度算法,也就是说,不管系统中进程数量的多少,调度器中所有的算法都必须在常数时间内完成。

(2)应该对SMP有良好的可伸缩性,理想情况下,每个处理器应该有独立的可执行进程队列和锁机制。

(3)应该提高SMP的处理器亲和性,但是同时也应该有在负载不平衡的时候在处理器间迁移进程的能力。

4 Linux2.6的调度机制

新的调度器都实现了这些目标,具体方法是。基于每个CPU来分布时间片,并且取消了全局同步和重算循环。

每个进程有两个数组,活动就绪进程队列数组和不活跃就绪进程队列数组。每个数组中有140个就绪进程队列(runqueue),每个队列对应于140个优先级的某一个。由一个位图来指示哪些队列是空的,哪些不是空的,每个队列都是先进先出的(FIFO)。这样,在挑选进程的时候,只要通过find_first_bit找到第一个不为空的队列,并取队首的进程就可以了。

如果一个进程消耗完了它的“时间片”,就进入不活跃就绪进程数组的相应队列的队尾。当所有的进程都“耗尽”了它的“时间片”后,交换活跃与不活跃就绪进程队列数组的指针就可以了,不需要任何其他的开销。

这样,不管队列中有多少个就绪进程,挑选就绪程的速度是一定的,所以称为0(1)算法,该算法可描述如下,示意图如图2所示。

这个算法有很多的优点,简述如下:

(1)每个处理器都有独立的就绪进程队列,各个处理器可以并行地运行Scheduler程序来挑选进程运行,不同处理器上的进程可以完全并行地休眠、唤醒和上下文切换。

(2)进程只映射到一个处理器的就绪进程队列中,不会被其他的处理器选中,因而也就不会在不同的处理器之间跳跃。

当然,处理器有时确实需要在处理器之间迁移进程,例如负载不平衡的时候,每个处理器每200ms检查一次其他的处理器是不是处在负载不平衡的状况下,就绪进程队列为空的处理器会每lms检查一次。

但是这种情况并不是频繁的发生,所以处理器的亲和性基本能得到保证。

新的调度器的性能确实有很大提高,一个服务器在多个处理器间传送大量的消息的测试结果如表1所示。

从表中可以看出,使用新的调度器,在同样的时间内系统能作更多的事情。

5 Linux2.6调度器的不足

新的调度算法在以下几个方面有待改进。

首先,尽管处理器的速度在很快的发展,但是存储体系的速度发展却是相对比较缓慢,对存储器的操作时间往往形成瓶颈。

调度器给处理器分配进程的时候应该考虑进程的相关性。考虑这样的一种情况:两个进程频繁的通过管道或者共享内存通信,测试表明,它们在同一个处理器上工作会更好,因为不用涉及到把数据从一个处理器的caehe里拷贝到另一个处理器的cache里。而目前的调度器不能保证将这样有着密切联系的进程分配到同一个处理器上。同样的问题也存在于设备的相关性。

其次,仍是进程迁移问题,因为在处理器间迁移不同进程的代价是不尽相同的,所以在迁移进程的时候,应该适当考虑进程的特点。

迁移进程的时应考虑进程的大小(这里是指占有内存资源的大小),迁移进程的时候,并设有考虑到进程占用内存的大小,迁移大的进程到其他的处理器会较严重的影响系统的性能。试想出现这样情况:处理器A把它惟一的大进程迁移到了处理器B,而处理器B上的所有进程都是大进程,存储资源原本就紧张,这样一来,处理器A上的进程存储资源就很丰富。而处理器B则更加槽糕。目前,Linux2.6调度器在迁移进程的时候还没有考虑进程的大小。

最后,当系统检测到需要迁移进程以平衡负载的时候,是不是真的非平衡负载不可呢?当系统的负载不平衡且很轻微的时候,是不一定需要平衡负载的。假设有这样情况:有六个进程要求同时执行完毕,但是系统中只有四个处理器。这样,总有两个处理器有两个进程,而其他两个处理器只有一个进程。这就出现问题,因为系统总是不平衡的,导致总有进程在同处理器间迁移,这也就形成了跳跃。

6 对Linux2.6调度器的几点改进建议

同一个任务队列的进程和同一家族的进程尽量映射到同一个处理器上,因为这些进程之间需要频繁通信的可能性是最大的;还可以动态地调整进程与处理器的映射,当监测出两个处在不同的处理器上的进程频繁通信的时候,就利用每200ms检查负载平衡的计划将它们调整到同一个处理器上。

可以在每个进程的就绪进程位图中存储一些大进程的标志信息,跟本处理器中大进程占的比重来迁出或者迁入大进程。

设置一个调节负载平衡的处理器负载阈值load_threshold,在load_balance函数中检查系统欲调节负载的处理器的实际负载,没有超过事先给定的threshold,就不对这个处理器作真正意义上的负载平衡调节。

关键字:负载  平衡  算法  机制 引用地址:Linux2.4与Linux2.6内核调度器的比较研究

上一篇:赛灵思XPS 8.2版本开发套件推进嵌入式处理的开发
下一篇:基于EP7312的新型嵌入式系统的实现

推荐阅读最新更新时间:2024-05-13 18:37

半导体所在硅量子点发光机制研究取得重要成果
延续了半个多世纪的摩尔定律预计将在2020年左右失效,硅基光电集成技术有望接替微电子成为未来信息技术的基石,但硅基光电子集成技术的实用化面临缺少硅基片上光源这一最后障碍。因此,硅基片上光源是当前半导体技术皇冠上的明珠,其研制成功将引领整个硅基光电子集成技术的重大变革。硅光电集成技术处于前沿探索阶段的半导体量子计算芯片的核心地位,可为集成在同一个芯片上的量子器件与光电器件提供信息交换和通信。 国际上,已提出硅量子点、硅锗超晶格、锗锡合金、应变锗、III-V族与硅的混合集成、稀土元素掺杂、硅同素异晶体等硅基片上光源方案,但迄今还没有可用于硅光电集成技术的实用化光源。硅量子点在1988年被制备出后,得到广泛研究,成为实现硅发光的有力候选
[半导体设计/制造]
数字图像空域滤波算法的FPGA设计与实现
  在图像通信、遥感图像分析、医学成像诊断等应用领域,为了便于显示、观察或进行进一步的处理,常常需要对原始的数字图像进行特征提取(如边缘检测、边缘锐化)、噪声平滑滤波、几何校正等处理,这类图像处理技术称为图像的预处理。在实际应用中,空域滤波算法被广泛地应用于图像的预处理技术中。   空域滤波算法是图像增强技术的一种,直接对图像的象素进行处理,不需要进行变换。常见的滤波算子如锐化算子、高通算子、平滑算子等,可以完成图像的边缘提取、噪声去除等处理。这些滤波算子尽管功能不同,实现方法却都是类似的,都是通过模板卷积的方法来实现的。   VLSI技术的迅猛发展为数字图像实时处理技术提供了硬件基础,其中FPGA(现场可编程门阵列)的特点使
[嵌入式]
数字图像空域滤波<font color='red'>算法</font>的FPGA设计与实现
关于扫地机器人路径规划算法的解读
(文章来源:领衔资讯) 随着人们生活水平的提高,人们对于智能家居的需求日益旺盛,扫地机器人就是其中之一,据前瞻网发布的数据显示,2018年扫地机市场增长预计达到120亿元,随着扫地机器人技术的不断发展,未来扫地机器人将会有更广阔的市场空间。在扫地机器人中,路径规划是其最核心的技术,所谓路径规划是指根据自身对环境进行认知,来确定周围环境和自身位置信息,进而规划出一条最优运行路线。同时又能高效完成清扫任务。 通常,移动机器人实现路径规划需要解决这三大问题:1.机器人从初始位置到目标位置的运动;2.通过相关算法使机器人能够绕开障碍物,并且经过某些必须经过的地方完成对应的工作任务;3.在完成以上任务的前提下,能做到机器人运动轨迹
[机器人]
基于DSP的光伏电池最大功率跟踪算法设计
1 引言 传统的燃料能源正在一天天减少,对环境造成的危害日益突出,同时全球还有20亿人得不到正常的能源供应。这个时候,全世界都把目光投向了可再生能源,希望可再生能源能够改变人类的能源结构,维持长远的可持续发展。太阳能以其独有的优势而成为人们重视的焦点,越来越多的国家开始实行“阳光计划”,开发太阳能资源,寻求经济发展的新动力。因此,研究并网逆变器的设计有着广阔的前景和意义。限制光伏系统的主要因素有两点:⑴初期投资比较大;⑵太阳能光伏电池的转换效率低。目前我们通常使用的光伏电池效率在15%左右,即使世界上最先进技术的光伏电池在特殊的实验条件下也只能达到40%,因此光伏电池最大功率跟踪就变得十分重要,所以长期以来都是学术界研究的热点。
[嵌入式]
警惕硬件电路测试中的一些陷阱
  在平时测试硬件电路的时候,经常会遇到一些容易忽视又不容易觉察的问题,但是我们又必须正视这些问题的存在,并想方设法减弱或者消除这些问题,这里称之为硬件电路测量中的陷阱。   测试 仪器 和 仪表 的负载效应和滤波器效应   在用万用表测量电压或者电流的时候,万用表都是作为一个负载和测量对象并联或者串联在一起。如果测量对象的负载大小和万用表的等效负载的大小相比,如果属于相同数量级大小,那么万用表负载就一定会对测量对象产生影响。比如测量电压,被测负载的大小如果是10K,那么如果所采用万用表的等效负载也是这个这个数量级的,那么测试的结果一定会有很大的误差。根据并联电路中的分流理论,如果要减小这种误差,就必须选择等效负载大的万用表,并且
[测试测量]
警惕硬件电路测试中的一些陷阱
机器人循线算法原理与实践
对于机器人的循线,为了获得场地上白线(黑线)的信息,硬件结构一般有如下几种种类。 1、红外对管阵列。采取这种方式的机器人比较多,尤其在各种机器人竞赛中,几乎是标准配置。但是这种技术有一个致命的弱点,就是对于场地光线的干扰特别敏感,而且也很难把红色和白线区别开来,所以使用受到一定的限制。一般解决这类问题的方法是在红外光上加载一个调制波,通过检测这个调制波来消除场地光线的干扰,至于如何解决红色和白色的区别问题,那就几乎是五花八门了。 2、光纤传感器阵列。采用这种传感器阵列的原因是,光纤非常细,在单位面积内可以安装更多的传感器,从而获得更精确地场地信息。当然,钱也也花得更多。 3、线性CCD。这种硬件方法几乎是一种对场
[嵌入式]
华为智能驾驶软件算法及硬件方案
国内智能驾驶的标杆换了,之前小鹏一骑绝尘,看智能驾驶都得盯着小鹏汽车看,但是最近余承东的“遥遥领先”已经魔性的摇到了智能驾驶,特别是华为的ADS 2.0从成本上已经大幅度下降进入20-30万区间的汽车,所以本文将从以下: 遥遥领先的华为智能驾驶 华为智能驾驶硬件 华为智能驾驶软件算法 三个部分,也分别对应为智能驾驶功能,硬件,算法三个方面去分享交流下华为的智能驾驶,希望能给大家带来一些信息。另外文末有小调查,你觉得华为智能驾驶在市占率上是不是能像其技术那样遥遥领先? 遥遥领先的华为智能驾驶 我们一般谈智能驾驶,脑海里面常常浮现的就是领航辅助,记忆泊车等高阶的智能驾驶,其实一个完整的智能驾驶功能体系包括三个方面: 安全,也就是我
[嵌入式]
华为智能驾驶软件<font color='red'>算法</font>及硬件方案
集装箱装载问题的模拟退火遗传算法
摘要:将模拟退火的思想引入遗传算法中,将两者结合起来,探讨了模拟退火遗传算法在复杂集装箱装载中的应用,以此达到缩小搜索区域,增强算法的收敛性的目的。该算法充分发挥了遗传操作中交叉算子的作用,并通过实验仿真表明该算法优于传统的计算方法。 关键词:集装箱装载 模拟退火遗传算法 启发式算法 目前,物流业正处在快速发展的时期,集装箱运输将会有大幅度的增长。集装箱装载作为物流配送过程中的一个关键性环节,可提高配送业务的自动化水平、提高货物装载的优化程度、提高配送业务的工作效率和规范业务流程等。 从二十世纪70年代初正式开始,集装箱装载问题就引起了应用的研究和探讨。装箱问题就是将不同尺寸的物品摆放入有一定容易的容器中,以获得某种最佳的
[传感技术]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved