出品 | 汽车电子与软件
在AUTOSAR CP平台中,软件集群(Software Clusters)方法被设计以充分考虑多个ECU的内部拓补结构,这些结构对软件系统的整体性能和功能很是重要。这一核心理念在下图所呈现的概念元模型中得到了直观且深入的体现。
车辆拓扑中ECU、Machine和软件集群的层次结构
具体而言,车辆的拓扑结构由多个ECU组成,进一步地,每个ECU可以根据需要配备1到N个控制器,以处理各种复杂的计算和控制任务。
在一个微控制器上,可以托管一个或多个Machine。当微控制器托管多个Machine时(即N大于1时),这些Machine是虚拟化的,它们共享微控制器的硬件资源,以实现更高的资源利用率和灵活性。此外,每个机器都配备了一个完整的Machine,从AUTOSAR的角度来看,这构成了CP平台架构的一个具体实例,为上层应用提供了稳定而强大的支撑。
#02
通过软件集群的方法,CP的整体软件被巧妙地划分为多个独立的部分。每个软件集群都是一个独立的构建单元,它包含了实现特定功能所需的全部组件和代码。而集群特定的构建过程则会产生相应的二进制对象,这些对象可以在目标ECU上运行,从而实现预期的功能和性能。
AUTOSAR分层软件体系结构中的软件集群连接
参考上图,在集群式软件系统中,现有的分层架构得到了扩展,这一扩展是通过引入一个新的构建块——软件集群连接(Software Cluster Connection)来实现的。软件集群连接包含以下三个主要的子模块:
1.二进制清单(Binary Manifest):此模块提供了在同一台Machine上部署的二进制对象之间的连接手段。
2.跨集群通信(Cross Cluster Communication):该模块提供了软件集群之间的虚拟功能总线(VFB)通信功能。不过,服务接口并不包含在此模块的功能范围内,因为对BSW模块的访问是通过代理模块来实现的。
3.代理模块(Proxy Modules):代理模块分为高层代理模块和低层代理模块。高层代理模块在应用软件集群中替代非本地的BSW模块,并与主机软件集群中的低层代理模块进行连接。低层代理模块则进一步连接到实际的BSW模块。高层代理模块暴露的接口与真实BSW相同。
主机软件集群(Host Software Cluster)包含了BSW的大部分内容,特别是那些依赖于微控制器的模块,如操作系统。因此,Machine的动态行为主要由主机软件集群决定,并负责实现调度。应用软件集群的实现必须遵循主机软件集群的调度策略。
在应用软件集群中,可以集成应用软件组件以及受到严格限制的BSW模块。如果应用软件集群中本地没有可用的基础软件模块,但其接口对于集成软件来说是必需的,那么这些模块将由代理模块进行替代。
一些RTE功能可能会受到限制,因为这些功能的实现可能不具备可扩展性,或者可能对其他软件集群产生意外的副作用。例如,跨软件集群的同步客户端-服务端调用需要实现完全的上下文解耦,这在单个软件集群范围内很难准确预见其对整体调度的影响。
尽管存在这些限制,仍然可以通过同步客户端-服务端调用访问BSW。对于采用软件集群的软件系统而言,实现多核BSW分发概念是确保系统可扩展性和良好性能的关键前提。
#03
软件集群旨在提升AUTOSAR系统设计与实施的灵活性,并通过模块化手段确保集群内部变更的影响得以局部化。这一特性使得架构变更能够逐步引入,同时部分实施变更无需重建整个软件系统。
尽管软件集群有助于减少变更的频率,但每个软件集群,包括主机软件集群,在必要时仍可重建。部分使用场景可能仅能通过此概念部分解决,甚至完全无法解决,仍需对BSW进行变更,并重建主机软件集群。
这一概念所具备的功能将简化对基础软件的变更过程,可能导致主机软件集群的重建频率有所增加。但与此同时,它也促使基础软件的变更从以往罕见且规模较大的情况,转变为更为频繁但规模较小的变更。
#04
F:此ECU上的一个分区的定义。一个分区将使用一个Os-Applications。
Software Cluster概念主要面向资源受限严重的控制器,其核心在于尽可能减少开销,实现“按需付费,所得即所付”的原则。这一理念在软件集群与Ecu-Partitions的关系中得到了充分体现。
Ecu-Partitions为功能分离提供了可能,它们通过OsApplications实现,能够在一定程度上实现内存访问和运行时行为的隔离。然而,多个OsApplications的执行也会带来相对较大的开销,包括执行任务切换(可能消耗数百个处理器周期)以及额外的管理开销(如更改执行级别、重新配置MPU等)。随着Ecu-Partitions数量的增加,这些开销可能会变得尤为显著。因此,为了提高资源利用率,可以在多个软件集群中重用同一个Ecu-Partition。
同时,系统设计者往往希望在一个软件集群内组合来自不同Ecu-Partitions的功能,以满足大功能中不同ASIL要求或车载诊断相关的分离需求。例如,一个制动功能集群可能包含来自不同ASIL级别的功能,其中有些功能与安全相关,负责制动操作,而其他功能则与安全无关,如评估行驶平稳性的功能。因此,一个软件集群可以包含多个Ecu-Partitions,以实现所需的功能组合。
为了满足这些需求,软件集群与Ecu-Partitions之间形成了n:m的关系,即一个软件集群中可以包含多个Ecu-Partitions,同时一个Ecu-Partition也可以在多个软件集群之间共享。然而,如果Ecu-Partition在软件集群之间共享,那么在运行时可能无法强制分离其包含的不同软件集群中的SWC。尽管如此,由于软件集群在逻辑上和内存地址区域上是分离的,这种做法仍具有一定的可行性。某些违规情况可能不是在ECU的运行时检测到的,而是通过ECU外部的静态检查来发现。
如果资源限制允许,最好不要在软件集群之间共享Ecu-Partitions,以更好地实现软件集群的分离。然而,在实践中,这通常难以避免,因此应尽可能减少这种共享,以降低开销并提高系统的可维护性和安全性。
#05
通常,微控制器的总内存由多种不同类型的内存组成,如RAM、FLASH程序ROM和FLASH数据ROM等,每种内存都有其特定的用途。此外,即使是同一类型的内存,其不同段在不同用例下也可能表现出不同的性能,例如不同微控制器核心的访问速度差异。因此,在将整体式的CP软件架构拆分为可独立构建的单元时,每个软件集群的提供者必须明确了解哪种内存可用于什么目的。
由于微控制器通常不支持内存虚拟化,所以在为软件集群分配内存时,不仅需要就内存量达成一致,还需要就具体的地址范围进行明确划分。为此,建议采取以下方法:
机器架构师应将总内存划分为多个逻辑内存插槽,并为每个插槽指定其可用的目的。这些指示应与内存插槽的物理属性(如RAM或FLASH)相对应,同时也应与软件分区(如MPU的空间分离)、功能分组(如校准数据集的内存)和性能目标相匹配。下图展示了不同内存如何被分配给软件集群的原则性示例。
软件集群分配内存
接下来,根据每个软件集群所包含功能的预测内存消耗和所需的内存类型,为每个软件集群分配不同的内存插槽。这种分配可以直接体现在链接定位文件中,并作为AUTOSAR内存映射初始配置的一部分。软件集群特定的链接定位文件确保在构建过程中,软件集群只分配为其预留的内存。
除了静态内存使用外,堆栈使用也是需要考虑的重要因素。当主机软件集群调用应用软件集群的“代理”操作系统任务时,这些任务可能会进一步调用主机软件集群中的BSW功能。由于这种复杂的调用关系,堆栈的估算和尺寸确定必须综合考虑主机软件集群和各个应用软件集群的软件架构。
通过这样的规划和分配,可以确保软件集群在微控制器上高效、稳定地运行,同时充分利用有限的内存资源。
#06
示例概览
该示例包含两个Software Compositions:
Compo_AHB,包含三个SWC:Anton、Hugo和Bernd。
Compo_Host,包含两个SWC:Claus和Celine。
这些SWC各自拥有Providing Ports和Requiring Ports,其中一些Ports在顶层视图中相互连接。
此外,还存在两个软件集群:
SwClu_AHB,包含Compo_AHB。
SwClu_Host,包含Compo_Host。
它们基于必要的系统元素分别进行描述。当然,在实际系统中,一个集群通常会包含多个Ports。
在上图中,这两个软件集群具有以下接口:
IF_Celine:端口从SwClu_Host连接到SwClu_AHB。
IF_Bernd:端口从SwClu_AHB连接到SwClu_Host。
IF_Hugo:SwClu_Host上的开放R-Port端口。
IF_Anton:SwClu_AHB上的开放P-Port端口。
图中也展示了相关的服务依赖关系,通过这些依赖关系,一个配置正确的Host软件集群及其操作系统可以运行AHB软件集群。
对于所需的操作系统服务,采用了操作系统代理模式。在此示例中,基本配置包含两个操作系统任务:OsTask_50ms和OsTask_10ms。每个任务在应用软件集群中都有两个入口点供所谓的调度器使用:
OsTask_10ms:
Disp_10ms_Ph1(10ms任务调度器,阶段1)
Disp_10ms_Ph2(10ms任务调度器,阶段2)
OsTask_50ms:
Disp_50ms_Ph1(50ms任务调度器,阶段1)
Disp_50ms_Ph2(50ms任务调度器,阶段2)
在AHB软件集群中,遵循操作系统高代理模式,为操作系统提供了本地实现,包含两个代理任务:ProxyT_10ms和ProxyT_50ms。软件组件的定时事件(TimingEvents)与这两个代理任务相匹配。
图未显示的是OsBaseSocket_AHB和BaseConfigCheck_AHB。OsBaseSocket_AHB用于软件集群AHB本地操作系统代理的初始设置。BaseConfigCheck_AHB用于确保由Host软件集群实现的配置满足AHB软件集群的需求。
有了所有这些设置,该示例的系统设计就完成了。