论文部分内容阅读
随着系统芯片(System-on-a-Chip,简称SoC)需求的发展和微软Windows操作系统(简称MS Windows)普及度的广泛深入,MS Windows兼容系统芯片变得越来越重要。但是复杂的系统芯片设计和闭源(closed source)软件兼容要求,使得MS Windows兼容系统芯片设计过程中的故障定位变得极为困难。本文结合北大众志PKUnity86系统芯片的设计实现及实际应用,面向MS Windows等大型闭源软件系统的兼容性,开展系统芯片设计过程中故障定位方法的研究。本文围绕如何缩小硬件故障范围的问题,集中关注MS Windows兼容硬件核心(hardware kernel)的规范设计方法、外设故障检测和硬件故障局部化(faultlocalization)等重要方面,研究并实现了相应的关键技术,为应对系统芯片故障定位过程中所面临的挑战提供了新的解决方案。本文的主要内容及研究成果包括以下方面:
1)MS Windows兼容系统芯片硬件核心的规范设计方法
系统芯片硬件核心能够缩减系统开发初期的功能规模,缩小可能的故障涉及范围,提高故障定位效率。本文以MS Windows兼容的且基于AMBA开放总线协议的PKUnity86系统为例,研究了MS Windows兼容系统芯片硬件核心的规范设计方法。该方法首先比较:MS Windows兼容的完整系统功能规范集和x86兼容的系统功能规范集,获得二者的差异集合,然后通过多次模拟运行、逐步抽取的方式在差异集合中删除非硬件核心必需的资源项,最后获得MS Windows兼容硬件核心的系统功能规范集。基于本文方法设计的MS Windows兼容硬件核心规范的复杂度大幅度降低,可能的故障涉及范围大幅度缩小,硬件故障定位效率得以有效提高。
2)基于动态I/O值不变式的外设故障检测方法IDVI
为了尽早地检测硬件故障,提高故障定位效率,本文基于MS Windows兼容系统中外设故障的传播特征,提出了基于动态I/O值不变式的外设故障检测方法IDVI(detect peripheral hardware faults using I/O-state-based Dynamic ValueInvariants)。该方法通过监视大型真实软件运行过程中异常的I/O状态值来检测外设故障。该方法首先在多次模拟参考运行中提取MS Windows的I/O状态动态值不变式,然后在故障运行中检验所有I/O操作的状态值是否与相应的动态I/O值不变式冲突,如果出现不变式冲突则报告为可疑外设故障。IDVI方法的外设故障检测效率较高,非屏蔽(unmasked)故障检测覆盖率超过97%,69%注入故障的检测延迟在10条动态执行指令之内,且故障检测误判率小于1.2%,故障检测效果优于最新研究iSWAT。
3)基于多粒度动态控制流不变式的硬件故障局部化方法MDCI
针对导致大型软件失效的硬件故障范围过大的问题,本文提出了基于多粒度动态控制流不变式的硬件故障局部化方法MDCI(Multi-granularity DynamicControl flow Invariants extractor and checker)。该方法从多次模拟参考运行中提取MS Windows中置信度较高的各种粒度动态控制流不变式,包括已知关键点、代码段切换(code segment switch)、函数调用和条件跳转四种粒度;然后使用基本的条件断点调试功能,多粒度由粗到细逐级迭代地检验控制流不变式程序点是否可达;最终找到最后可达的条件跳转程序点附近的故障可疑区间,从而将与硬件故障相关的代码范围局部化。对于79%的非屏蔽故障,MDCI方法只需检验50个程序点就能完成故障局部化过程,并且所报告的49%可疑故障位置与实际故障发生位置的距离在5000条动态执行指令以内。此外MDCI方法还有效地将PKUnity86系统中的设计兼容性故障范围局部化。
4)基于不确定性过滤的硬件故障局部化方法FaLoFiN
为了进一步提高硬件故障局部化的准确度,本文针对包含踪迹输出调试功能的硬件系统,提出了基于不确定性过滤的硬件故障局部化方法FaLoFiN(ahardware Fault Localization approach via Filtering Non-determinacy)。该方法首先从多次模拟参考运行中提取MS Windows的不确定性函数调用集;然后分别从参考运行和故障运行中过滤不确定性函数调用集,获得过滤后确定性函数调用集;最后通过比较过滤后的确定性函数调用集,定位异常函数调用,实现与硬件故障相关代码范围的局部化。在踪迹输出调试功能的支持下FaLoFiN方法能达到更高的硬件故障局部化准确度,所报告的69%可疑故障位置与实际故障发生位置的距离在5000条动态执行指令以内,比最新研究TBFD的故障局部化准确度高6%,并己成功地将PKUnity86系统中的功能故障范围局部化。