AUTOSAR平台健康管理(PHM)模块详解
目录
1. 概述
1.1 功能简介
平台健康管理(Platform Health Management, PHM)是AUTOSAR Adaptive Platform中的一个核心功能集群,负责监控软件组件的健康状态并在检测到异常时执行恢复动作。PHM主要实现了ISO 26262:2018标准中关于控制流监控、外部监控设施、看门狗、逻辑监控、时间监控和程序序列监控的要求。
平台健康管理的主要职责包括:
- 监控应用程序行为:监控软件组件的执行时序和逻辑顺序
- 评估监督状态:根据配置的监督条件评估软件组件的健康状态
- 执行恢复动作:在检测到异常时触发恢复机制
- 管理硬件看门狗:与硬件看门狗接口交互,确保系统整体健康
1.2 主要术语
PHM模块使用以下关键术语:
- 监督实体(Supervised Entity, SE):被监控的软件组件或其部分,每个监督实体包含一组检查点
- 检查点(Checkpoint):监督实体控制流中的报告点,用于监控执行状态
- 生存监督(Alive Supervision):检查周期性检查点报告是否在配置的时间窗口内
- 截止时间监督(Deadline Supervision):检查两个检查点之间的执行时间是否符合配置的限制
- 逻辑监督(Logical Supervision):检查检查点的报告顺序是否符合预期
- 基本监督状态(Elementary Supervision Status):单个监督(生存/截止时间/逻辑)的状态
- 全局监督状态(Global Supervision Status):多个基本监督状态的综合结果
- 监督模式(Supervision Mode):与功能组状态相关联的监督配置集合
2. 架构设计
2.1 整体架构
下图展示了平台健康管理模块的整体架构,包括内部组件和与其他功能集群的交互关系:
图2.1 AUTOSAR平台健康管理模块架构
平台健康管理模块主要包含以下内部组件:
-
监督实体管理器(Supervised Entity Manager):
- 管理所有监督实体实例
- 接收应用程序报告的检查点
- 与执行管理交互,获取进程状态信息
- 向入侵检测系统报告访问违规
-
监督状态评估器(Supervision Status Evaluator):
- 评估检查点报告的时间和顺序
- 判断生存、截止时间和逻辑监督的状态
- 根据各监督状态计算全局监督状态
-
恢复动作管理器(Recovery Action Manager):
- 根据监督状态执行恢复策略
- 与状态管理交互,请求功能组状态变更
- 控制硬件看门狗
-
监控模式管理器(Supervision Mode Manager):
- 处理功能组状态变更
- 配置相应的监督模式
- 向状态评估器提供配置信息
-
硬件看门狗接口(Watchdog Interface):
- 提供与硬件看门狗的交互接口
- 控制看门狗启用/禁用
- 发送周期性生存指示
PHM与其他功能集群的主要交互包括:
- 与应用程序组件:应用程序通过SupervisedEntity API报告检查点
- 与状态管理:接收功能组状态通知,请求状态变更
- 与执行管理:获取进程状态信息(启动、终止等)
- 与入侵检测系统:报告访问违规(如错误进程报告检查点)
2.2 类结构
下图展示了平台健康管理模块的主要API和类结构:
图2.2 AUTOSAR平台健康管理模块类图
PHM模块的核心类和API包括:
-
SupervisedEntity类:
- 应用程序使用此类报告检查点
- 主要方法包括:
SupervisedEntity(std::string supervisedEntityInstance)
:构造函数,创建监督实体实例ReportCheckpoint(uint32_t checkpointId, std::optional<std::string> violationMsg)
:报告检查点GetElementarySupervisionStatus()
:获取基本监督状态GetGlobalSupervisionStatus()
:获取全局监督状态
-
RecoveryAction类:
- 用于注册和处理恢复动作
- 主要方法包括:
Register(TypeOfSupervision supervisionType, RecoveryHandlerType handler)
:注册恢复处理程序Unregister(TypeOfSupervision supervisionType, RecoveryHandlerType handler)
:注销恢复处理程序RecoveryHandler(SupervisedEntityType seType, GlobalSupervisionStatus status)
:处理恢复动作
-
PhmErrorDomain类:
- 处理PHM特定错误域
- 主要方法包括:
GetErrorDomain()
:获取错误域Make(PhmErrc code, ErrorDomain::SupportDataType data)
:创建错误对象
-
PhmException类:
- PHM特定异常类
- 主要方法包括:
PhmException(PhmErrc code)
:构造函数GetErrorCode()
:获取错误代码
-
WatchdogInterface类:
- 平台扩展API,用于控制硬件看门狗
- 主要方法包括:
OnTimeoutConfig(uint32_t timeoutMs)
:配置超时时间TriggerAliveIndication()
:触发生存指示(喂狗)Enable()
:启用看门狗Disable()
:禁用看门狗
此外,PHM模块定义了多个枚举类型:
- ElementarySupervisionStatus:基本监督状态,包括kOk、kExpired、kDeactivated、kStopped
- GlobalSupervisionStatus:全局监督状态,包括kOk、kExpired、kDeactivated、kStopped
- TypeOfSupervision:监督类型,包括kAliveSupervision、kDeadlineSupervision、kLogicalSupervision
- PhmErrc:错误代码,包括kGeneralError、kInvalidArgument等
3. 功能机制
3.1 监督状态机
下图展示了平台健康管理中基本监督状态机的状态转换:
图3.1 AUTOSAR平台健康管理监督状态机
监督状态机包含以下主要状态:
-
未激活(kDeactivated):
- 监督实体初始状态
- 监督尚未开始或功能组状态中未启用监督
-
正常(kOk):
- 监督条件满足的正常运行状态
- 生存监督:检查点报告在时间窗口内
- 截止时间监督:两个检查点间隔时间符合预期
- 逻辑监督:检查点顺序正确
-
超时(kExpired):
- 监督条件违反的错误状态
- 生存监督:未在时间窗口内报告检查点
- 截止时间监督:两个检查点间隔时间不符合预期
- 逻辑监督:检查点顺序错误
- 可以通过重启恢复到正常状态(取决于配置)
-
停止(kStopped):
- 监督永久停止的状态
- 由进程终止、监督被停止或超过最大恢复尝试次数导致
- 将通知状态管理执行恢复动作
- 可能会重置系统或重启进程
状态转换路径:
- 初始化 → 未激活:监督初始化
- 未激活 → 正常:启动监督
- 正常 → 超时:违反监督条件
- 超时 → 正常:重启恢复成功
- 超时 → 停止:超过最大恢复尝试次数
- 正常 → 停止:进程终止或监督被停止
- 未激活 → 停止:初始化失败
- 停止 → 终止:监督终止
3.2 监督流程
下图展示了平台健康管理的监督流程,包括从初始化到恢复的完整过程:
图3.2 AUTOSAR平台健康管理监督流程
监督流程主要包括以下几个阶段:
-
初始化阶段:
- 应用程序创建SupervisedEntity实例
- 状态管理通知功能组状态
- 监督模式管理器配置相应的监督模式和参数
-
正常监督阶段:
- 应用程序周期性报告检查点
- 监督状态评估器计算生存监督状态
- 状态为kOk时,恢复动作管理器触发硬件看门狗生存指示
-
监督失败阶段:
- 检测到应用程序未能在超时前报告检查点
- 监督状态变为kExpired
- 恢复动作管理器尝试恢复
- 如果恢复成功,重置监督状态为kOk
- 如果恢复失败或超过尝试次数,通知状态管理,停止喂狗,可能导致系统重启
-
进程终止阶段:
- 应用程序报告终止检查点(对于自终止进程)
- 停止监督
- 更新监督状态为kStopped
流程中的关键交互:
- 应用程序与PHM:通过ReportCheckpoint API报告检查点
- PHM内部组件间:传递检查点和状态信息,协同工作
- PHM与其他功能集群:与状态管理、执行管理等交互
4. 配置与使用
4.1 配置参数
平台健康管理的主要配置参数包括:
-
生存监督配置:
aliveReferenceCycle
:生存周期基准时间aliveSupervisionCycle
:监督周期aliveTimeout
:生存超时时间maxAliveRetry
:最大重试次数
-
截止时间监督配置:
minDeadlineTimeout
:最小截止时间maxDeadlineTimeout
:最大截止时间maxDeadlineRetry
:最大重试次数
-
逻辑监督配置:
logicalSupervisionCycle
:逻辑监督周期logicalTimeout
:逻辑超时时间maxLogicalRetry
:最大重试次数
-
自终止进程配置:
terminatingCheckpoint
:终止检查点IDterminatingCheckpointTimeoutUntilTermination
:终止超时时间
-
监督模式配置:
- 每个功能组状态对应的监督配置集合
- 可以为不同模式配置不同的参数
配置示例:
<AliveSupervision>
<checkpoint>CP_ALIVE</checkpoint>
<aliveReferenceCycle>100</aliveReferenceCycle>
<aliveSupervisionCycle>10</aliveSupervisionCycle>
<aliveTimeout>150</aliveTimeout>
<maxAliveRetry>3</maxAliveRetry>
</AliveSupervision>
4.2 应用示例
以下是PHM使用的简化示例代码:
// 创建监督实体实例
ara::phm::SupervisedEntity se("MySupervisionInstance");
// 应用程序周期性报告检查点
void cyclic_task() {
while (running) {
// 执行业务逻辑
performWork();
// 报告生存监督检查点
auto result = se.ReportCheckpoint(CP_ALIVE);
if (!result) {
// 处理报告失败
handleReportError(result.Error());
}
// 等待下一个周期
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
// 注册恢复处理程序
void setupRecovery() {
ara::phm::RecoveryAction recoveryAction;
// 注册生存监督恢复处理程序
recoveryAction.Register(
ara::phm::TypeOfSupervision::kAliveSupervision,
[](ara::phm::SupervisedEntityType seType, ara::phm::GlobalSupervisionStatus status) {
// 处理生存监督失败
if (status == ara::phm::GlobalSupervisionStatus::kExpired) {
// 执行恢复动作
performRecoveryAction();
}
return ara::core::Future<void>();
}
);
}
在这个示例中:
- 应用程序创建SupervisedEntity实例
- 在循环任务中周期性报告检查点
- 注册恢复处理程序来处理监督失败情况
5. 总结
AUTOSAR平台健康管理模块提供了强大的机制来监控和维护自适应平台上软件组件的健康状态。通过生存监督、截止时间监督和逻辑监督,PHM能够检测各种软件异常,并采取适当的恢复措施。
PHM的主要优势包括:
- 全面的监控能力:支持多种监督类型,覆盖时间和逻辑方面的监控需求
- 灵活的配置选项:可根据不同功能组状态配置不同的监督模式和参数
- 强大的恢复机制:提供多级恢复策略,从软件重试到系统重启
- 与其他功能集群的集成:与状态管理、执行管理等紧密集成,形成完整的监控恢复闭环
PHM模块是确保AUTOSAR自适应平台系统健壮性和安全性的关键组件,尤其适用于需要高可靠性的汽车电子系统。通过正确配置和使用PHM,开发者可以构建更加可靠和安全的软件系统。