本发明专利技术提供了一种虚拟机磁盘镜像同步操作优化的系统,包括:虚拟机镜像内部日志模块、元数据日志模式和全数据日志模式动态切换模块、虚拟机镜像空间动态预分配模块;虚拟机镜像内部日志模块用于将虚拟机镜像的元数据修改和数据修改放在同一个日志事务中,减少同步操作;元数据日志模式和全数据日志模式动态切换模块用于减少磁盘带宽的消耗同时保证数据的完整性;虚拟机镜像空间动态预分配模块用于为镜像分配适量大于当前所需的预存空间,供下次镜像需要增长时使用,减少虚拟机镜像实际增长的次数。本发明专利技术还提供了应用上述系统的方法,解决了为保证虚拟机镜像一致性而引入大量额外同步操作的问题,极大的提高了虚拟化I/O的性能。
【技术实现步骤摘要】
本专利技术涉及系统虚拟化
,具体地,涉及。
技术介绍
虚拟化的一个方便之处在于使用镜像文件来模拟虚拟机的磁盘。虚拟机镜像提供了写时拷贝(copy-on-write)、去重(deduplicat1n)、加密(encrypt1n)等先进的特性,极大的简化了虚拟机的管理。为了提供这些先进的特性,虚拟化镜像引入额外的元数据来管理镜像。例如,许多镜像系统使用查询表(lookup table)来管理虚拟块地址到物理块地址的映射。当更新数据时,为了保证查询表等元数据与虚拟机自身数据的一致性,引入了很多额外的同步操作。在实际使用中,虚拟机内部对文件进行添加操作,每次添加结束后调用I次同步操作(即fdatasync),物理机对应需要进行7次同步操作(fdatasync)。本专利技术称这一问题为虚拟化同步放大问题(sync amplificat1n),并以qcow2格式为例介绍虚拟机镜像格式以及同步放大问题产生的原因。qcow2是一种常见的虚拟机镜像格式。该格式维护了一个两层的查询表,用来管理地址翻译,以及一个引用表(reference table),用来跟踪每个簇(cluster)的使用情况。簇是qcow2镜像的基本单元,簇的大小保存在镜像头部中(image header)。镜像头包含指向查询表和引用表的指针。当系统进行地址翻译时,每个虚拟块地址(virtual blockaddress) a被分为三个部分,a = (al, a2, a3),al作为一级查询表(LI table)的索引去找到对应二级查询表(L2 table)的地址,a2作为二级查询表的索引找到对应数据簇的地址,a3是在簇中的偏移。引用表中的项记录了每个簇被引用的次数。当某个簇被新分配时,弓丨用表中对应的项被置为I ;当有更多快照使用这个簇时,引用表中的项对应增加。qcow2镜像写入新数据时包含以下步骤:I)查询一级查询表,找到对应二级查询表的地址;2)如果二级查询表未分配,需要更新对应引用表的项,分配一个簇来保存二级查询表的信息,并且初始化二级查询表的内容;3)更新一级查询表中对应的项指向新分配的二级查询表;4)更新引用表中的项,新分配一个簇来保存新写入数据,并把数据写入新分配的簇中;5)更新二级查询表指向包含新写入数据的簇。整个写入新数据的过程需要严格遵照上述步骤,否则有可能导致qc0W2镜像不一致。qC0W2镜像的组织形式引入了额外的元数据,为保证镜像的一致性,每次写操作要求严格安排元数据和数据的更新顺序。比如:1)更新查询表指向新分配的数据簇时,需要先将数据写入簇中,否则,查询表会指向错误的数据;2)当分配新簇时,引用表必须在查询表之前更新,否则查询表会指向一个未分配的簇。使用两个简单的测试用例对比了客户虚拟机内部和外部fdatasync数量。第一个测试用例是“重复写”,重复写预先分配好的簇,每次写操作不会增大镜像的大小;第二个测试用例“添加写”,每次添加写需要新分配数据簇。两个测试用例都是写64k数据,并调用一次fdatasync,该操作循环1000次。测试发现虚拟机外部的fdatasync数量是虚拟机内部的3-7倍。在“添加写”的工作负载中,一次fdatasync操作会导致两次磁盘刷新写缓存(disk flush)操作。第一次磁盘刷新写缓存操作添加了新数据,需要增长镜像的大小,第二次刷新写缓存操作更新日志,由于日志空间已提前分配好,不需要新分配空间,镜像大小不增长。qC0W2接收到虚拟机内部发出的写缓存刷新操作,如果该刷新操作增大了镜像的大小,qC0W2会首先更新引用表中的项来新分配一个簇,并在簇中写入新的数据。此时需要第一个fdatasync来保证引用表和数据的更新写入磁盘。然后需要更新二级查询表指向新分配的簇,此时需要第二个fdatasync (有时候二级查询表未分配,此时需要更多同步操作)。第三个fdatasync用来保证将其余引用表的更新写入磁盘。第四个fdatasync是qcow2实现上的缺陷。当磁盘刷新写缓存操作不会导致镜像增长时,qcow2不需要更新查询表,因此会比镜像增长的情况少一次fdatasync。添加写中的两次刷新操作,一次增长了镜像大小,另一次不增长镜像的大小,因此对于添加写的工作负载,内部一次fdatasync操作会导致外部7次fdatasync。重复写内部一次fdatasync操作,只会导致一次磁盘刷新写缓存操作,并且该刷新操作不会增长镜像大小,因此对于重复写工作负载,虚拟机内部一次fdatasync导致外部3次fdatasync。qcow2引入了很多额外的同步操作来保证虚拟机镜像的一致性。同步操作代价很大。每次同步操作都需要调用磁盘刷新写缓存操作,保证数据真正写入磁盘的盘面上。过多的磁盘刷新写缓存操作降低写缓存调度器和写操作合并效率,降低I/o的性能。
技术实现思路
针对现有技术中的缺陷,本专利技术的目的是提供一种。根据本专利技术提供的虚拟机磁盘镜像同步操作优化的系统,包括:虚拟机镜像内部日志模块、元数据日志模式和全数据日志模式动态切换模块、虚拟机镜像空间动态预分配丰吴块;-所述虚拟机镜像内部日志模块,用于将虚拟机镜像的元数据修改和数据修改放在同一个日志事务中,去除虚拟机镜像元数据和数据的依赖关系,减少同步操作;-所述元数据日志模式和全数据日志模式动态切换模块,用于切换元数据日志模式和全数据日志模式,减少磁盘带宽的消耗同时保证数据的完整性;-所述虚拟机镜像空间动态预分配模块,用于为镜像分配适量大于当前所需的预存空间,减少虚拟机镜像增长的次数。根据本专利技术提供的虚拟机磁盘镜像同步操作优化的方法,在虚拟机磁盘镜像同步操作优化的系统中能够根据实际要求选择建立方法A、方法B和方法C中的任一种或者任几种机制;-所述方法A:建立虚拟机镜像内部日志机制;-所述方法B:建立元数据日志模式和全数据日志模式动态切换机制;-所述方法C:建立虚拟机镜像空间动态预分配机制。优选地,所述方法A包括如下步骤:步骤A-1:在初始化虚拟机镜像时,为日志预分配存储空间;步骤A-2:当更新镜像时,将镜像的元数据和数据作为一个日志事务记录到预分配的日志中;步骤A-3:在日志中的日志事务末尾添加一个提交块,用于标志该日志事务提交成功;步骤A-4:判断提交块是否成功写入磁盘,若提交块写入成功,则等待日志中的数据被写入该数据的实际位置;若提交块写入失败,则丢弃该提交块对应的日志事务;步骤A-5:日志中的日志事务被丢弃或者所述日志事务中的数据被写入该数据的实际位置后,回收该日志所在的存储空间;步骤A-6:当出现虚拟机镜像系统崩溃时,虚拟机镜像内部日志机制根据日志的内容恢复数据。优选地,所述方法B包括如下步骤:步骤B-1:执行元数据日志模式,即将元数据记录在日志中,将数据写入该数据的实际位置,同时计算出所有修改数据的校验码,将所述校验码也保存到日志中;当出现虚拟机镜像系统崩溃时,元数据日志模式还能够利用日志中的校验码判断出当前日志事务对应的数据是否被全部写入到磁盘中;步骤B-2:当多个日志事务同时修改同一数据块时,切换到全数据日志模式,即将所有修改的数据也保存到日志中。优选地,所述方法C包括如下步骤:步骤C-1:当镜像需要频繁增长时,虚拟机系统为镜像本文档来自技高网...
【技术保护点】
一种虚拟机磁盘镜像同步操作优化的系统,其特征在于,包括:虚拟机镜像内部日志模块、元数据日志模式和全数据日志模式动态切换模块、虚拟机镜像空间动态预分配模块;‑所述虚拟机镜像内部日志模块,用于将虚拟机镜像的元数据修改和数据修改放在同一个日志事务中,去除虚拟机镜像元数据和数据的依赖关系,减少同步操作;‑所述元数据日志模式和全数据日志模式动态切换模块,用于切换元数据日志模式和全数据日志模式,减少磁盘带宽的消耗同时保证数据的完整性;‑所述虚拟机镜像空间动态预分配模块,用于为镜像分配大于当前所需的预存空间,供下次镜像需要增长时使用,减少虚拟机镜像增长的次数。
【技术特征摘要】
【专利技术属性】
技术研发人员:夏虞斌,陈庆澍,梁凉,陈海波,
申请(专利权)人:上海交通大学,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。