体系结构论文导读(四十四):Semi-Clairvoyance in Mixed-Criticality Scheduling 19‘RTSS

文章核心:文章主要在介绍混合关键性调度中的“半先知”模型。它与传统的非先知调度模型(任务执行完后才能知道是否超过预估执行时间)不同。在“半先知”模型下,当任务到达时,它会提前告知其会遵守哪个执行时间估计值(LO或HI关键性)。

其实看完整篇文章我一直有一个疑问,在实际中,千里眼和半千里眼真的可行吗?我们应该怎么判断呢?

千里眼调度假设调度器在任务到达前就已经知道任务的确切执行时间。譬如说在一个真实系统,真的能做到连cache miss这种都能预测在内吗?

半千里眼看起来似乎有那么一些可行性,但是对实际情况下系统对信息的掌握度也要求极高,但是总体而言可行性也不高,尤其是针对具有复杂的交互性的系统(如多核处理器、分布式系统)或者嵌入式异构SoC。
这两者对于信息掌握程度要求的太高了,本人没有看到其实际的应用价值,如果有不同意见欢迎评论区指正。

一、简介与背景

1. 混合关键性系统和Vestal模型

  • Vestal模型是为了解决在现代处理器上实现时间预测性的问题。任务的执行时间存在很大的不确定性,这使得计算出一个准确的最坏情况执行时间(WCET)变得非常困难。
  • 这种执行时间的不确定性源自任务在不同条件下的实际执行时间差异可能很大。只有在非常特殊的“极端情况”下,任务的实际执行时间才会接近其最坏情况执行时间。
  • 在Vestal模型中,每个任务都有多个不同的WCET估计值,分别代表在不同保证级别下对实际执行时间的估计。

2. 传统的非先知调度模型

  • 传统的非先知调度假设,任务的执行时间只有在实际执行过程中才能知道。换句话说,在任务执行之前无法预见它将运行多长时间,必须等到任务执行到一定时长或完成时才知道它是否超过了较低关键性的WCET估计值。

3. 半先知调度模型的提出

  • 半先知模型假设任务在到达时可以提前告诉调度器它会遵守哪个WCET估计值(低关键性LO还是高关键性HI)。这意味着,任务到达时系统就可以知道其最坏的执行时间限制。
  • 作者认为,在某些系统中这是合理的,例如系统开发人员可能为一个任务提供了不同的实现版本,根据任务到达时的具体情况选择合适的版本执行。此外,任务的执行时间通常依赖于系统的当前状态,因此在任务到达时更容易准确估计其执行时长。

4. 半先知调度的优势

  • 与传统的非先知模型相比,半先知调度可以显著简化可调度性分析的复杂性,并降低确保任务在给定时间内完成所需的处理器速度。
  • 这种模型不仅具有实际应用潜力,还从理论上为我们提供了一种中间形式的调度机制,介于**完全先知调度(可以提前知道确切的执行时间)非先知调度(无法知道任务执行时间)**之间。

5. 贡献

  • 文章的主要贡献是提出了一个调度理论框架,并对半先知调度进行了深入分析。
  • 作者在文中列出了研究所得的几项具体成果,展示了半先知调度的能力与局限性。

二、模型定义

A. 我们的任务模型(Our workload model)

这里介绍了一个双关键性系统(dual-criticality system),即任务只有两种关键性等级,分别是低关键性(LO)和高关键性(HI)。具体模型包括以下参数:

  • 任务集 J = {J1, J2, ..., Jn}:每个任务都具有以下属性:
    • χi ∈ {LO, HI}:任务的关键性等级。
    • ai:任务的到达时间。
    • cLi 和 cHi:任务的最坏情况执行时间(WCET)的估计值,分别对应低关键性和高关键性。并且保证cLi ≤ cHi
    • di:任务的截止时间。
系统行为(System behavior)
  • 每个任务有一个实际的执行时间 γi。不同任务集的行为可以根据γi的不同取值分为以下几种情况:
    • 如果所有任务的实际执行时间γi ≤ cLi,则系统处于低关键性行为
    • 如果所有任务的实际执行时间γi ≤ cHi,则系统处于高关键性行为
    • 如果有任一任务γi > cHi,则系统行为被认为是错误的
  • 该模型假设任务在不同的运行时刻表现可能不同,反映了现代处理器执行任务的非确定性。这种非确定性正是引入Vestal模型的动因。
正确性标准(Correctness criteria)

对于混合关键性任务调度算法,正确调度的定义如下:

  1. 在系统处于低关键性行为时,所有任务必须在其截止时间前完成。
  2. 在系统处于高关键性行为时,只有高关键性任务需要在其截止时间前完成。低关键性任务则可以不再考虑是否按时完成。

如果一个调度算法能够正确调度一个任务集J,则称该任务集是A-可调度的(A-schedulable)。

B. 混合关键性可调度性:分类(Mixed-criticality schedulability: A classification)

这里的重点是对不同类型的混合关键性调度算法进行分类,并根据任务实际执行时间γi的揭示时机来区分算法类型:

  1. MC-可调度性(MC-schedulability)

    • 这是目前研究最多的混合关键性调度算法类型,它假设只有在任务执行过程中,才能逐步揭示任务的实际执行时间γi
    • 这类算法要求调度器必须在线上运行时通过任务的实际执行情况来了解其真实的执行时间。代表性的算法包括OCBPMCEDF,以及一些用于调度周期性任务系统的算法,如EDF-VDAMCMC-Fluid
    • 一个任务集如果能被某种MC调度算法正确调度,则称该任务集是MC-可调度的
  2. 先知可调度性(Clairvoyant schedulability)

    • 与MC调度不同,先知调度假设调度器在任务到达之前就知道任务的精确执行时间γi
    • 由于先知调度器预先了解任务的行为,因此可以更容易地通过多项式时间复杂度来判断任务集是否可调度。先知调度是理论上的最优情况,但实际系统中难以实现。
  3. 半先知可调度性(Semi-clairvoyant schedulability)

    • 该模型是本文的主要创新点,介于完全先知调度和MC调度之间。半先知调度假设,调度器在任务到达时知道该任务的执行时间是否会超过其低关键性WCET估计值cLi,但不需要知道确切的执行时间。
    • 这种信息的获得相对简单,且可以通过布尔条件来判断任务执行时间是否超过某个估计值。
C. 一些先前研究的结果(Some Prior Results)
  1. MC-可调度性问题是NP-hard的:即判断一个任务集是否MC-可调度具有很高的计算复杂性。
  2. MC-调度算法的加速因子下限为1.618:即在最理想的情况下,MC调度算法在处理器速度大约为1.618倍时,能够达到与先知调度相同的可调度性能。
D. 结果总结(Summary of Results)

这部分总结了文章对半先知可调度性研究的主要结果:

  1. 没有半先知调度算法的加速因子会小于3/2:也就是说,半先知调度需要比先知调度至少快3/2倍的处理器速度。
  2. 文章提出了一种称为LPSC的半先知调度算法,并证明了其在某些情况下是最优的。如果某个任务集能被任何半先知调度算法正确调度,那么LPSC也可以调度该任务集。
  3. LPSC算法的加速上限为3/2,表明这个加速因子是一个紧密的界限。
  4. 文章的研究还扩展到对周期性任务的半先知调度,结果表明半先知调度在这种情况下的加速因子可以达到1,而MC调度的加速因子至少为4/3。

总结来看,半先知调度算法相较于MC调度在复杂性和速度需求上有显著优势,同时在实际系统中可能具有更大的应用潜力。

三、半先知调度器的加速因子的下界证明

问题背景

调度算法的加速因子是指在非理想情况下,为了能够像理想调度器(即先知调度器)一样有效地调度任务,处理器需要的额外速度。证明目标是证明半先知调度算法的加速因子不能低于3/2。

任务实例

考虑包含以下三个任务的任务集 J

  • J1:低关键性任务(LO),到达时间是0,最坏情况执行时间为1,截止时间是1。
  • J2:高关键性任务(HI),到达时间是0,低关键性执行时间是1,高关键性执行时间也是1,截止时间是2。
  • J3:高关键性任务(HI),到达时间是1,低关键性执行时间是0,高关键性执行时间是1,截止时间是2。

先知调度的情况

在先知调度器的情况下:

  1. 如果任务J3的实际执行时间γ3 = 0(意味着是低关键性行为),调度器只需在时间[0, 1)内调度任务J1,并在[1, 2)内调度任务J2。
  2. 如果任务J3的实际执行时间γ3 > 0(意味着是高关键性行为),调度器会丢弃任务J1,在时间[0, 1)内调度任务J2,并在[1, 2)内调度任务J3。

半先知调度的分析

接下来,考虑一个半先知调度器在速度为f(f ≥ 1)的处理器上如何调度该任务集 J

  1. 时间[0, 1)

    • 在这个时间段内,调度器必须为任务J1提供1个单位的执行时间。如果执行时间小于1,而在任务J3到达时发现其执行时间γ3 = 0(即系统处于低关键性行为),那么调度器将违背正确性标准,因为它未能在低关键性行为中按时完成低关键性任务J1。因此,调度器必须在时间[0, 1)内完成任务J1的执行。
    • 因此,在时间[0, 1)内,任务J2最多只能获得 (f - 1) 单位的执行时间,还剩下 (1 - (f - 1)) 单位的执行时间需要完成。
  2. 时间[1, 2)

    • 现在假设在任务J3到达时,系统被发现处于高关键性行为(γ3 = 1),那么任务J2和任务J3都需要在剩余的时间内完成其执行。任务J2还剩下 (1 - (f - 1)) 单位的执行时间,而任务J3需要完整的1个单位的执行时间。
    • 在时间[1, 2)内,调度器必须安排任务J2和J3的执行时间之和不超过处理器速度。换句话说,它们的剩余执行时间之和应该小于或等于处理器速度f
    (1−(f−1))+1≤f

    解这个不等式:

    f≥3/2

结论

通过这个分析,证明了这个三任务实例J在速度小于3/2的半先知调度器上是不可调度的。因此,半先知调度器的加速因子的下界是3/2。换句话说,为了确保半先知调度器在这种情况下的调度能够和先知调度器一样有效,处理器的速度至少要是先知调度器所需处理器速度的1.5倍。

这个结果表明,任何半先知调度算法的加速因子都不能小于3/2。

这里其实我一直有一个疑问:
文章只是通过一个例子就给出了一个下界,这个下界是严格的吗?如果是,如何证明它是最坏的(即严格的)?有没有可能下界是2,即某个任务集只有在f>=2的时候才可调度?

 四、LPSC

1. 直觉(Intuition)

LPSC的设计直觉是基于以下几点:

  • 在调度过程中,系统的关键性行为未被明确为**高关键性(HI)**之前,调度器必须保证所有低关键性任务(LO)的截止时间能够被满足。因此,调度器必须为低关键性任务预留足够的执行时间。
  • 然而,一旦高关键性任务的执行时间显示出系统处于高关键性行为,那么调度器不再需要保证低关键性任务的截止时间。这意味着在这种情况下,之前分配给低关键性任务的执行时间会被浪费。
  • 因此,在系统状态未被标记为高关键性之前,LPSC算法旨在最大化高关键性任务的执行时间,同时确保仍有足够的时间完成所有低关键性任务,以防系统保持在低关键性行为。

2. 线性规划可调度性测试(Linear Program for Schedulability Test)

LPSC算法的核心是基于线性规划来进行调度。在详细介绍算法之前,文章首先定义了可调度性测试的步骤:

  1. 定义线性规划模型:模型的可行解即为系统在所有低关键性行为下可调度的条件。
  2. 目标函数:在尚未明确系统处于高关键性行为之前,尽量减少为低关键性任务保留的执行时间,从而最大化高关键性任务的执行。
  3. 运行时调度:当系统处于低关键性行为时,基于线性规划模型的解进行任务调度。
  4. 高关键性行为的验证:通过模拟验证在高关键性行为下的任务调度情况。

§1. 线性规划模型的定义(Linear Program for Schedulability Test)

  • 关键时间点(Key Instants):首先,将任务的到达时间和截止时间排序,定义为一系列关键时间点。假设最早的任务到达时间是0,接下来有 2n - 1 个其他关键时间点。
  • 变量定义:定义**(2n - 1)** 个变量 li,表示在时间段[0, ti)内,为低关键性任务预留的执行时间。

接下来定义一系列约束条件,确保在不同时间段内的任务调度是可行的:

  1. 约束1:确保每个时间段[t_i, t_j)内有足够的时间为低关键性任务预留执行时间。这个约束表达式是:

    其中,S_L_ij 是在时间段[t_i, t_j)内到达的所有低关键性任务的集合,c_Lk 是这些任务的低关键性最坏情况执行时间(WCET)。

  2. 约束2:在为低关键性任务保留了时间后,还要确保剩余时间足以满足所有高关键性任务的低关键性最坏情况执行时间要求。这个约束表达式是:

    其中,S_H_ij 是时间段[t_i, t_j)内到达的所有高关键性任务的集合。

  3. 约束3:确保为每个时间段保留的时间是非负数,即li 是递增的,表示时间预留必须合理:

通过这些约束条件,线性规划模型的解即为一个在所有低关键性行为下可行的调度方案。

§2. 目标函数(Optimization Criterion)

文章为线性规划模型指定了一个目标函数,即最小化为低关键性任务保留的执行时间总和,从而为高关键性任务分配更多的执行时间。目标函数为:

由于较小的li意味着保留的低关键性任务执行时间更少,因此线性规划会倾向于减少早期时间段的li,从而为高关键性任务争取更多执行时间。

§3. 低关键性行为下的运行时调度

运行时调度是在系统实际运行过程中如何管理任务的调度。在半千里眼调度算法LPSC中,系统在没有明确识别出高关键性任务行为之前,首先按照低关键性行为模式来进行调度。具体的步骤是:

  1. 在每个关键时间点 ti,调度器根据线性规划的解来确定为低关键性任务保留的执行时间段

    • 在时间段 [ti-1, ti) 内,调度器需要根据线性规划的结果为低关键性任务(LO-criticality jobs)预留一部分时间。这个预留时间是根据线性规划模型的解算出来的,确保即使整个系统一直处于低关键性行为模式,所有低关键性任务也能够按时完成。
    • 剩下的时间则分配给高关键性任务(HI-criticality jobs),以便尽可能多地执行它们。
  2. 如果高关键性任务没有完全使用分配给它们的时间,调度器可以利用这些时间进一步执行低关键性任务

    • 在有些情况下,尽管时间已经分配给了高关键性任务,但它们可能不需要用完全部时间(例如,它们完成得比预期更快)。这种情况下,调度器会将剩余的时间重新分配给低关键性任务,继续执行它们,以确保尽可能地完成更多的工作。
  3. 调度顺序按照"最早截止时间优先"(EDF)策略执行

    • 在LPSC算法中,任务的执行顺序是基于“最早截止时间优先”(EDF)策略。也就是说,调度器会优先选择那些截止时间较早的任务进行执行,不管这些任务是高关键性还是低关键性。这种策略在调度领域被广泛应用,因为它能够有效减少任务错过截止时间的情况。

§4. 高关键性行为下的可调度性验证

当系统进入高关键性行为时(即某个高关键性任务的执行时间超过了它的低关键性估计值),调度器会进行调整,这时低关键性任务可能会被丢弃。验证高关键性任务能否正确调度的步骤如下:

  1. 模拟不同的高关键性行为情况

    • LPSC通过模拟高关键性任务的行为来验证是否能保证它们按时完成。每当一个高关键性任务表明其执行时间将超过低关键性估计值,调度器会切换到高关键性行为,并抛弃所有还未完成的低关键性任务。
  2. 在关键时间点 ti 假设系统进入高关键性行为

    • 每当某个高关键性任务到达并表明需要按高关键性模式执行时,系统会丢弃低关键性任务,并开始全力执行所有高关键性任务,确保它们按时完成。
  3. EDF调度策略应用于高关键性任务

    • 进入高关键性模式后,调度器会继续按照“最早截止时间优先”(EDF)的原则来调度剩余的高关键性任务。如果所有高关键性任务在规定的截止时间前都能完成,则说明系统在该行为模式下是可调度的。

通过O(n)次模拟,调度器验证了所有高关键性任务的可调度性,最终算法的时间复杂度为O(n^3)。

五、LPSC最优性 

如果任何半先知调度器可以成功调度一组任务,那么LPSC也可以成功调度这些任务

1. 直观观察(Observations)

  • 观察1:如果在低关键性行为模式下,线性规划模型不可行,那么没有任何调度器能够调度该任务集。这意味着,不仅半先知调度器无法调度这些任务,即使是完全先知调度器也无法做到。这一点是显而易见的,因为线性规划模型是根据任务的关键性和截止时间来构造的。如果线性规划模型不可行,那么无论调度器如何调度任务,也无法满足这些任务的时间需求。

  • 观察2:对于任何能够调度任务集的调度器B,线性规划中的约束条件(不等式1、2、3)必须成立。如果调度器不能满足这些约束条件,那么它就无法正确地在低关键性模式下调度任务。

2. 引理1(Lemma 1)

LPSC的调度是基于线性规划的最优解。引理1证明了LPSC的解是最低的可行解,即任何其他调度器B都必须至少使用与LPSC相同甚至更多的时间来执行低关键性任务。

证明

  • 假设有另一个调度器B,它能够调度任务集J,并且满足所有线性规划约束条件。如果B能够用比LPSC更少的时间执行低关键性任务(即Lk(B) < Lk(A)),那么我们可以构造一个新的解A',该解比LPSC的解A更优,即总的时间分配 ∑li(A′)<∑li(A)。
  • 这将导致矛盾,因为LPSC是通过线性规划求解的最优解,意味着它的总时间分配是最小的。因此,任何其他可行的解B必须至少与LPSC的解一样,甚至花费更多的时间来调度低关键性任务。

3. 引理2(Lemma 2)

引理2进一步证明,LPSC总是完成最小可能量的低关键性任务,以便为高关键性任务预留更多时间。具体来说,LPSC在任何时间点完成的低关键性工作量不会超过其他调度器B

证明

  • 引理2通过归纳法证明,在每个关键时间点上,LPSC花费的时间不会超过其他调度器。归纳步骤如下:
    1. 在时间点t0​处,显然成立,因为两者都没有做任何工作。
    2. 假设在时间点ti−1处,LPSC执行的低关键性任务量不超过调度器B。接下来分析在时间段[ti−1,ti)内的情况:
      • 如果LPSC在该时间段内只执行高关键性任务,那么它执行的低关键性任务量不会增加,因此仍然满足条件。
      • 如果LPSC执行了一部分低关键性任务,并且没有足够的高关键性任务可以执行,那么调度器B也不可能执行更多的低关键性任务。因此,LPSC执行的低关键性任务量仍然不会超过B。
    3. 根据归纳假设,在每个时间点上LPSC都不会执行超过B的低关键性任务,因此结论成立。

4. 推论1(Corollary 1)

基于引理2的结果,推论1指出:LPSC在每个时间点上执行的高关键性任务量至少和其他调度器一样多,甚至更多。这是因为LPSC最小化了低关键性任务的执行时间,从而为高关键性任务预留了更多的时间。

5. 主定理(Theorem 1)

主定理证明了LPSC的最优性:如果LPSC声明一个任务集J是不可调度的,那么没有其他半先知调度器能够调度该任务集

证明

  • 首先,假设LPSC通过线性规划判断一个任务集J在低关键性模式下不可调度。根据观察1,这意味着没有任何调度器能够在低关键性模式下调度该任务集,因此在低关键性模式下,这个结论显然成立。
  • 其次,假设LPSC通过模拟判断在高关键性模式下也不可调度。根据引理2和推论1,如果LPSC在某个关键时间点发现某个高关键性任务不能按时完成,那么其他调度器B在同样的情况下也无法完成这个任务。这是因为LPSC在高关键性任务上已经花费了最大的时间,而B只能做得更少或相同。因此,如果LPSC无法调度高关键性任务,那么B也无法做到。
  • 因此,主定理成立:如果LPSC声明任务集J不可调度,那么没有其他半先知调度器能够正确调度这个任务集。

六、LPSC加速因子 

1. 引理3:任务干扰(Interference Between Jobs)

引理3指出,具有较晚截止时间的任务不能干扰具有较早截止时间的高关键性任务。

  • 证明思路
    1. 高关键性任务之间的顺序:LPSC使用**最早截止时间优先(EDF)**算法调度高关键性任务,因此截止时间较晚的高关键性任务不会干扰截止时间较早的任务。
    2. 低关键性任务干扰的消除:假设低关键性任务Jl干扰了高关键性任务Jk,也就是说在Jk​被调度前,Jl获得了处理器时间。通过交换任务的执行顺序(将Jl和Jk的执行时间对调),可以证明调度器仍然满足约束条件,并且不会违反之前的引理2。因此,低关键性任务不会干扰高关键性任务的调度。

这个引理确保了高关键性任务可以优先于低关键性任务调度,保证调度的合理性和高效性。

2. 引理4:高关键性任务保持忙碌(HI-Criticality Tasks Remain Busy)

引理4指出,当系统中持续存在未完成的高关键性任务时,LPSC调度器会优先处理这些高关键性任务,确保它们在规定的时间间隔内尽量完成。

  • 证明思路
    • 在每个关键时刻ti​到tj​之间,如果始终存在尚未完成的高关键性任务,调度器会优先处理这些任务,并将它们的执行量最大化,直到任务完成或没有其他高关键性任务待处理。
    • 如果在某个时间点上低关键性任务获得了执行时间,那么这说明高关键性任务在该时刻没有未完成的工作。因此,调度器会根据需要分配时间,确保高关键性任务总是优先。

这个引理为后续的加速因子证明打下了基础,确保调度器在高关键性模式下可以有效利用处理器资源。

3. 关键点定义与重要量的引入

为了证明加速因子,文章定义了一个关键时刻(pivotal instant),用来作为参考点,帮助理解调度器如何在不同的时间段处理高关键性任务。

  • 定义关键时刻(pivot):关键时刻是指从某一时刻开始到当前时刻,系统保持忙碌且没有待处理的高关键性任务的时刻。这种时刻用来分析调度器如何处理从低关键性到高关键性模式的转换,并为后续的时间分析提供基准。

4. 主定理:LPSC的加速因子为3/2

主定理通过证明如果某个任务集可以由先知调度器以正常速度调度,那么LPSC可以在处理器速度为3/2时成功调度这些任务。

  • 证明思路

    1. 低关键性模式下的调度:如果系统一直保持在低关键性模式下,那么LPSC和先知调度器一样,都要遵循线性规划模型的约束条件。由于LPSC在低关键性任务的处理上不会比先知调度器做得更差,因此在这种模式下,LPSC能够像先知调度器一样按时完成任务,即使处理器速度为1。

    2. 高关键性模式下的调度:假设LPSC在某个时间点(例如tj)切换到高关键性模式,并且某个高关键性任务在时间tk>tj处错过了截止时间。根据引理3,高关键性任务不会被低关键性任务干扰,因此我们只需要考虑高关键性任务的调度情况。通过对调度器在关键时刻的工作量进行分析,证明即使处理器速度为3/2,LPSC也能够按时完成所有高关键性任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

D了一天bug忘了编译

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

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

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

打赏作者

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

抵扣说明:

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

余额充值