谈谈软件的任务调度策略
汽车
2024-10-28 08:41
广东
任务调度设计是系统的骨架,它是决定系统能否最大化利用硬件性能的因素之一。系统的任务调度必须考虑多个因素:函数到任务的映射是任务调度设计的第一步,用于确定在哪个任务中执行哪些软件功能。作为调度和执行单元,函数的执行是通过任务的调度来实现的,每个任务都是由一系列函数组成, 函数的运行顺序通常依赖信号处理流的数据依赖关系。ECU软件集成工程师必须首先决定在给定的ECU上分配多少任务,以及这些任务的调度方式,例如中断调用、初始化调用或者是周期调用,通常来说,任务调用通常采用周期调度。在使用基于AUTOSAR的OS的ECU中,任务是作为OS静态分配的一部分。在单核系统中,任务的设计通常是静态的设置一组具有不同周期任务,并且相同周期下只有一个任务,例如集成工程师可以10ms、20ms、40ms和80ms的周期分配任务,每个周期仅有一个任务。这种情况下函数到任务的映射完全是由算法工程师基于控制函数所需的循环周期来决定,尽管这种映射方式相对简单,但是每个任务中函数的排序还是相对比较复杂的,以为它必须理解函数之间数据的依赖关系。在多核系统中,任务的设计有些许改变,因为任务可以在不同核上进行调度。功能到任务的映射、任务的运行周期、任务到执行核的映射是一个非常复杂的设计问题,必须考虑任务间的信息交换,不同核间的信息交换、同步以及并发等问题。与单核相比,需要更加全面的分析来更好的理解并行执行产生的行为,例如在不同核上执行的任务可能导致数据的竞争和同步。多核系统另一个复杂性维度是混合IP或混合ASIL集成。如果软件功能是由不同IP源开发或不同的ASIL等级组成,混合IP或混合ASIL软件功能应该有意将其分离,因为如果一个任务在内存访问或执行时间行为方面出现非预期行为时,该任务可能会被终止,同时允许其他独立的任务继续运行。如果被终止的任务中包含混合IP或者混合ASIL的软件功能。那么相当大的功能可能出现丢失。
一旦任务的功能确定好了,就必须将任务分配到核上,对于单核来说,就无需多言,因为它仅有一个核,如图1a所示。在多核系统中,需要提前明确任务在哪个核上运行,以及之间的数据交互,如图1b所示。如果需要基于混合IP或者是混合ASIL的任务设计,如图1c所示,任务到核上的分配更加灵活。在图1c中,有16个任务需要分配,在四核的情况下,将所有OEM_hi任务分配给core1,所有OEM_ low任务分配给core2,所有Tier1_hi任务分配给core3,所有Tier1_low任务分配给core4。通过这种IP和ASIL任务分配到不同核上,保证调度的物理隔离,减少不同IP的相互影响。
除了来自共享核带来干扰,任务之间也可能通过内存相互干扰。使用相同的分区方案也可以防止内存干扰。每个ASIL或IP都放置在自己的内存分区,并且这些分区受OS-Application保护,那么任务无效的内存访问都将会被阻隔。例如假设Task_Tier1_low行为不当,试图写入属于OEM_hi、OEM_low或Tier1_hi分区的内存地址。这个无效的内存引用将被内存保护方案阻止。未来的ECU将越来越多地采用混合关键系统,主要有两个原因:1、将独立的ECU集成为集中式多功能ECU,如域控单元(降低硬件成本)。2、ASIL分解,最小化需要按照更高的ASIL开发的软件数量(降低软件开发成本)。让我们使用图2所示的单核多功能ECU,这是一个说明混合关系系统集成的例子。1、Task T1 功能安全等级为ASIL-C,运行周期为25ms;2、Task T2 功能安全等级为ASIL-B,运行周期为10ms;3、Task T3 功能安全等级为ASIL-A,运行周期为1ms;4、Task T4 功能安全等级为QM,运行周期为10ms;我们应该如何分配任务优先级来调度这四个任务呢?在不考虑安全要求的情况下,一种典型的设计周期最短的任务优先级最高,如图3所示。可以看出,如果低安全等级的任务执行出错(例如进入死循环),高安全等级的任务会被阻塞,不能正常运行,这种方案是不能满足ISO26262要求的。
那如果根据基于CAPA 分配优先级呢?如图4所示。图4 基于CAPA (Criticality Aware Priority Assignment) 分配优先级的任务调度可以看出,这种方案下,T3任务经常出现不能执行的现象,虽然满足ISO26262的要求,但是这种行为是不可接受的。
那这种方案可以怎么改进呢?其思路是在应用CAPA中找到那些导致效率低下的地方,并适当地调整它们。致CAPA抵消的原因是具有高ASIL等级同时执行时间长的任务导致的。如果我们可以在更短的运行时间内将T1分配到更多的执行中,这将显著改善调度。因此有更多的计算时间留给较低的优先级,当然这些还需要进行数据的依赖性和数据一致性分析,以确定不同的可功能如何在多个任务执行中分布。我们假设T1中包含10个运行实体,并且将T1的周期从25ms缩短至5ms,每个周期分配2个可运行实体,这样,整体的运行周期没有变化,都是在25ms内调度一次,这种调整方案称之为周期转换,如图5所示。
从图5可以看出,相较于原先的CAPA调度方式,T3的调度明显改善。-end-