4. 资源耗尽故障模式与影响分析

星载计算机的资源耗尽不是单一故障,而是一类由“资源供给—资源消耗—资源回收”三者失衡引发的系统性失效。要把它分析清楚,必须借助两类互补的方法:FMEA(故障模式与影响分析)自底向上枚举“某个资源被谁耗尽、后果是什么”,FTA(故障树分析)自顶向下追问“系统级失效由哪些资源耗尽路径组合而成”。本节围绕这两条主线,给出可落地的分析流程、关键路径判定准则和单点故障识别方法。

一、先建立资源分类与失效判据

FMEA 的第一步不是画表,而是把“资源”定义到可观测、可判据的粒度。星载计算机通常可归为五类资源,每类都要给出明确的耗尽判据,否则分析会停留在“内存不足”这类无法验证的描述上。

资源类别典型对象耗尽判据(示例)典型后果
存储资源堆、栈、静态区、日志分区堆剩余 < 5% 或 malloc 连续失败 3 次任务创建失败、复位
时间资源CPU 时间片、中断响应窗口任务超时率 > 1% 或中断延迟 > 2 ms控制周期抖动、丢帧
句柄/表项文件描述符、信号量、消息队列表项占用率 > 90% 且无回收通信中断、任务阻塞
带宽资源1553B/SPW 总线、遥测下行总线负载 > 70% 持续 10 s指令延迟、遥测丢失
能源/热电源模块、散热余量功耗超预算或结温逼近上限降频、关机保护

判据中的数值属于教学示例,实际型号应依据任务剖面、余量设计和在轨遥测统计确定。判据一旦确定,FMEA 的“故障模式”就有了可测的触发条件。

二、FMEA:从资源条目到影响链

面向资源耗尽的 FMEA,建议以“资源条目 × 消耗者”为分析单元,而不是以整机为单位。每个分析单元至少填写:故障模式、触发原因、局部影响、上层影响、严酷度(S)、发生概率(O)、可检测性(D)以及现有防护措施。RPN = S×O×D 用于排序,但星载场景下更应优先关注严酷度高的单点,而不是单纯追求 RPN 数值最小。

以“堆内存耗尽”为例,其影响链可以这样展开:某图像压缩任务因输入帧异常增大而反复申请大块内存 → 堆碎片化加剧 → 其他任务 malloc 失败 → 姿态控制任务无法创建周期作业 → 控制输出停更 → 星上进入安全模式。这条链中,真正致命的不是“压缩任务申请失败”,而是“姿态控制任务被连带拖死”,后者才是需要重点设防的传播路径。

FMEA 表格中“局部影响”和“上层影响”必须分开写。局部影响用于定位,上层影响用于定级;把两者混为一谈,会导致严酷度被系统性低估。

三、FTA:把系统级失效还原为资源耗尽路径

FTA 从顶事件出发,例如“星载计算机在轨失去姿态控制能力”。向下分解时,资源耗尽类底事件通常以“与门”形式汇聚:只有当“资源被耗尽”与“防护未生效”同时成立,顶事件才会发生。这正是资源耗尽故障的典型结构——单一资源紧张往往不致命,致命的是“耗尽 + 防护失效”的组合。

下面这张图给出了一条典型的资源耗尽故障树片段,同时标注了关键路径与单点故障位置。图中菱形表示未继续展开的底事件,矩形表示中间事件,带“SPOF”标记的底事件为单点故障候选。

顶事件:失去姿态控制能力 与门 资源被耗尽 防护机制未生效 堆内存耗尽 消息队列满 看门狗未复位 降级策略缺失 关键路径 SPOF 图例 顶事件 / 关键路径 中间事件(资源耗尽) 中间事件(防护失效) 底事件 SPOF:单点故障候选 注:图中判据与结构为教学示例,实际型号需按任务剖面确定

四、关键路径与单点故障的判定准则

故障树画完后,真正决定加固优先级的是两条判定准则。

关键路径判定:从顶事件向下,若某条路径上所有底事件同时发生的概率高于 10⁻⁴/年,且路径中不存在冗余或降级措施,则该路径为关键路径。关键路径上的资源条目应优先设置监控点和阈值告警。例如上图中“堆内存耗尽 → 资源被耗尽 → 与门 → 顶事件”就是一条典型关键路径。

单点故障判定:若某个底事件单独发生即可导致顶事件,且无任何冗余、无降级、无自动恢复,则它是单点故障(SPOF)。资源耗尽类 SPOF 常见于三类位置:唯一的堆分配器、唯一的看门狗喂狗任务、唯一的降级决策模块。识别出 SPOF 后,处理策略只有三种——增加冗余、增加降级、增加可检测性,三者至少要落实一项。

不要把“有看门狗”等同于“不是单点故障”。如果看门狗喂狗动作本身依赖被监控任务,或喂狗任务与故障任务共享同一资源池,看门狗在资源耗尽时同样会失效,SPOF 依然存在。

五、可执行的 FMEA 分析表模板

下面给出一份可直接填写的资源耗尽 FMEA 分析表,字段按星载场景裁剪,去掉了与本节无关的管理字段。表中“示例行”用于说明填写粒度,实际分析时应逐资源条目展开。

资源条目:堆内存(总 8 MB,余量设计 30%)
--------------------------------------------------------------
故障模式    触发原因          局部影响        上层影响         S  O  D  RPN  现有防护
--------------------------------------------------------------
堆耗尽     图像任务异常帧    压缩任务失败    姿态任务创建失败  9  4  3  108  无内存配额
堆碎片化   大小块交替申请    大块申请失败    周期任务抖动      7  5  4  140  无碎片整理
分配器死锁 中断中调用malloc  系统挂起        看门狗复位        10 2  5  100  禁止中断分配
--------------------------------------------------------------
关键路径:堆耗尽 → 姿态任务创建失败 → 失去姿态控制
SPOF:分配器死锁(无冗余、无降级、检测依赖看门狗)
建议措施:为姿态任务预留静态内存池;分配器加超时返回;增加堆余量遥测

填写时注意三点:一是“触发原因”要写到可复现的操作或条件,而不是“软件缺陷”;二是 S、O、D 的取值要有型号内的统一标度,避免不同人打分口径不一致;三是“现有防护”必须写实际已实现的措施,规划中的措施应另列一栏,否则会高估当前健壮性。

六、从分析结果到测试用例

FMEA/FTA 的产出不应止于一张表,而应直接转化为测试用例。对每条关键路径和每个 SPOF,至少设计一个注入用例:用故障注入工具在目标资源上制造耗尽条件,观察系统是否按预期降级、是否触发告警、是否在限定时间内恢复。例如针对“堆耗尽”关键路径,可注入“连续申请 1 KB 块直至失败”,预期结果是姿态任务仍能从静态内存池获得资源、系统上报堆余量告警、且不触发整机复位。若实际结果是整机复位,则说明该路径的防护未生效,需要回到 FMEA 表更新防护措施并重新验证。

这样,FMEA/FTA 就不再是文档工作,而成为连接“故障模式识别”与“健壮性测试用例设计”的桥梁:分析给出该测什么,测试给出防护是否真的有效,两者迭代闭环,才能把资源耗尽风险控制在可接受范围内。