徽州骆驼 · 2 天前

多核OS部署方案与性能优化策略

前 言

大家好,今天小T要和大家聊一个既有挑战性又充满机遇的话题—多核OS在汽车ECU中的部署与优化策略。作为一个在汽车电子领域摸爬滚打多年的工程师,我深切感受到了这个行业正在经历的巨大变革。

从最初的单核MCU到如今的多核SoC,汽车软件架构正在发生翻天覆地的变化,系统方案也从单核单OS不断向多核OS进化,而多核OS中的资源分配,内存优化等难题又是我们不断攻破的技术点,本文结合理论与实际案例分享,将和大家深入探讨多核OS的部署方案与优化策略,希望能让大家对多核OS部署方案有些启发。

为便于大家理解,以下是本文的思维大纲:

图片

01 从"功耗墙"说起:多核时代的必然到来

还记得十几年前,我们做ECU开发时,硬件性能提升简直就是"躺赢"——芯片厂商每年都会推出更快的单核处理器,我们的软件性能也跟着水涨船高,基本不需要做太多适配工作。

但好景不长,大约在2010年代初期,整个行业遇到了一个"天花板"——功耗墙问题。简单来说,就是由于电流密度和功耗的急剧上升,传统的单核性能提升路径走到了尽头。当时英特尔在桌面处理器领域率先推出多核芯片来解决这个问题,汽车行业虽然起步稍晚,但也不得不面对同样的挑战。

为什么汽车行业特别需要多核?

  1. 功能集成度要求:现代汽车越来越多地采用集中式架构,需要在更少的ECU中集成更多功能,这对处理能力提出了更高要求。
  1. 实时性和安全性:汽车系统对实时响应和功能安全有着严格要求,多核架构可以更好地实现负载隔离和故障处理。
  1. 成本控制压力:通过多核集成可以减少整车的ECU数量,从而降低硬件总成本。

02 多核OS基础理论大揭秘

在深入实战案例之前,让我们先来理解一些多核OS的基础概念。作为工程师,理论基础扎实了,实践起来才能游刃有余。

2.1 多核架构的两种主要形态

同构(homogeneous) vs 异构(heterogeneous)

•同构(homogeneous):所有核心都是相同的,就像一个班级里的学生都有相同的能力,可以互相替代执行任务。

异构(heterogeneous):不同核心有不同的专长,比如有的核心专门处理图像,有的专门处理通信,各司其职。

实际应用中,大多数汽车芯片采用的是混合架构——既有多个相同的"主"核心,也有一些专用核心来加速特定功能。比如,最为常见的一个应用场景就是有一个专门的硬件安全模块(HSM)来处理加密算法。

内存架构的复杂性

多核系统的内存设计也很有讲究:

  • 共享内存:所有核心都可以访问,但可能存在访问竞争
  • 私有内存:每个核心独有,访问速度快但不能共享

不同内存区域的访问时间差异很大,合理的内存布局通常可以带来约10%的性能提升。这就像是城市规划,把经常需要交互的功能放在一起,可以大大减少"通勤"时间,现实中最为常见的例子就是苏州工业园区的“邻里中心”。

图片

2.2 多核ECU Partition与Os Application关系

在理解多核部署方案之前,有如下两个最为重要的概念我们必须搞清楚:

  • ECU Partition:顾名思义就是软件分区,是在硬件层面上对多核操作系统内的部分功能或要素的分割,目的就是防止在某一个分区中发生的故障影响到同一ECU上的其他分区。
  • Os Application:这个是AUTOSAR OS针对其内部的Task,isr,Alarm,Event等一系列元素的集合,不同OsApplication的元素不能够互相访问,同时针对OS Application的权限也有管理,保证不同OS Application的访问权限。

如下图就展示了ECU Partitions,OS Applications,Cores三者之间的关系:

图片

由上图我们可以得出几个基本结论:

  • 对于多核OS而言,每个Core 至少存在一个ECU Partition,当然也就意味着一个Core内可以允许多个Partition同时存在;
  • 对于多核OS而言,由于OS Application自身就是为隔离OS相关元素而存在,因此每个ECU Partion应当同时有一个OS Application来对应来最终完成OS相关元素的隔离;
  • 在每个OS Application内部可以自由创建属于各自的OS Tasks,ISRS等;
  • 不同Core之间采用AUTOSAR OS定义的IOC机制来实现核间通信,IOC通信交互的对象是OS Application,本质上来讲还是基于共享内存的通信。

2.3 阿姆达尔定律:理想与现实的差距

很多人初接触多核时都会有一个朴素的想法:两个核心不就应该有两倍的性能吗?但现实往往比理想骨感。

阿姆达尔定律告诉我们,系统的整体性能提升受限于无法并行化的部分。即使有无限多的核心,如果程序中有30%的代码必须串行执行(并行部分70%),则最大理论加速比约1/0.3≈3.33

更严峻的是,实际情况中还有很多额外的"摩擦成本":

同步和通信开销:不同核心之间需要交换数据时,就像两个人在嘈杂环境中对话,需要额外的时间和精力来确保信息传递准确。

上下文切换成本:CPU在不同任务间切换时需要保存和恢复状态,这个过程在不同的处理器上差异巨大——从简单MCU的几个时钟周期,到复杂SoC可能需要的数百万个周期。

资源争用问题:就像高峰期的地铁站,如果多个核心都要使用同一个硬件资源,就会形成瓶颈,其他核心只能排队等待。

2.4 AUTOSAR多核标准的演进历程

为了解决上述问题,AUTOSAR作为汽车软件的行业标准,在多核支持方面也经历了一个演进过程。

AUTOSAR 4.0.1版本:首次引入多核支持,但实现方式比较简单粗暴——完整的基础软件运行在一个核心上,其他核心通过远程过程调用来访问。这种方式虽然实现了多核功能,但性能表现并不理想。

AUTOSAR 4.1.1版本:引入了"分区系统中增强的BSW分配"概念,也就是我们常说的主/从模式这种架构允许将基础软件的某些模块分布到不同核心上,从而获得更好的性能表现。

主/从架构的核心思想是:将需要频繁被应用软件调用的BSW模块拆分,主模块负责控制底层硬件,从模块为其他核心的应用软件提供本地访问接口,减少跨核调用的开销。

2.5 多核系统的五大“性能杀手”

在多核嵌入式系统中,开发者往往期望“多核 = 多倍性能”,但实际中有五个典型瓶颈点极易拖慢系统运行效率,如下图所示:

图片

2.5.1 同步通信开销

在多核系统中不同核心往往需要交换数据,比如Core1的Asw可能需要访问部署在Core 0上的通信协议栈,此时就会通过中断,缓存,操作系统的进程间通信(如AUTOSAR的IOC)实现数据同步。

这种“同步”的本质就是等待,必须等到Core1的通信协议栈相关操作完成之后才能进行下一步动作,因此如果传输的数据量较大,那么这个等待的时间自然会被拉长,调用核心将会被阻塞进而导致其他任务延迟。

典型场景:调用NvM时主核等待副核的Flash写入完成,结果引发任务堆叠,影响实时性。

2.5.2 上下文切换开销

上下文切换是指CPU从一个任务切换到另一个任务时,保存和恢复相关寄存器、堆栈等运行状态。

在嵌入式系统中,尤其是带MMU的处理器或具有缓存一致性协议的SoC平台,上下文切换带来的开销可能从几十个CPU周期暴涨到数千甚至数百万周期(如触发Cache刷新或TLB失效)。

典型场景:多核中的异步事件交互越多,任务调度越频繁,切换代价越大。

2.5.3 资源争用

虽然存在多个核心,但外围设备、外部RAM、串行通信接口等往往都会共享,若两个核心同时访问一个资源(如eMMC),就会发生竞争。

操作系统通常通过互斥锁、信号量等机制协调访问,这类同步机制又进一步引入阻塞和切换开销。

典型场景:多个核同时写入日志文件或访问统一的CAN控制器,引发系统级抖动或锁死。

2.5.4 干扰效用

干扰效应即“你用你的,我也受影响”。即使两个核访问不同的外设或内存区域,只要它们连接在相同的总线上(如AXI总线),就可能因访问仲裁而互相拖慢。

典型场景: R5F核访问OCMC时被A核高速DDR DMA任务干扰,导致运行时间倍增。

2.5.5 内存分配

不同核心访问的内存地址物理位置不同,访问速度差异可能达到数量级。

例如:

  • TCM(紧耦合内存)访问最快;
  • OCMC较快;
  • DDR延迟高,跨核访问更慢;

简而言之就是距离CPU核心越近,访问速度越快,距离CPU核心越远,访问速度越慢。

典型场景:一般我们优先将高频执行的代码,如中断向量表,OS调度函数等放入TCM内存中,其他低频调用代码可放入到OCMC或者DDR中。

03 多核OS部署性能优化常见策略

本文结合当前ETAS工具链的多核部署能力,重点举例说明下在不同多核OS部署应用难题下的高效解决方案,希望能够给大家带来些许启发。

3.1 负载均衡的艺术—拯救"过劳死"的Core 0

案例背景:某整车厂的双核ECU项目遇到了典型的"一核过劳,一核闲置"问题。通过运行时测量发现,Core 0的负载接近饱和(几乎达到100%),而Core 1却有大量空闲资源。

问题根因:

完整通信协议栈占用CPU资源较高。

创新解决思路:

  • 精准迁移:将占用15%运行时的完整通信协议栈从Core 0迁移至Core 1;
  • 权衡取舍:虽然总负载增加了4%(因为新增了跨核调用开销),但成功将Core 0的过载问题降至合理水平;
  • 后续优化:通过诊断协议栈迁移和内存分配优化,进一步降低了运行时增幅;

关键启示:多核优化并非"分布越分散越好",而要明确优化目标。有时候为了解决关键核心的性能瓶颈,适当增加总体开销是值得的。

图片

3.2 削峰填谷的智慧——驯服运行时间的"野兽"

案例背景:某一级供应商的制动系统多核ECU虽然平均负载正常,但在某些运行时峰值期间表现不佳。

问题根因:

问题出现在通信协议栈的Com_MainFunctionRx函数上——该函数每5毫秒处理一次数据,但部分应用软件只需要每40毫秒的数据,造成了8倍的处理冗余。

创新解决方案:

  • 智能拆分:将单一的Com_MainFunction拆分为多个具有不同周期的主函数
  • Com_MainFunctionRx_5ms:处理8个高频PDU
  • Com_MainFunctionRx_10ms:处理24个中频PDU
  • Com_MainFunctionRx_20ms:处理45个PDU
  • Com_MainFunctionRx_40ms:处理43个低频PDU
  • 按需分配:将PDU分配给与最终读取数据的应用软件周期相匹配的函数
  • 中断优化:将大部分Rx指示处理流程移出中断上下文

图片

关键启示:通信协议栈采用分层架构,底层负责帧的打包解包等速度优化任务,计算量较小;而高层级(PduR及以上)承担主要负载。因此在PDU路由器层级进行分配能够最有效地匹配应用软件分布。

建议在较低层级采用Event触发, 而对于高层级则采用轮询处理,信号到各个核心的分配则是在PDUR层级进行执行。

图片

3.3 一主多从的艺术—Bsw主从分布式分区架构设计

案例背景:

某客户ECU上的Core 1 Asw需要访问Core 0上的NvM模块接口进行数据访问,直接通过核间通信调用NvM模块时可能会发生请求时间过长,进而影响Core1上其他任务的执行。

问题根因:

Core1上的Asw调用Core 0 上的NvM Bsw模块属于同步调用,导致核间通信开销很大。

创新解决方案:

为了解决该问题,引入一主多从的Bsw主从分布式软件架构设计方案,如下图所示,通过在Core0的OsApp A分区的NVM模块作为主模块,而其他分区的如OsAppB作为NvM从模块。

主模块负责处理来自各个分区的Block请求,而从模块提供给到各自分区的NvM接口与主模块一致,让所有应用层对底层访问无感,这样各个分区的SWC请求处理就会更加高效,即使存储多个NVM请求,也可以进行缓存buffer处理,不会影响到各自分区其他的执行。

关键启示:

例如其他需要被Asw访问的高频模块Dem,Fim,WdgM也可类似的思路进行设计,采用一主多从+异步式访问方式这样可以大大降低不必要的核间通信阻塞,提高核间通信效率。

图片

如下图所示,在通信协议栈中由于COM层是整个通信协议栈的最顶层,负责PDU到Signal级别的解析功能,而其下层则是PDUR,因此通信协议栈如何分核部署,那么自然就需要针对PDUR模块进行拆分。

通信存在如下三类场景:

  • 对于同一核心不同分区可采用IOC通信方式来传递数据给到ETAS专用模块RTE AdderAdaptor ,由该模块再调用COM接口收发数据;
  • 对于同一模块同一分区则直接调用Com标准模块接口收发数据即可;
  • 对于Core 1的SWC需要发送消息至Core0的CAN控制器时,此时数据传递至Com层级之后,便会通过PDUR进行数据传递即可。

图片

3.4 多主设计的艺术—通信协议栈单独部署

案例背景:

有些ECU既存在CAN ,Eth等多种总线形式,如果均放入到同一个Core,就会导致某一个Core的负载急剧上升,因此有必要均衡下负载。

问题根因:

各类通信协议栈占用CPU算力资源很高,容易导致单Core负载过高,引发系统性风险。

创新解决方案:

可以将CAN,Ethernet等通信协议栈在不同的Core进行单独部署,同时各个SWC与对应的通信接口匹配部署到不同的Core。

关键启示:如果底层通信控制器模块支持挂载到任意Core上时,此时有必要考虑将不同通信协议栈单独部署到不同的Core中,那么便可以大大均衡CPU负载,这样便形成了“多主设计”。

图片

3.5 从零开始的完美设计——五核网关ECU创新设计

案例背景

某客户的新一代网关ECU需要实现总线镜像功能,采用高度分布式通信协议栈的五核架构。这是一个完全从零开始的创新项目,需要在极具挑战性的时间周期内实现多项创新需求。

问题难点:

需要在该网关中实现多种不同通信协议栈的部署,同时要保证系统通信效率最高。

创新解决方案:

通过基于PDUR来实现不同层级的最优连接,来最终形成最大化性能核间通信协议栈部署方案,相当于将上述“一主多从+多主”架构模式巧妙得结合在一起,最大化系统核间通信效率。

关键启示:很多时候创新技术并不一定要“无中生有”,更多得还是“整合优化”,往往会取得意想不到的效果。

图片

架构精髓:

  • 分层分布:在PduR层级实现各核心间的信息传递;
  • 任务导向:通信协议栈实现使得处理负载能够极精细化分布;
  • 总线专核:每个核心专门处理特定的总线(CAN、LIN、Ethernet等);

创新突破:通过ETAS专有的XCoreCDD(跨核复杂设备驱动)实现无锁机制的核间数据传输,不仅消除了系统阻塞,还减少了核间等待时间,实现了真正的并行处理。

图片

04 多核OS方案优化精髓与哲学思考

4.1 负载均衡的智慧

核心思想:孔子提出的"中庸"强调在极端之间寻找平衡点,这与负载均衡的核心思想高度契合。老子提出的“反者道之动”自然也是提倡万事万物不可走极端,否则就极易引发系统性风险。

在负载均衡中的体现:

  • 避免极端化:防止某些节点过载而其他节点空闲;
  • 动态调节:根据实时状况调整分配策略;
  • 和谐统一:整个系统达到最优的整体性能;

4.2 主/从架构的智慧

核心思想:通过科学的方法提高组织效率,强调专业化分工和标准化流程中央与地方既独立又统一关系

在主从架构中的体现:

  • Master专门负责整体管理和协调,承担中央角色;
  • Slave专门负责收集,计算和执行,承担地方角色 ;
  • 每个组件都有明确的专业职能,职责清晰明确;
  • 通过专业化,互相配合提高整体效率;

4.3 架构方案选择的智慧

核心思想:世界上没有任何一个架构可以放之四海而皆准,设计出最佳架构方案的前提就是要保持具体问题具体分析的态度

在架构方案选择中的体现如下:

  • 选择集中跟分布不应该一成不变,应当在分布中有集中,集中也有分布,而不是追求一味的集中或者是一味的分布均不可取;
  • 奥卡姆剃刀原理:"如无必要,勿增实体",大道至简,用最简单的方案解决最复杂的问题,往往是最佳方案。

05 结  语

多核OS的部署方案选择不仅是技术决策,更是哲学思辨的过程。它要求我们在复杂性与简洁性、性能与可靠性、通用性与专用性之间做出明智的权衡, 上述高效的解决方案给了不错的参考。

优秀的架构设计者不仅需要掌握技术细节,更需要具备系统性思维和哲学思辨能力,在多维度的约束条件下找到最优解。

在多核时代,系统设计的艺术在于如何在并发的混沌中创造秩序,在复杂的交互中实现简洁,在性能的追求中保持稳定。这正是多核OS架构设计方案的精髓所在,也是我们不断探索和完善的方向。

END

作者:汽车小T
来源:汽车电子与软件

推荐阅读:

更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
5796
内容数
529
汽车电子与软件行业的相关技术报道及解读。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息