关于架构:ZeekrTech汽车软件RTOS之AUTOSAR-OS多核控制简介

5次阅读

共计 2943 个字符,预计需要花费 8 分钟才能阅读完成。

极氪软件及电子核心 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,调用 hook
8 StartupHook 当软件上电且须要从 boot 进入到操作系统之前,往往须要调用 hook,实现启动操作。
9 ShutdownHook 软件下电且须要退出操作系统,往往会调用 hook,跳转到 shutdown 实现下电操作。

如果在零碎中应用 OS-Application,则所有的 Task, ISR, Counter, Alarm, Schedule Table 都必须属于某一个 OS-Application。接下来咱们来聊聊 AUTOSAR 操作系统中的多核解决。AUTOSAR 中的多核操作系统并不是一个虚构 ECU 概念,而是一个共享雷同配置和大部分代码的操作系统,然而不同的核上进行不同的运算。操作系统的生成局部的相干信息来源于同一个配置。这意味着,ID(例如 TASKID、RESOURCEID…)在核之间是惟一的。工作的优先级定义来源于调度表的配置。因而多个内核能够真正并行运行,能够同时执行多个工作。
  1. Startup 阶段。初始化 MCU,每个核实现 EcuM_Init()(AUTOSAR 定义性能),且每个核实现 StartOS。
  2. 运行阶段。从启动模式切换到操作系统运行模式,实现 OS:Startuphook,并开始操作系统的运行,e.g. 10ms, 100ms 等周期性工作开始运行。
  3. 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 和多核管制芯片的控制策略,帮忙大家尽快了解根底软件的运行架构。

正文完
 0