【Zeekr_Tech】汽车软件 RTOS- 之 AUTOSAR OS 多核控制简介
极氪软件及电子中心 jojo
实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。与实时操作系统对应的就是非实时操作系统了,例如 Linux(可以通过给内核打上 RT 补丁使其变为实时操作系统),windows。这类操作系统将系统处理机时间和内存空间按照一定的时间间隔,轮流地切换给各终端用户的程序使用,会给低优先级进程分一些运行时间,避免高优先级重负载任务把键盘鼠标控制台桌面之类堵死。实时操作系统有很多如μCos、FreeRTOS、Vxworks、QNX、Osek os。AUTOSAR 的 core OS 就是 OSEK,他早已广泛应用于汽车工业。OSEK 源于德语,是一种嵌入式操作系统,被设计用于提供整车的各种电子控制单元的软件系统。AUTOSAR OS 向后兼容 OSEK OS,基于 OSEK OS 扩展了一些特性和需求,比如内存保护(memory protection)和时间保护(time protection)等。OS-Application 是 AUTOSAR OS 的重要的功能单元, 负责收集操作系统对象,如 Tasks, ISRs, Alarms, Schedule tables, Counters 等。
AUTOSAR_SWS_OS 规范中 7.6 章节对 AUTOSAR OS 的框架定义。其中包含:序号 操作系统对象 作用 1 APPLICATION OS-APP,负责收集操作系统对象 2 SCHEDULETABLE 调度表 3 ALARM 报警器,一般用于在操作系统运行过程中,可进行实时的报警周期设置,典型的用于功能安全相关的调度机制 4 COUNTER 计数器 5 TASK 周期任务 6 ISR 中断任务,响应外部和内部事件触发的中断 7 ErrorHook 当软件运行遇到 Error,调用 hook8 StartupHook 当软件上电且需要从 boot 进入到操作系统之前,往往需要调用 hook,完成启动操作。9 ShutdownHook 软件下电且需要退出操作系统,往往会调用 hook,跳转到 shutdown 完成下电操作。如果在系统中使用 OS-Application,则所有的 Task, ISR, Counter, Alarm, Schedule Table 都必须属于某一个 OS-Application 。接下来我们来聊聊 AUTOSAR 操作系统中的多核处理。AUTOSAR 中的多核操作系统并不是一个虚拟 ECU 概念,而是一个共享相同配置和大部分代码的操作系统,但是不同的核上进行不同的运算。操作系统的生成部分的相关信息来源于同一个配置。这意味着,ID(例如 TASKID、RESOURCEID…)在核之间是唯一的。任务的优先级定义来源于调度表的配置。因此多个内核可以真正并行运行,可以同时执行多个任务。
Startup 阶段。初始化 MCU,每个核完成 EcuM_Init() (AUTOSAR 定义功能),且每个核完成 StartOS。
运行阶段。从启动模式切换到操作系统运行模式,完成 OS:Startuphook,并开始操作系统的运行,e.g. 10ms, 100ms 等周期性任务开始运行。
Shutdown 阶段。从 OS 运行模式切换到下电模式。下电关闭程序由 BswM 和 EcuM 协调。所有核上的 EcuM 都表明它们已经准备好了关闭,EcuM 在主内核上调用 shutdownallcore(),完成整个 ECU 的下电。
在 AUTOSAR OS 中具体的分配策略有如下几种:1)ChainTask 链任务机制什么是 ChainTask 机制,AUTOSAR 规范中又是如何定义的呢?一个链任务由几个任务组成,每个链任务 OS-Mechanism 相互激活。所以不同的任务可以按照定义的顺序在不同的核上执行。例如下图所示。左边是单核芯片 core X,右边是双核芯片 core Y 和 core Z。原来任务 Task A 是单独在单核芯片 core X 上运行, Task A => proc1(); proc2(); proc3(); proc4()。当把 Task A 拆分为两个任务 Task A’和 Task A’’ 并且分别在 2 个单独的核 core Y 和 core Z 上运行时,链任务 ChainTask 机制确保,流程顺序是与任务 A 一样,在不同的内核中运行。
跨核 task 又是如何开销 ChainTask 呢?例如下图所示。拿 1ms 任务举例,首先 Core X 触发 OS_BswStart_1ms_Task 任务,由于链任务的作用,直接跨核到 Core Y 执行 OS_1ms_Task,执行完后又通过链任务跨核回到 Core X 执行 OS_BswEnd_1ms_Task。这种任务链的缺点会开销 runtime,比如 1ms 的任务,2 次的来回的 Chaintask,大约会开销 2x30us 的负荷,约占 6% runtime。
2)分布式运行机制分布式运行机制,AUTOSAR 规范中解释为”task clusters are freely distributable”。该分布式运行机制是当前 AUTOSAR 多核分配方式的主流,task 在一个核上运行,不存在跨核之间的链任务,耦合性不高。缺点是容易造成不同核之间的负荷不均。如下图所示,某一个双核的控制器 Core X 运行所有 CAT1 的中断,Core Y 运行所有的周期性任务,不存在跨核间的调度,所有的任务都在自己的核上单独运行。
操作系统的运行时间可以通过优化减少数据的访问时间来实现。如下图举例。某个 3 核的 MCU,Core0 为 Peripheral Core,Core 1 为 Locked Core,Core 2 为 Performance Core。每个 core 都有单独的 RAM 分别为 RAM0,1,2,同时通过总线外部挂有 system Ram。通过下图可以发现当 core1 访问自己的 RAM1 只需要 1 个 tick 的时间,而 core1 访问 core2 的 RAM 需要 9 个 tick 的时间。同时访问外挂 system ram 需要 9 个 tick 的时间。由此可见,当代码运行在特定的内核上,尽量把该段功能所属的变量定义在相同的 RAM 上,以便优化核减少运行时间。我们在做功能开发的时候特别需要关注变量的分配和任务的分配,使其尽量保持一致,以便减小 MCU 的开销。优秀的软件工程师通过优化内存,可以降低 10%左右的负荷。
AUTOSAR 的软件架构已经成为汽车电子控制领域不可逆转的趋势,当前国内不少车企,已经把非 AUTOSAR 软件架构的电子控制器供应商排除在供应商目录之列。同时随着汽车电子芯片的飞速发展,用于 AUTOSAR Classic 的 MCU 也发展迅猛。迅速从单核跨入到多核时代,主频和内存空间也有了大幅度的提升。很多车型已经集成了基于 AUTOSAR 的软件架构和多核芯片的控制单元,以满足日益复杂的电子电器架构。目前,极氪的软件及电子中心正在开发下一代行业顶尖的 ZEEA3.0 电气架构平台,其中的中央计算平台 CSC(Core Super Computer)包含 A 核和 M 核,A 核上运行由极氪自研的 ZEEKR_OS ,M 核上将运行 Classic AUTOSAR OS 来实现多核处理,因此本文介绍基于 AUTOSAR OS 和多核控制芯片的控制策略,帮助大家尽快理解基础软件的运行架构。
zeekrlife.com
版权声明: 本文为 InfoQ 作者【Zeekr_Tech】的原创文章。
原文链接:【http://xie.infoq.cn/article/4314b0d5c79ffbda7648b4832】。文章转载请联系作者。
评论 (1 条评论)