技术简介:
本专利针对内存数据迁移中传输效率低、重复数据冗余的问题,提出基于Stream流与全局表的去重压缩方案。通过实时监控脏页并动态更新全局表,实现数据去重与压缩处理;结合停机阈值条件优化迁移时机,显著降低传输次数,提升迁移效率与压缩性能。
关键词:内存迁移,数据去重
技术领域本发明涉及云计算领域,特别涉及到通过流计算技术减少内存数据重发,提高内存数据压缩效率,实现在线迁移内存数据的系统和方法。
背景技术:虚拟机(VM)在线迁移(onlinemigration),又称实时迁移(livemigration),是指在保证虚拟机上服务正常运行的同时,虚拟机在不同的物理主机之间进行迁移,为了在迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。目前主流的在线迁移工具大都要求物理机之间采用SAN(storageareanetwork)、NAS(network-attachedstorage)之类的集中式共享外存设备,因而在迁移时只需要考虑操作系统内存执行状态的迁移,从而获得较好的迁移性能。国内外主流的基本虚拟机内存迁移的策略主要有三种:基于虚拟机系统事件记录和重放的方法,基于后拷贝(post-copy)的方法和基于预拷贝(pre-copy)的方法。相对于基于虚拟机系统事件记录和重放的方法还不够成熟、以及后拷贝方法停机时间长的问题,目前主流的虚拟机监视器XEN和KVM都采用了预拷贝技术,即源主机VM第一轮发送所有内存页数据到目的主机VM,接下来每一轮循环发送上一轮预拷贝过程中被VM写过的脏页内存,直到达到预设的阈值,挂起源主机,不再进行内存更新,最后一轮脏页传给目的主机VM,完成内存迁移。为减少网络传送数据量,在基础预拷贝方法基础上还引入了内存页面变脏概率预测、内存数据压缩等技术。预拷贝技术虽然能够降低停机时间,但如果源主机VM内存更新频繁,会导致循环次数增多,总体迁移时间变长。
技术实现要素:本发明要解决的技术问题是内存频繁更新导致传统预拷贝迭代循环难以收敛的问题。根据本发明一方面,提出在线迁移内存数据的系统,包括:流数据采集单元,用于在迁移开始时将全部页面按页编号、页数据送Stream流,并生成页编号、次数的全局表,页编号对应的次数为1;用于启动流数据处理单元,监测脏页跟踪单元,实时将脏页送Stream流,并更新全局表,对应脏页编号的次数加1;脏页跟踪单元,用于监测源主机被修改的内存页面;流数据处理单元,用于从Stream流中获取页编号及对应的页数据,检查全局表中页编号对应的次数,如果大于1,则抛弃本页数据不处理,将次数减1;如果等于1,将次数设置为0,并对本页数据进行压缩处理,送迁移单元;迁移单元,用于判别是否达到停机阈值条件,如果是,则停止源主机内存数据的更新,进行内存数据迁移。进一步,所述停机阈值条件为时间限制,即判断从Stream流生成开始的计时时间是否大于预设时间值T,如果是,则停止源主机内存数据的更新;或者所述停机阈值条件为阈值字节数,即判别(全局表中页编号次数大于0的记录的页数总和+脏页中未采集到Stream流中的页数)×每页字节数≤阈值字节数时,则停止源主机内存数据内存更新。进一步,流数据采集单元将首次全页内存数据全部生成到Stream流中,再启动流数据处理单元;或者所述流数据处理单元配制相对Stream流生成的延迟时间,即,在到达延迟时间时,启动所述流数据处理单元。进一步,所述流数据采集单元和流数据处理单元为多核并行或多线程并发执行。进一步,所述流数据处理单元将源主机内存划分为多个区域,不同区域的数据由多线程并发或多核并行执行,则从多张全局表中获取次数总和来判定是否停机。进一步,目的主机接收源主机发送的内存数据,并进行解压缩。根据本发明一方面,提出在线迁移内存数据的方法,包括:在迁移开始时将全部页面按页编号、页数据送Stream流,并生成页编号、次数的全局表,页编号对应的次数为1;监测源主机被修改的内存页面,实时将脏页送Stream流,并更新全局表,对应脏页编号的次数加1;从Stream流中获取页编号及对应的页数据,检查全局表中页编号对应的次数,如果大于1,则抛弃本页数据不处理,将次数减1;如果等于1,将次数设置为0,并对本页数据进行压缩处理;判别是否达到停机阈值条件,如果是,则停止源主机内存数据的更新,进行内存数据迁移。进一步,所述停机阈值条件为时间限制,即判断从Stream流生成开始的计时时间是否大于预设时间值T,如果是,则停止源主机内存数据的更新;停机阈值条件为阈值字节数,即判别(全局表中页编号次数大于0的记录的页数总和+脏页中未采集到Stream流中的页数)×每页字节数≤阈值字节数时,则停止源主机内存数据内存更新。进一步,将首次全页内存数据全部生成到Stream流中,再启动流数据处理;或者配制相对Stream流生成的延迟时间,即,在到达延迟时间时,对流数据进行处理。进一步,原始内存数据、以及脏页数据采集转换为Stream流的过程为多线程并发或多核并行执行;将源主机内存划分为多个区域,不同区域的数据为多线程并发或多核并行执行;Stream流中数据的压缩及去重处理为多线程并发或多核并行执行;和\/或将多个压缩后的内存数据进行流聚合,并将流聚合后的内存数据进行迁移。进一步,将源主机内存划分为多个区域,不同区域的数据由多线程并发或多核并行执行,则从多张全局表中获取次数总和来判定是否停机。进一步,目的主机接收源主机发送的内存数据,并进行解压缩。本发明中,检查全局表中页编号对应的次数,如果大于1,则抛弃本页数据不处理;如果等于1,对本页数据进行压缩处理并迁移。即,次数大于1表示后面又在流中插入了一个更新后的同编号的页数据,因此这个先插入的页已经不需要再传到目的主机了,只需要将后面那一个同编号的页数据传给目的主机就是内存最新状态了。也就是说,对没有重复页编号的内存页数据进行压缩,有重复页编号的内存页数据抛弃不处理,避免数据重发。因此,能够降低源主机内存脏页的传输次数、提高内存数据压缩效率,加快预拷贝循环收敛速度。通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。附图说明构成说明书的一部分的附图描述了本发明的实施例,并且连同说明书一起用于解释本发明的原理。参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:图1为在线迁移内存数据的系统的结构示意图。图2为在线迁移虚拟机内存数据的系统实施例的结构示意图。图3为在线迁移内存数据的方法实施例的流程示意图。具体实施方式现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。图1为在线迁移内存数据的系统的结构示意图。该系统包括:流数据采集单元110、脏页跟踪单元120、流数据处理单元130以及迁移单元140。该系统适用于虚拟机内存状态的在线迁移。当然,本领域技术人员应该可以理解,这里只是用于举例,不应理解为对本发明的限制。例如,也可适用于物理机内存状态的在线迁移。其中:流数据采集单元110,用于在迁移开始时将全部页面按页编号、页数据送入生成的Stream流,并生成页编号、次数的全局表,页编号对应的次数为1;用于启动流数据处理单元,监测脏页跟踪单元,实时将脏页送Stream流,并更新全局表,对应脏页编号的次数加1。其中,源主机将待迁移的全部内存按页编号、页数据的元组结构分页处理。操作系统采用分页机制对内存进行管理,将物理内存按页(如4K大小)分成相同大小的存储块,每个块一个页号,这里的元组结构例如是创建一个表,表的字段为页编号、页数据,表的记录就是所有物理内存的页号,和对应的内存块的数据(即页数据)。脏页跟踪单元120,用于监测源主机被修改的内存页面。流数据处理单元130,用于从Stream流中获取页编号及对应的页数据,检查全局表中页编号对应的次数,如果大于1,则抛弃本页数据不处理,将次数减1;如果等于1,将次数设置为0,并对本页数据进行压缩处理,送迁移单元。迁移单元140,用于判别是否达到停机阈值条件,如果是,则停止源主机内存数据的更新,进行内存数据迁移。其中,流数据采集单元和流数据处理单元均可多核并行或多线程并发执行。即,原始内存数据、以及脏页数据采集转换为Stream流的过程可多线程并发或多核并行执行,以提高效率;所述流数据处理单元Stream流中数据的压缩及去重处理也可多线程并发或多核并行执行,以提高效率;所述流数据处理单元将多个压缩后的内存数据进行流聚合,并将流聚合后的内存数据送迁移单元。从而,在迁移数据拷贝到目的主机前,可以将多个压缩后的内存页进行流聚合,避免小数据量频繁传输降低数据传输效率。在该实施例中,检查全局表中页编号对应的次数,如果大于1,则抛弃本页数据不处理;如果等于1,对本页数据进行压缩处理并迁移。即,次数大于1表示后面又在流中插入了一个更新后的同编号的页数据,因此这个先插入的页已经不需要再传到目的主机了,只需要将后面那一个同编号的页数据传给目的主机就是内存最新状态了。也就是说,对没有重复页编号的内存页数据进行压缩,有重复页编号的内存页数据抛弃不处理,避免数据重发。因此,能够降低源主机内存脏页的传输次数、提高内存数据压缩效率,加快预拷贝循环收敛速度。在本发明的实施例中,所述迁移单元判别是否达到停机阈值条件,如果是,则停止源主机内存数据的更新,进行内存数据迁移,完成后续内存复制和迁移工作。否则,可以继续内存数据更新。停机阈值条件,例如是,时间限制,则所述迁移单元判断从Stream流生成开始的计时时间是否大于预设时间值T,如果是,则即使其它条件还未满足,都停止源主机内存数据的更新。进行内存数据迁移,完成后续内存复制和迁移工作。否则,可以继续内存数据更新。停机阈值条件,又例如是,阈值字节数,则所述迁移单元检查(例如,定时检查)全局表,判别(全局表中页编号次数大于0的记录的页数总和+脏页中未采集到Stream流中的页数)×每页字节数≤阈值字节数时,则停止源主机内存数据内存更新,进行内存数据迁移,完成后续内存复制和迁移工作。否则,可以继续进行内存数据更新。流数据处理单元可以将源主机内存划分为多个区域,不同区域的数据由不同进程或线程进行流处理,从而实现多线程并发或多核并行执行,此时停机阈值的判别方法是从多张全局表中获取次数总和来判定。迁移内存数据时需要停源主机,再将源主机内存数据拷贝到目的主机,再启动目的主机。因此,要保证停机后传送的内存数据最小。本发明的该实施例通过设置阈值字节数,使得迁移的内存数据量小于阈值字节数,从而让停机后尽量少传数据,缩短停机时间。在本发明的实施例中,可以采用如下方式生成和处理Stream流:流数据采集单元将首次全页内存数据全部生成到Stream流中,然后再启动流数据处理单元,对流中数据取出压缩传送处理,这种方式生成和处理之间有个时间间隔t,是生成全部内存页到流中的时间。该种方式去重效果好,因为初始流中数据多,后续脏页与流中数据重复的情况概率大。或者所述流数据处理单元配制相对Stream流生成的延迟时间,即,在到达延迟时间时,启动所述流数据处理单元。例如,自行设延迟时间为0.5t,此时在生成一半Stream流时启动Stream流处理单元,进行压缩传送处理。实际应用中可以对延迟时间进行试验,以找到最优配置,以在尽可能少的时间内达到停机后传输最少的数据,即尽快达到停机时间最小的目标。对Stream流的处理可以在首次全页面Stream流生成前就执行,即可自行配制相对Stream流生成的延迟时间,以提高执行效率,减少Stream流的内存占用。即,在第一次将全部内存页都生成到流中之前可以不停机。此时需要设置一个全局变量,标识首次全部内存页面Stream流是否生成完毕,如0表示未生成完,1表示已生成完,对于未生成完状态,不进行停机阈值条件判定。该种方式缩短了等待生成流的时间,总的虚拟机迁移时间也可能会缩短。在本发明的实施例中,该系统还可以包括目的主机,其中,目的主机接收源主机发送的内存数据,并进行解压缩。恢复目的主机VM内存状态、完成其它迁移操作,如共享外部存储切换、启动虚拟机等。下面将结合具体实施例,对本发明的系统做进一步说明。图2为在线迁移虚拟机内存数据的系统实施例的结构示意图。该系统可以包括流数据采集单元、脏页跟踪单元、流数据处理单元、迁移单元以及目的主机。其中:脏页跟踪单元检测源主机被修改过的内存页;流数据采集单元在迁移开始时将全部页面按【页编号,页数据】送Stream流,并生成一个【页编号,次数】的全局表,页编号对应的次数为1。从脏页跟踪单元获取脏页,实时将脏页送Stream流,并更新全局表,标识Stream流中相同内存页编号出现的次数;流数据处理单元从Stream流中获取页编号及对应的内存页数据,根据页编号在全局表中的次数进行去重判断,如果次数大于1,说明Stream流中还有相同的内存页数据,以后出现的为准,抛弃本页数据,避免重复传输,并且将次数减1;如果次数等于1,对本页进行压缩,可以立即或聚合多条后送源主机的迁移单元,并将次数设置为0;源主机的迁移单元接收流数据处理单元送来的压缩后数据,送目的主机,并且,源主机的迁移单元还需要判别(全局表中页编号次数大于0的记录的页数总和+脏页中未采集到Stream流中的页数)×每页字节数≤阈值字节数时,则停止源主机VM内存更新,完成后续内存复制和迁移工作;目的主机接收源主机的迁移单元发送来的内存数据,并进行解压缩,恢复目的主机VM内存。图3为在线迁移内存数据的方法实施例的流程示意图。该方法包括以下步骤:在步骤310,在迁移开始时将全部页面按页编号、页数据送Stream流,并生成页编号、次数的全局表,页编号对应的次数为1。其中,源主机将待迁移的全部内存按页编号、页数据的元组结构分页处理。操作系统采用分页机制对内存进行管理,将物理内存按页(如4K大小)分成相同大小的存储块,每个块一个页号,这里的元组结构例如是创建一个表,表的字段为页编号、页数据,表的记录就是所有物理内存的页号,和对应的内存块的数据(即页数据)。在步骤320,监测源主机被修改的内存页面,实时将脏页送Stream流,并更新全局表,对应脏页编号的次数加1。在步骤330,从Stream流中获取页编号及对应的页数据,检查全局表中页编号对应的次数,判断是否大于1,如果大于1,执行步骤340,如果等于1,执行步骤350。在步骤340,次数大于1,抛弃本页数据不处理,将次数减1。在步骤350,次数等于1,将次数设置为0,并对本页数据进行压缩处理,继续执行步骤360。在步骤360,判别是否达到停机阈值条件,如果是,执行步骤370,否则,执行步骤320。在步骤370,停止源主机内存数据的更新,进行内存数据迁移。该方法适用于虚拟机内存状态的在线迁移。当然,本领域技术人员应该可以理解,这里只是用于举例,不应理解为对本发明的限制。例如,也可适用于物理机内存状态的在线迁移。其中,原始内存数据、以及脏页数据采集转换为Stream流的过程为多线程并发或多核并行执行,可以提高效率;将源主机内存划分为多个区域,不同区域的数据为多线程并发或多核并行执行,可以提高效率;Stream流中数据的压缩及去重处理为多线程并发或多核并行执行,可以提高效率;和\/或将多个压缩后的内存数据进行流聚合,并将流聚合后的内存数据进行迁移,避免小数据量频繁传输降低数据传输效率。在该实施例中,检查全局表中页编号对应的次数,如果大于1,则抛弃本页数据不处理;如果等于1,对本页数据进行压缩处理并迁移。即,次数大于1表示后面又在流中插入了一个更新后的同编号的页数据,因此这个先插入的页已经不需要再传到目的主机了,只需要将后面那一个同编号的页数据传给目的主机就是内存最新状态了。也就是说,对没有重复页编号的内存页数据进行压缩,有重复页编号的内存页数据抛弃不处理,避免数据重发。因此,能够降低源主机内存脏页的传输次数、提高内存数据压缩效率,加快预拷贝循环收敛速度。在本发明的实施例中,还判别是否达到停机阈值条件,如果是,则停止源主机内存数据的更新,进行内存数据迁移,完成后续内存复制和迁移工作。否则,可以继续内存数据更新。停机阈值条件,例如是,时间限制,则判断从Stream流生成开始的计时时间是否大于预设时间值T,如果是,则即使其它条件还未满足,都停止源主机内存数据的更新。进行内存数据迁移,完成后续内存复制和迁移工作。否则,可以继续内存数据更新。停机阈值条件,又例如是,阈值字节数,则检查(例如,定时检查)全局表,判别(全局表中页编号次数大于0的记录的页数总和+脏页中未采集到Stream流中的页数)×每页字节数≤阈值字节数时,则停止源主机内存数据内存更新,进行内存数据迁移,完成后续内存复制和迁移工作。否则,可以继续进行内存数据更新。在本发明的实施例中,可以将源主机内存划分为多个区域,不同区域的数据由不同进程或线程进行流处理,从而实现多线程并发或多核并行执行,此时停机阈值的判别方法是从多张全局表中获取次数总和来判定。迁移内存数据时需要停源主机,再将源主机内存数据拷贝到目的主机,再启动目的主机。因此,要保证停机后传送的内存数据最小。本发明的该实施例通过设置阈值字节数,使得迁移的内存数据量小于阈值字节数,从而让停机后尽量少传数据,缩短停机时间。在本发明的实施例中,可以采用如下方式生成和处理Stream流:将首次全页内存数据全部生成到Stream流中,然后再启动流数据处理,对流中数据取出压缩传送处理,这种方式生成和处理之间有个时间间隔t,是生成全部内存页到流中的时间。该种方式去重效果好,因为初始流中数据多,后续脏页与流中数据重复的情况概率大。或者配制相对Stream流生成的延迟时间,即,在到达延迟时间时,对流数据进行处理。例如,自行设延迟时间为0.5t,此时在生成一半Stream流时启动Stream流处理,进行压缩传送。实际应用中可以对延迟时间进行试验,以找到最优配置,以在尽可能少的时间内达到停机后传输最少的数据,即尽快达到停机时间最小的目标。对Stream流的处理可以在首次全页面Stream流生成前就执行,即可自行配制相对Stream流生成的延迟时间,以提高执行效率,减少Stream流的内存占用。即,在第一次将全部内存页都生成到流中之前可以不停机。此时需要设置一个全局变量,标识首次全部内存页面Stream流是否生成完毕,如0表示未生成完,1表示已生成完,对于未生成完状态,不进行停机阈值条件判定。该种方式缩短了等待生成流的时间,总的虚拟机迁移时间也可能会缩短。在本发明的实施例中,还可以包括以下步骤:目的主机接收源主机发送的内存数据,并进行解压缩。恢复目的主机VM内存状态、完成其它迁移操作,如共享外部存储切换、启动虚拟机等。至此,已经详细描述了本发明。为了避免遮蔽本发明的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。可能以许多方式来实现本发明的方法以及装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法以及装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员应该理解,可在不脱离本发明的范围和精神的情况下,对以上实施例进行修改。本发明的范围由所附权利要求来限定。