2. 故障注入技术基础
故障注入不是“随便往系统里塞个错误”,而是一套有模型、有层次、有方法、有度量的受控实验技术。它的核心目标是:在可观测、可复现、可度量的条件下,把特定故障引入目标系统,观察系统是否按预期检测、隔离、恢复或降级,从而获得可靠性证据。要做好星载存储的故障注入,必须先建立四个基础概念:故障模型回答“注入什么”,注入层次回答“在哪里注入”,注入方法回答“怎么注入”,评估指标回答“注入得怎么样”。
一、故障模型:把真实失效抽象成可注入的对象
故障模型是对真实物理失效的抽象描述。星载存储中常见的物理失效包括:NAND 闪存单元氧化层击穿导致位翻转、辐射引起的单粒子翻转(SEU)与多位翻转(MBU)、总剂量效应导致的阈值漂移、控制器 SRAM 位翻转、总线瞬态错误、电源跌落引起的写中断等。直接复现这些物理过程成本极高,因此工程上用故障模型来近似。
按持续时间和表现形式,常用故障模型可分为:
- 瞬态故障(Transient):只影响一次读写或一个很短时间窗,如单比特翻转、总线上的单周期错误。典型参数是翻转位置、翻转位数、发生时刻。
- 永久故障(Permanent):持续存在,如存储单元固定为 0/1(stuck-at)、地址线断路、块失效。典型参数是故障地址、故障类型、生效时刻。
- 间歇故障(Intermittent):时有时无,如接触不良、临界时序违例。通常用发生概率和持续时间分布描述。
在存储阵列层面,最常用的模型是位翻转模型和固定故障模型。位翻转模型可细分为单比特翻转(SBF)、双比特翻转(DBF)和邻位多位翻转(MBU)。例如,对一片 512MB 的 NAND 存储区,若按 1×10⁻⁶ 的翻转率注入,则预期翻转位约为 512×1024×1024×8×10⁻⁶ ≈ 4295 位;实际实验中通常按“每千次读写注入 N 位”来控制密度,而不是一次性铺满。固定故障模型则常写成“地址 A 的第 k 位恒为 0”,用于验证 ECC 纠错、坏块管理和重映射逻辑。
二、注入层次:从器件到系统的五层视角
同一类故障,注入在不同层次,观察到的现象和验证目标完全不同。星载存储通常可划分为五个注入层次:
- 器件/物理层:直接对存储芯片引脚、电源或辐射源施加影响,如重离子辐照、电压毛刺。最真实,但可控性和可重复性最差。
- 电路/寄存器层:通过扫描链或 FPGA 内部寄存器强制翻转,如对 SRAM 型配置存储器注入位翻转。适合验证底层容错电路。
- 存储阵列/数据层:直接修改 NAND 页、块或缓存中的数据位,如把某页第 3 字节第 5 位取反。这是星载存储最常用的层次,能直接检验 ECC、CRC、坏块管理和文件系统。
- 接口/协议层:在总线或协议帧中注入错误,如翻转 ONFI 命令、破坏 CRC、插入错误状态码。用于验证控制器与主机的交互健壮性。
- 系统/软件层:通过软件钩子、故障寄存器或调试接口注入,如让某次写操作返回失败、让 DMA 传输丢包。最易实现,但可能偏离真实物理失效。
选择层次的原则是:验证目标决定层次。要验证 ECC 纠错能力,应在数据层注入位翻转;要验证总线重传机制,应在接口层注入 CRC 错误;要验证系统级降级策略,应在软件层注入设备不可用。层次越低越接近物理真实,层次越高越容易控制和观测。
三、注入方法分类:按时间、触发和实现方式划分
故障注入方法可从三个维度分类。按时间特性分为:永久注入(故障一直存在)、瞬态注入(只持续一个时间窗)、间歇注入(按概率重复出现)。按触发方式分为:时间触发(到达某时刻自动注入)、事件触发(如第 1000 次写操作时注入)、条件触发(如温度超过阈值时注入)。按实现方式分为:硬件注入(辐照、探针、FPGA 强制)、软件注入(修改内存、拦截系统调用、故障寄存器)、仿真注入(在 RTL 或系统模型中注入)。
实际工程中常采用“软件注入为主、硬件注入为辅”的组合策略:先用软件注入快速覆盖大量故障模式,再用少量硬件辐照验证真实物理效应。例如,在星载存储控制器中预留一个故障注入寄存器,写入“地址+位号+翻转次数”即可触发一次数据层位翻转,这种方式可重复、可脚本化,适合批量回归测试。
四、评估指标:用数据判断注入是否有效
故障注入的最终产出是一组可度量的指标。常用指标包括:
- 故障覆盖率:被注入故障中,被检测机制成功捕获的比例。例如注入 1000 个位翻转,ECC 纠正了 980 个,覆盖率 98%。
- 检测延迟:从故障注入到被检测到的时间或操作次数。对存储系统,常用“读写次数”或“微秒”度量。
- 恢复成功率:检测后系统成功恢复的比例,包括纠错、重试、重映射、降级运行等。
- 误报率:无故障时被误判为故障的比例,反映检测机制的保守程度。
- 失效模式分布:统计注入后系统出现的具体失效类型,如数据错误、挂起、复位、性能下降等。
这些指标必须与注入配置一起记录,否则数据无法解释。例如“覆盖率 98%”必须说明是在哪个层次、哪种模型、多大注入密度下得到的。评估时还应区分“检测到”和“恢复成功”:检测到但恢复失败,说明容错策略仍有缺口。
五、把四要素串起来:一次完整注入实验的组织方式
以“验证 NAND 控制器 ECC 纠错能力”为例,一次完整实验可以这样组织:
- 选模型:确定注入瞬态单比特翻转(SBF),因为 ECC 主要针对随机位翻转。
- 定层次:选择存储阵列/数据层,直接修改 NAND 页缓存中的某一位,而不是在总线上注入,避免协议层重传掩盖问题。
- 选方法:采用事件触发+软件注入,在第 1000 次写操作完成后,通过故障注入寄存器把指定页的指定字节第 3 位取反。
- 设参数:注入密度设为每千次写注入 1 位,共注入 1000 次,覆盖不同页、不同字节、不同位号。
- 观测与度量:记录每次注入后 ECC 是否纠正、CRC 是否报警、读回数据是否与原始一致、检测延迟是多少次读操作。
- 判定:若 1000 次中 ECC 纠正 982 次、未纠正 18 次且均被 CRC 检出并触发重读,则说明“检测覆盖 100%,纠正覆盖 98.2%”,可进一步分析未纠正位的分布是否集中在某几个块。
总结来说,故障模型决定注入对象的抽象形式,注入层次决定实验的物理位置和观测粒度,注入方法决定实验的可控性和可重复性,评估指标决定实验结论是否可信。四者缺一不可,且必须保持一致:用数据层模型验证 ECC,就不要在软件层注入“写失败”;用系统级指标评估降级策略,就不要只统计单比特翻转的纠正率。只有把四要素对齐,故障注入才能真正成为星载存储可靠性测试的有效手段。