论文部分内容阅读
执行重放技术在诞生之初是用于重现并行程序的并发性错误。随着其研究的不断深入特别是与虚拟化技术进行融合后,虚拟机执行重放技术可用于虚拟机迁移、虚拟机调试、虚拟机容错以及虚拟机入侵检测等诸多领域。但是传统的虚拟机执行重放技术尚未有合适的表达方式,即不能针对各种应用场景给出详细的重放能力描述,使得开发适用于特定执行重放应用的系统时缺少理论性指导。在实现技术上,应用最广泛的虚拟机执行重放系统Xen-Revirt还是设计运行在单核处理器平台上,属于早期执行重放系统,尚不能适应现代多核硬件平台。另外,多线程执行重放也遇到系统性能开销巨大以及容易受无关进程干扰等问题,而虚拟机执行重放技术的参与有可能为其提供良好的解决方案。
针对以上问题,本文对虚拟机执行重放技术应用于单VCPU虚拟机的系统调试场景进行建模,并验证Xen-Revirt虚拟机执行重放系统满足该场景要求。接着,对Xen-Revirt虚拟机执行重放系统进行硬件适配性改造,使其支持主流的多核硬件平台,扩展其应用范围。最后,讨论多线程执行重放系统性能开销巨大以及容易受无关进程干扰问题,使用弱确定性重放和定制虚拟机的方法,给出问题的解决方案并实现执行重放系统。
本文主要取得了以下几个方面的成果:
1.根据虚拟机的系统调试对执行重放技术的需求,扩充了指令集虚拟化模型,提出了虚拟机系统执行重放的形式化定义。讨论不确定性事件与达成执行重放的关系,并证明了完成系统重放的充分条件。即证明所有达成该充分条件的前提下,通过重放指令序列中的不确定性指令,可以使得虚拟机重放系统能够准确模拟记录阶段的执行状态,进而使得重放系统具有完成系统调试的能力。最后验证Xen-Revirt虚拟机执行重放系统满足该场景要求。
2.我们依据IntelCore2多核处理器的性能计数器接口,重新设计实现了重放系统的不确定事件的时间点控制策略。讨论了VCPU与物理CPU之间的动态绑定关系以及物理CPU上下文切换时对重放系统的影响,并在实践中改进了若干重放策略,确保了CASMotion能够正确运行在IntelCore2以后的多核硬件平台之上。为适应Xen虚拟资源引擎的发展,本工作也重新讨论了虚拟化平台上的不确定事件种类并重设计实现了设备重放策略。
3.借鉴确定性执行研究成果,提出弱确定性重放概念,使得同步加锁代码在重放阶段以确定性的方式执行,重放同步代码中的并发错误。本方法涵盖POSIX标准所定义的所有线程锁函数,并将其分为读锁和写锁。提出具体的依赖规则生成策略,在重放策略中保证写锁以严格的确定性执行,而读锁则可以以有限的并发性被执行。本方法中引入类似于Netzer的嵌套优化方法,在记录和重放阶段之间插入优化日志过程,削减冗余的依赖规则。
4.本文的WDRVirt执行重放系统实现了上文所提到的弱确定性重放系统,支持对POSIX标准所定义的线程锁函数的获取顺序进行重放。为避免操作系统内其他无关线程的干扰,WDRVirt为目标多线程程序定制虚拟机,为目标程序提供纯净的执行重放环境。通过重放该虚拟机及其内部的不确定事件,完成对目标程序的执行重放。WDRVirt同时部署在虚拟资源引擎和定制虚拟机内部。处于虚拟资源引擎中的平台重放器可支持所有Xen平台上的泛虚拟化虚拟机。而定制虚拟机内部的重放策略通过替换函数库完成,所以WDRVirt相比其他的重放工具具有易于部署的特点。