发明内容
本发明的第一个方面是提供一种虚拟机存储数据迁移方法,用以解决现有技术中的缺陷,提高虚拟机的迁移效率。
本发明的另一个方面是提供一种虚拟机存储数据迁移装置,用以解决现有技术中的缺陷,提高虚拟机的迁移效率。
本发明的第一个方面是提供一种虚拟机存储数据迁移方法,包括:
存储探测模块探测所述虚拟机的存储装置,获取存储数据块分配位图表;
发起迁移控制模块获取脏数据位图表,并从所述存储探测模块获取所述存储数据块分配位图表;
所述发起迁移控制模块根据所述存储数据块分配位图表和所述脏数据位图表,确定脏数据中已被分配的数据块为目标数据块;
所述发起迁移控制模块向接收迁移控制模块发送所述目标数据块的位置信息和所述目标数据块。
如上所述的方法,其中,在初次迁移时,所述发起迁移控制模块获取脏数据位图表包括:所述发起迁移控制模块将所述虚拟机的存储装置中的全部数据标记为脏数据,生成所述脏数据位图表;
在非初次迁移时,所述发起迁移控制模块获取脏数据位图表之前还包括:存储访问监视模块监视所述虚拟机的存储数据写操作,获取脏数据位图表;在非初次迁移时,所述发起迁移控制模块获取脏数据位图表包括:所述发起迁移控制模块从存储访问监视模块获取所述脏数据位图表;
所述存储探测模块探测所述虚拟机的存储装置,获取存储数据块分配位图表包括:所述存储探测模块初始化存储数据块分配位图表,将所述存储数据块分配位图表的全部位设置为第一值;所述存储探测模块根据所述虚拟机采用的操作系统的存储数据管理方式遍历数据块,获取未分配数据块,将所述存储数据块分配位图表中所述未分配数据块对应的位设置为第二值,获取所述存储数据块分配位图表。
如上所述的方法,其中,
所述存储探测模块探测所述虚拟机的存储装置,获取存储数据块分配位图表之前,还包括:所述发起迁移控制模块通过位图传输模块向所述存储探测模块发送存储探测请求消息;
所述发起迁移控制模块从所述存储探测模块获取所述存储数据块分配位图表包括:所述存储探测模块通过位图传输模块向所述发起迁移控制模块发送所述存储数据块分配位图表。
如上所述的方法,其中,
所述发起迁移控制模块向接收迁移控制模块发送所述目标数据块的位置信息和所述目标数据块包括:所述发起迁移控制模块向数据压缩模块发送所述目标数据块;所述数据压缩模块对所述目标数据块进行数据压缩,向所述发起迁移控制模块返回压缩后的目标数据块;所述发起迁移控制模块向接收迁移控制模块发送所述目标数据块的位置信息和所述压缩后的目标数据块;
所述发起迁移控制模块向接收迁移控制模块发送所述目标数据块和所述目标数据块的位置信息之后,还包括:所述接收迁移控制模块根据所述目标数据块的位置信息,为所述目标数据块分配物理空间;接收迁移控制模块向数据解压模块发送所述压缩后的目标数据块;所述数据解压模块对所述压缩后的目标数据块进行解压,向所述接收迁移控制模块返回解压获得的目标数据块;所述接收迁移控制模块将数据解压模块返回的所述目标数据块放置到分配的所述物理空间。
本发明的另一个方面是提供一种虚拟机存储数据迁移装置,包括:
存储探测模块,用于探测所述虚拟机的存储装置,获取存储数据块分配位图表;
发起迁移控制模块,用于获取所述脏数据位图表,并从所述存储探测模块获取所述存储数据块分配位图表,根据所述存储数据块分配位图表和所述脏数据位图表确定脏数据中已被分配的数据块为目标数据块,向接收迁移控制模块发送所述目标数据块的位置信息和所述目标数据块;
接收迁移控制模块,用于接收所述目标数据块的位置信息和所述目标数据块。
如上所述的装置,其中,
所述装置还包括:存储访问监视模块,用于在非初次迁移时监视所述虚拟机的存储数据写操作,获取脏数据位图表;
所述发起迁移控制模块具体用于在初次迁移时,将所述虚拟机的存储装置中的全部数据标记为脏数据,生成所述脏数据位图表;在非初次迁移时,从所述存储访问监视模块获取所述脏数据位图表;
所述存储探测模块具体用于初始化存储数据块分配位图表,将所述存储数据块分配位图表的全部位设置为第一值;根据所述虚拟机采用的操作系统的存储数据管理方式遍历数据块,获取未分配数据块,将所述存储数据块分配位图表中所述未分配数据块对应的位设置为第二值,获取所述存储数据块分配位图表。如上所述的装置,其中,
如上所述的装置,其中,还包括:位图传输模块;
所述位图传输模块用于向所述存储探测模块转发来自所述发起迁移控制模块的所述探测请求消息,并向所述发起迁移控制模块转发来自所述存储探测模块的所述存储数据块分配位图表;
所述发起迁移控制模块具体用于通过位图传输模块向所述存储探测模块发送存储探测请求消息;
所述存储探测模块具体用于通过位图传输模块向所述发起迁移控制模块发送所述存储数据块分配位图表。
如上所述的装置,其中,还包括:数据压缩模块和数据解压模块;
所述数据压缩模块用于对所述目标数据块进行数据压缩,向所述发起迁移控制模块返回压缩后的目标数据块;
所述发起迁移控制模块具体用于向数据压缩模块发送所述目标数据块,向接收迁移控制模块发送所述压缩后的目标数据块的位置信息和所述目标数据块;
所述接收迁移控制模块具体用于向数据解压模块发送所述压缩后的目标数据块,根据所述目标数据块的位置信息,为所述目标数据块分配物理空间,并将所述数据解压模块返回的目标数据块放置到分配的所述物理空间;
所述数据解压模块用于对所述压缩后的目标数据块进行解压,向所述接收迁移控制模块返回解压获得的目标数据块。
如上所述的装置,其中,
所述位图传输模块包括:第一位图传输模块和第二位图传输模块,所述第一位图传输模块连接所述发起迁移控制模块和所述第二位图传输模块、所述第二位图传输模块连接所述第一位图传输模块和所述存储探测模块;
所述发起迁移控制模块、所述存储访问监视模块、所述第一位图传输模块和所述数据压缩模块设置于源端虚拟机监控器;所述第二位图传输模块设置于源端客户机应用层;所述存储探测模块设置于源端客户机操作系统;所述接收迁移控制模块和所述解压缩模块设置于目的端虚拟机监控器;
或者,所述发起迁移控制模块、所述第一位图传输模块和所述数据压缩模块设置于源端特权操作系统;所述存储访问监视模块设置于源端虚拟机监控器;所述第二位图传输模块设置于源端客户机应用层;所述存储探测模块设置于源端客户机操作系统;所述接收迁移控制模块和所述解压缩模块设置于目的端特权操作系统。
如上所述的装置,其中,
所述虚拟机的存储装置包括:静态随机访问存储器SRAM、动态随机访问存储器DRAM、磁盘、磁带和/或闪存。
本发明一个方面的技术效果是:在迁移虚拟机的存储数据时,不仅获取脏数据位图表,而且还通过探测虚拟机的存储装置,获取存储数据块分配位图表,根据存储数据块分配位图表和脏数据位图表,在初次传输时,对全部数据中已分配的数据块进行传输,对未分配的数据块不进行传输,在非初次传输时,仅对已被修改且已被分配的数据块进行传输,对未修改或者未被分配的数据块不进行传输,总之,仅对脏数据中已分配的数据块进行传输,通过避免传输未分配的数据块,减小了数据传输量,在迁移虚拟机存储数据时,缩短了迁移时间,节约了网络带宽,从而提高虚拟机存储数据迁移的效率。
本发明另一个方面的技术效果是:在虚拟机存储数据迁移装置中,采用存储探测模块探测虚拟机的存储装置,获取存储数据块分配位图表,发起迁移控制模块根据该存储数据块分配位图表和获取的脏数据位图表,在初次传输时,对全部数据中已分配的数据块进行传输,对未分配的数据块不进行传输,在非初次传输时,仅对已被修改且已被分配的数据块进行传输,对未修改或者未被分配的数据块不进行传输,总之,仅对脏数据中已分配的数据块进行传输,通过避免传输未分配的数据块,减小了数据传输量,在迁移虚拟机存储数据时,缩短了迁移时间,节约了网络带宽,从而提高虚拟机存储数据迁移的效率。
具体实施方式
图1为本发明实施例一的虚拟机存储数据迁移方法的流程图。在本发明实施例一中,通过设置如下模块实现虚拟机存储数据迁移过程:发起迁移控制模块、存储探测模块、存储访问监视模块、接收迁移控制模块。其中,发起迁移控制模块、存储探测模块和存储访问监视模块设置在源端物理机中,接收迁移控制模块设置在目的端物理机中。如图1所示,该方法包括以下过程。
步骤101:存储探测模块探测虚拟机的存储装置,获取存储数据块分配位图表。
在本步骤中,数据块分配位图表用于记录各个数据块的分配状态,即该数据块处于未分配状态或已分配状态。
步骤102:发起迁移控制模块获取脏数据位图表,从存储探测模块获取存储数据块分配位图表。
在本发明各个实施例中,脏数据为源端存储装置与目的端存储装置中存在差异的数据。在初次迁移时,脏数据包括源端存储装置中的全部数据;在非初次迁移时,脏数据为源端存储装置中的在上次迁移后发生过修改的数据。上述脏数据位图表用于记录上述脏数据。相应地,在初次迁移时,发起迁移控制模块获取脏数据位图表的具体方法是:发起迁移控制模块将虚拟机的存储装置中的全部数据标记为脏数据,生成脏数据位图表。在初次迁移时,该脏数据位图表中记录源端存储装置中的全部数据为脏数据。在非初次迁移时,在发起迁移控制模块获取脏数据位图表之前,存储访问监视模块监视虚拟机的存储数据写操作,获取脏数据位图表;发起迁移控制模块获取脏数据位图表的具体方法是:发起迁移控制模块从存储访问监视模块获取所述脏数据位图表。在非初次迁移时,该脏数据位图表中记录源端存储装置中的在上次迁移后发生过修改的数据为脏数据。
步骤103:发起迁移控制模块根据存储数据块分配位图表和脏数据位图表,确定脏数据中已被分配的数据块为目标数据块。
步骤104:发起迁移控制模块向接收迁移控制模块发送目标数据块的位置信息和目标数据块。
在本发明实施例一中,在迁移虚拟机的存储数据时,不仅获取脏数据位图表,而且还通过探测虚拟机的存储装置,获取存储数据块分配位图表,根据存储数据块分配位图表和脏数据位图表,仅对脏数据中已被分配的数据块进行传输,对未被分配的数据块不进行传输。在初次传输时,对全部数据中已分配的数据块进行传输,对未分配的数据块不进行传输;在非初次传输时,仅对已被修改且已被分配的数据块进行传输,对未修改或者未被分配的数据块不进行传输。从而减小了数据传输量,在迁移虚拟机存储数据时,缩短了迁移时间,节约了网络带宽,从而提高虚拟机存储数据迁移的效率。
图2为本发明实施例二的虚拟机存储数据迁移方法的信令流程图。在本发明实施例二中,在包括本发明实施例一中涉及的上述模块的基础上,还可以增加位图传输模块、数据压缩模块和数据解压模块。其中,位图传输模块和数据压缩模块设置在源端物理机中,数据解压模块设置在目的端物理机中。
在本发明实施例二中,以存储装置为内存为例。该迁移方法的应用场景以虚拟机系统包括四台物理主机为例,其中两台用作迁移,分别称作源端物理主机和目的端物理主机,并分别安装了Xen-3.4.3虚拟机监控器,源端物理主机上运行着虚拟机用作迁移,该虚拟机使用Red Hat Enterprise Linux 5.5操作系统。第三台物理主机为虚拟机提供网络文件系统(Network File System,简称NFS)共享存储功能,第四台物理主机则为客户端,用于访问待迁移的虚拟机,通信网络为100Mbps以太网。如图2所示,该方法包括以下过程。
步骤201:发起迁移控制模块与接收迁移控制模块建立迁移连接。
步骤202:发起迁移控制模块开启存储访问监视模块。
步骤203:存储访问监视模块监视虚拟机的存储数据写操作,获取脏数据位图表。
步骤204:发起迁移控制模块通过位图传输模块向所述存储探测模块发送存储探测请求消息。
在本步骤中,以上述四台物理主机的应用场景为例,位图传输模块包括第一位图传输模块和第二位图传输模块,其中,第一位图传输模块设置于物理层,第二位图传输模块设置于应用层,第一位图传输模块与第二位图传输模块之间可以通过Socket机制实现数据通信;第二位图传输模块与内存探测模块通过netlink机制通信。
步骤205:存储探测模块探测虚拟机的存储装置,获取存储数据块分配位图表。
在本步骤中,存储探测模块首先初始化存储数据块分配位图表,将存储数据块分配位图表的全部位设置为第一值。然后,存储探测模块根据虚拟机采用的操作系统的存储数据管理方式遍历数据块,获取未分配数据块,将存储数据块分配位图表中未分配数据块对应的位设置为第二值,获取存储数据块分配位图表。
在本发明实施例中,以第一值为1、第二值为0为例。如果数据块对应的比特位为1,则表示该数据块已分配出去,在后续过程中需要传输该数据块;如果比特位为0,则表示该数据块未分配出去,是未使用数据块,在后续过程中不需要传输该数据块。
具体地,如果虚拟机采用的操作系统为Linux操作系统,以存储装置为内存为例,则可以根据伙伴系统设计原理,遍历所有11个空闲页链表,获取未分配数据块,并将该数据块在块分配位图表中相应位置清零。其中第一个链表固定块大小为一页4k比特或8k比特,后续链表的块大小是上一个链表的2倍。将块分配位图表中已分配数据块的相应位置设置为1,在后续过程中需要传输该数据块。
如果虚拟机采用的操作系统为Windows操作系统,以存储装置为内存为例,系统提供了更细粒度的内存分配,堆分配器保存了128个空闲页链表,其中第一个链表固定数据块大小为16字节,后续链表依次比上一个链表多8字节,则可根据其堆分配器原理,遍历所有空闲页链表上的数据块,获取未分配数据块,并将该数据块在位图表中的相应位置0,在后期数据压缩时该数据块可直接跳过以减少不必要的数据传输。将块分配位图表中已分配数据块的相应位置设置为1,在后续过程中需要传输该数据块。
当需要迁移数据的存储装置为Linux磁盘系统时,磁盘可以具有多个文件系统,需要先遍历内核中的文件系统列表,然后得到每种文件系统的超级块和数据块位图表。数据块位图表描述了该文件系统的每个数据块是否已经分配,从而获得了数据块在该文件系统的偏移位置。并且,还通过Linux的设备映射机制得到文件系统起始点在磁盘中的绝对位置。Linux中默认使用的是EXT2或EXT3文件系统,则可以通过设备映射机制得到该EXT文件系统在磁盘中的位置,然后遍历该EXT文件系统的所有块组和每个块组中的数据块位图表,并将描述整个磁盘块分配信息的块分配位图表中未分配数据块的相应位置0。将块分配位图表中已分配数据块的相应位置设置为1。
在本步骤中,以上述四台物理主机的应用场景为例,存储探测模块首先初始化页分配位图表allocated_bitmap,全部置位为1。然后,根据Linux内存管理机制,遍历伙伴系统所有链表,得到内存的未分配页,并将allocate_bitmap中未分配页的相应位清0。
步骤206:存储探测模块通过位图传输模块向发起迁移控制模块发送存储数据块分配位图表。
步骤207:发起迁移控制模块获取脏数据位图表。
具体地,在初次迁移时,本步骤的具体方法包括:发起迁移控制模块将虚拟机的存储装置中的全部数据标记为脏数据,生成脏数据位图表。在非初次迁移时,本步骤的具体方法包括:发起迁移控制模块从存储访问监视模块获取所述脏数据位图表。
本步骤中,以上述四台物理主机的应用场景为例,发起迁移控制模块向存储访问监视模块请求并获得脏页位图表dirty_bitmap。
步骤208:发起迁移控制模块根据存储数据块分配位图表和脏数据位图表,确定脏数据中已被分配的数据块为目标数据块。
本步骤中,以上述四台物理主机的应用场景为例,发起迁移控制模块根据页分配位图表allocated_bitmap和脏页位图表dirty_bitmap,得到脏数据中的已分配出去的内存页to_transfer_page,即需要传输的页。
步骤209:发起迁移控制模块向数据压缩模块发送目标数据块。
步骤210:数据压缩模块对目标数据块进行数据压缩,向发起迁移控制模块返回压缩后的目标数据块。
本步骤中,以上述四台物理主机的应用场景为例,数据压缩模块采用游程编码算法,将to_transfer_page进行压缩,并将压缩后的数据compressed_page提交给发起迁移控制模块。
在本步骤中,具体地,数据压缩模块可以采用如下压缩方式中的一种或几种的组合完成数据压缩,包括:游程编码、基于字典编码技术的LZW(Lempel-Ziv-Welch,简称LZW)算法、基于哈夫曼编码原理的压缩算法和基于算数编码的压缩算法。
步骤211:发起迁移控制模块向接收迁移控制模块发送目标数据块的位置信息和压缩后的目标数据块。
在本步骤中,为了提高传输效率,发起迁移控制模块维持一段缓冲区存放压缩数据,待满后一并发送。
步骤212:接收迁移控制模块向数据解压模块发送压缩后的目标数据块。
步骤213:接收迁移控制模块根据目标数据块的位置信息,为目标数据块分配物理空间。
步骤214:数据解压模块对压缩后的目标数据块进行解压,向接收迁移控制模块返回解压获得的目标数据块。
步骤215:接收迁移控制模块将数据解压模块返回的目标数据块放置到分配的物理空间。
在上述步骤213至步骤215中,以上述四台物理主机的应用场景为例,接收迁移控制模块收到压缩数据及其在虚拟机内存空间中位置信息后,为该数据分配实际的内存,并实现虚拟机内存物理地址到物理主机机器地址的映射即P2M映射,调用解压缩模块按照游程编码算法进行数据还原,将还原后的数据存放到实际分配的物理主机内存中。
在虚拟机数据迁移的过程中,采用迭代的方法,具体地,在步骤215之后,重复执行上述步骤203至步骤215,直到脏数据量小于一定门限或迭代次数超过一定门限或脏数据速率大于网络传输速率为止,然后进入步骤216。本步骤中,以上述四台物理主机的应用场景为例,可以重复执行上述步骤203至步骤215,直到脏页量小于门限256KB,或者迭代次数超过门限30次,或者脏页速率大于网络传输速率为止,然后进入步骤216。
步骤216:发起迁移控制模块关闭源端虚拟机。
步骤217:发起迁移控制模块关闭存储访问监视模块。
步骤218:发起迁移控制模块向接收迁移控制模块发送最后一次脏数据、寄存器数据和网络设备状态数据。
步骤219:接收迁移控制模块启动目标虚拟机。
在本步骤中,接收迁移控制模块对接收到的步骤218中的数据进行数据还原,启动目标虚拟机。
步骤220:接收迁移控制模块向发起迁移控制模块发送迁移成功确认消息。
步骤221:发起迁移控制模块与接收迁移控制模块关闭迁移连接。
本发明的上述虚拟机存储数据迁移方法可以用于对存储数据进行实时迁移或静态迁移。其中,用于存储数据的存储装置可以是计算机内部存储系统(简称内存)或外部存储系统(简称外存)。具体地,内存系统包括静态随机访问存储器(Static Dynamic Random Access Memory,简称SRAM)和动态随机访问存储器(Dynamic Random Access Memory,简称DRAM);外存包括磁盘、磁带、闪存等。在上述过程中,以迁移内存中的数据为例进行说明,同样,本发明的虚拟机存储数据迁移方法也可以用于磁盘迁移。与内存的高频率更改和回收不同,磁盘的块回收频率相对较低,因此只需要第一轮传输前对磁盘数据块分配情况进行探测。对于磁盘迁移实现方式的其它过程与内存迁移十分相似,在此不再赘述。对于上述压缩过程,上述具体实施方式中以游程编码为例进行说明,在实际应用中,可以采用多种压缩方式,具体可以根据内存资源充足或CPU资源充足等不同的应用场景确定采用不同的压缩算法。
在本发明实施例二中,通过探测虚拟机的存储装置获取存储数据块分配位图表,根据存储数据块分配位图表和脏数据位图表仅对脏数据中的已被分配的数据块进行传输,从而减少数据传输量,提高虚拟机存储数据迁移的效率。并且,在对脏数据中的已被分配的数据块进行传输之前,先对上述数据块进行压缩,传输压缩后的数据块,从而进一步减少数据传输量,节约网络带宽,提高虚拟机存储数据迁移的效率。
图3为本发明实施例三的虚拟机存储数据迁移装置的结构示意图。如图3所示,该装置至少包括:存储探测模块32、发起迁移控制模块33和接收迁移控制模块34,进一步地,还可以包括:存储访问监视模块31。具体地,该虚拟机存储数据迁移装置包括源端和目的端两部分,上述各模块中,发起迁移控制模块33、存储探测模块32和存储访问监视模块31位于源端,接收迁移控制模块34位于目的端。
其中,存储探测模块32用于探测虚拟机的存储装置,获取存储数据块分配位图表。
发起迁移控制模块33用于获取脏数据位图表,从存储探测模块32获取存储数据块分配位图表,根据存储数据块分配位图表和脏数据位图表确定脏数据中已被分配的数据块为目标数据块,向接收迁移控制模块34发送目标数据块的位置信息和目标数据块。
接收迁移控制模块34用于接收目标数据块的位置信息和目标数据块。
在上述技术方案的基础上,进一步地,该虚拟机存储数据迁移装置还可以包括:存储访问监视模块31。该存储访问监视模块31用于在非初次迁移时监视虚拟机的存储数据写操作,获取脏数据位图表。具体地,在初次迁移时,发起迁移控制模块33将虚拟机的存储装置中的全部数据标记为脏数据,生成脏数据位图表。在非初次迁移时,发起迁移控制模块33从存储访问监视模块31获取脏数据位图表。
在上述技术方案的基础上,进一步地,该虚拟机存储数据迁移装置还包括:位图传输模块35。该位图传输模块35用于向存储探测模块32转发来自发起迁移控制模块33的探测请求消息,并向发起迁移控制模块33转发来自存储探测模块32的存储数据块分配位图表。发起迁移控制模块33具体用于通过位图传输模块35向存储探测模块32发送存储探测请求消息。存储探测模块32具体用于通过位图传输模块35向发起迁移控制模块33发送存储数据块分配位图表。
在上述技术方案的基础上,进一步地,该虚拟机存储数据迁移装置还包括:数据压缩模块36和数据解压模块37。数据压缩模块36用于对目标数据块进行数据压缩,向发起迁移控制模块33返回压缩后的目标数据块。发起迁移控制模块33具体用于向数据压缩模块36发送目标数据块,向接收迁移控制模块34发送目标数据块的位置信息和压缩后的目标数据块。接收迁移控制模块34具体用于根据目标数据块的位置信息,为目标数据块分配物理空间,向数据解压模块37发送压缩后的目标数据块,并将数据解压模块37返回的目标数据块放置到分配的物理空间。数据解压模块37用于对压缩后的目标数据块进行解压,向接收迁移控制模块34返回解压获得的目标数据块。
在上述技术方案的基础上,进一步地,存储探测模块32具体用于初始化存储数据块分配位图表,将存储数据块分配位图表的全部位设置为第一值,根据虚拟机采用的操作系统的存储数据管理方式遍历数据块,获取未分配数据块,将存储数据块分配位图表中未分配数据块对应的位设置为第二值,获取存储数据块分配位图表。
具体地,发起迁移控制模块33具体完成以下功能:接收用户的迁移命令,通过位图传输模块35向存储探测模块32发起探测请求,并调用存储压缩模块和存储访问监视模块31实现内存数据、磁盘数据(全系统迁移时需要迁移磁盘)的迁移,然后迁移寄存器状态数据和网络连接状态数据,最后关闭源端待迁移的虚拟机,完成迁移切换,关闭网络连接。
具体地,存储访问监视模块31用于监视虚拟机运行时,上层业务对存储系统所有的写操作,并记录下写操作的位置,得到脏数据位图表,发起迁移控制模块33将根据脏数据位图表判断相应数据块是否需要在本轮迁移。
具体地,存储探测模块32是插入到虚拟机操作系统内部的模块,无需更改虚拟机操作系统源码或重编译。当接到用户态的位图传输模块35的探测请求时,存储探测模块32根据具体虚拟机的存储系统实现原理,实现对存储系统的已分配页或已分配块情况的探测,将探测获得的块分配位图表传递给位图传输模块35,进一步传递给发起迁移控制模块33。发起迁移控制模块33则根据块分配位图表相应位置上的比特位得知该数据块是否已分配出去,比特位为1表示该数据块已分配出去,需要传输,比特位为0表示该数据块未分配出去,是未使用数据块,不需要传输。当要迁移的虚拟机为Linux系统时,如果存储系统为内存则可以根据伙伴系统设计原理,遍历所有11个空闲页链表,并将该数据块在块分配位图表中相应位置清零。其中第一个链表固定块大小为一页4k比特或8k比特,后续链表的块大小是上一个链表的2倍。当虚拟机为Windows操作系统时,系统提供了更细粒度的内存分配,堆分配器保存了128个空闲链表,其中第一个链表固定数据块大小为16字节,后续链表依次比上一个链表多8字节,则可根据其堆分配器原理,遍历所有空闲链表上的数据块,并将该数据块在位图表中的相应位置0,在后期数据压缩时该数据块可直接跳过以减少不必要的传输。当迁移的为Linux磁盘系统时,磁盘可以具有多个文件系统,需要先遍历内核中的文件系统列表,然后得到每种文件系统的超级块和数据块位图表。数据块位图表描述了该文件系统的每个数据块是否已经分配。但这样只是得到了数据块在该文件系统的偏移位置,还需要得到文件系统起始点在磁盘中的绝对位置,这可以通过Linux的设备映射机制得到。Linux中默认使用的是EXT2或EXT3文件系统,则可以通过设备映射机制得到该EXT文件系统在磁盘中的位置,然后遍历该EXT文件系统的所有块组和每个块组中的数据块位图表,并将描述整个磁盘块分配信息的块分配位图表相应位置0。从而,存储探测模块32的具体实现方式可根据不同操作系统内存或磁盘的管理原理分别进行设计,探测数据块是否已经分配,并得到块分配位图表。
具体地,位图传输模块35为发起迁移控制模块33和存储探测模块32之间的数据通信提供接口,可实现双向通信。位图传输模块35首先会接收发起迁移控制模块33的存储探测请求,并将该探测请求传递给存储探测模块32。反向上,则将存储探测模块32探测得到的块分配位图表传递给发起迁移控制模块33。
具体地,上述数据压缩模块36位于源端,数据解压模块37位于目的端。数据压缩模块36对需要压缩的数据应用适当的压缩算法。数据压缩模块36可采用游程编码、基于字典编码技术的LZW算法、基于哈夫曼编码原理的压缩算法和基于算数编码的压缩算法,或者采用上述不同压缩算法的组合。解压缩模块是与源端压缩模块算法相对应,用于将压缩数据还原成原始数据。
具体地,接收迁移控制模块34是目的端迁移系统的主模块,用于接收源端迁移系统发送的内存数据、寄存器状态、网络连接状态和磁盘数据(应用于全系统迁移),对于接收到的内存数据调用相应的数据解压模块37进行数据解压缩,并为其分配实际的物理内存,实现虚拟机物理地址到机器地址的映射。对于磁盘迁移则解压缩后存放到为其分配的相应磁盘块中。
在本发明实施例三中,在迁移虚拟机的存储数据时,不仅在初次传输时采用发起迁移控制模块生成记录全部数据为脏数据的脏数据位图表,在非初次传输时采用存储访问监视模块获取记录被修改的数据为脏数据的脏数据位图表,而且还采用存储探测模块探测虚拟机的存储装置,获取存储数据块分配位图表,发起迁移控制模块根据存储数据块分配位图表和脏数据位图表,仅对脏数据中已被分配的数据块进行传输,对未被分配的数据块不进行传输,从而减小了数据传输量,在迁移虚拟机存储数据时,缩短了迁移时间,节约了网络带宽,从而提高虚拟机存储数据迁移的效率。并且,在对脏数据中已被分配的数据块进行传输之前,数据压缩模块先对上述数据块进行压缩,传输压缩后的数据块,从而进一步减少数据传输量,节约网络带宽,提高虚拟机存储数据迁移的效率。
目前,实现虚拟机的虚拟化平台主要包括三种模型:监控模型、宿主模型和混合模型。本发明实施例一和实施例二中的虚拟机存储数据迁移方法,以及本发明实施例三的虚拟机存储数据迁移装置在上述三种模型中均可以应用。根据三种模型的不同的组成架构,本发明实施例三的虚拟机存储数据迁移装置的上述各个模块在上述三种模型中分别设置于不同的位置。以下结合图4至图6分别予以说明。
图4为本发明实施例三的虚拟机存储数据迁移装置应用于监控模型的结构示意图。如图4所示,本发明实施例三的虚拟机存储数据迁移装置应用于监控模型时,上述位图传输模块35包括第一位图传输模块351和第二位图传输模块352。第一位图传输模块351连接发起迁移控制模块33和第二位图传输模块352、第二位图传输模块352连接第一位图传输模块351和存储探测模块32。监控模型的源端物理主机和目的端物理主机中分别包括:硬件、虚拟机监控器、客户及操作系统和客户机应用层。本发明实施例三的虚拟机存储数据迁移装置的各个模块中,发起迁移控制模块33、存储访问监视模块31、第一位图传输模块351和数据压缩模块36设置于源端虚拟机监控器,第二位图传输模块352设置于源端客户机应用层,存储探测模块32设置于源端客户机操作系统,接收迁移控制模块34和解压缩模块设置于目的端虚拟机监控器。
图5为本发明实施例三的虚拟机存储数据迁移装置应用于宿主模型的结构示意图。如图5所示,本发明实施例三的虚拟机存储数据迁移装置应用于宿主模型时,上述位图传输模块35包括第一位图传输模块351和第二位图传输模块352。第一位图传输模块351连接发起迁移控制模块33和第二位图传输模块352、第二位图传输模块352连接第一位图传输模块351和存储探测模块32。监控模型的源端物理主机和目的端物理主机中分别包括:硬件、虚拟机监控器、用户动态监控程序、客户机操作系统和客户机应用层。本发明实施例三的虚拟机存储数据迁移装置的各个模块中,发起迁移控制模块33、存储访问监视模块31、第一位图传输模块351和数据压缩模块36设置于源端虚拟机监控器,第二位图传输模块352设置于源端客户机应用层,存储探测模块32设置于源端客户机操作系统,接收迁移控制模块34和解压缩模块设置于目的端虚拟机监控器。
图6为本发明实施例三的虚拟机存储数据迁移装置应用于混合模型的结构示意图。如图6所示,本发明实施例三的虚拟机存储数据迁移装置应用于混合模型时,上述位图传输模块35包括第一位图传输模块351和第二位图传输模块352。上述位图传输模块35包括第一位图传输模块351和第二位图传输模块352。第一位图传输模块351连接发起迁移控制模块33和第二位图传输模块352、第二位图传输模块352连接第一位图传输模块351和存储探测模块32。混合模型的源端物理主机和目的端物理主机中分别包括:硬件、虚拟机监控器、特权操作系统、应用层、客户机操作系统和客户机应用层。本发明实施例三的虚拟机存储数据迁移装置的各个模块中,发起迁移控制模块33、第一位图传输模块351和数据压缩模块36设置于源端特权操作系统,存储访问监视模块31设置于源端虚拟机监控器,第二位图传输模块352设置于源端客户机应用层,存储探测模块32设置于源端客户机操作系统,接收迁移控制模块34和解压缩模块设置于目的端特权操作系统。、
采用上述本发明各个实施例的虚拟机存储数据迁移方法和装置,采用空负载、静态Web、动态Web、流媒体服务和编译内核等五种应用作为虚拟机的上层业务负载,对上述虚拟机存储数据迁移方法和装置的性能进行验证。经过与Xen-3.4.3版本的内存迭代预拷贝技术测量对比,本发明的内存迁移技术方案可以在总迁移数据量、总迁移时间和中断时间指标中分别达到50.5%、48.2%和47.6%的性能优化。图7为本发明实施例一至实施例三的总迁移数据量的柱状图。图8为本发明实施例一至实施例三的总迁移时间的柱状图。图9为本发明实施例一至实施例三的中断时间的柱状图。表1为本发明实施例一至实施例三的技术效果中总迁移数据量、总迁移时间和中断时间的数据表。本发明实施例的上述总迁移数据量、总迁移时间和中断时间这指标三项指标的技术效果和数据可以参考图7至图9以及表1所示。
表1.本发明实施例一至实施例三的技术效果中总迁移数据量、总迁移时间和中断时间的数据表
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。