研究笔记03 |汽车ECU多核调度

发布于 2023-5-11 13:50
浏览
0收藏

1 在AUTOSAR操作系统上的任务的分区调度

在本节中,我们研究了我们为多核架构确定的第一个用例,即通过使用更强大的 ECU 来减少 E/E 架构中的 ECU 数量。在这种情况下,我们提出了在多核 ECU 上调度大量runnables的算法。由于汽车操作系统只能处理有限数量的操作系统任务,因此可运行对象的调度必须在调度程序任务中完成。该方法的第一步是将可运行集(runnable sets)划分到不同的内核上。下一步也是最后一步包括确定分配在每个内核上的可运行对象之间的偏移量,以便随着时间的推移平衡负载。

研究笔记03 |汽车ECU多核调度-汽车开发者社区

1.1 静态循环和固定优先级调度

基本软件组件或可运行对象的静态循环调度很常见,因为它们通常比 OSEK/VDX 或 AUTOSAR OS 等汽车操作系统允许的最大任务数多得多。出于这个原因,runnables 必须被组合在一起并在一个排序器任务(也称为调度器任务dispatcher task)中调度。在本文中,我们关注如何使用静态分区方法在多核平台上调度大型可运行集(large runnable sets)。事实上,静态任务划分方案很可能至少在第一步中被采用,因为它在概念上很简单,并且与全局调度方法相比,它为 ECU 设计人员提供了更好的可预测性。一个目标是开发实用的算法,其性能可以得到保证,在每个内核上构建调度器任务,并在这些调度器任务中调度可运行对象,并且要考虑采样的约束,并尽可能地随着时间的推移统一 CPU 负载。后一个目标对于最小化硬件成本和促进新功能的添加当然很重要,这通常在 OEM 的增量设计过程中完成。

1.2 建模(Model)说明

在这个案例研究中,我们考虑了一大组n 个周期性基本软件组件,也称为可运行对象runnables,它们将分配在由m个相同内核组成的 ECU 上。本质上,runnable 可以实现为在适当的时候在 OS 任务的主体中调用的函数。

1.2.1 可运行对象特性

第i个可运行对象由Ri = (Ci; Ti; Oi; {Rg}; Pi)表示。数量Ci 、Ti和Oi分别对应于最坏情况执行时间 (WCET)、周期和Ri的偏移量。可运行的偏移量是该可运行的第一个实例的第一次运行时刻,随后的实例会定期激活。对偏移值的选择直接影响工作负载随时间的重新分配。


一组可相互运行的依赖关系由R表示。事实上,由于特定的设计要求,例如共享变量,一些可运行对象可能必须分配在同一个内核上,并且集合R用于捕获这些约束。此外,由于 I/O 端口位于给定内核上,某些特定功能可能需要将可运行对象分配到特定内核上。该局部性约束由Pi表示。

1.3 调度器任务

Runnable 使用调度程序任务或“排序器任务”在其指定的核心上调度,该任务将可运行的激活时间存储在表中并在正确的时间点释放/激活它们。调度程序任务的特征是调度表Tcycle持续时间,并以循环方式周期执行,以及作为表中一个槽slot的持续时间的量子Ttic 。例如:Tcycle = 1000 ms和Ttic = 5 ms 。需要注意的是, Tcycle必须是可运行周期的gcd的倍数,并且这些周期的lcm必须是Ttic的倍数。结果,一个调度表保存了Tcycle/Ttic个槽slot。


文章转载自公众号:软件赋能汽车

标签
收藏
回复
举报
回复
相关推荐
这个用户很懒,还没有个人简介
贴子
已赞
声望
粉丝
关注
社区精华内容

目录