论文部分内容阅读
近些年来随着云计算技术的飞速发展,虚拟化技术的重要性也日益突出。虚拟机在线迁移技术能够将处于运行状态的虚拟机透明的从一个物理主机迁移至另一个物理主机,是云计算平台能够快速适应不断变化的业务需求,实现资源的动态部署和重配置,解决负载均衡、系统容错等关键问题的核心技术。如何快速准确的实施虚拟机在线迁移,在保持虚拟机工作效率的同时完成虚拟机内存信息的动态同步,是虚拟机在线迁移技术研究中的重点和难点。目前主流的迁移方法有预拷贝迁移、后拷贝迁移和基于检查点与日志回放的虚拟机迁移,后拷贝迁移具有停机时间短、网络传输总量少、能够快速释放宿主主机资源等优点,一直以来都是研究的热点。其缺点在于虚拟机需要在内存不完整的情况下恢复运行,导致虚拟机会由于缺页错误过多而出现性能衰退的现象。目前主要的解决方法是根据虚拟机在目的主机上恢复运行后发生的缺页错误来预测虚拟机即将访问的内存页并优先迁移,但是这类做法并不能保证预测的准确性,并且由于需要虚拟机恢复运行后才能逐渐发挥作用而存在滞后性。本文针对上述问题展开研究工作,提出了基于预记录的虚拟机在线迁移方法,并对与之相关的关键技术,如核心信息的迁移、远程缺页错误处理、虚拟机访存轨迹的获取、脏页面动态备份、内存发送顺序的优化调整等进行了深入研究。论文的主要工作如下:(1)针对后拷贝迁移中缺页错误数量过多且相关优化方法在准确性和时效性上存在不足的问题,提出了一种基于预记录的虚拟机在线迁移方法。利用虚拟机在迁移两端的运行具有延续性和时间差的特征,通过在宿主主机上对虚拟机进行预执行并记录被访问内存页的方式,获得虚拟机恢复运行后将会访问的内存页。在内存迁移开始之前完成页面迁移顺序的调整,解决了优化算法的生效时间存在延迟的问题,优先将被记录页面迁移至目的主机供虚拟机使用,达到减少缺页错误的数量的目的。在Xen虚拟机中实现了该方法,实验结果表明在运行各种类型的负载应用时,预记录迁移都能够有效减少迁移过程中缺页错误的数量,提高虚拟机运行的稳定性,并且具有网络传输数据总量少,总迁移时间和停机时间短的优点。(2)针对内存迁移阶段将页表页和普通内存页混合迁移会增加内存重构工作的复杂度,且容易造成多级页表之间关联关系的丢失和引发多重缺页错误的问题,提出了一种将页表加入虚拟机核心信息的迁移策略。目的主机在恢复虚拟机核心信息的同时完成多级页表结构的重构工作,确定内存页面的存放位置。解决了提前完成页表重构后访问未迁移页面无法触发缺页错误和无法获取所缺页面pfn号的问题。在完成页表重构的同时完成p2m表的重构,从各项核心信息的结构入手,分析了核心信息间的相互关联关系,制定了在将页表加入核心信息的情况下各项核心信息的迁移顺序和恢复流程。(3)预记录迁移需要记录虚拟机在预执行过程中访问的内存页面,如何获得虚拟机访问的内存页面是需要解决的问题。同时,预执行会修改内存页内容,但目的主机不会继承预执行的结果,需要获得页面的原始内容,因此应该在修改前对页面进行备份,而对全部内存进行整体备份的方法效率很低。针对上述问题,本文提出了一种利用影子页表获取虚拟机在内存中的访问轨迹,并对脏内存页面的原始内容进行动态按需备份的方法。利用影子页表中的地址转换记录能够体现虚拟机所访问的内存页的特点,通过循环保存与清空影子页表的方式获取虚拟机在内存中的访问轨迹。扩充影子页表的功能,在影子页表转换地址的同时将页面的原始内容映射并保存至预先分配的存储空间中,从而实现了对脏页面的动态按需备份。在Xen虚拟机中实现了该方法,使用迭代递增的内存空间来保存备份页面以避免对虚拟机性能造成影响,使用影子记录表记录已备份页面来避免对同一内存页重复备份。该方法具有流程简单高效、能够缩减数据量、易于实现等优点,并且与内存全备份相比占用内存空间更少、执行效率更高。(4)普通缺页错误与远程缺页错误的处理流程不同,而虚拟机监视器无法判断发生缺页错误的虚拟机是否处于迁移状态,对所有缺页错误进行类型判断会拖慢正常运行的虚拟机处理缺页错误的速度。针对这个问题,本文设计并实现了RemotePF页表助手来标识虚拟机迁移状态。在迁移开始时开启RemotePF页表助手,将缺页错误转交给迁移模块进行修复,迁移结束关闭RemotePF,所有缺页错误直接由系统进行修复。在Xen虚拟机中实现了该页表助手,使用超级调用进行控制,实验结果表明该页表助手能够有效缩短虚拟机正常运行时对缺页错误的处理时间,且不会对迁移中的虚拟机对缺页错误的处理造成影响。(5)针对独立远程缺页请求处理模块的在获取虚拟机控制接口,维护p2m表和已发送页面记录表时流程繁琐的问题,本文在宿主主机和目的主机两端对远程缺页错误的处理流程进行了优化。分析了在处理远程缺页请求过程中需要完成的工作,使用多线程的方式实现对缺页错误的分析、处理与应答,多线程共同维护控制接口、p2m表和已发送页面记录表,减少了模块间协调与同步的时间,提高了处理远程缺页错误时的工作效率,并给出了优化后迁移两端对远程缺页错误的处理流程。(6)预记录页面体现了虚拟机在内存中的访问轨迹,可以用来找出剩余内存页中具有高被访问概率的页面并优先进行迁移,从而避免在预记录页面集发送完毕后出现缺页错误数量大幅上升的现象。本文提出了一种利用基于线性回归的预测算法对预记录迁移中内存迁移顺序进行优化的方法,利用局部性原理分析访存轨迹,找出访问存在连续性的内存区域,提出了增量路径和顺序集的概念以分析各区域内访存行为的延续性,判断访存记录是否能够构成顺序集,进而确定预测窗口的扩展方向和范围。在预记录页面迁移完毕之后,宿主主机继续发送预测窗口中内存页,使最近最可能被访问的页面被优先发送至目的主机,进一步降低缺页错误的发生几率。在Xen虚拟机中实现了该算法并在负载应用具有不同访存规律的情况下实施迁移实验,实验结果表明该算法能够在预记录迁移的基础上进一步减少迁移过程中缺页错误的数量,从而提高虚拟机运行的稳定性和负载应用的工作性能。(7)针对线性回归预测在并行负载进程数量较多、单个进程占用内存量较少的情况下性能不佳的情况,本文提出了一种利用聚类分析来找出虚拟机访问概率较高的内存区域的方法,并为聚类结果中页面赋予优先级以确定迁移顺序。利用聚类分析算法分析预记录页面集,找出虚拟机的访存活动热区。利用访存记录能够构成顺序不规则数列的特点,设计了 ISS-DBSCAN聚类分析算法来降低聚类分析的时间复杂度。根据访问时间和次数确定热区中预记录页面的优先级,并根据优先级将热区划分为多个邻域,按照优先级的顺序迁移各邻域中的内存页面。在Xen虚拟机中实现了该算法,实验结果表明ISS-DBSCAN算法可以在预记录迁移的基础上进一步有效的降低缺页错误的数量,从而提高虚拟机运行的稳定性,并且在并行负载进程数量较多、单个进程占用内存量较少的情况下依旧有很好的优化效果,弥补了线性回归预测的不足。