虚拟机检查点的在线保存方法

文档序号:6440797阅读:363来源:国知局
专利名称:虚拟机检查点的在线保存方法
技术领域
本发明涉及一种虚拟机的容错和故障恢复技术,更具体地说,本发明涉及一种虚拟机检查点的在线保存方法。
背景技术
检查点是指保存进程或系统运行过程中瞬时状态信息的一个镜像文件,根据某种需求可以通过它把系统回滚到之前运行的某个状态。由于传统的检查点和系统的软硬件都存在着紧密耦合的关系,从而限制了检查点的应用,如进程迁移、系统调试、异构系统间的双机容错等。虚拟化技术为系统检查点的实现提供了新的思路和模式,虚拟机良好的封装性和隔离性使得基于虚拟机的系统级检查点实现更加简单灵活,同时也消除了传统检查点对于宿主操作系统的遗留依赖关系,具有更好的移动性。然而,虚拟机良好的封装性也造成了虚拟机检查点的粒度更加庞大。在当前虚拟机检查点的实现都是采用核心转储(Core dump)的方式保存虚拟机的内存镜像的情况下, 检查点的大小将取决于当前虚拟机配置的内存大小,同时保存和恢复检查点的时间随检查点大小呈线性增长。在应用程序的工作集不是很大的情况下,这种实现方式由于保存了虚拟机的内存镜像大小中大量的无用信息,造成保存全部虚拟机的内存镜像大小的开销是很大的。此外,当需要频繁的设置检查点来满足高可靠性应用的时候,当前的虚拟机检查点都是每次都保存完整的虚拟机快照,而没有考虑检查点之间的关联性,造成巨大的数据冗余和时间开销。最后,当前的虚拟机检查点在保存内存过程中需要暂停虚拟机的执行,对应用程序缺乏透明性,并且中断了网络连接,大大降低了虚拟机的可用性。对于某些需要持续网络连接的关键应用,“停止-拷贝”模式的检查点模式甚至是不可接受的。综上所述,当前虚拟机检查点由于粒度较大,造成保存和恢复的开销大,并且缺乏透明性。

发明内容
本发明的目的在于提供一种虚拟机检查点的在线保存方法,其可实现虚拟机检查点的轻量化及对应用的透明性。本发明是通过以下方式实现的—种虚拟机完整检查点的在线保存方法,包括以下步骤根据虚拟机的内存镜像大小申请外部存储器的存储空间,并创建检查点文件,根据虚拟机的内存镜像大小建立空闲页面位图、脏页面位图、已拷贝页面位图,排空虚拟机的内存镜像中的页面缓存,以压榨虚拟机的内存镜像大小,停止虚拟机的执行,并保存虚拟机的配置信息、虚拟CPU状态及设备状态,扫描虚拟机的页表描述符表,以找出虚拟机的内存镜像中的空闲内存页面,并将其记录在空闲页面位图中,判断虚拟机管理器是否处于影子内存模式下,若虚拟机管理器不处于影子内存模式下,则开启虚拟机管理器的影子内存模式,对脏页位图进行置位清零,并使虚拟机的内存页面处于写保护状态,唤醒虚拟机,利用写时复制机制和程序执行的时空
4相近性原理保存虚拟机的内存镜像根据虚拟机的内存页面号拷贝内存页面到检查点文件中,并利用空闲页面位图排除空闲的内存页面,排空检查点保存程序的输入/输出缓冲区, 以将缓冲数据保存到检查点文件中。本发明的在线保存方法还包括步骤若虚拟机管理器处于影子内存模式下,则先取消影子内存模式,再进入开启虚拟机管理器的影子内存模式,对脏页位图进行置位清零, 并使虚拟机的内存页面处于写保护状态的步骤。扫描虚拟机的页表描述符表,以找出虚拟机的内存镜像中的空闲内存页面的步骤还包括在检测虚拟机的内存镜像中的空闲页面时,把虚拟机的内存镜像映射到管理域的地址空间,通过虚拟机的物理页帧号找到虚拟机页描述符表的起始地址,遍历虚拟机内核中记录内存状态信息的页描述符表,通过每个内存页面的引用计数判断内存页面是否已经被分配并处于使用状态,若内存页面的引用计数为0,则表示该内存页面处于未使用状态, 在空闲页面位图的相应位置置1,否则,继续扫描页描述符表直到结束。利用写时复制机制和程序执行的时空相近性原理保存虚拟机的内存镜像的步骤还包括初始化拷贝支点为物理页帧号为0的位置,并设置索引指针的偏移量为0,判断虚拟机中是否有内存页面要被修改并且其脏页位标志是否为0,若是则立即拷贝该内存页面到写时复制缓冲区,已拷贝标志位置1,清除对该内存页面的写保护,允许对其更新,脏页位标志位置1,并设置该内存页面为拷贝的新支点,拷贝索引指针偏移量重置为1,若不是则计算拷贝支点的左指针和右指针索引值,判断拷贝支点的左右指针对应的页面是否未拷贝并且非空闲,若是则拷贝该内存页面到检查点文件,已拷贝标志位置1,清除对该内存页面的写保护,拷贝的索引指针偏移量加1,若不是,则返回判断所述虚拟机中是否有内存页面要被修改并且其脏页位标志是否为0的步骤。在线保存方法是异步过程,其在虚拟机停机时仅保存除内存镜像以外的信息,待虚拟机重新激活后才开始保存内存镜像。一种虚拟机增量检查点的在线保存方法,包括以下步骤创建增量检查点文件,停止虚拟机的执行,保存虚拟机的配置信息、虚拟CPU状态及设备状态到增量检查点文件中, 拷贝虚拟机的脏页位图以得到临时副本,并取消虚拟机管理器的影子内存模式再开启影子内存模式,以使虚拟机的内存页面都处于写保护状态,并对虚拟机的脏页位图进行置位清零,唤醒虚拟机,根据脏页位图的临时副本拷贝虚拟机中的内存脏页,利用影子内存模式来追踪虚拟机中更新过的内存页面,并用脏页位图数据结构来记录更新的内存页面,排空虚拟机的输入/输出缓冲区,以将缓冲数据保存到检查点文件中。与现有检查点技术相比,本发明具有如下优点(1)轻量级虚拟机检查点保存的是整个操作系统及应用程序的一个封装,粒度较大。保存内存镜像达到几百MB甚至几个GB的虚拟机的检查点开销无疑是非常巨大的。本发明实现的虚拟机检查点可以压榨内存镜像的存储空间,仅仅保存虚拟机恢复执行时需要的最小工作集,大大减小了保存检查点的时间和空间开销。(2)透明性好当前虚拟机检查点的保存过程普遍采用“停止-拷贝”的模式,虚拟机中断执行的时间等于保存整个检查点的总时间,这将大大降低虚拟机的可用性,特别是可能会中断网络服务。本发明设计了写时复制的机制来保存虚拟机的内存镜像数据,从而使保存检查点的过程对应用程序透明,不用中断虚拟机的所有服务,增强了虚拟机的可用性。⑶通用性好本发明是优化检查点性能的通用原则,其不仅仅适用于本发明的验证平台Xen,而且适用于绝大多数的其他虚拟化平台,如VMware,KVM等,具有良好的通用性。


图1为本发明虚拟机完整检查点的在线保存方法的流程图。图2为本发明在线保存方法中步骤(5)的流程图。图3为本发明在线保存方法中步骤(10)的流程图。图4为本发明虚拟机增量检查点的在线保存方法的流程图。
具体实施例方式下面结合附图对本发明作进一步详细的说明。如图1所示,虚拟机完整检查点的在线保存方法,包括以下步骤(1)根据虚拟机的内存镜像大小申请外部存储器的存储空间,并创建检查点文件;(2)根据虚拟机的内存镜像大小建立空闲页面位图、脏页面位图、已拷贝页面位图;(3)排空虚拟机的内存镜像中的页面缓存,以压榨虚拟机的内存镜像大小;(4)停止虚拟机的执行,并保存虚拟机的配置信息、虚拟CPU状态及设备状态;(5)扫描虚拟机的页表描述符表,以找出虚拟机的内存镜像中的空闲内存页面,并将其记录在空闲页面位图中;(6)判断虚拟机管理器是否处于影子内存模式下,若虚拟机管理器处于影子内存模式下,则进入步骤(7),否则进入步骤(8);(7)取消影子内存模式;(8)开启虚拟机管理器的影子内存模式,对脏页位图进行置位清零,并使虚拟机的内存页面处于写保护状态;(9)唤醒虚拟机;(10)利用写时复制机制和程序执行的时空相近性原理保存虚拟机的内存镜像 根据虚拟机的内存页面号拷贝内存页面到检查点文件中,并利用空闲页面位图排除空闲的内存页面;(11)排空检查点保存程序的输入/输出缓冲区,以将缓冲数据保存到检查点文件中。在步骤(1)中,通过查询虚拟机管理器记录每个虚拟机状态信息的数据结构 XenStore得到即将保存的虚拟机的内存镜像大小,并创建检查点文件。在步骤⑵中,利用步骤⑴中得到的虚拟机的内存镜像大小创建空闲页面位图、 脏页面位图、已拷贝页面位图数据结构,位图中的每一位用“0”或“1”来标识一个内存页面的状态。空闲页面位图用于标记虚拟机内存镜像中的空闲内存页面,通过扫描虚拟机内存
6页表描述符表来识别虚拟机内存镜像中的空闲内存页面;脏页面位图用于标识虚拟机内存镜像中修改过的内存页面,通过影子内存模式下的页保护机制来追踪和标识虚拟机运行过程中变“脏”的内存页面;已拷贝页面位图用于标识已经拷贝到检查点文件中的内存页面, 在保存虚拟机内存镜像时用于避免重复拷贝内存页面。在步骤(3)中,本发明提供了一种高效压榨虚拟机的内存镜像存储空间的方法。 在操作系统中,当数据需要存入磁盘时,通常会先放到缓冲区内,等到适当的时刻再写入磁盘以提高效率。本发明先通过客户操作系统提供的sync工具来强制转储文件系统的缓存数据到磁盘,然后通过系统工具drop caches来清除和回收内存镜像中的页面缓存,从而可以把用于缓存的内存页面从虚拟机检查点文件中排除。在步骤(4)中,在虚拟机挂起状态下保存的信息包括虚拟机的内存配置大小,磁盘镜像文件的位置,虚拟内存和物理内存的映射关系,虚拟CPU的状态,包括CR3及其他寄存器的值,外设(包括网卡,USB设备等)的状态信息。如图3所示,步骤(5)包括以下子步骤(5. 1)在检测虚拟机的内存镜像中的空闲页面时,把虚拟机的内存镜像映射到管理域的地址空间;(5. 2)通过虚拟机的物理页帧号找到虚拟机页描述符表的起始地址;(5. 3)遍历虚拟机内核中记录内存状态信息的页描述符表,通过每个内存页面的引用计数判断内存页面是否已经被分配并处于使用状态;(5.4)若内存页面的引用计数为0,则表示该内存页面处于未使用状态,在空闲页面位图的相应位置置1,否则,继续扫描页描述符表直到结束。在开启虚拟机管理器的影子内存模式的步骤(6)、(7)和⑶中,本发明首先判断虚拟机是否运行在影子内存模式下,若是则先关闭再开启之,目的在于对脏页位图进行置位清零,并使虚拟机的内存页面处于写保护状态,以便捕获虚拟机在运行时对内存页面的写操作并利用写时复制机制来保存虚拟机内存镜像。在步骤(10)中,本发明利用了写时复制机制来保存虚拟机的内存镜像,从而保证在此过程中不会中断虚拟机的运行,对应用程序透明。在拷贝内存页面到检查点文件的过程中,若虚拟机对某些页面要进行修改并且该页还没有被拷贝到检查点文件,虚拟机管理器就会捕获到页面错误,页面错误的处理程序立即把这些即将变脏的内存页面拷贝到写时复制缓冲区,随后这些页面的写保护标志被清除,而已拷贝标志则置1,以后对该页面的读写都作正常处理(即只有第一次页面被修改的时候,该页面才会被拷贝到写时复制缓冲区)。为了减小内存拷贝过程中页面错误的处理开销,本发明利用程序执行的时空相近性原理来减小页面错误发生的次数。如图4所示,每次发生页面错误的时候,都依这一页内存的物理页帧号为中心,来拷贝临近的内存页面,因为这些页面很有可能以后会被修改而产生页面错误,如果它们被提前拷贝到检查点文件,那么就避免了处理将来可能发生的页面错误的时间。如图3所示,步骤(10)包括以下子步骤(10. 1)初始化拷贝支点为物理页帧号为0的位置,并设置索引指针的偏移量为 0 ;(10. 2)判断虚拟机中是否有内存页面要被修改并且其脏页位标志是否为0 ;若不是则进入步骤(10. 5);若是则立即拷贝该内存页面到写时复制缓冲区,已拷贝标志位置1 ;
(10. 3)清除对该内存页面的写保护,允许对其更新,脏页位标志位置1 ;(10. 4)设置该内存页面为拷贝的新支点,拷贝的索引指针偏移量重置为1 ;(10. 5)计算拷贝支点的左指针和右指针索引值;(10. 6)判断拷贝支点的左右指针对应的页面是否未拷贝并且非空闲;若不是则转步骤(10.8);若是则拷贝该内存页面到检查点文件,已拷贝标志位置1 ;(10. 7)清除对该内存页面的写保护;(10. 8)拷贝的索引指针偏移量加1 ;(10. 9)判断虚拟机的所有非空闲内存页面是否都已经拷贝到检查点文件中,若不是则返回步骤(10.2);否则结束。如图4所示,依赖于虚拟机的完整检查点,本发明的虚拟机增量检查点的在线保存方法包括以下步骤(I)创建增量检查点文件;(II)停止虚拟机的执行,保存虚拟机的配置信息、虚拟CPU状态及设备状态到增量检查点文件中;(HI)拷贝虚拟机的脏页位图以得到临时副本,并取消虚拟机管理器的影子内存模式再开启影子内存模式,以使虚拟机的内存页面都处于写保护状态,并对虚拟机的脏页位图进行置位清零;(IV)唤醒虚拟机;(V)根据脏页位图的临时副本拷贝虚拟机中的内存脏页;(VI)利用影子内存模式来追踪虚拟机中更新过的内存页面,并用脏页位图数据结构来记录更新的内存页面;(VII)排空虚拟机的输入/输出缓冲区,以将缓冲数据保存到增量检查点文件中。在上述步骤(III)中,中本发明利用虚拟机页面级的保护技术来捕获那些被频繁修改的内存页面,并记录在脏页位图数据结构中。在保存增量检查点的时候,首先复制一个当前脏页位图的副本,然后脏页位图被清零,开始记录下一次检查点中需要保存的内存页面,检查点保存程序根据拷贝的脏页位图副本只拷贝那些被修改过的内存页面。实例以下通过具体实例说明本发明虚拟机检查点的在线保存方法,实验环境为一台刀片服务器,配置如下
权利要求
1.一种虚拟机完整检查点的在线保存方法,包括以下步骤根据虚拟机的内存镜像大小申请外部存储器的存储空间,并创建检查点文件; 根据所述虚拟机的内存镜像大小建立空闲页面位图、脏页面位图、已拷贝页面位图; 排空所述虚拟机的内存镜像中的页面缓存,以压榨所述虚拟机的内存镜像大小; 停止所述虚拟机的执行,并保存所述虚拟机的配置信息、虚拟CPU状态及设备状态; 扫描所述虚拟机的页表描述符表,以找出所述虚拟机的内存镜像中的空闲内存页面, 并将其记录在所述空闲页面位图中;判断所述虚拟机管理器是否处于影子内存模式下;若所述虚拟机管理器不处于所述影子内存模式下,则开启所述虚拟机管理器的影子内存模式,对所述脏页位图进行置位清零,并使所述虚拟机的内存页面处于写保护状态; 唤醒所述虚拟机;利用写时复制机制和程序执行的时空相近性原理保存所述虚拟机的内存镜像根据所述虚拟机的内存页面号拷贝内存页面到所述检查点文件中,并利用所述空闲页面位图排除空闲的内存页面;排空检查点保存程序的输入/输出缓冲区,以将缓冲数据保存到所述检查点文件中。
2.根据权利要求1所述的在线保存方法,其特征在于,还包括步骤若所述虚拟机管理器处于影子内存模式下,则先取消影子内存模式,再进入所述开启所述虚拟机管理器的影子内存模式,对所述脏页位图进行置位清零,并使所述虚拟机的内存页面处于写保护状态的步骤。
3.根据权利要求1所述的在线保存方法,其特征在于,所述扫描虚拟机的页表描述符表,以找出所述虚拟机的内存镜像中的空闲内存页面的步骤还包括在检测所述虚拟机的内存镜像中的空闲页面时,把所述虚拟机的内存镜像映射到管理域的地址空间;通过所述虚拟机的物理页帧号找到所述虚拟机页描述符表的起始地址; 遍历所述虚拟机内核中记录内存状态信息的页描述符表,通过每个内存页面的引用计数判断所述内存页面是否已经被分配并处于使用状态;若所述内存页面的引用计数为0,则表示该内存页面处于未使用状态,在空闲页面位图的相应位置置1,否则,继续扫描页描述符表直到结束。
4.根据权利要求1所述的在线保存方法,其特征在于,根据所述利用写时复制机制和程序执行的时空相近性原理保存虚拟机的内存镜像的步骤还包括初始化拷贝支点为物理页帧号为0的位置,并设置索引指针的偏移量为0 ; 判断所述虚拟机中是否有内存页面要被修改并且其脏页位标志是否为0 ;若是则立即拷贝该内存页面到写时复制缓冲区,已拷贝标志位置1,清除对该内存页面的写保护,允许对其更新,脏页位标志位置1,并设置该内存页面为拷贝的新支点,所述拷贝索引指针偏移量重置为1 ;若不是则计算所述拷贝支点的左指针和右指针索引值;判断所述拷贝支点的左右指针对应的页面是否未拷贝并且非空闲;若是则拷贝该内存页面到检查点文件,已拷贝标志位置1,清除对该内存页面的写保护,拷贝的索引指针偏移量加1 ;若不是,则返回所述判断所述虚拟机中是否有内存页面要被修改并且其脏页位标志是否为0的步骤。
5.根据权利要求1所述的在线保存方法,其特征在于,所述在线保存方法是异步过程, 其在所述虚拟机停机时仅保存除所述内存镜像以外的信息,待所述虚拟机重新激活后才开始保存所述内存镜像。
6.一种虚拟机增量检查点的在线保存方法,包括以下步骤 创建增量检查点文件;停止虚拟机的执行,保存所述虚拟机的配置信息、虚拟CPU状态及设备状态到所述增量检查点文件中;拷贝所述虚拟机的脏页位图以得到临时副本,并取消虚拟机管理器的影子内存模式再开启所述影子内存模式,以使所述虚拟机的内存页面都处于写保护状态,并对所述虚拟机的脏页位图进行置位清零; 唤醒虚拟机;根据所述脏页位图的临时副本拷贝所述虚拟机中的内存脏页; 利用所述影子内存模式来追踪所述虚拟机中更新过的内存页面,并用所述脏页位图数据结构来记录更新的内存页面;排空所述虚拟机的输入/输出缓冲区,以将缓冲数据保存到检查点文件中。
全文摘要
本发明提供了一种虚拟机增量检查点的在线保存方法,包括以下步骤创建增量检查点文件,停止虚拟机的执行,保存虚拟机的配置信息、虚拟CPU状态及设备状态到增量检查点文件中,拷贝虚拟机的脏页位图以得到临时副本,并取消虚拟机管理器的影子内存模式再开启影子内存模式,以使虚拟机的内存页面都处于写保护状态,并对虚拟机的脏页位图进行置位清零,唤醒虚拟机,根据脏页位图的临时副本拷贝虚拟机中的内存脏页,利用影子内存模式来追踪虚拟机中更新过的内存页面,并用脏页位图数据结构来记录更新的内存页面,排空虚拟机的输入/输出缓冲区,以将缓冲数据保存到检查点文件中。本发明可实现虚拟机检查点的轻量化及对应用的透明性。
文档编号G06F11/14GK102436410SQ201110410748
公开日2012年5月2日 申请日期2011年12月12日 优先权日2011年12月12日
发明者刘海坤, 廖小飞, 金海 , 马博 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1