0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍一种基于核集的多核嵌入式实时调度方法

麦克泰技术 来源:嵌入式系统专家之声 2024-03-05 11:31 次阅读

0 引言

在多任务环境下,嵌入式系统中通常运行着多于处理机数目的任务,这就要求操作系统能够按照某种算法为处于就绪状态的任务动态地分配处理机,处理机调度的实质是对处理器资源进行分配。调度算法的好坏直接影响系统运行时的性能(如响应的及时性、系统的吞吐量以及资源利用率等),是操作系统不可或缺的一部分。

多核处理器的引入使得嵌入式计算平台中的任务能够在不同处理器核心上并行运行,增加系统计算能力的同时也为系统调度带来了新的挑战。在单核处理器中调度程序仅需遍历任务就绪表、找到最高优先级的任务即可,而在多核处理器中不仅要考虑优先级问题,还要考虑任务将在哪个 CPU 核上运行的问题。本文基于多核嵌入式实时操作系统半划分调度算法,针对多核操作系统中任务调度存在的问题,在保证原有操作系统调度机制不被破坏的基础上提出了一种基于核集的多核嵌入式调度方法。改进了原来调度策略中任务只运行于一个处理器核或者可以运行于所有核的状况,使任务能够运行于局部核,在一定程度上可以解决半划分调度算法中负载不均衡问题。

1 多核嵌入式实时调度

多处理机调度分为全局调度(global scheduling)和划分调度(partitioned scheduling)。全局调度允许任务在所有处理核心之间自由迁移;划分调度则是将每个任务绑定到固定的处理核心上运行。全局调度能够提高处理机的利用率,但却会带来额外的系统开销;划分调度则恰恰相反,任务只会在固定处理核上运行,缓存命中率较高,不会产生任务跨核迁移的花销。但由于任务被绑定在固定核上,无法有效利用空闲处理器,处理机利用率较低。为了解决这一矛盾,研究者们提出一种半划分调度算法,该方法将全局调度和划分调度的行为特性进行综合,吸纳了两种方法的优点。在任务调度过程中,一部分任务采用划分调度思想,另外一部分任务则采用全局调度思想。这种策略可以均衡系统的负载,解决空闲处理器难以利用的问题。

1.1 全局调度

全局调度即任务可运行于任一处理器核,操作系统会根据任务优先级、空闲处理器核的情况进行任务的动态分配。全局调度是比较简单的调度算法,通过构建一个全局就绪队列来管理就绪任务。系统有空闲处理器核时便会 从全局就绪队列中调度一个最高优先级的任务。

多核采用该调度策略时,任务执行的时序关系将从单核原有的串行执行序列完全变为并行执行,较低优先级的任务将会与高优先级的任务在不同处理器核上同时运行。多核全局调度示意图如图1所示,在四处理器核系统中,任务1、任务2、任务3虽然优先级不同,但能够同时在不同核上运行,当处理器核3空闲时调度器将较低优先级任务调度到该空闲核上运行。在任务完全不相关的情况下,采用全局调度算法可以充分利用多核特性,有效利用空闲处理器提高系统总体处理机的利用率,自动平衡整个系统负载。

90beabc6-daa0-11ee-a297-92fbcf53809c.png

图1 多核全局调度

虽然多核系统通过全局调度能够带来很多好处,但其存在着不可避免的缺点,主要包括以下三点:

① 无执行序列:多核全局调度在提高任务执行性能的同时,任务的执行序列发生改变,原有任务之间的执行关系将因为并行执行而发生变化,需要对任务的调度安排进行统筹考虑。

② 缓存命中率低:多核处理器中每个处理器核都有自己的缓存,其中存储任务的相关数据,而在全局调度中任务可能会被调度到其他处理器核上,这无疑会降低缓存命中率,从而大幅度降低系统性能。

③ 全局就绪链表访问冲突:系统中仅有一个全局就绪链表属于核间共享数据,在某一时刻只能由一个核使用,访问冲突会随着核数的增大而愈加频繁,增加系统任务切换花销。

1.2 划分调度

针对全局调度的上述缺点,一些多核嵌入式实时操作系统选择使用划分调度。划分调度策略是对任务集进行划分,每个任务都与特定的处理器核建立绑定关系(即指定任务的亲和属性),任务仅在预先分配的处理器核上执行。在任务执行的过程中,不会在处理器核间进行迁移。当创建一个任务时,完全由用户来决定该任务在哪个处理器核上运行。划分调度的基本思想如图2所示,系统为每个处理器核建立一个任务就绪队列,该队列上的任务均为绑定亲和属性的任务,处理器核在进行任务调度时仅在对应自己核号的亲和队列(私有队列)上选择任务。

90cdbd96-daa0-11ee-a297-92fbcf53809c.png

图2 多核划分调度

使用划分调度策略时,任务运行的确定性比全局任务调度的确定性更好,且由于没有任务的跨核调度,系统调度成本显著降低,处理器的缓存命中率与单核情况下保持一致。相对全局调度,划分调度主要存在以下缺点:

① 核间通信较为频繁:由于任务绑定在核上执行,那么不同处理核上运行的任务之间交互较多时,将导致核间通信(中断)的频繁发生,如此会对任务的执行产生一定负面影响。

② 处理器总体利用率相对较低:任务绑定在固定处理器核上运行会导致系统难以利用空闲处理器核,出现有的核空闲、有的核忙绿的低效率现象。

1.3 半划分调度

在全局调度模式下系统的总体处理机利用率较高,但却可能带来较大的系统开销;划分调度则恰恰相反,虽然调度花销较少,但空闲处理机无法充分利用,处理机使用率较低。为了解决这一矛盾,学术界吸收了两种调度方法的优点,基于划分调度提出一种称为半划分调度的调度方法,该方法将全局调度与划分调度结合,同时具有全局调度与划分调度的行为特征。在系统进行任务调度时,大部分任务被预先划分到一个固定的核心上运行,采用划分调度策略;而剩余部分任务则采用全局调度策略,运行在多个核心上。

多核半划分调度示意图如图3所示,半划分调度中有两种任务的就绪队列,分别是全局就绪队列和每核就绪队列,当有 N 个处理器核时,共有 N+1 个就绪队列。系统基于优先级的抢占式调度,处理器在调度时会选择每核就绪队列和全局就绪队列中优先级最高的任务。这种策略可以缓解空闲处理器难以利用的问题、增强系统的负载均衡,同时在一定程度上弥补了全局调度与划分调度的不足。

90dbaf5a-daa0-11ee-a297-92fbcf53809c.png

图3 多核半划分调度

2 基于核集的多核实时调度方法

由于半划分调度基于全局调度与划分调度的思想,系统在减少任务跨核调度的基础上,还可以尽可能充分地利用空闲处理器。但该方法仍然容易出现负载不平衡的现象,例如在航空航天领域,由于确定性需求,需要将大部分任务与处理器核建立绑定关系,所以仍然可能由于任务分配的不均匀导致部分空闲处理器无法得到利用、浪费处理器资源。

此外,当全局就绪链中的任务较多时,处理器缓存命中率也会降低、影响系统性能。本文基于半划分调度提出一种基于核集的嵌入式实时调度方法,为任务增加核集属性。用户在配置好任务的核集属性后,如果设置任务的亲和属性,只能在指定核集范围内设置;如果未设置亲和属性,则任务可全局调度,但此全局调度被限定为核集范围,即局部全局调度。如果用户没有为任务配置核集,则默认核集为所有核。

基于核集的半划分调度示意图如图4所示,任务A指定核集为[0,1],那么任务指定亲和属性只能是0核或者1核;如果不指定亲和属性,则任务进行全局调度,但调度范围由最初的[0,1,2,3,…,N] 缩小为核集指定的[0,1],任务只能在0核或者1核上运行。

90e8b52e-daa0-11ee-a297-92fbcf53809c.png

图4 基于核集的半划分调度

在处理器核选择后继任务时,对全局就绪队列多加一层筛选,将任务核集中包含当前处理器核(即满足核集配置的任务)单独组成一个链表。在满足核集配置的任务链表中找到最高优先级任务,并与亲和就绪队列中最高优先级任务进行比较,将优先级高的任务调度到该处理器核上运行。处理器选择任务过程如图5所示。核2目前空闲或者需要重调度,首先按优先级从低到高依次遍历全局就绪队列:任务A核集不包含核2,不满足核集配置,继续遍历;任务B核集包含核2,加入到满足核集配置的任务链表;以此类推,继续遍历直到最高优先级任务X,核集不包含核2,第一轮遍历完毕,筛选出全局就绪队列中满足核集配置要求的任务集合。然后确认任务B是满足核集配置要 求的任务集合中优先级最高的任务,将任务B的优先级与核2亲和队列中最高优先级进行比较,两者取较高优先级的任务在核2上运行。

90fe4d76-daa0-11ee-a297-92fbcf53809c.png

图5 处理器选择任务过程

3 基于核集的多核实时调度流程

基于核集的实时调度流程图如图 6 所示。

910b122c-daa0-11ee-a297-92fbcf53809c.png

图6 基于核集的实时调度流程图

步骤1:嵌入式系统通常在中断服务程序结束、任务因等待资源阻塞、高优先级任务就绪等触发调度事件发生后开始调度。

步骤2:获取当前核号,用于获取该核亲和队列以及筛选满足核集配置要求的任务集合。

步骤3:遍历该核亲和就绪队列,找到队列上最高优先级任务PrivateHightestTask。

步骤4:遍历全局就绪队列,将满足核集配置的任务筛选出来单独组成一个任务集合。

步骤5:获取步骤4中任务集合中优先级最高的任务 GlobalHightestTask。

步骤6:判断 PriveteHightestTask 的优先级是否高于 GlobalHightestTask 的优先级,如果是,则继续步骤7,否则继续步骤8。

步骤7:将 GlobalHightestTask 置为处理器核调度的后继任务,继续步骤11。

步骤8:判断PriveteHightestTask 的优先级是否等于 GlobalHightestTask 的优先级,如果是,则继续步骤9,否则继续步骤10。

步骤9:将 PrivateHightestTask 与 GlobalHightest Task中就绪时间长的任务置为处理器核调度的后继任务,继续步骤11。

步骤10:将 PrivateHightestTask 置为处理器核调度的后继任务,继续步骤11。

步骤11:处理器核调度确定的后继任务运行。

步骤12:一次任务调度结束,等待下次调度事件触发,进入下一次调度流程,执行步骤1。

4 结语

多核嵌入式系统中半划分调度使用一个全局运行队列来实现负载均衡,以此来提高划分调度的处理器利用率。本文针对半划分调度方法存在的多核负载不均衡问题,提出了改进的基于核集的调度算法,与原来的半划分调度算法相比,理论上该方法在不破坏原有系统调度的前提下,改善了半划分调度算法中处理器负载不均衡的问题,同时能够保证很好的实时性,也可为未来多核嵌入式容器运行配置提供支撑。目前已经在 FT1500-A 上完成了开发测试,任务可正常运行,且可配置任务核集属性,任务只可在指定核集范围内运行,下一步工作将通过实验验证该调度算法在负载均衡方面是否优于原来的半划分调度。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222160
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3430

    浏览量

    128221
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206564
  • 负载均衡
    +关注

    关注

    0

    文章

    97

    浏览量

    12187

原文标题:一种基于核集的多核嵌入式实时调度方法

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一种基于单片机的抢占实时嵌入式操作系统设计

    一种基于单片机的抢占实时嵌入式操作系统设计
    发表于 04-22 12:59

    嵌入式arm调试方法介绍

    ( IDE )般来说是必不可少的,至于嵌入式实时操作系统、评估板等其他开发工具则可以根据应用软件规模和开发计划选用。 Arm处理器 嵌入式开发
    发表于 05-11 16:53

    【好书分享】嵌入式实时操作系统μCOS-II原理及应用

    μC\OS-Ⅱ是个源码开放的嵌入式实时操作系 统的内核。《嵌入式实时操作系统μC\OS-Ⅱ原理及 应用(第3版)》详细地
    发表于 06-30 14:24

    如何进行嵌入式Linux内核实时化研究?

    等),典型的系统有Kansas大学开发的KURT。文献提出了抢占内核调度算法,容易引起内核优先级翻转,文献针对非抢占内核,增加抢占点,该方法需要优秀的
    发表于 08-06 07:15

    实时仿真和嵌入式系统开发有什么方法

    在日益激烈的竞争中,系统的开发周期显得尤为重要,但开发时间与系统安全性、可靠性又有定冲突,如果仍然使用传统的编写代码的模式,显然有些不妥。本文介绍一种基于Matlab/RTW实现实时
    发表于 03-06 07:20

    怎么设计处理器的嵌入式设计平台?

    编程接口共用或并存,可能包含部分可编程模拟电路,单芯片、低功耗。本文主要研究的是应用嵌入式系统开发的软硬件协同设计方法来实现处理器
    发表于 03-13 07:03

    一种基于嵌入式实时内核ARTXl66的电子差速算法

    本文介绍一种基于嵌入式实时内核ARTXl66的电子差速算法
    发表于 05-13 06:46

    介绍一种嵌入式系统图形用户界面的设计方法

    本文以车载影音导航系统为例,介绍一种嵌入式系统图形用户界面的设计方法
    发表于 05-14 06:48

    多核MCU可用于简化嵌入式设计 精选资料推荐

    转自:http://www.elecfans.com/d/851199.html嵌入式系统设计人员面临着对更高性能和更快上市时间的不断增长的需求。嵌入式处理器需要经常实时地执行不断扩展的任务。同时
    发表于 07-19 09:02

    嵌入式Linux操作系统调度算法的相关资料分享

    的改造。主要的方法有:对内核的改造,如双内核途径和抢占内核途径,细化内核的时钟粒度。另一种改造的主要途径是内核的调度策略。进程调度算法优劣决定系统的
    发表于 11-05 08:15

    介绍一种嵌入式系统仿真方法

    /计数器等功能。本文介绍一种嵌入式系统仿真方法,通过一种特殊设计的指令仿真器ISS将软件调试器
    发表于 11-08 06:16

    嵌入式实时系统多核负载均衡调度架构的相关资料推荐

    ,但高负载场景无法实时优化多核负载,造成任务延迟。本文介绍一种多核实时负载均衡的调度架构,均衡
    发表于 12-14 07:25

    嵌入式多核处理器的结构是由哪些部分组成的

      包括同构(Symmetric)和异构(Asymmetric)两。同构是指内部的结构是相同的,这种结构目前广泛应用在PC多核处理器;而异构是指内部的结构是不同的,这种结构常常在
    发表于 12-14 07:47

    介绍一种嵌入式裸机多任务切换方法

    一种嵌入式裸机多任务切换方法有时候为了实现些简单的、对实时性要求不高的任务,采用操作系统不仅增加了程序的复杂性,对低性能单片机的资源占用也
    发表于 02-28 13:27

    一种基于分组的多核嵌入式实时调度算法

    一种基于分组的多核嵌入式实时调度算法_康鹏
    发表于 01-07 21:39 0次下载