虚拟平台中的“有意”/“无意”故障注入
构建虚拟平台的重点往往会放在系统运行,尤其是在汽车和航空航天的数字孪生领域。只有确保虚拟平台能够正常运行系统,软件才得以可靠地在虚拟平台上运行。
为确保系统正常运行,通常需要解决如何测试异常、故障和其他问题。该过程通常被称为“故障注入”,指采用人为的在目标系统中引入故障的方法,来加速系统的失效,通过观察系统在出现故障之后的行为反应对系统的可靠性进行评价。
故障注入一般可分为:
1、基于硬件的故障注入:指利用额外的硬件将故障引入目标系统的硬件中。
2、基于模拟的故障注入:指在系统设计阶段,采用某种标准硬件描述语言为目标系统建立硬件仿真模型,然后在该模型内部插入故障注入单元来实现故障注入。
3、基于软件的故障注入:指根据一定的故障模型,通过修改目标系统的内存映像来模拟系统硬件或软件故障的发生。
众所周知,在硬件上直接执行故障注入既复杂又昂贵,且难以精确控制注入时间与位置,容易对目标系统硬件造成损伤。虚拟平台是规避这一问题的解决方案。
虚拟平台中的故障注入
虚拟平台作为硬件系统的数字孪生,能够提供任何状态、任何位置的故障注入,如硬盘故障与拒绝服务(DoS,Denial of Service)攻击,从而便捷地供软件进行成本低廉、可靠性高且可无限重复的故障注入。
使用虚拟平台进行故障注入的优点包括但不限于:
1. 虚拟平台的环境具备完全确定性,故障分析时无需考虑环境因素,相对较为简单;
2. 只需插入脚本就能实现自动化的多组合故障注入,测试量及测试速度甚至优于硬件本身;
3. 使用虚拟平台进行故障注入比直接在硬件上进行故障注入可节省约90%的成本。
一般来说,虚拟平台中的故障注入需要对系统模型进行扩展。某些类型的故障可以通过简单的模型状态改变(如修改寄存器值、内存内容等)来引入,但通常需要模型中有特定故障。在实际操作时,除了预先设计的、故意的故障注入外,还会存在不能被明确定义为“故障”的意外故障。
意料之外的“时钟漂移”事件
虚拟平台上的操作系统突然崩溃,而屏幕显示的是“divede by zero”故障——多半是时钟漂移的缘故。
我们知道,实际硬件操作过程中,不同芯片上的处理器内核通常不会出现完全相同的时间,这是由于单个时钟周期通常会在某个时间点出现偏差,俗称“时钟抖动”,而“时钟漂移”指的是因物理设计等原因而出现的偏差。
实际上,虚拟平台中的时间是紧密协调的,并未对真实硬件普遍存在的时钟漂移进行建模,从而导致了这种硬件上未曾发生、只会在虚拟平台上出现的问题。
意料之外的“双板同时插入”事件
在检测系统软件能否正确检测到新插入的电路板并激活的测试中(具体指将电路板热插拔到带电背板),在虚拟平台上同时向系统添加两块电路板时,软件当即崩溃。只要在虚拟平台对应的真实背板上也同时热插拔两块电路板,并对比堆栈痕迹,就可知bug是出在虚拟平台还是系统本身。事实上,在完成读秒、同时将两块板子插入的那一瞬间,背板就被烧毁了。
尽管此种情况发生的概率很低,故障发生的原因可能是短路也可能是过载,但无论是什么结果,都是前期设计时没有考虑到此种情况所导致的——也许这才是开发人员真正需要注意的地方。
▲双板热插拔故障
SkyEye:故障注入的实用工具
天目全数字实时仿真平台SkyEye,是基于可视化建模的硬件行为级仿真平台,工程师可在虚拟测试环境中任意注入故障,随时暂停或反向执行,稳定复现缺陷,有助于突破硬件配置的界限、解决软件问题。
参考文献:
[1] 佟向鹏, 王文凤. 基于故障注入的系统测试方法及应用[C]// 2013年首届中国航空科学技术大会. 0.
[2] Intentional and Accidental Fault Injection in Virtual Platforms