本文档为NeuSAR aCore平台的执行管理模块的培训手册,为用户开发自适应平台应用程序时,使用执行管理模块提供开发指导。
| 序号 | 术语/缩略语 | 说明 |
|---|---|---|
| 1 | EM | 执行管理。 |
| 2 | Process | Process是要在计算机上执行的可执行文件的加载实例。 |
| 3 | Execution Dependency | 可执行实例之间的依赖关系,可以配置为定义启动和终止它们的序列。 |
| 4 | Function Group | 功能组,包含一组连贯的进程,这些进程需要被一致地控制。EM根据功能组的状态,启动或终止Process。 “MachineFG”是具有预定义名称的功能组,主要用于控制平台级应用程序的生命周期。 |
| 5 | Function Group State | 功能组的状态(“MachineFG”除外)。它为任何特定情况定义了一组活动的应用程序。功能组及其状态集是特定于Machine的,并作为机器清单的一部分进行部署。 |
| 6 | Machine State | 功能组“MachineFG”的状态,具有一些预定义状态(启动/关闭/重启等)。 |
| 7 | Execution Manifest | 执行清单,提供将应用程序实际部署到AUTOSAR自适应平台所需的信息。 |
| 8 | Machine Manifest | 机器清单,包含所有不能分配给特定可执行文件或进程的配置信息。 |
| 9 | Resource Group | 资源组,用于限制组中运行的Adaptive Applications对资源的使用。 |
| 序号 | 文档名 | 版本 |
|---|---|---|
| 1 | 《AUTOSAR_RS_ExecutionManagement》 | R-2111 |
| 2 | 《AUTOSAR_SWS_ExecutionManagement》 | R-2111 |
| 3 | 《AUTOSAR_TPS_ManifestSpecification》 | R-2111 |
执行管理是一个软件组件,负责平台的初始化、启动和关闭应用程序等。
执行管理用于平台的生命周期管理和进程的生命周期管理,使用一个或者多个Manifest文件中包含的信息执行这些任务,例如何时以及如何启动可执行文件。平台中的其他进程都是执行管理的子进程。
| 序号 | 一级功能特性(英文) | 一级功能特性(中文) | 特性说明 |
|---|---|---|---|
| 1 | Process Lifecycle Management | 进程生命周期管理 | 初始化、启动和关闭应用程序 |
| 2 | Deterministic Execution | 确定性执行 | 提供时间确定性 |
| 3 | Resource Limitation | 资源限制功能 | 限制进程的CPU、内存、核亲和性 |
| 4 | Trusted Platform | 可信任平台 | 机器配置的完整性和真实性执行管理应确保在使用前检查已处理清单中机器信息的完整性与真实性。 |
| 5 | FunctionGroup State Management | MachineState和功能组状态管理 | 负责接收来自于SM的切换功能组状态信号并执行功能组状态切换动作 |

Machine Manifest:系统机器清单;
Execution Manifest Instance(s):各进程的执行清单。
1、各Process在上位机配置以后会生成配置文件和代码框架。
(1)服务端:默认进程名称为execution-manager,为平台守护进程,无需用户额外编写代码但需要读取相关配置文件;
(2)客户端:以进程形式于平台中运行,又名自适应应用程序,实现上报进程状态给EM服务端功能:
应用启动后,调用API向EM报告Running状态(在代码框架中自动生成);
进程终止前,调用API向EM报告Terminating状态(在代码框架中自动生成)。
2、客户端、服务端通过管道完成交互,如下图所示:

SM通知EM切换功能组;
PHM通知EM重启进程;
UCM通知EM重读执行清单;


1、功能讲解:
使用EM模块,主要配置项:上位机的Machine,Executable,ProcessDesign,Process等节点。
Machine节点用于配置系统的整机配置,与EM相关的部分包括划分整机的资源组,机器核心数等信息。
Process节点用于描述进程的基本信息,包括进程所在的功能组信息、启动时的依赖关系等。
2、配置说明
1)EnterExitTimeout:系统内各进程的启动和退出超时时间
Enter Timeout Value:用户进程的启动超时时间,单位秒;
Exit Timeout Value:用户进程的退出超时时间,单位秒;

2)OsModuleInstantiation:配置进程所属的资源组
Short Name:配置的资源组名称
Cpu Usage:该资源组内进程可用的cpu总百分比
Mem Usage:该资源组内进程可用的内存总数

3)Processor:机器核心
Short Name:机器核心名称
Core Id:机器核心ID

4) Executable(该节点为上位机生成code的必要配置项)
Short Name:进程的Executable名称
Reporting Behavior:进程是否向EM报告状态
Version:版本号


5)ProcessDesign(该节点为上位机生成code的必要配置项)
Short Name:进程的ProcessDesign名称
Executable:此处选择上面建立的Process对应的Executable

6)Process(该节点为上位机生成code的必要配置项)
Short Name:进程的Process名称
Design:此处选择上面建立的Process对应的ProcessDesign
Executable Ref:此处选择上面建立的Process对应的Executable
Number Of Restart Attempts:进程启动失败时EM重启该进程的次数配置

7)ModeDeclarationGroupPrototype:在别的进程需要依赖该进程时,此处为必要配置项
Short Name:进程的ModeDeclarationGroupPrototype名称
Type:该节点类型:此处选择ProcessState

8)StateDependentStartupConfig:主要配置进程属于的功能组、资源组、启动依赖等
Resource Group:配置进程所属的资源组
Startup Config:选择进程需要的Startup Config

9)ProcessStateIref:进程之间的启动顺序
Context Mode Declaration Group Prototype:选择进程需要依赖的进程
Target Mode Declaration:选择进程所依赖的进程的状态,包括:Running和Terminating

10)WorstCaseHeapUsage:进程本身可用的内存限制
Short Name:资源限制名称
Memory Consumption:进程可用的最大内存

11)FunctionGroupStateInFunctionGroupSetInstanceRef:配置进程属于的功能组Context Mode Declaration Group Prototype:进程所属的功能组名称
Target Mode Declaration:进程所属的功能组状态

12)Trusted Platform Executable Launch Behavior:可信任平台选项,EM将对机器清单、进程的执行清单、进程可执行文件、进程可执行文件的动态库链接文件做完整性和真实性校验;
STRICT-MODE:严格模式,选择此模式如果认证失败则EM终止平台启动,EM进程退出;
NO-TRUSTED-PLATFORM-SUPPORT:监控模式,校验失败会提示(在EM日志中),但不执行终止动作;

1、功能讲解:
ProcessToMachineMappingSet用于进程绑核。可以在该节点下配置进程应该在哪个核上运行。上位机会根据上述配置,选取合适的核心来绑定。
StartupConfig主要用于配置进程的启动属性,包括启动参数、环境变量等属性。该节点下的配置,需要被Process所引用。
2、配置说明
1)ProcessToMachineMappingSet:进程绑核配置
ShortName:名称
Machine:Machine名称
Process:需要被绑核的进程
Shall Run Ons:进程要被绑定的核心名称

2)StartupConfig:配置进程需要使用的环境变量、启动参数等
Short Name:StartupConfig名称
Execution Error:进程的错误码,进程异常退出时会被EM记录
Scheduling Policy:配置进程的调度策略,可选三种调度策略:
schedulingPolicy Fifo:实时调度策略,先进先出策略
schedulingPolicy RoundRobin:实时调度策略,时间片轮转
schedulingPolicy Other:分时调度策略
Scheduling Priority属性表示应用程序本身请求的调度优先级。为可选配置,输入参数为整数。
Termination Behavior:进程的终止属性:
PROCESS-IS-NOT-SELF-TERMINATING:选择此项,进程在平台运行期间如果产生了终止动作,则EM将提示该进程被配置为“不自行终止进程”(在EM日志内);
PROCESS-IS-SELF- TERMINATING:选择此项,进程在平台运行期间终止EM不会提示。

3)Enter Exit Timeout:配置进程的启动、退出超时时间
Enter Timeout Value:进程启动的超时时间
Exit Timeout Value:进程退出的超时时间

4)EnvironmentVariables:进程需要的环境变量
Key:环境变量的Key
Value:环境变量的Value

5)ProcessArgument:进程需要的启动参数
Argument:进程启动时需要的启动参数

无。
请参阅《NeuSAR_aCore_EM_API文档》文档。
1、生成的文件路径:output/code/xxxxxx/
2、生成源文件名称:xxxxxx.cpp
3、生成文件中的成果物介绍
注意:需要在测试进程中添加如下标红代码。如不添加,会导致测试进程因为超时不报告状态被EM kill掉。
void SignalHandler(int signum)//进程捕获SIGTERM信号后向EM报告停止状态
{
ara::exec::ExecutionClient exec_client;
exec_client.ReportExecutionState(ara::exec::ExecutionState::kTerminating);//(报告退出状态)
//DO something after catch signal SIGTERM
/***********************************************************************************************************************************
* [NeuSAR Sign]DO NOT CHANGE THIS COMMENT! << Start of the code after catch signal >> DO NOT CHANGE THIS COMMENT!
/
/***********************************************************************************************************************************
* [NeuSAR Sign]DO NOT CHANGE THIS COMMENT! << End of the code after catch signal >> DO NOT CHANGE THIS COMMENT!
/ exit(0);//(进程退出)
}
int main(int argc, char* argv[])
{
signal(SIGTERM, SignalHandler);
//application init
ara::core::Result<void> init_result = ara::core::Initialize();
if(!init_result.HasValue()) {
// initialize failed! some init handler throw exception!
}
/***********************************************************************************************************************************
* [NeuSAR Sign]DO NOT CHANGE THIS COMMENT! << Start of per update callback >> DO NOT CHANGE THIS COMMENT!
/ ara::exec::ExecutionClient exec_client;
exec_client.ReportExecutionState(ara::exec::ExecutionState::kRunning); //进程向EM报告启动状态
exec_client.ReportExecutionState(ara::exec::ExecutionState::kTerminating); //进程向EM报告停止状态
/***********************************************************************************************************************************
* [NeuSAR Sign]DO NOT CHANGE THIS COMMENT! << End of per update callback >> DO NOT CHANGE THIS COMMENT!
/
/***********************************************************************************************************************************
* [NeuSAR Sign]DO NOT CHANGE THIS COMMENT! << Start of code implementation >> DO NOT CHANGE THIS COMMENT!
/
/***********************************************************************************************************************************
* [NeuSAR Sign]DO NOT CHANGE THIS COMMENT! << End of code implementation >> DO NOT CHANGE THIS COMMENT!
/ //application deinit
ara::core::Result<void> deinit_result = ara::core::Deinitialize();
if(!deinit_result.HasValue()) {
// deinitialize failed! some deinit handler throw exception!
}
return 0;
}
EM自身的重定向日志功能:现在由环境变量NEUSAR_EM_LOG控制,NEUSAR_EM_LOG=true时EM输出自身的重定向日志,NEUSAR_EM_LOG=false或不写时不输出。虚拟机中环境变量NEUSAR_EM_LOG可以在/etc/init.d/rcS 中进行修改,s32g板子上的环境变量需要在/etc/init.d/start_ap_em.sh中修改。其他环境下想输出EM重定向的日志,需要在EM启动前执行export NEUSAR_EM_LOG=true。EM重定向日志生成位置在/log/redirected/路径下,名称为execution-manager。
应用的重定向日志通过改动机器清单来恢复:使用最新版本IDE,IDE中新增节点:

编译后将位于/release/etc/system的机器清单和校验文件替换进盘内/neusar/etc/system,重启后可在/log/redirected内找到重定向日志。
在上位机上配置EM后,生成的相关主要内容包括code、manifest示例如下:

将自适应应用程序相关部署文件部署到运行环境,参见《NeuSAR_aCore_平台使用手册》中“应用部署”章节。
配置相关图片中可能包含其他模块信息,如果项目交付无关请忽略。
答:在配置工具的:
/GeneralConfiguration/Machine/Machine/EnvironmentVariables/TagWithOptionalValue节点增加
NEUSAR_EM_REDIRECT_LOG_DIR = /log/redirectd/
随后重新生成代码框架并编译,将编译的成果物(etc)分别部署到板子的/etc和/neusar/etc下
1.2111中应用向EM上报进程状态需要在应用代码中手动加入如下代码:
(1)kRunning:
ara::exec::ExecutionClient exec_client;
exec_client.ReportExecutionState(ara::exec::ExecutionState::kRunning);
若不添加则应用将在5s左右被EM杀死!
(2)kTerminating:
exec_client.ReportExecutionState(ara::exec::ExecutionState::kTerminating);
2.为保证在系统资源有限的情况下,EM有足够的资源去完成自己的功能,当前2111中EM的进程调度策略改为先入先出,优先级设为98.(优先级1-99,99最高)
暂无
暂无