论文部分内容阅读
本文研究确定性重放技术。确定性重放,也称记录重放,这种技术从第三方的角度跟踪程序运行过程,记录关键信息,依据这些信息重现该次执行过程。围绕国产多核处理器可靠性展开的研究已取得若干成果,包括进程级冗余检错,操作系统回卷恢复等。解决了单线程数值计算程序的瞬态故障容错问题。多线程和非数值计算程序反复执行常常产生不同的结果。对这两类程序,多次执行比对结果的检错方法不适用。本文意在通过记录重放消除这两类程序执行结果的不确定性。既可以扩展已有的检错方案的适用范围,也可以更有效的利用冗余副本进行故障恢复,还能极大的方便调试过程。记录重放技术一直受到系统研究者的关注,除了容错,在调试,系统结构性能模拟,入侵检测等领域也有用武之地。目前已经出现了针对单线程应用程序的记录重放工具,对于多线程程序尚无完整的解决方案。本文从不确定性因素入手,考察这些因素的来源和对程序执行结果的影响。广泛阅读相关论文,了解现有研究中记录重放的实现方法和能够达到的精确程度。讨论了在线重放技术在容错中发挥的作用及其优点。以对应用程序透明为设计出发点,为承接已有的国产多核处理器可靠性研究成果,从操作系统角度设计记录重放方案。以Scribe为参考,根据是否影响操作系统状态将系统调用分为两类,分别讨论了日志记录的内容,重放阶段执行过程和实现思路。研究了Linux操作系统中信号的产生,发送和处理过程,阐述了为记录共享内存写操作准备的CREW协议,分析了二者在实现中遇到的问题。以getpid为例,在常见x86平台上设计实现了系统调用的记录重放,再将其移植到龙芯3A平台上。通过实验验证了功能的正确性,分析了该方案的性能损耗。本文所做的分析,设计和实验可作为记录重放技术后续研究的参考。