WCET学习(七)

  • 在实时嵌入式系统设计中,为了保证系统的安全运行,需要验证系统是否满足时限,即任务必须在截止期之前完成,否则实时系统将失败。
  • 目前衡量实时嵌入式系统实时性的重要指标是最坏情况执行时间(Worst Case Execution Time,WCET)。
  • 文章首先综述了WCET分析以及研究WCET分析的主要方法。分析了在当前多核平台上、复杂处理器架构下WCET分析存在的主要问题,并根据问题展开讨论。
  • 分别针对时序分析、微系统结构分析和多核任务调度策略等方面分析了国内外的研究进展。最后提出了一种基于深度学习的自适应实时DVFS算法,该算法可以进行动态电压和频率调节,以达到节能的目的;同时还能够动态修正程序的WCET值,为未来嵌入式系统中的WCET分析与预测提供指导方法。
  • 硬实时系统对于执行时间的要求非常苛刻,因此在设计此类系统时,通常要在系统实际运行之前对系统的时间特性进行完整的验证,以确保在系统运行过程中规定的时间特性不会被破坏。这一工作被称为时间特性验证。
  • 实时系统的时间特性必须在系统级进行验证,只有系统的每一个部分以及整个系统都满足实时性要求时,这个系统才满足了实时性要求。
  • 最早截止时间优先算法(Early Deadline First,EDF),这是一种将任务的截止时间作为调度优先级衡量标准的测量,一个任务的截止时间越接近越有可能得到优先调度。这种调度策略时根据任务的截止时间来动态分配任务的调度优先级。当新的任务就绪,或者一个任务运行结束时,EDF算法需要对系统中就绪的任务调整优先级,在运行中开销较大。采用EDF算法的调度器只需要知道任务的截止时间即可,通用性较强,可扩展性较高。
  • 在单核场景下一组互不干扰的实时任务来说,有人证明了EDF调度算法是理论上最优的动态优先级实时调度策略。
  • 先来先服务调度算法(First Come,First Serve,FCFS)。这种算法按照任务就绪的时间来调度执行任务,一个任务一旦运行,其他任务必须等待该任务运行结束才会得到调度,这会导致后续的任务产生饥饿问题,实时性不高。
  • 最短优先调度算法(Shortest Job First,SJF)。这种算法根据任务的执行时间长短来划分任务的优先级。执行时间越短的任务越先得到执行,如果不断有较短执行时间的任务就绪,那么此算法会导致执行时间较长的任务产生饥饿问题。对于RTOS来说,这种调度算法也不适用。
  • 时间片轮转调度算法(Roud-Robin,RR)。该算法将任务的执行时间划分成固定的时间片,每个任务轮流占用时间片长度的CPU,当一个任务的时间片用完时,调度执行下个任务。这是一个比较公平的调度算法,系统中的任务都能得到适当的执行时间。但是如果时间片设置较短,会有较多的任务切换次数,带来较大的任务切换开销,时间片设置过长又会导致在队列末尾的任务迟迟得不到调度,因此需要确定合适的时间片大小。
  • CFG中每条边表示程序的一个跳转信息,每个节点表示一个基本块。
  • 基本块是一种程序的划分结构,在一个基本块中不存在跳转的指令,其内部的指令都是顺序执行的。程序的控制流图是一个单入口单出口的有向图。基本块的每条入边代表可能跳到该基本块的路径,每条出边代表可能的跳转地址。
  • 要进行程序流分析的第一步是从程序的源码或者二进制文件中构建程序的控制流图,图中包含有待分析任务的所有指令。在这个过程中,程序中的动态跳转以及函数的动态调用会给CFG构建带来较大的困难。
  • 动态跳转主要来自源程序中的switch/case语句以及goto语句,动态函数调用来源于程序中出现的函数指针以及虚函数的调用。
  • 程序流分析的主要目的是对程序中的不可行路径、循环上限信息进行探测。在CFG中,程序的某些路径可能永远不会走,比如if-else语句中,程序选择了一条分支路径后,其它分支就不会经过,这些路径称为不可行路径。
  • 检测出CFG中的不可行路径,排除在WCET计算之外,能大大提升WCET分析精度。
  • 程序中循环的次数将直接影响循环体中基本块的执行次数,而基本块的执行次数最终又会影响程序的WCET估值,因此求解WCET必须要确定循环的上限。通常循环的上限可以由分析工具通过自动分析或者通过分析人员手动添加约束的方式来确定。
  • 微架构分析:早期的时间分析方法认为单个指令的执行时间是固定的,不会受到上下文的干扰,在某个特定的处理器中,指令的执行时间是固定的,因此简单地认为将某条路径上所有指令的执行时间加起来就是任务真实的执行时间。但是这种方法对于引入了Cache、流水线以及分支预测等复杂器件的现代处理器说已经补在适用。
  • 在现代处理器中,指令的执行时间根据执行时处理器的状态不同,可能产生几个数量级的差异。
  • 一个程序段B的执行时间很大程度上取决于它的前序程序段A执行时所产生的处理器状态,简单地对两个程序段的执行时间相加计算得出的程序执行时间可能会产生极大的分析误差。
  • 由于现代处理器引入了复杂的硬件结构,因此对处理器行为进行分析也是静态WCET分析中最复杂的子任务。
  • 找到控制流图中所有基本块执行时间之和最大的路径,这条路径就是最坏情况下花费时间最长的路径,求出该路径上基本块的执行时间就可得到待分析程序的WCET估值。
  • WCET计算是WCET静态分析子任务中最关键的一个环节,程序流分析和处理器行为分析所采用的方法要根据WCET计算方法来决定。
  • WCET分析主要考虑:(1)找到最长的执行路径;(2)计算这条路径上的时间。对于指令的执行时间,要考虑硬件的特性,在微架构分析中分析得到控制流图中每个基本块的最大执行时间。得到基本块的执行时间后,可以构造一个整数线性规划问题来代表最坏执行时间的求解问题。
  • 处理器行为分析的复杂度取决于处理器体系结构的复杂度,现代处理器引入了许多复杂特性,在微架构分析子任务中,多种复杂特性的综合,可能还会导致“时间异常”问题,这是硬件建模中最难解决的问题之一。

WCET分析工具

本节将会调研市面上的商业和研究型的WCET分析工具,分析它们的功能特性,以及所采用的分析方法,总结其优缺点。

  • aiT是AbsInt公司推出的一款商用WCET分析软件。采用静态WCET分析方法,aiT的输入是二进制可执行文件,这样才可以获取程序所需要的寄存器使用信息以及地址信息,aiT也可以通过读取用户的配置文件来识别用户的标识信息,提高分析的精度。
  • 在处理器行为分析方面,aiT使用抽象解释方法对流水线以及Cache行为进行建模分析,使用整数线性规划技术来进行路径的分析,而且支持可视化界面,用户可以直观地看出分析结果。但是仅支持对LRU替换策略的Cache行为进行建模分析,在识别循环的上限以及跳转的目标地址时,需要用户的介入来帮助工具判断,支持PowerPC、ARM7、Renesas的一部分处理器。由于其仅支持较为古老版本的ARM架构,而且都是针对某一具体硬件平台,且是一个商用软件,所以它的扩展性不高。
  • Bound-T是一个开源的WCET分析工具,由Ada语言编写,采用静态WCET分析方法,使用隐式路径枚举技术来进行WCET的计算。它的输入是带有调试信息的二进制可执行文件,开发人员精准构造了部分处理器的模型,对于特定处理器上指令的读取和解码操作也是手动编码进行的。在这些已有的处理器模型上进行WCET分析将能获得较高的分析精度,但是对于较为复杂的处理器结构,则难以建模分析。在进行循环上限分析的时候,Bound-T可以探测出部分不可行路径信息,但是在工具中并没有实现系统的不可行路径探测机制。该工具的优点是可以自动分析部分循环上界信息以及程序调用信息,必要时才需要用户介入添加标注信息。缺点是不能分析含有递归调用的程序,被分析的程序必须要遵循标准的调用约定,并且不支持含有函数指针的程序。而且对硬件特性的支持较少,只能分析几个特定型号处理器下的目标程序,目前支持的处理器型号有Intel-8051系列,ARM7系列等,工具没有实现对Cache建模分析,因此也没有考虑现代处理器中出现的时间异常问题,Bound-T的实现机制也导致对于复杂新硬件模型的支持较少。
  • Heptane是一个开源的静态WCET分析工具,可以通过参数化的方式选择WCET计算方法,支持源码文件或者二进制文件作为输入,对于源码文件,Haptane使用一种基于时间模型的计算方法来计算时间上限,对于二进制文件,Haptane使用整数线性规划技术来进行WCET计算。
  • 时间模型算法分析迅速,但是对某些程序会造成较高的过度估计,基于整数线性规划技术的算法则需要更多的分析时间和计算能力,能够取得较为精确的分析结果。
  • Heptane的优点是支持对指令Cache、流水线、动态分支预测器的行为进行分析,而且其建模方式可以方便针对其它硬件平台进行扩展。缺点是需要用户在源码层面添加相关注解来帮助工具识别循环信息,对源程序的侵入较大,而且不支持不可行路径分析,对循环上界的判断也会比较悲观,基于时间模型的计算方法不支持编译器的优化选项,而程序在运行时可能会由于编译器的优化提升执行效率,这也会导致WCET的过渡估计。目前该工具不支持数据Cache,支持的硬件平台也仅有Pentiuml以及ARM的几款处理器,对硬件平台的支持较少。
  • Rapitime是一个面向航空航天、自动驾驶等高实时领域的商用WCET分析工具,采用基于测量的技术。Rapitime不仅仅能够得出某段程序的WCET估计值,而且能够得到一段程序执行时间的概率分布。工具可以接受C语言、Ada语言的源码程序以及二进制可执行文件作为输入,由于使用动态测量技术,需要用户准备测量的数据输入工具,输出是一个HTML文件,其中描述了WCET预测和实际测量的执行时间,对每个函数和子函数都进行详细展示。在源码层面,Rapitime不能分析含有递归和函数指针的程序,而且需要在源代码中加入一些跟踪信息,对待分析程序的侵入较大。该工具不依赖于具体处理器的模型,所以理论上它可以为任何处理器单元建模(如乱序执行流水线、多个执行单元、不同层次的缓存等),目前之前Motorola、ARM、MIPS等架构的处理器。
  • Chronos是一个开源的静态分析工具,以C语言源码作为输入,工具能够自动探测到程序中出现的循环,获取循环上限信息,在自动获取失败的情况下,用户可以手动对循环添加约束信息,提升循环上界的判断准确度。Chronos的处理器模型是基于Simplescalar模拟器实现,用户可以根据需要来配置处理器模型信息,例如Cache块大小、分组,流水线级别都可以通过配置文件设置,方便对多种处理器微特性进行建模分析。缺点是目前没有考虑数据Cache,对于不可行路径的分析需要用户提供额外的注解信息,且不支持ARM架构,不能识别ELF可执行文件。
  • 经过调研,目前市面上存在的WCET分析工具都还存在对微架构支持不完整,对ARM架构特性支持不完善的问题,不能保证ARM架构下RTOS实时性分析的精度。Chronos作为一个研究型的分析工具,支持对现代处理器中多种微架构特性进行建模,能够获得较为准确的WCET估值,同时Chronos遵循开源协议,基于Simplescalar模拟器来实现硬件模拟,不需要购买额外的硬件,也方便扩展,适合作为ARM平台下静态WCET分析工具实现原型。
  • 用户可以在Chronos中设置Cache的组数,相联方式,每个Cache块的大小,可以设置动态分支预测单元的历史寄存器、分支表,以及流水线参数。
  • ARM架构下静态WCET分析工具的设计与实现。
  • 在ELF文件解析这一步结束后,必要的指令信息已经全部转换为分析工具内部结构来存储,接下来对程序流的分析,CFG图的构建,不可行路径的分析等过程都不再需要对ELF文件进行处理。
  • 当定位到指令的类型为跳转或函数调用时,需要对跳转的目标地址进行计算。
  • 在使用编译器进行ELF文件的编译时,需要用到“nostdlib”参数,不链接标准C库,这样代码段中第一条指令即为程序中函数的指令,而不是C库中的_start函数。在进行二进制文件解析时,已经将所有需要的程序信息存储在了全剧结构体变量prog中。
  • 最迟执行时间为其所有前置节点中所有最晚结束时间的最大值,处于执行阶段的执行节点,还需要考虑其前序以及后序节点可能存在的竞争关系产生的影响。
  • 最后对构建的执行图多次遍历,每次循环都会让执行节点的开始和结束时间差变小,排除不重叠的时间区间造成的竞争关系,最终所有节点的时间将会固定,就可以得到某一基本块的WCET估计值。
  • 在微内核架构下,应用层的程序想要使用驱动程序和系统服务,需要通过IPC的方式来给相应的服务线程发送服务请求。因此,IPC的时间开销,系统调用的延迟,中断的延迟,都对实时应用的时间有较大影响。
  • 如果一个操作系统没有采用可抢占的调度策略,那么它必定不能满足严格的实时特性,不能归类为实时操作系统。例如,当一个普通任务正在占用CPU执行时,一个紧急的任务需要马上得到执行,但是由于不可抢占的调度策略,紧急任务必须要等待普通任务执行结束,这可能就导致紧急任务的延迟,显然不满足实时系统的要求。
  • 在mginkgo微内核的调度器实现策略中,当一个高优先级任务就绪时,该任务并不能立刻得到执行,调度器还需要执行调度算法来选择待执行任务,mginkgo采用的是优先级位图算法来缩短这一过程的执行时间。
  • 任务的切换定义为:一个操作系统保存上一个任务的上下文环境,调度器选择下一个待执行的任务,并恢复该任务的上下文环境的过程。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值