一种虚拟机的外存在线迁移方法

文档序号:6610019阅读:167来源:国知局

专利名称::一种虚拟机的外存在线迁移方法
技术领域
:本发明涉及虚拟机迁移技术,特别是一种虚拟机的外存在线迁移方法。
背景技术
:计算机软/硬件资源成为现代社会中必不可少的基础设施之一。众多的国家机构,科研中心,以及企事业单位都组建了规模不等的计算机集群,作为信息化建设的计算中心或者数据中心。如何对这些计算资源进行管理,成为人们面临的重要课题。计算机硬件技术飞速发展,需要经常对计算设备进行更新换代;日趋复杂的软件系统给人们对硬件系统的维护带来了更多困难。近年来,虚拟机技术成为学术界与产业界关注的热点,其重要应用之一就是为计算机软/硬件资源的管理提供有效的帮助。虚拟机在线迁移是基于虚拟机技术的典型应用之一。借助于虚拟机迁移技术,运行中的操作系统实例能够在不同的物理主机之间转移,并且在迁移过程中,操作系统及其上运行的应用与服务能够持续运行而不被中断,操作人员无需关心操作系统上运行的众多应用程序的细节,极大地方便了管理操作。当人们需要对一台物理主机进行维护时,可以用虚拟机在线迁移工具将主机上运行的操作系统迁移至其他备用的物理主机,并且这个过程中操作系统的服务持续可用。硬件维护完成之后,同样可以借助虚拟机迁移工具将原有软件环境转移回来。虚拟机迁移技术同样可以对物理资源进行负载平衡的调度。业界主流的虚拟机厂商VMWare就依据其虚拟机平台VMWareESXServer推出了集群管理套件VirtualCenter,通过迁移技术集中式地对集群硬件资源进行管理,调节软件资源在硬件上的负载。目前的虚拟机迁移技术可以分为两大类常规迁移与在线迁移。常规迁移技术在迁移操作系统之前显式的将其挂起,借助于虚拟机技术将操作系统状态序列化,类似于文件拷贝一样传输至目的主机,在目的主机上将其状态反序列化,重建操作系统实例,恢复其执行状态。常规迁移期间停止虚拟机执行,因而迁移过程中传输的是静态的系统状态,相对简单易行,但是在迁移过程操作系统无法使用,软件系统服务有较长时间中断。在线迁移技术则在保持虚拟机运行的同时对系统进行迁移,由于虚拟机在迁移过程中处于运行状态,期间系统状态的更改需要进行记录,在后续阶段重新传输。当目的主机具备了足够的系统状态时,经过一个非常短暂的切换,虚拟机在目的主机上被激活。在后续阶段,源/目的主机之间进行进一步同步,直至目的主机获得虚拟机全部的最新状态,迁移结束。在线迁移技术是集群管理的有效工具之一。在线迁移技术的要点在于如何最小化停机时间,以维持被迁移虚拟机服务的持续可用。对于静态的内容,例如虚拟机的配置信息等,可以在迁移前期事先发送到目的主机;对于动态内容,则需要进行仔细考虑。动态内容中最大的部分是内存与外存。目前,上百MB甚至更大容量的内存以及上百GB甚至更大容量的外存都已经成为常见系统配置。如果完全在停机阶段传输这两部分的数据,停机时间无疑非常长,达不到在线迁移的要求。目前主流的在线迁移技术,例如VMWare公司的VMotion,以及英国剑桥大学的开源虚拟机管理器Xen上的在线迁移,均采用了内存pre-copy(预复制)的技术以及共享外存的硬件环境来解决上述问题(XenC.Clark,K.Fraser,S.Hand,J.G.Hansen,E.Jul,C.Limpach,I.Pratt,andA.Warfield.LiveMigrationofVirtualMachines.InProc.NSDI,05,May2005VMotionM.Nelson,B.Lim,andG.Hutchins.FastTransparentMigrationforVirtualMachines.InProc.USENIX2005.)。内存pre-copy技术是指,在虚拟机运行的同时,将其内存页面数据发送至目的主机,这个过程中通过记录虚拟机的内存更新,以确定发送过程中产生了哪些脏页;在一轮发送完成之后,开始下一轮pre-copy,将上一次发送过程中产生的内存脏页重新发送至目的主机。这样一个循环pre-copy的过程中,源/目的主机之间不一致的内存页面越来越少,当不一致内存页面数低于某个阈值时,pre-copy循环结束,接下来虚拟机被挂起,其剩余的少量的不一致页面被一次性拷贝至目的主机,这样目的主机就获得了全部最新的内存数据。对于外存,则都依赖于NAS(NetworkAttachedStorage)、SAN(StorageAreaNetwork)等共享的外部存储。既然源/目的主机可以平等地访问到外存设备,那么在迁移的期间只需为目的主机VM建立起对原有外存设备的连接即可,无需传输外存数据。据VMotion和Xen的相关论文(参见上述两篇论文)显示,迁移中的停机时间在l秒以内,大多数情况下仅为几百毫秒。从上面的分析可以看到,在线迁移为了保证虚拟机服务在迁移过程中的可用性,需要将停机阶段的时间最小化。现有的在线迁移技术都依赖于共享外部存储的硬件环境来解决动态迁移虚拟机外存状态的问题,这使得迁移的设计变得简单,也取得了较好的性能。但是,目前存在着大量采用分散式本地存储的集群。例如,随着PC处理能力的日益强大,高性价比的使用本地存储的PC集群成为现在集群的主流方案之一,GoogleCluster就是采用这种方案的著名例子。在这种环境下,现有的在线迁移技术受到限制。虚拟机迁移至目的主机之后,无法直接访问其原有外部存储,或者必须依赖于源主机对其外存访问提供支持。
发明内容本发明的目的在于提供一种虚拟机的外存在线迁移方法,保证迁移过程中仅有非常短暂的停机时间,使得在线迁移不依赖于共享外存设备的硬件环境,能够在分散式外存环境下得到应用。本发明的虚拟机的外存在线迁移方法,其步骤包括1)在推送(Push)阶段,首先将虚拟机的全部外存数据由源主机发送至目的主机;2)虚拟机管理器(VirtualMachineMonitor,简称VMM)监控当前外存发送过程中虚拟机的外存访问,记录该发送过程中的外存块更新状态,标记被写脏的外存数据,即各外存脏块;3)将外存脏块由源主机发送至目的主机;4)循环2)-)3所述步骤,直至达到设定的条件,停止外存数据的发送,进入停机阶段;5)停机阶段,根据外存更新状态记录信息确定剩余的外存脏块及其大小,5-1)当剩余的外存脏块小于设定的量值时,将所有剩余的外存脏块由源主机发送至目的主机,外存迁移结束;5-2)当剩余的外存脏块达到设定的量值时,将当前的外存更新状态记录信息发送至目的主机,进入拉拽(Pull)阶段;6)在Pull阶段,根据外存更新状态记录信息将剩余的外存脏块进行同步操作,外存迁移结束;本发明通过位图(bitmap)记录所述外存块(block)更新状态信息,对外存块在位图中对应的bit进行标记以记录被写脏的外存脏块。上述同步操作过程为在Pull阶段,目的主机的虚拟机访问外存时,由虚拟机管理器监控虚拟机的访问请求,根据在停机阶段接收的外存更新状态信息确定该访问请求是否被同步到本地,如已同步,则提交该访问请求;如未同步,对于写操作,正常提交,对于读操作,暂存该读操作请求,向源主机请求发送该外存数据,待目的主机收到该外存数据后,提交该读操作请求。上述同步操作过程也可为在Pull阶段,源主机在监听和响应目的主机的外存数据请求的同时,根据外存更新状态信息依次将剩余的外存脏块发送至目的主机。目的主机收到数据之后进行判断,若该数据尚未同步,则将其写入本地外存设备;若该部分数据已经在本地被目的主机写过,丢弃该外存数据。上述发送的外存数据为压縮后的外存数据。上述设定的条件选自1)循环次数达到设定阈值;2)被写脏的外存数据的块数小于设定的阈值;3)外存数据被写脏的速度达到设定阈值。上述设定的量值为记录外存状态更新信息的位图的大小。当需要将虚拟机再由目的主机迁移至源主机,或进行多次反复迁移时,只需要传输两次迁移期间外存发生变化的部分,也就是"增量"的外存部分。虚拟机管理器通过bitmap记录了两次迁移中增量的外存数据,由此外存迁移程序依据bitmap记录,只发送增量的外存数据。本发明是在现有内存在线迁移的基础上,实现外存的在线迁移,是虚拟机的全系统在线迁移。本发明主要内容为在现有内存在线迁移方案中添加对于虚拟机外存数据的迁移,并且仍然维持在线迁移的特点。这种包括外存在内的虚拟机完整状态的迁移称为全系统迁移。从前面的背景分析看到,以时间为序,迁移的过程可以分为三个阶段■推送(Push)阶段虚拟机在源主机运行,用户使用的虚拟机服务运行于源主机;■停机阶段虚拟机在源主机被挂起,并且尚未在目的主机启动的阶段,此时虚拟机状态不发生变化■拉拽(Pull)阶段虚拟机在目的主机运行,用户使用的虚拟机服务运行于目的主机。在Push阶段,采用pre-copy方案来减少外存数据在后续阶段需要同步的数据量。类似于内存的pre-copy,当虚拟机仍然在源主机运行时,将其外存数据循环地发送至目的主机,写入目的主机为其分配的外存设备中。在发送过程中,由于虚拟机外存访问而被更新的外存数据需要被重传。因此,需要对虚拟机的外存访问进行监控,以确定哪些外存数据在发送过程中被写脏。虚拟机管理器作为操作系统和硬件之间的软件层,控制着虚拟机的全部外存访问,因此,在虚拟机管理器层可以监控到所有虚拟机的外存访问请求,并且这个过程对于被迁移的虚拟机本身来说是透明的。操作系统的外存访问通过文件系统接口来进行,而文件系统对外存的访问以块(block)为单位。对于每个外存block,只存在两种状态,即是否被写脏。为此,本发明设计用位图(bitmap)来记录虚拟机的外存更新状态。对于每个外存block,若被虚拟机写脏,则将其bitmap对应的bit进行标记。总体来说,外存pre-copy的过程是这样进行的pre-copy的第一轮,外存迁移程序将发送虚拟机的全部外存数据。在此同时,虚拟机管理器为虚拟机的外存状态监控分配bitmap,开始记录虚拟机的每一次外存访问。之后的每一轮pre-copy循环之初,外存迁移程序从虚拟机管理器获取监控的bitmap记录,根据该bitmap将被写脏的外存重新发送到目的主机。同时,虚拟机管理器将bitmap记录清空,开始记录这一轮pre-copy过程中的外存更新情况。随着pre-copy循环的进行,外存的脏块越来越少,直到外存同步的效果足够好,将停止外存的pre-c叩y。本发明用三个因素对外存pre-copy循环进行控制循环的轮次,外存脏块的数量,以及外存变脏的速度。当循环的次数达到某个上限时,外存pre-copy将中止;当外存脏块数量小于某个阈值时,外存pre-copy效果已经达到,外存pre-copy将中止;当外存变脏速度过快时,进行外存pre-copy达不到减少外存同步的效果,外存pre-copy将中止。最后一轮外存pre-copy至源VM被挂起的过程中,由于VM仍在源主机运行,产生的外存脏块需要在后续阶段进行同步。在停机阶段,从bitmap可以确定有哪些剩余的外存脏块需要重传。若脏块非常少,脏块大小的总和小于bitmap本身的大小,则在停机阶段将所有脏块发送至目的主机,从而VM在目的主机在启动之后,所有外存数据己经在本地就绪,可以正常运行;若脏块较多,脏块大小的总和大于bitmap本身的大小,则并不在停机阶段进行剩余外存脏块的传输,而是将bitmap发送到目的主机,为后续阶段的迁移做准备。前面提到,若在停机阶段发现剩余外存脏块较多,则仅发送bitmap,在Pull阶段对剩余的脏块进行同步。采取两个手段来进行Pull阶段的外存同步。第一个手段是目的主机外存访问的按需请求(on-demandfetch)策略。当目的主机访问外存时,在VMM内监控虚拟机的外存IO请求,根据在停机阶段接收到的bitmap,确定该IO请求是否己经被同步到本地。对于外存数据已经同步至本地的情况,IO请求可以正常提交;若bitmap指示这部分外存数据尚未同步(即bitmap中的bit标记为脏块),则又分为两种情况对于写IO操作,可以正常提交,并且将bitmap对应的位进行标记为已经在本地,无需事先从源主机同步外存数据。若为读IO操作,且操作的数据尚未同步(即bitmap中的bit标记为脏块),则将请求暂存起来,通过外存迁移程序向源主机请求这部分外存数据,直到接收到目的主机发来的外存数据时,再提交暂存的IO请求。目的主机这种外存访问方式称为按需请求的外存访问。另外一个手段称为外存post-copy(后复制),其内容为源主机在Pull阶段,在监听和响应目的主机的外存数据请求的同时,根据bitmap依次将剩余的外存脏块发送至目的主机,目的主机收到数据之后进行判断,若该数据在bitmap中指示尚未同步,则将其写入本地外存设备,否则说明该部分数据已经在本地被目的主机写过,丢弃该外存数据。当源主机post-copy结束之后,可以确定目的主机获得了全部的外存最新状态,外存迁移结束。为了减少外存迁移的数据量,设计了增量外存迁移的方案,仅迁移源/目的主机只能够外存状态不一致的部分。一旦虚拟机在目的主机启动,在VMM中用bitmap记录其所有外存访问的历史。这样,当虚拟机从目的主机回迁至源主机时,由于源主机存在上一次迁移时的外存数据,只需要传输两次迁移期间,外存发生变化的部分,也就是"增量"的外存部分,而VMM中的bitmap则记录了两次迁移中增量的外存数据。由此,在外存pre-copy的第一轮,外存迁移程序从VMM中获取bitmap记录,发送增量的外存数据,这样就避免了迁移全部外存数据,实现了增量式的外存迁移。值得注意的是,在外存迁移各阶段的数据发送前,外存数据首先经过压缩,然后在网络上传输,进一步改进了迁移的性能。全系统迁移方案解决了在线迁移对共享外存硬件环境的依赖性,具有以下优点1.较好地控制了由外存迁移给停机时间带来的额外开销。可以看到,在停机阶段,外存迁移仅需传输记录外存更新状态的bitmap,这个时间是非常短暂的。例如,当虚拟机外存大小为40GB,外存block大小为4KB时,bitmap的大小约为1.25MB。在100MB/s的网络传输速度下,传输bitmap的时间不到20毫秒。通过对bitmap数据进行压縮,可以将停机时间进一步縮短。Bitmap的大小仅和虚拟机外存的大小有关,不受虚拟机之上应用程序的影响。Xen,VMotion的在线迁移停机时间均为100毫秒级别,因此,外存迁移增减的停机时间不会改变原有迁移在线迁移的性质。2.较好的保证了迁移过程中虚拟机的IO性能。在VMM中对外存进行监控的时间代价仅为若干条指令的执行以及内存访问操作,相对于低速的IO操作而言,其时间开销可以忽略不计。对于以读IO操作为主的虚拟机,我们的pre-copy操作有效的在迁移前期同步了外存状态;对于以写IO操作为主的虚拟机,在目的主机启动之后,其写IO操作可以直接在本地提交,而无需事先从源主机同步。因此,对于写IO密集型虚拟机,迁移中也能够较好地保证其IO访问性能。考虑到目前网络技术的发展,网络数据传输速率已经接近甚至超过磁盘10的数据传输速率,通过网络按需请求外存的方式并不会带来太大的IO性能损失。3.通过用bitmap在VMM层次监控虚拟机外存访问,增量的迁移虚拟机外存数据,减少了外存迁移传输的数据量,并且这个过程对于虚拟机本身完全是透明的,具有较好的可移植性。考虑到外存容量之大,增量外存迁移对于縮短迁移时间,减少迁移的资源开销等具有非常大的好处。虚拟机全系统在线增量迁移流程图图中椭圆部分为现有的在线迁移,灰色的方块部分主要为外存迁移。A所在区域为Push阶段,B所在区域为停机阶段,C所在区域为Pull阶段。对于流程的各部分(1)为迁移初始化,主要涉及目的主机的选取,资源预留等工作,在目的主机端创建一个虚拟机的空壳。(2)为确定增量外存数据的工作。通过与VMM交互,从bitmap确定哪些外存部分被更新,需要重传。(3)为外存pre-copy。每次pre-eopy首先从VMM获取bitmap,发送bitmap指示变脏的外存,同时将VMM的bitmap清空,记录此后的外存更新情况。(4)为虚拟机的内存循环pre-copy。(5).为内存状态的停机拷贝。进入(5)之后,虚拟机在源主机被挂起,传输剩余未同步的虚拟机内存状态。(6)为目的主机的激活,虚拟机在目的主机上对用户提供服务(7)为目的主机的外存按需请求与外存post-copy。外存post-copy结束后,目的主机获得了全部的外存最新状态,外存迁移结束。VMM仍然通过bitmap记录虛拟机从目的主机启动以来的所有外存更新操作,当将虚拟机迁移回源主机时,转至步骤(1),VMM的bitmap成为增量迁移的依据。具体实施例方式下面以在Xen虛拟机上实现的全系统迁移工具来说明如何在现有在线迁移的基础上实现在线的增量外存迁移机制。Xen的虚拟机外存访问均通过一个特权虚拟机来代理执行。特权虚拟机可以直接访问外设,普通虛拟机的外存访问通过一个叫front-end的驱动程序发送至特权虚拟机,由一个叫back-end的驱动程序统一处理,10请求经过Xen验证合法后,由back-endDriver提交给真实的物理设备驱动程序。IO执行完成后,数据被返回给front-endDriver,最终满足应用程序的10请求。在back-endDriver内截获到虚拟机的10请求,并且用bitmap记录其外存更新。迁移的主体工作由用户态的迁移进程完成,迁移进程运行于Xen的特权虚拟机DomainO.采用Xen的在线迁移进行内存迁移,并在其中各个阶段插入对外存迁移。通过三个简单的实验来考察迁移的性能实验在两台物理主机A和B之间进行,两物理主机均通过网卡连接到局域网。VM在AB主机之间进行迁移。具体配置表1所示<table>tableseeoriginaldocumentpage10</column></row><table>表1实验环境配置■实验一读IO密集性VM迁移实验内容VM在被迁移的过程中,用scp命令从第三方的Linux系统下载文件至本地,通过文件下载速度来测试VM的服务性能。考察的性能指标包括预迁移阶段运行的时间,停机时间,pull阶段运行时间,总体迁移时间,以及在各个阶段的文件下载速率。实验结果如表2所示<table>tableseeoriginaldocumentpage11</column></row><table>表2读10密集型VM迁移实验结果■实验二写IO密集性VM迁移实验内容VM在被迁移的过程中,用scp命令从第三方的Linux系统下载文件至本地,通过文件下载速度来测试VM的服务性能。考察的性能指标包括预迁移阶段运行的时间,停机时间,pull阶段运行时间,总体迁移时间,以及在各个阶段的文件下载速率。实验结果如表3所示<table>tableseeoriginaldocumentpage11</column></row><table>表3写10密集型VM迁移实验结果■实验三增量迁移实验内容将VM在物理主机A和B之间往返迁移三次。第一轮迁移将VM从主机A迁移至主机B,此时主机B不存在VM的外存数据,需迁移完整VM外存状态。第一轮迁移之后,下载一个大小为534MB的文件至VM,作为外存数据更新的模拟,然后将VM从主机B迁移回主机A,这就是第二轮迁移。第二轮迁移后,仅在VM上拷贝一个33KB的文件,作为外存数据更新的模拟,然后将VM从主机B再迁移到主机A,这就是第三轮迁移。考察的性能指标包括预迁移阶段占用的时间,停机时间,pull阶段运行时间,以及总体迁移时间。实验结果如表4所示<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table>表4增量迁移实验结果从实验可以看到,对于读10密集型与写10密集型的VM,其迁移过程中仍然具有较好的IO性能,考虑到计算机硬件资源功能日趋强大,迁移的IO性能可以有较大的提升。迁移过程中的停机时间大多数在IOO毫秒左右,很好的保证了服务的持续可用。增量迁移对于减少迁移的外存数据量有显著的效果,避免了每次都迁移全部外存数据。权利要求1.一种虚拟机的外存在线迁移方法,其步骤包括1)在Push阶段,首先将虚拟机的全部外存数据由源主机发送至目的主机;2)虚拟机管理器监控当前外存发送过程中虚拟机的外存访问,记录该发送过程中外存更新状态,标记被写脏的外存数据,即各外存脏块;3)将外存脏块由源主机发送至目的主机;4)循环2)~3)所述步骤,直至达到设定的条件,停止外存数据的发送,进入停机阶段;5)停机阶段,根据外存块更新状态记录信息确定剩余的外存脏块及其大小,5-1)当剩余的外存脏块小于设定的量值时,将所有剩余的外存脏块由源主机发送至目的主机,外存迁移结束;5-2)当剩余的外存脏块达到设定的量值时,将当前的外存更新状态记录信息发送至目的主机,进入Pull阶段;6)在Pull阶段,根据外存更新状态记录信息将剩余的外存脏块进行同步操作,外存迁移结束。2.如权利要求1所述的虚拟机的外存在线迁移方法,其特征在于通过位图记录所述外存数据各外存块更新状态信息,对外存块在位图中对应的bit进行标记以记录被写脏的外存脏块。3.如权利要求1或2所述的虚拟机的外存在线迁移方法,其特征在于所述同歩操作过程为在Pull阶段,目的主机的虚拟机访问外存时,由虚拟机管理器监控虚拟机的访问请求,根据在停机阶段接收的外存更新状态信息确定该访问请求是否被同步到本地,如已同步,则提交该访问请求;如未同步,对于写操作,正常提交,对于读操作,暂存该读操作请求,向源主机请求发送该外存数据,待目的主机收到该外存数据后,提交该读操作请求。4.如权利要求1或2所述的虚拟机的外存在线迁移方法,其特征在于所述同步操作过程为在Pull阶段,源主机在监听和响应目的主机的外存数据请求的同时,根据外存更新状态信息依次将剩余的外存脏块发送至目的主机。5.如权利要求4所述的虚拟机的外存在线迁移方法,其特征在于目的主机收到数据之后进行判断,若该数据尚未同步,则将其写入本地外存设备;若该部分数据已经在本地被目的主机写过,丢弃该外存数据。6.如权利要求1或2所述的虚拟机的外存在线迁移方法,其特征在于所述发送的外存数据为压縮后的外存数据。7.如权利要求1或2所述的虚拟机的外存在线迁移方法,其特征在于所述设定的条件选自1)循环次数达到设定阈值;2)被写脏的外存数据的块数小于设定的阈值;3)外存数据被写脏的速度达到设定阈值。8.如权利要求1或2所述的虚拟机的外存在线迁移方法,其特征在于所述设定的量值为记录外存状态更新信息的位图的大小。9.如权利要求1所述的虚拟机的外存在线迁移方法,其特征在于虚拟机管理器监控虚拟机的所有外存访问,记录外存更新状态,当虚拟机在源主机和目的主机之间来回迁移时,根据外存更新状态记录信息,传输两次迁移期间外存发生变化的部分。10.如权利要求1所述的虚拟机的外存在线迁移方法,其特征在于同时进行内存的在线迁移。全文摘要本发明涉及一种虚拟机的外存在线迁移方法,在推送(Push)阶段,首先将虚拟机的全部外存数据由源主机发送至目的主机;虚拟机管理器监控当前外存发送过程中虚拟机的外存访问,记录该发送过程中的外存块更新状态,标记被写脏外存脏块;将外存脏块循环由源主机发送至目的主机;直至达到设定的条件,停止外存数据的发送,进入停机阶段;然后根据外存更新状态记录信息确定剩余的外存脏块及其大小,将所有剩余的外存脏块由源主机发送至目的主机;或在拉拽(Pull)阶段,根据外存更新状态记录信息将剩余的外存脏块进行同步操作。保证迁移过程中仅有非常短暂的停机时间,使得在线迁移不依赖于共享外存设备的硬件环境,能够在分散式外存环境下得到应用。文档编号G06F9/455GK101101562SQ20071011859公开日2008年1月9日申请日期2007年7月10日优先权日2007年7月10日发明者周志远,孙逸峰,张彬彬,汪小林,罗英伟,许卓群申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1