专利名称:基于kvm的虚拟机迁移方法及系统的制作方法
技术领域:
本发明涉及通信领域,尤其涉及一种基于KVM的虚拟机迁移方法及系统。
背景技术:
基于KVM (Kernel-based Virtual Machine)的虚拟机应用研究广泛,虚拟机迁移是指,将运行在一台物理机上的虚拟机,通过一定的技术手段,使其在另一台物理机上继续运行起来的技术。虚拟机迁移技术共分为两类离线迁移和在线迁移。离线迁移是指在关闭虚拟机的情况下,使用文件传送软件将虚拟机的同步传送到另外的机器上,然后在相应的机器上启动虚拟机。在线迁移是指将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异,由于这种方法能够保持业务的连续性,所以逐渐成为了研究热点。
现有技术通常通过预拷贝内存的迁移方法,这种迁移方法是通过迭代拷贝上一阶段修改过的内存页完成的,虽然实现技术简单,对应用场景要求较低,但在内存写密集型场景下,尤其是当写页面的速度大于传送速度时,需要传送的数据量大,迁移过程中的迭代传送时间较长。发明内容
本发明目的在于提供一种基于KVM的虚拟机迁移方法及系统,用以减少传送数据量,降低迁移过程中的迭代传送时间。
本发明提供了一种基于KVM的虚拟机迁移方法,包括
源虚拟机将所述源虚拟机的CPU寄存器及内存信息同步到目标虚拟机,并在将所述CPU寄存器及内存信息同步到所述目标虚拟机之后记录发生的 不确定事件的信息;
所述源虚拟机接收所述目标虚拟机发送的第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;
所述目标虚拟机接收所述源虚拟机传送的不确定事件的信息,并判断所接收到的不确定事件的信息的个数是否大于预设个数阈值,如果判断结果为大于,则对所接收到的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态,并重新发送所述第一传送指令到所述源虚拟机,以使所述源虚拟机继续接收所述目标虚拟机发送的所述第一传送指令,迭代进行不确定事件记录、传输与重放过程;
如果判断结果为小于或等于,则所述目标虚拟机指示所述源虚拟机停止运行并向所述源虚拟机发送第二传送指令,以指示所述源虚拟机将在接收到所述第二传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;所述目标虚拟机对所述源虚拟机根据所述第二传送指令传送的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态,然后取代所述源虚拟机开始运行。
本发明还提供了一种基于KVM的虚拟机迁移系统,包括源虚拟机及目标虚拟机;
所述源虚拟机用于,将所述源虚拟机的CPU寄存器及内存信息同步到所述目标虚拟机,并在将所述CPU寄存器及内存信息同步到所述目标虚拟机之后记录发生的不确定事件的信息;接收所述目标虚拟机发送的第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;接收所述目标虚拟机发送的第二传送指令,根据所述第二传送指令将所述源虚拟机上未传送的不确定事件的信息传送至所述目标虚拟机,并停止所述源虚拟机的运行;
所述目标虚拟机用于,接收所述源虚拟机同步的CPU寄存器及内存信息,向所述源虚拟机发送第一传送指令,接收所述源虚拟机根据所述第一传送指令传送的不确定事件的信息,并判断所接收到的不确定事件的信息的个数是否大于预设个数阈值,如果判断结果为大于,则对所接收到的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态,并重新发送所述第一传送指令到所述源虚拟机,以使所述源虚拟机继续接收所述第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;如果判断结果为小于或等于,则所述目标虚拟机指示所述源虚拟机停止运行并向所述源虚拟机发送第二传送指令,以指示所述源虚拟机将在接收到所述第二传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;所述目标虚拟机对所述源虚拟机根据所述第二传送指令传送的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态,然后取代所述源虚拟机开始运行。
本发明提供的基于KVM的虚拟机迁移方法及系统,通过目标虚拟机对源虚拟机的不确定事件的信息进行重放操作,并在当传送的不确定事件的信息的个数小于等于预设个数阈值时,源虚拟机停机,将之前未传送的不确定事件的信息进行传送,从而完成虚拟机的迁移。本发明技术方案提供的基于KVM的虚拟机迁移方法及系统,将不确定时间的信息进行传送并重放代替现有技术中的内存迭代拷贝方法可以大大的减少传送数据量,降低迁移过程中的迭代传送时间。
图1为本发明一实施例提供的基于KVM的虚拟机迁移方法的流程示意图2为本发明又一实施例提供的基于KVM的虚拟机迁移系统的结构示意图。
具体实施方式
图1为本发明一实施例提供的基于KVM的虚拟机迁移方法的流程示意图,如图1 所示,本实施例提供了一种基于KVM的虚拟机迁移方法,随着云计算的不断发展和深入,作为主要支撑技术之一的虚拟化技术得到了产业界和学术界的广泛关注,虚拟化能够使一台物理机运行多个虚拟机 实例,提高CPU等部件的利用率,具有封装性、隔离性等优秀的特性。该方法包括
步骤11 :源虚拟机将源虚拟机的CPU寄存器及内存信息同步到目标虚拟机,并在将CPU寄存器及内存信息同步到目标虚拟机之后记录发生的不确定事件的信息。源虚拟机和目标虚拟机初始化迁移场景,启动迁移过程,源虚拟机将源虚拟机的CPU寄存器及内存信息同步到目标虚拟机,目标虚拟机保存源虚拟机的CPU寄存器及内存信息,源虚拟机继续运行,并开始记录所发生的不确定事件的信息。
步骤12 :源虚拟机接收目标虚拟机发送的第一传送指令,根据第一传送指令将在接收到第一传送指令之前未传送至目标虚拟机的不确定事件的信息传送至目标虚拟机。在源虚拟机接收目标虚拟机发送的第一传送指令后,将记录虚拟机不确定事件通过网络传输至目标虚拟机。第一传送指令为目标虚拟机在对CPU寄存器及内存信息同步完成后发送, 目的在于目标虚拟机在对CPU寄存器及内存信息同步完成后,继续将在源虚拟机发生的不确定事件在目标虚拟机侧进行重放。
步骤13 :目标虚拟机接收源虚拟机传送的不确定事件的信息,并判断所接收到的不确定事件的信息的个数是否大于预设个数阈值,如果判断结果为大于执行步骤14,如果判断结果为小于或等于,则执行步骤15。
步骤14 :对所接收到的不确定事件的信息进行重放,以更新目标虚拟机上当前的系统状态,并重新发送第一传送指令到源虚拟机,以使源虚拟机继续接收目标虚拟机发送的第一传送指令,根据第一传送指令将在接收到第一传送指令之前未传送至目标虚拟机的不确定事件的信息传送至目标虚拟机。源虚拟机发生的不确定事件的信息被记录下来,并通过网络传送至目标虚拟机,目标虚拟机进行重放工作,完成第I次重放。在第I次不确定时间的传输和重放处理过程中,又会产生新的不确定事件,需要进行第2次迭代过程,第2 次迭代过程中传输和重放处理的是第I次迭代过程中产生的不确定事件。依此类推,第n+1 次迭代过程需要传输和处理第η次迭代过程中产生的不确定事件。执行完步骤14需要重新转去执行步骤12。
步骤15 :如果判断结果为小于或等于,则目标虚拟机指示源虚拟机停止运行并向源虚拟机发送第二传送指令,以指示源虚拟机将在接收到第二传送指令之前未传送至目标虚拟机的不确定事件的信息传送至目标虚拟机。在进行了若干次迭代拷贝过程后,随着记录的不确定事件的信息量的减少,当不确定事件的信息的个数小于或等于预设个数阈值时,停止源虚拟机的运行,并指示源虚拟机(即第二传输指令)将源虚拟机上未传送的不确定事件的信息全部传送至目标虚拟机。源虚拟机根据目标虚拟机的指示将尚未传送的不确定事件的信息全部传送至目标虚拟机,并继续执行步骤16。
步骤16 目标虚拟机对源虚拟机根据第二传送指令传送的不确定事件的信息进行重放,以更新目标虚拟机上当前的系统状态,然后取代源虚拟机开始运行。在源虚拟机停止运行阶段,目标虚拟机将之前未传送的不确定事件的信息重放完成后,目标虚拟机向源虚拟机发送迁移完成信息,目标虚拟机取代源虚拟机开始运行,完成整个虚拟机迁移过程。
其中,本实施例中所述的第一传送指令是不确定事件在迭代拷贝的过程中使用的,第二传送指令是为了停止通知源虚拟机的运行,并进行最后一部分不确定事件的传输和重放过程。
本实施例提供的基于KVM的虚拟机迁移方法,通过目标虚拟机对源虚拟机的不确定事件的信息进行重放操作,并在当传送的不确定事件的信息的个数小于等于预设个数阈值时,源虚拟机停机,将之前未传送的不确定事件的信息进行传送,从而完成虚拟机的迁移。本实施例技术方案提供的基于KVM的虚拟机迁移方法,将不确定时间的信息进行传送并重放代替现有技术中的内存迭代拷`贝方法可以大大的减少传送数据量,降低迁移过程中的迭代传送时间。
本实施例主要运用记录重放技术在虚拟机迁移过程中,记录重放技术的核心思想是将程序的执行过程记录下来,在其他时间、其他设备上进行无差异的再次执行。记录重放的方法可分为如下几类针对应用程序的记录重放系统,需要记录的信息量最少,最为轻量级;面向操作系统的记录重放技术,需要记录整个系统的全部不确定事件,记录的特点是信息量大,最为全面,但性能开销较大;随着虚拟化技术的发展,记录重放的对象转向虚拟机, 通过在虚拟机监控器层,可以获取整个虚拟机系统的不确定事件,同时保证记录的数据量不至于过大,是一种综合性能比较优秀的重放记录方法。
记录重放技术不仅可用于入侵分析及软件调试方面,通过记录源虚拟机的执行过程,并在目标虚拟机进行无差异重放,成为实现虚拟机在线迁移功能的一种新方法。将记录重放技术引入虚拟机实时迁移领域,采用记录虚拟机执行过程中产生的影响系统顺序执行的不确定信息,通过在目标虚拟机进行确定重放的方法,使目标虚拟机自动生成与源虚拟机完全相同的系统状态。上述方法代替内存拷贝的传统迁移方法,能够在空间消耗和时间消耗上满足虚拟机在线迁移的要求,缩短虚拟机在线迁移的停机时间和总迁移时间。
作为上述技术方案的优选,源虚拟将源虚拟机的CPU寄存器及内存信息同步到目标虚拟机之前包括
源虚拟机接收迁移指令;
源虚拟机根据迁移指令向目标虚拟机发送迁移请求;
目标虚拟机根据迁移请求判断是否满足迁移条件,如果满足则返回迁移确认信息到源虚拟机;
源虚拟机将源虚拟机的CPU寄存器及内存信息同步到目标虚拟机包括
源虚拟机根据迁移确认信息,将源虚拟机的CPU寄存器及内存信息同步到目标虚拟机。
上述迁移指令可以为用户发出,也可以是源虚拟机由于某种网络状态或者设备状态的变更进而触发生成的迁移指令,但不限于上述列举。本实施例中的迁移指令以用户发出为例,源虚拟机接收用户发出的迁移指令后,源虚拟机向目标虚拟机发出迁移请求,并要求目标虚拟机判断是否满足迁移条件,目标虚拟机资源判断完成后,向源虚拟机发送判断结果,源虚拟机根据结果的不同,选择开始迁移或者迁移失败,具体的,如果满足则返回迁移确认信息到源虚拟机,如果不满足,则迁移失败,不进行虚拟机迁移操作。
作为上述技术方案的优选,本实施例提供的方法还包括步骤16中目标虚拟机对源虚拟机根据第二传送指令传送的不确定事件的信息进行重放,以更新目标虚拟机上当前的CPU寄存器及内存信息之后包括
目标虚拟机向源虚 拟机发送迁移完成信息。
本实施例提供的基于KVM的虚拟机迁移方法,迁移过程包括3个阶段
在迁移开始的准备阶段,建立两端的Socket连接,源虚拟机询问目标虚拟机资源使用情况,判断迁移是否可以进行。
迭代拷贝的过程中,将源虚拟机记录的不确定事件的信息传送到目标虚拟机,供目标虚拟机进行重放。同时,目标虚拟机根据重放进度情况,通知源虚拟机进行下一次迭代拷贝或暂停传输数据。
停机拷贝阶段,目标虚拟机接收重放完成的指令,断开与源虚拟机的Socket通信,表示整个迁移过程完成。
作为上述技术方案的优选,记录发生的不确定事件的信息包括
如果源虚拟机的操作系统退出到根模式,则判断是否发生不确定事件,如果判断结果为发生,则判断不确定事件的类型
如果判断出不确定事件为时间不确定事件,则记录不确定事件发生的时间点信息和中断类型。时间不确定事件为在虚拟机中,时间不确定事件是指在两次运行过程中,发生时间不同的事件,这类事件一般由虚拟机监控器发起,例如时间不确定事件包括,时钟中断和/或I/O中断。时间点为重放不确定时间提供精确的位置信息,是最重要的信息之一, 所以必须在记录阶段准确的记录事件发生的时间点信息。为了精确描述事件在运行过程中的位置,时间点必须具有单调、唯一、可复用的特点。传统的时钟时间容易受到外界环境的干扰,不能作为精确时间点使用,本文选择使用由性能计数器、指令指针和标识前缀指令需要执行次数的寄存器构成的“三元组”作为不确定事件发生的时间点。
在虚拟机中,时间不确定事件只包括时钟中断和I/O中断。对于时钟中断而言,虚拟机内核模块负责维护时钟源,定期向目标虚拟机注入时钟中断,在时钟中断注入之前,在内核中的中断注入函数,插入时间点获取函数,可以获取时钟中断被注入的准确时间点。
对于I/O中断来说,需要在虚拟机内核进行中断截获。KVM虚拟机分为两部分 虚拟机内核模块和用户态进程QEMU (模拟器的一种,为KVM提供用户交互等功能),其中 QEMU的主要功能是负责模拟键盘、网卡等外部设备,并与内核进行通信。当发生I/O操作时,QEMU模拟的外设将触发中断,并通过I0CTLI/0控制指令,将中断通知内核,内核截获该中断,通过虚拟中断控制器进行传递,最终通过中断注入函数,将该中断注入到目标虚拟机中。与时钟中断类似,在此硬件中断注入之前,插入时间点获取函数,即可获取I/O中断被注入的准确时间点。
如果判断出不确定事件为数据不确定事件,则记录不确定事件的发生的时间点信息和数据信息。数据不确定事件为在目标虚拟机两次运行过程中,即使发生时间相同,得到的数据结果也可能不同的事件,例如数据不确定事件包括可编程I/o和内存映射I/O。
对于数据不确定事件,需要记录其数据信息及时间点信息。虚拟机中的数据不确定事件主要是指I/O操作返回的不确定结果,包括键盘、鼠标和网卡等外部设备的输入操作。
I/O操作主要分为两类可编程I/O (PIO)和/或内存映射I/O (丽10)。虚拟机的设备模拟全部由QEMU完成,由QEMU负责准备数据,内核负责向虚拟机注入中断,所以对于I/O类型的不确定事件,特别是ΜΜΙ0,需要在内核记录下时间点等信息,通知QEMU进行数据的截获,并将事件补充完整后存入日志文件。
记录完成后,系统正常处理退出原因,最后系统进入非根模式继续运行。
作为上述技术方案的优选,目标虚拟机对的不确定事件的信息进行重放包括
如果不确定事件为时间不确定事件,目标虚拟机根据不确定事件发生的时间点信息和中断类型,将不确定事件注入目标虚拟机中;
如果不确定事件为数据不确定事件,目标虚拟机将不确定事件的发生的时间点信息和数据信息添加到目标虚拟机上的内存区域中。
对于不确定事件的信息的重放的核心是根据接收到的不确定事件的信息,对不确定事件的信息进行重放,保证系统状态的完整无误的重现。
首先,通过QEMU发出重放指令,通知目标虚拟机的内核屏蔽所有外部中断,以防止新产生的不确定事件干扰重放过程,然后目标虚拟机的内核初始化CPU设置,主要是内核通知链的注册工作,完成初始化工作之后,内核根据获得的时间点信息进行匹配工作,然后根据不同的事件分类,由内核和QEMU共同完成重放工作,如果记录有多个不确定事件的信息,则再次获取不确定事件的信息,进行下一轮重放,如果没有剩余不确定事件的信息, 则重放完成,目标虚拟机不再受控执行。
为了能够准确地将事件插入到目标虚拟机的指令序列中,首要条件是能够在时间点完全匹配的时候,停止目标虚拟机运行,将目标虚拟机退出到根模式下。
时间点匹配算法如下假设当前处理完成的不确定事件为A,下一个不确定事件为B,B. BC表示B事件对应的分支指令数目,B. EIP表示B事件对应的EIP寄存器的值,B. ECX 表示B事件对应的ECX寄存器的值。
首先计算两次不确定事件A、B之间的分支指令数目差值,由于重放和记录过程的目标虚拟机运行效果完全相同,所以从事件A执行次分支之后,能够匹配事件B的分支指令数目。然后,目标虚拟机继续运行,直至当前EIP寄存器的值等于B. EIP。最后,当目标虚拟机继续运行至当前ECX寄存器的值等于事件B. ECX时,时间点匹配结束。
具体的
I)分支指令数目匹配方法
由于性能计数器运行在目标虚拟机中,正常运行过程中无法精确得知计数器的数值,无法进行分支指令数目的精确匹配。
但是,性能计数器是一个40位无符号寄存器,当寄存器的值超过能够记录的最大数值时,将会发生寄存器溢出,P6体系结构为性能计数器溢出事件定义了一个特殊的中断,允许系统对溢出事件进行处理。本文利用性能计数器溢出和Linux内核的die notification chain (死亡通知链)机制进行分支指令数目匹配。
2) EIP寄存器匹配方法
EIP的匹配过程相对简单,本文利用了软件调试领域使用的设置断点的方式实现, 使用了操作系统中的DRO — Dr7调试寄存器,其中的DRO — DR3寄存器负责存储断点的线性地址,即本过程中的EIP的值,DR7寄存器为调试控制寄存器,负责控制各寄存器是否可用、 断点长度等,对DR7寄存器内的相应位进行设置后,目标虚拟机可以继续运行,一旦EIP寄存器的值等于DR寄存器里设定的值,目标虚拟机会由于异常而产生退出(VMExit)操作,此时开始ECX的匹配过程。
3) ECX寄存器匹 配方法
如果在EIP匹配完成后,ECX的值不等于事件B. ECX,需要将ECX寄存器的值设置为ECX=ECX-B. ECX,然后采用单步运行的方式运行目标虚拟机,直至ECX寄存器的值递减到 O,这说明rep前缀指令正好运行了 B. ECX次,至此事件点匹配完全结束,即找到了插入事件的准确时间点。不确定事件插入完成后,需要将ECX的值设置为B. ECX,这样可以保证rep 前缀指令的后续重复过程可以继续执行下去。
时间不确定事件重放方法对于时间不确定事件的重放相对简单,只需要在时间点匹配完成后,将其注入目标虚拟机即可,唯一需要区分的是不同中断对应的中断号不同,只需要在虚拟机内核中,将中断的向量号、中断有效位等信息写入VMCS(Virtual Machine Control Structure)的VM_ENTER_INTR_INFO_FIELD,在目标虚拟机退出到根模式的时候, 会自动读取该区域的内容,从而获得需要处理的中断信息,并调用目标虚拟机操作系统的中断处理函数进行处理。
数据不确定事件重放方法数据不确定事件的重放方法比较复杂,对于PIO方式的数据来说,需要记录的数据只包括单一字符,在重放过程中,通过I/o中断重放,使得目标虚拟机处理I/o中断,触发I/O操作,该操作被目标虚拟机的内核截获,将我们事先储存在QEMU的字符读取到目标虚拟机内存区域,完成标准I/O操作的重放过程。MMIO方式读取的是多字节的数据,所以需要通过记录下来的字节数进行数据读取控制,其工作原理与PIO 基本相同,在此不做冗述。
图2为本发明又一实施例提供的基于KVM的虚拟机迁移系统的结构示意图,如图 2所示,本实施例提供了一种基于KVM的虚拟机迁移系统,包括源虚拟机21及目标虚拟机 22 ;
源虚拟机21用于,将源虚拟机21的CPU寄存器及内存信息同步到目标虚拟机22, 并在将CPU寄存器及内存信息同步到目标虚拟机22之后记录发生的不确定事件的信息;接收目标虚拟机22发送的第一传送指令,根据第一传送指令将在接收到第一传送指令之前未传送至目标虚拟机22的不确定事件的信息传送至目标虚拟机22 ;接收目标虚拟机22发送的第二传送指令,根据第二传送指令将源虚拟机21上未传送的不确定事件的信息传送至目标虚拟机;
目标虚拟机22用于,接收源虚拟机21同步的CPU寄存器及内存信息,向源虚拟机 21发送第一传送指令,接收源虚拟机21根据第一传送指令传送的不确定事件,并判断所接收到的不确定事件的信息的个数是否大于预设个数阈值,如果判断结果为大于,则对所接收到的不确定事件的信息进行重放,以更新目标虚拟机22上当前的CPU寄存器及内存信息,并重新发送第一传送指令到源虚拟机21,以使源虚拟机21继续接收目标虚拟机22发送的第一传送指令,迭代进行不确定事件记录、传输与重放;如果判断结果为小于或等于, 则指示源虚拟机21停止运行并向源虚拟机21发送第二传送指令,以指示源虚拟机21将在接收到第二传送指令之前未传送至目标虚拟机22的不确定事件的信息传送至目标虚拟机 22,目标虚拟机22对源虚拟机21根据第二传送指令传送的不确定事件的信息进行重放,以更新目标虚拟机22上当前的系统状态,然后取代源虚拟机21开始运行。
本实施例提供的基于KVM的虚拟机迁移系统,包括源虚拟机及目标虚拟机,通过目标虚拟机对源虚拟机的不确定事件的信息进行重放操作,并在当传送的不确定事件的信息的个数小于等于预设个数阈值时,源虚拟机停机,将之前未传送的不确定事件的信息进行传送,从而完成虚拟机的迁移。本实施例技术方案提供的基于KVM的虚拟机迁移方法及系统,将不确定时间的信息进行传送并重放代替现有技术中的内存迭代拷贝方法可以大大的减少传送数据量,降低迁移过程中的迭代传送时间。具体的在线迁移流程与上述实施例中的基于KVM的虚拟机迁移方法相同,具体流程参见上述实施例的基于KVM的虚拟机迁移方法流程,在此不再赘述 。
作为上述技术方案的优选,虚拟机21还用于,在将源虚拟机21的CPU寄存器及内存信息同步到目标虚拟机22之前接收迁移指令;根据迁移指令向目标虚拟机22发送迁移请求,并接收目标虚拟机22根据迁移请求返回的迁移确认信息;
目标虚拟机22还用于,接收源虚拟机21发送的迁移请求,根据迁移请求判断是否满足迁移条件,并在判断结果为满足时向源虚拟机21返回迁移确认信息;
源虚拟机21具体用于根据迁移确认信息,将将源虚拟机21的CPU寄存器及内存信息同步到目标虚拟机22。
作为上述技术方案的优选,目标虚拟机22还用于,对源虚拟机21根据第二传送指令传送的不确定事件的信息进行重放,以更新目标虚拟机22上当前的系统状态之后,向源虚拟机21发送迁移完成信息。
作为上述技术方案的优选,源虚拟机21记录发生的不确定事件的信息包括
源虚拟机21具体用于如果源虚拟机21的操作系统退出到根模式,判断是否发生不确定事件,如果判断结果为发生,则判断不确定事件的类型
如果判断出不确定事件为时间不确定事件,则记录不确定事件发生的时间点信息和中断类型;如果判断出不确定事件为数据不确定事件,则记录不确定事件的发生的时间点信息和数据信息。
本领域普通技术人员可以理解实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制; 尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同 替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种基于KVM的虚拟机迁移方法,其特征在于,包括 源虚拟机将所述源虚拟机的CPU寄存器及内存信息同步到目标虚拟机,并在将所述CPU寄存器及内存信息同步到所述目标虚拟机之后记录发生的不确定事件的信息; 所述源虚拟机接收所述目标虚拟机发送的第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机; 所述目标虚拟机接收所述源虚拟机传送的不确定事件的信息,并判断所接收到的不确定事件的信息的个数是否大于预设个数阈值,如果判断结果为大于,则对所接收到的不确定事件的信息进行重放,以更新所述目标虚拟机的系统状态,并重新发送所述第一传送指令到所述源虚拟机,以使所述源虚拟机继续接收所述目标虚拟机发送的所述第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机; 如果判断结果为小于或等于,则所述目标虚拟机指示所述源虚拟机停止运行并向所述源虚拟机发送第二传送指令,以指示所述源虚拟机将在接收到所述第二传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;所述目标虚拟机对所述源虚拟机根据所述第二传送指令传送的不确定事件的信息进行重放,以更新所述目标虚拟机的系统状态,然后取代所述源虚拟机开始运行。
2.根据权利要求1所述的基于KVM的虚拟机迁移方法,其特征在于,所述源虚拟机将所述源虚拟机的CPU寄存器及内存信息同步到目标虚拟机之前包括 所述源虚拟机接收迁移指令; 所述源虚拟机根据所述迁移指令向所述目标虚拟机发送迁移请求; 所述目标虚拟机根据所述迁移请求判断是否满足迁移条件,如果满足则返回迁移确认信息到所述源虚拟机; 所述源虚拟机将所述源虚拟机的CPU寄存器及内存信息同步到目标虚拟机包括 所述源虚拟机根据所述迁移确认信息,将所述源虚拟机的CPU寄存器及内存信息同步到所述目标虚拟机。
3.根据权利要求1或2所述的基于KVM的虚拟机迁移方法,其特征在于,所述目标虚拟机对所述源虚拟机根据所述第二传送指令传送的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态之后包括 所述目标虚拟机向所述源虚拟机发送迁移完成信息。
4.根据权利要求1或2所述的基于KVM的虚拟机迁移方法,其特征在于,所述源虚拟机记录发生的不确定事件的信息包括 如果所述源虚拟机的操作系统退出到根模式,则判断是否发生不确定事件,如果判断结果为发生,则判断所述不确定事件的类型 如果判断出所述不确定事件为时间不确定事件,则记录所述不确定事件发生的时间点信息和中断类型; 如果判断出所述不确定事件为数据不确定事件,则记录所述不确定事件发生的时间点信息和数据信息。
5.根据权利要求4所述的基于KVM的虚拟机迁移方法,其特征在于,所述时间不确定事件包括时间中断和/或I/o中断; 所述数据不确定事件包括可编程I/o和内存映射I/O。
6.根据权利要求4所述的基于KVM的虚拟机迁移方法,其特征在于,所述目标虚拟机对所述不确定事件的信息进行重放包括 如果所述不确定事件为时间不确定事件,所述目标虚拟机根据所述不确定事件发生的时间点信息和中断类型,将所述不确定事件注入所述目标虚拟机中; 如果所述不确定事件为数据不确定事件,所述目标虚拟机将所述不确定事件的发生的时间点信息和数据信息添加到所述目标虚拟机上的内存区域中。
7.一种基于KVM的虚拟机迁移系统,其特征在于,包括源虚拟机及目标虚拟机; 所述源虚拟机用于,将所述源虚拟机的CPU寄存器及内存信息同步到所述目标虚拟机,并在将所述CPU寄存器及内存信息同步到所述目标虚拟机之后记录发生的不确定事件的信息;接收所述目标虚拟机发送的第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;接收所述目标虚拟机发送的第二传送指令,根据所述第二传送指令将所述源虚拟机上未传送的不确定事件的信息传送至所述目标虚拟机; 所述目标虚拟机用于,接收所述源虚拟机同步的CPU寄存器及内存信息,向所述源虚拟机发送第一传送指令,接收所述源虚拟机根据所述第一传送指令传送的不确定事件的信息,并判断所接收到的不确定事件的信息的个数是否大于预设个数阈值,如果判断结果为大于,则对所接收到的不确定事件的信息进行重放,以更新所述目标虚拟机上的系统状态,并重新发送所述第一传送指令到所述源虚拟机,以使所述源虚拟机继续接收所述第一传送指令,根据所述第一传送指令将在接收到所述第一传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;如果判断结果为小于或等于,则所述目标虚拟机指示所述源虚拟机停止运行并向所述源虚拟机发送第二传送指令,以指示所述源虚拟机将在接收到所述第二传送指令之前未传送至所述目标虚拟机的不确定事件的信息传送至所述目标虚拟机;所述目标虚拟机对所述源虚拟机根据所述第二传送指令传送的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态,然后取代所述源虚拟机开始运行。
8.根据权利要求7所述的基于KVM的虚拟机迁移系统,其特征在于, 所述源虚拟机还用于,在所述将源虚拟机的CPU寄存器及内存信息同步到所述目标虚拟机之前接收迁移指令;根据所述迁移指令向所述目标虚拟机发送迁移请求,并接收所述目标虚拟机根据所述迁移请求返回的迁移确认信息; 所述目标虚拟机还用于,接收所述源虚拟机发送的所述迁移请求,根据所述迁移请求判断是否满足迁移条件,并在判断结果为满足时向所述源虚拟机返回迁移确认信息; 所述源虚拟机具体用于根据所述迁移确认信息,将所述将源虚拟机的CPU寄存器及内存信息同步到所述目标虚拟机。
9.根据权利要求7或8所述的基于KVM的虚拟机迁移系统,其特征在于,所述目标虚拟机还用于,对所述源虚拟机根据所述第二传送指令传送的不确定事件的信息进行重放,以更新所述目标虚拟机上当前的系统状态之后,向所述源虚拟机发送迁移完成信息。
10.根据权利要求7或8所述的基于KVM的虚拟机迁移系统,其特征在于,所述源虚拟机记录发生的不确定事件的信息包括 所述源虚拟机具体用于如果所述源虚拟机的操作系统退出到根模式,判断是否发生不确定事件,如果判断结果为发生,则判断所述不确定事件的类型,如果判断出所述不确定事件为时间不确定事件,则记录所述不确定事件发生的时间点信息和中断类型;如果判断出所述不确定事件为数据不确定事件,则记录所述不确定事件的发生的时间点信息和数据信肩.
全文摘要
本发明提供了一种基于KVM的虚拟机迁移方法及系统,包括源虚拟机将源虚拟机的CPU寄存器及内存信息同步到目标虚拟机,之后记录发生的不确定事件的信息;源虚拟机根据第一传送指令将在接收到第一传送指令之前未传送至目标虚拟机的不确定事件的信息传送至目标虚拟机;目标虚拟机对源虚拟机的不确定事件的信息进行重放操作,传输与重放过程迭代进行,当传送的不确定事件的信息的个数小于等于预设个数阈值时,源虚拟机停机,将之前未传送的不确定事件进行传送,目标虚拟机进行重放,从而完成虚拟机的迁移。本发明将不确定事件进行记录重放并重放代替现有技术中的内存迭代拷贝方法可以大大的减少传送数据量,降低迁移过程中的迭代传送时间。
文档编号H04L29/08GK103036947SQ20121047763
公开日2013年4月10日 申请日期2012年11月21日 优先权日2012年11月21日
发明者李建欣, 司守钰, 胡春明, 崔磊, 黄玉梅 申请人:北京航空航天大学