一种虚拟磁盘的管理方法及装置制造方法

文档序号:6521452阅读:227来源:国知局
一种虚拟磁盘的管理方法及装置制造方法
【专利摘要】本发明公开了一种虚拟磁盘的管理方法和装置,用于提高瘦磁盘的IO性能。在本发明的一些实施例中,方法包括:判断当前IO写请求是否已被分配存储块;若当前IO写请求没有被分配存储块,则判断当前的IO模型的类型;若当前的IO模型的类型是顺序模型,则对当前IO写请求需要访问的存储块进行预置零操作,并将当前IO写请求的数据写入已被预置零的所述存储块;若当前的IO模型的类型是随机模型,则直接将当前IO写请求的数据写入当前IO写请求需要访问的存储块。该方法既利用了瘦磁盘能够降低存储空间及成本的优点,又提高了瘦磁盘的IO性能。
【专利说明】一种虚拟磁盘的管理方法及装置
【技术领域】
[0001]本发明涉及计算机技术,具体涉及一种虚拟磁盘的管理方法及装置。
【背景技术】
[0002]在虚拟化领域,虚拟机的虚拟磁盘的实际载体可以是物理磁盘、物理磁盘上的逻辑卷或者物理磁盘上的一个单独文件。对于文件方式的虚拟磁盘,可以是占用实际使用空间的瘦磁盘。使用瘦磁盘作为虚拟磁盘的实际载体时,主机需要随着输入输出(InputOutput, 10)操作为虚拟机分配磁盘空间,使瘦磁盘在使用过程中实时增长。
[0003]假设虚拟机的系统卷为10G,虚拟机实际占用的空间只有1G,瘦磁盘就是指占用了 IG的瘦文件,而其它9G空间并未被实际分配空间,S卩,未被预置零;该瘦磁盘在虚拟机使用过程中实时增长,最终可能达到10G。
[0004]瘦磁盘的优点是可以减少存储空间,大量降低存储成本,创建时间短;缺点是由于需要在用户写数据时分配空间,因此其IO性能非常低。

【发明内容】

[0005]本发明实施例提供虚拟磁盘的管理方法及装置,以解决现有技术中瘦磁盘的IO性能非常低的问题。
[0006]本发明第一方面提供一种虚拟磁盘的管理方法,包括:判断当前输入输出IO写请求是否已被分配存储块;若所述当前IO写请求没有被分配存储块,则判断当前的IO模型的类型;若所述当前的IO模型的类型是顺序模型,则对所述当前IO写请求需要访问的存储块进行预置零操作,并将所述当前IO写请求的数据写入已被预置零的所述存储块;若所述当前的IO模型的类型是随机模型,则直接将所述当前IO写请求的数据写入所述当前IO写请求需要访问的存储块。
[0007]在第一种实现方式中,所述判断当前的IO模型的类型包括:根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型。
[0008]结合第一方面的第一种实现方式,在第二种实现方式中,所述根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型包括:计算所述用户态进程中的第一类IO写请求的数量,所述第一类IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块相邻;判断所述第一类IO写请求的数量是否达到第一临界值,若所述第一类IO写请求的数量达到第一临界值,则判断所述当前的IO模型的类型是顺序模型,若所述第一类IO写请求的数量没有达到第一临界值,则判断所述当前的IO模型的类型是随机模型。
[0009]结合第一方面的第一种实现方式,在第三种实现方式中,所述根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型包括:计算所述用户态进程中各个IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块的距离;设定至少二个差值范围,并为每个差值范围设定不同的权重;统计距离在每个差值范围内的IO写请求的数量;根据距离在每个差值范围内的IO写请求的数量以及所述每个差值范围设定不同的权重,计算距离在每个差值范围内的IO写请求的数量与对应的权重的乘积,并对得到的所有乘积求和,计算所述求和得到的数值与所述用户态进程中各个IO写请求的总数量的比值;判断所述比值是否达到第二临界值,若所述比值达到第二临界值,则判断所述当前的IO模型的类型是顺序模型,若所述比值没有达到第二临界值,则判断所述当前的IO模型的类型是随机模型。
[0010]本发明第二方面提供另一种虚拟磁盘的管理方法,包括:根据输入输出IO请求下发的频繁程度,判断主机的后台是否空闲;若后台空闲,则在后台对虚拟磁盘进行预置零操作。
[0011]在第一种实现方式中,所述根据IO请求下发的频繁程度,判断主机的后台是否空闲包括:计算用户态进程中的IO请求的数量是否低于第三临界值;若所述用户态进程中的IO请求的数量低于第三临界值,则判断主机的后台空闲。
[0012]在第二种实现方式中,所述根据IO请求下发的频繁程度,判断主机的后台是否空闲包括:计算用户态进程的每一种IO队列中的IO请求的数量,并为每一种IO队列设定不同的权重;计算每一种IO队列中的IO请求的数量与对应的权重的乘积,并对得到的所有乘积求和;判断所述求和得到的数值是否低于第四临界值,若所述求和得到的数值低于第四临界值,则判断主机的后台空闲。
[0013]结合第二方面或者第二方面的第一种或第二种实现方式,在第三种实现方式中,所述在后台对虚拟磁盘进行预置零操作包括:获取虚拟磁盘的置零阈值;在后台对虚拟磁盘的预置零范围进行预置零操作,所述预置零范围是指所述置零阈值内尚未被实际分配给虚拟机的存储空间。
[0014]结合第二方面的第三种实现方式,在第四种实现方式中,所述获取虚拟磁盘的置零阈值之前还包括:计算设定周期内下发的IO请求的数量,在所述数量低于下限值时,增大所述置零阈值,在所述数量高于上限值时,减少所述置零阈值。
[0015]结合第二方面的第三种实现方式,在第五种实现方式中,所述获取虚拟磁盘的置零阈值之前还包括:计算设定周期内的IO流量,所述IO流量是指所述设定周期内需要写入所述虚拟磁盘的数据的多少;若所述IO流量大于上限值,则增大所述置零阈值;若所述IO流量小于下限值,则减少所述置零阈值。
[0016]本发明第三方面提供一种虚拟磁盘的管理装置,包括:分配判断模块,用于判断当前输入输出IO写请求是否已被分配存储块;10模型判断模块,用于在所述分配判断模块判断当前IO写请求没有被分配存储块时,判断当前的IO模型的类型;读写模块,用于在所述IO模型判断模块判断所述当前的IO模型的类型是顺序模型时,对所述当前IO写请求需要访问的存储块进行预置零操作,并将所述当前IO写请求的数据写入已被预置零的所述存储块;在所述IO模型判断模块判断所述当前的IO模型的类型是随机模型时,直接将所述当前IO写请求的数据写入所述当前IO写请求需要访问的存储块。
[0017]在第一种实现方式中,所述IO模型判断模块,具体用于根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型。
[0018]结合第三方面的第一种实现方式,在第二种实现方式中,所述IO模型判断模块包括:第一计算单元,用于计算所述用户态进程中的第一类IO写请求的数量,所述第一类IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块相邻;判断单元,用于判断所述第一计算单元计算得到的所述第一类IO写请求的数量是否达到第一临界值,若所述第一类IO写请求的数量达到第一临界值,则判断所述当前的IO模型的类型是顺序模型,若所述第一类IO写请求的数量没有达到第一临界值,则判断所述当前的IO模型的类型是随机模型。
[0019]结合第三方面的第一种实现方式,在第三种实现方式中,所述IO模型判断模块包括:第二计算单元,用于计算所述用户态进程中各个IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块的距离,设定至少二个差值范围,并为每个差值范围设定不同的权重;统计距离在每个差值范围内的IO写请求的数量,根据所述距离在每个差值范围内的IO写请求的数量以及所述每个差值范围设定不同的权重,计算距离在每个差值范围内的IO写请求的数量与对应的权重的乘积,并对得到的所有乘积求和,计算所述求和得到的数值与所述用户态进程中各个IO写请求的总数量的比值;判断单元,用于判断所述第二计算单元计算得到的所述比值是否达到第二临界值,若所述比值达到第二临界值,则判断所述当前的IO模型的类型是顺序模型,若所述比值没有达到第二临界值,则判断所述当前的IO模型的类型是随机模型。
[0020]本发明第四方面提供另一种虚拟磁盘的管理装置,包括:判断模块,用于根据输入输出IO请求下发的频繁程度,判断主机的后台是否空闲;预置零模块,用于在所述判断模块判断所述主机的后台空闲时,在后台对虚拟磁盘进行预置零操作。
[0021]在第一种实现方式中,所述判断模块包括:第一判断单元,用于计算用户态进程中的IO请求的数量是否低于第三临界值,若所述用户态进程中的IO请求的数量低于第三临界值,则判断主机的后台空闲。
[0022]在第二种实现方式中,所述判断模块包括:第二判断单元,用于计算用户态进程的每一种IO队列中的IO请求的数量,并为每一种IO队列设定不同的权重,计算每一种IO队列中的IO请求的数量与对应的权重的乘积,并对得到的所有乘积求和;判断所述求和得到的数值是否低于第四临界值,若所述求和得到的数值低于第四临界值,则判断主机的后台空闲。
[0023]结合第四方面或者第四方面的第一种或第二种实现方式,在第三种实现方式中,所述预置零模块,具体用于获取虚拟磁盘的置零阈值;在后台对虚拟磁盘的预置零范围进行预置零操作,所述预置零范围是指所述置零阈值内尚未被实际分配给虚拟机的存储空间。
[0024]结合第四方面的第三种实现方式,在第四种实现方式中,所述装置还包括:第一调整模块,用于计算设定周期内下发的IO请求的数量,在所述数量低于下限值时,增大所述置零阈值,在所述数量高于上限值时,减少所述置零阈值。所述预置零模块,具体用于获取所述第一调整模块调整过的置零阈值。
[0025]结合第四方面的第三种实现方式,在第四种实现方式中,还包括:所述装置还包括:第二调整模块,用于计算设定周期内的IO流量,所述IO流量是指所述设定周期内需要写入所述虚拟磁盘的数据的多少;若所述IO流量大于上限值,则增大所述置零阈值;若所述IO流量小于下限值,则减少所述置零阈值;所述预置零模块,具体用于获取所述第二调整模块调整过的置零阈值。[0026]由上可见,在本发明的一些实施方式中,判断当前IO写请求尚未被分配存储块时,对当前的IO模型的类型进行预判,若当前的IO模型是顺序模型,则对需要访问的存储块预置零后写入数据,若当前的IO模型是随机模型,则直接将数据写入需要访问存储块,使得:若当前的IO模型是随机模型,则通过取消预置零操作,提高当前IO操作的性能;若当前的IO模型是顺序模型,则通过预置零,使后续的IO请求对应的操作有较大几率落在已经置零的区域,因而,可以提高后续IO操作的性能;从而,既利用了瘦磁盘能够降低存储空间及成本的优点,又提高了瘦磁盘的IO性能。
[0027]在本发明的另一些实施方式中,判断主机的后台空闲时,在后台对虚拟磁盘进行预置零,使得:虚拟磁盘除了包括虚拟机实际占用、存储了虚拟机数据的存储空间外,还包括了已被预置零的存储空间,且,已被预置零的存储空间不断增长,当进行IO操作,这些IO操作落入这些已被预置零的存储空间时,则不必随IO分配空间,提升了 IO操作的性能。
【专利附图】

【附图说明】
[0028]为了更清楚地说明本发明实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0029]图1是虚拟化集群系统的架构图;
[0030]图2是瘦磁盘的IO流程的示意图;
[0031]图3是本发明一个实施例提供的虚拟磁盘管理方法的流程图;
[0032]图4是用户态进程进程内部四个IO队列与IO环的关系图;
[0033]图5是本发明另一个实施例提供的虚拟磁盘管理方法的流程图;
[0034]图6是预置零范围的示意图;
[0035]图7a和7b是本发明实施例方法的一个详细流程图;
[0036]图8是本发明一个实施例提供的虚拟磁盘的管理装置的示意图;
[0037]图9是本发明另一实施例提供的虚拟磁盘的管理装置的示意图;
[0038]图10是本发明又一实施例提供的虚拟磁盘的管理装置的示意图;
[0039]图11是本发明一个实施例提供的计算机设备的示意图;
[0040]图12是本发明另一个实施例提供的计算机设备的示意图。
【具体实施方式】
[0041]本发明实施例提供一种虚拟磁盘的管理方法及装置,既可以利用瘦磁盘文件能够降低存储空间及成本的优点,又可以提高瘦磁盘文件的IO性能,解决了现有技术不能兼顾提升瘦磁盘IO性能和降低存储空间及成本的问题。
[0042]为了使本【技术领域】的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。[0043]下面分别通过具体实施例进行详细的描述。
[0044]首先,请参考图1,图1是本发明实施例技术方案所应用的虚拟化集群系统的架构图。虚拟机(Virtual Machine, VM)通常运行在部署于主机的虚拟机管理器(hypervisor,又可称为虚拟机监视器)上,例如运行在xen (Xen是一个开放源代码虚拟机监视器,由剑桥大学开发)上,并由主机进行统一管理。虚拟机的内存、中央处理器(Central ProcessingUnit, CPU)、网络资源等都由主机进行模拟,而存储资源通常由存储局域网络(StorageArea Network, SAN)供给,一般主机通过网卡或HBA (Host Bus Adapter,主机总线适配器)卡连接SAN设备,SAN上的一个逻辑存储设备被映射为主机上的一个磁盘;集群文件系统是在一个集群内部运行于多个主机上的文件系统,它在各个主机之间存在通信机制来保证存储阵列上的数据有效可用。
[0045]本发明实施例采用文件方式的虚拟磁盘,即,虚拟机的虚拟磁盘可以是集群文件系统上的单个文件,该文件通常是有文件格式的,也可以是无文件格式(raw)的;具体可以是增量的瘦磁盘文件。本发明实施例中,虚拟机的虚拟磁盘由瘦磁盘文件(所说的瘦磁盘文件可简称为瘦磁盘)进行模拟,其10 (Input Output,输入输出)流程如图2所示,包括:
[0046]虚拟机下发的所有10请求首先会由虚拟机内部安装的前端驱动进行处理,前端驱动类似于真实的磁盘驱动一样。前端驱动会将10请求递交给运行在主机中的后端进程。前端驱动和后端进程通过虚拟机管理器例如xen中的10环进行交互。10环是一块固定的共享内存,用于在虚拟机之间或进程之间,例如在xen的虚拟客户机(DomU)和虚拟母机(DomO,又称为管理虚拟机,用于管理同一台主机上的其它虚拟机,例如管理虚拟客户机)之间,传递10请求和响应,10环利用生产者和消费者的机理来产生发送以及响应10请求。
[0047]当10请求由前端驱动放到10环中后,该10请求对应的内存页会被映射给后端进程,当10请求的响应返回给前端驱动时,该请求对应的内存页会被解映射,以此避免内存拷贝带来的10时延。
[0048]对于瘦磁盘场景的虚拟磁盘,瘦磁盘通常是一种带有自身文件格式的文件,这里会有一个用户态进程用于管理瘦磁盘,并由内核模拟出一个虚拟块设备用于对接后端进程。后端进程会将从10环中收到的10请求递交给内核的通用块层、10调度层,最终到虚拟块设备。
[0049]后端进程下发的10请求交给虚拟块设备后,同样走10环的模式交给用户态进程处理,用户态进程从10环收到该10请求后,将该10请求转换成对瘦磁盘文件的读写,交给文件系统、通用块层、10调度器,最终真正到达瘦磁盘。
[0050]一般的,10请求包括10写请求和10读请求,用户态进程从10环收到10写请求时,才开始为10写请求分配虚拟磁盘空间,而分配空间时速度很慢,10性能非常低,严重影响用户体验。
[0051]为了解决瘦磁盘随10操作分配空间导致10性能非常低的问题,基于上述瘦磁盘的10流程,本发明实施例提出以下技术方案。
[0052]请参考图3,本发明一个实施例提供的虚拟磁盘管理方法包括:
[0053]110、判断当前10写请求是否已被分配存储块。
[0054]管理虚拟磁盘的用户态进程(该用户态进程具体可以是磁盘管理进程)和内核态的交互是通过10环进行的。10环中可存放多个10请求。用户态进程内部也会有多个10请求在处理,并可分为四个IO队列,分别是:新取上来的IO队列,正在下发的IO队列,失败预备重发的IO队列,以及完成IO队列;它们与IO环之间的关系如图4所示。
[0055]当用户态进程从IO环收到新下发的IO写请求并进行处理时时,该正在处理的当前IO写请求对应的操作,可能落入已被分配空间的瘦磁盘文件内,也可能落入瘦磁盘文件范围之外;如果落入瘦磁盘文件内,说明当前的瘦磁盘足够使用,无需扩张;如果落入瘦磁盘范围之外,则需要扩张瘦磁盘。
[0056]因此,用户态进程收到IO写请求后,需要首先判断当前IO写请求是否已被分配存储块,即,判断当前IO请求对应的写操作是否落入已被分配空间的瘦磁盘文件范围之内,若否,需要考虑随IO分配空间,即,通过对需要访问的存储块进行预置零操作,将该存储块实际分配给虚拟机。
[0057]其中,所说的存储块是对虚拟磁盘进行置零操作的基本单位,该存储块的大小可以根据实际应用场景设定,例如,可以包括一个或多个扇区,一种实施方式中,所说的磁盘块的大小具体可以是4k。
[0058]120、若当前IO写请求没有被分配存储块,则判断当前的IO模型类型。
[0059]IO模型的类型一般包括两种,一种是顺序模型,另一种是随机模型。本发明一些实施方式中,顺序模型是指连续两个IO请求相邻,即,连续两个IO请求对应的存储块相邻;随机模型是指连续两个IO请求分离,即,连续两个IO请求对应的存储块是远离的,不相邻的。
[0060]在IO模型是随机模型时,由于不能预测下一个IO写请求需要访问的虚拟磁盘位置,即便在当前IO操作过程中对需要访问的存储块进行预置零,下一个IO写请求对应的写操作落入该存储块的几率也是非常小的,并不能提升下一个IO写请求的访问速度和处理性能,因此,可以无需进行预置零操作,按照常规方式更新元数据即可,以此提高当前IO操作的性能。相反,在IO模型是顺序模型时,如果在当前IO操作过程中,对需要访问的存储块进行预置零,则下一个IO写请求对应的写操作有很大的可能落入该存储块,从而,可以提升下一个IO请求的访问速度和处理性能。
[0061]于是,用户态进程判断当前IO写请求没有被分配存储块时,即,判断当前IO写请求需要访问的存储块位于瘦磁盘文件范围之外时,可以对IO模型进行预判,只有IO模型是顺序模型时,才有必要进行预置零操作。
[0062]本发明的一些实施例中,可以以用户态进程中的多个IO写请求为输入,根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型是顺序模型或随机模型。
[0063]具体的IO模型预判算法可以有多种,下面举例说明:
[0064]—种实施方式中,可以首先确定用户态进程中各个IO写请求需要访问的存储块;计算用户态进程中的第一类IO写请求的数量,其中,第一类IO请求需要访问的存储块与当前IO写请求需要访问的存储块相邻;判断第一类IO写请求的数量是否达到第一临界值,若达到,则判断当前的IO模型是顺序模型,若未达到,则判断当前的IO模型是随机模型。SP,以用户态进程的4个IO队列中的IO请求的总数量为原型输入,遍历计算与正在处理的当前IO写请求需要访问的存储块相邻的IO请求的数量。假设当前IO请求需要访问的虚拟磁盘位置为44k,请求长度为4k,则遍历所有IO请求,当发现有I个其它IO请求需要访问的存储块与44k或者48k相邻,则相邻IO请求的数量计数加I。IO请求访问存储块的相邻程度以相邻IO请求的数量来衡量,第一临界值可以简单的初始化为I或2或其它数值。如果相邻IO请求的数量超过第一临界值,则判断为当前IO模型是顺序模型。
[0065]另一种实施方式中,可以首先确定用户态进程中各个IO写请求需要访问的存储块;计算各个IO写请求需要访问的存储块与当前IO写请求需要访问的存储块的距离,设定至少二个差值范围,并为每个差值范围设定不同的权重;统计距离在每个差值范围内的IO写请求的数量;根据距离在每个差值范围内的IO写请求的数量以及每个差值范围设定不同的权重,计算距离在每个差值范围内的IO写请求的数量与对应的权重的乘积,并对得到的所有乘积求和,计算求和得到的数值与用户态进程中各个IO写请求的总数量的比值;判断该比值是否达到第二临界值,若达到,则判断当前的IO模型是顺序模型,若未达到,则判断当前的IO模型是随机模型。例如,以用户态进程的4个IO队列中的IO请求的总数量为原型输入,假设总共有32个IO请求,统计32个IO请求中需要访问的存储块与处理中的当前IO需要访问的存储块的距离小于IM的有X个,IM到IOM的有y个,IOM到100M的有z个。以该三者的数量乘以各自权重得到的数值与IO写请求的总数量的比值来衡量IO请求的相邻程度。计算公式可以是这样的:
[0066]Seq=0.8* (x/ (x+y+z)) +0.3* (y/ (x+y+z)) +0.1* (z/ (x+y+z))。
[0067]第二阈值可以初始化为0.5或其它数值。如果比值Seq高于第二临界值,则判断为顺序模型,否则,判断为随机模型。
[0068]130、若当前的IO模型的类型是顺序模型,则对当前IO写请求需要访问的存储块进行预置零操作,并将当前IO写请求的数据写入已被预置零的存储块;若当前的IO模型的类型是随机模型,则直接将当前IO写请求的数据写入当前IO写请求需要访问的存储块。
[0069]在IO模型是顺序模型时,用户态进程首先对需要访问的存储块进行预置零,然后才更新元数据,即,将当前IO写请求的数据写入已被预置零的该存储块。举例说明,假设某写IO写请求需要访问的存储块位于该虚拟磁盘的44k的位置,如果该存储块尚未被实际分配给虚拟机,则首先将44k位置的该存储块预先写成全0,使得该存储块被虚拟机实际占有,然后再在该存储块中写该IO写请求需要写的数据内容。由于IO模型是顺序模型,则下一个IO请求对应的操作有很大的可能仍落入该存储块,则,处理下一个IO时不需要进行预置零操作,于是,可以提升下一个IO请求的访问速度和处理性能。
[0070]在IO模型是随机模型时,下一个IO请求需要访问的虚拟磁盘位置,落入当前IO需要访问的存储块的几率非常小,因此,只需要更新元数据,即,只需要将当前IO写请求的数据写入需要访问的存储块即可,无需对当前IO需要访问的存储块进行预置零操作,从而,可以提高当前IO操作的性能。
[0071]由上可见,在本发明的一些可行的实施方式中,判断当前IO写请求尚未被分配存储块时,对IO模型的类型进行预判,若当前的IO模型是顺序模型,则对需要访问的存储块预置零后写入数据,若当前的IO模型是随机模型,则直接将数据写入需要访问的存储块,使得:若当前的IO模型是随机模型,则通过取消预置零操作,提高当前IO操作的性能;若当前的IO模型是顺序模型,则通过预置零,使后续的IO请求对应的操作有较大几率落在已经置零的区域,相当于在厚磁盘进行IO操作,因而,可以提高后续IO操作的性能;从而,既利用了瘦磁盘能够降低存储空间及成本的优点,又提高了瘦磁盘的IO性能。
[0072]请参考图5,本发明另一个实施例提供的虚拟磁盘管理方法可包括:[0073]210、根据IO请求下发的频繁程度,判断主机的后台是否空闲;
[0074]220、若后台空闲,则在后台对虚拟磁盘进行预置零操作。
[0075]本实施例通过在后台预置零,可以不断增大瘦磁盘文件,当后续IO操作落入已被预先置零的瘦磁盘文件范围内时,可以不必随IO分配空间,从而提高IO操作性能。
[0076]本发明的一些实施例中,可以以用户态进程中的多个IO请求为输入,根据IO请求下发的频繁程度,判断主机的后台是否空闲。具体的IO空闲度预判算法可以有多种,下面举例说明:
[0077]一种实施方式中,可以计算用户态进程中的IO请求的总数量是否低于第三临界值,若低于,则判断主机的后台空闲;若不低于,则判断主机的后台繁忙。该种方式的含义是,通过统计一定时间内下发的IO请求的数量是否低于第三临界值,来确定IO请求下发的频繁程度,从而判断后台是否空闲。第三临界值可初始化为3或其它数值。
[0078]另一种实施方式中,可以计算用户态进程的每一种IO队列中的IO请求的数量,并为每一种IO队列设定不同的权重,计算每一种IO队列中的IO请求的数量与对应的权重的乘积,并对得到的所有乘积求和;判断所述求和得到的数值是否低于第四临界值,若低于,则判断主机的后台空闲;若不低于,则判断主机的后台繁忙。举例说明,可以以4个IO队列中的IO请求的总数量为原型输入,假设新取上来的IO队列中的IO数量加上正在下发的IO队列中的IO数量的和为X,失败重发IO队列中的IO数量为y,完成请求IO队列中的IO数量为z。以该三者的数量乘以各自权重系数得到的数值来衡量IO空闲度。公式可以是这样的:Idle=l*x+0.5*y+0.l*z。第四临界值可初始化为2或其它数值。
[0079]本发明的一些实施例中,所说的在后台对虚拟磁盘进行预置零操作包括:获取虚拟磁盘的置零阈值;在后台对虚拟磁盘的预置零范围进行置零,该预置零范围是指置零阈值内尚未被实际分配给虚拟机的存储空间。如图6所示,预置零范围是从当前瘦磁盘的真实数据尾开始,直到置零阈值上限值的一段存储空间。
[0080]本实施例中,通过设置置零阈值,来限定进行预置零的范围,S卩,限定瘦磁盘的大小,避免占用过多的磁盘空间,从而降低存储成本,以便在提升瘦磁盘IO性能和降低存储成本之间取得平衡。其中,置零阈值可以根据用户的使用情况进行初始化,例如,可以将其上限值初始化为250M。空闲后台进行预置零操作时,需要首先判断当前预置零范围是否超过置零阈值;若未超过,才在后台对当前预置零范围进行预置零操作。
[0081]该置零阈值可以是从磁盘文件某个固定位置开始的一段例如250M的磁盘空间,也可以是从瘦磁盘文件的真实数据尾开始的一段例如250M的磁盘空间。另外,置零阈值的大小可以是固定的,例如固定为250M ;也可以随实际应用动态调整其大小。
[0082]本发明的一些实施例中,可以根据IO请求下发的频繁程度,实时调整置零阈值的大小,以满足用户使用需求。例如,可以计算设定周期内下发的IO请求的数量,在该数量低于下限值时,认为IO请求下发的频繁程度较低,后台较为空闲,则增大置零阈值,使得下个时间周期内的IO请求更大可能落在已经置零的区域。在该数量高于上限值时,认为IO请求下发的频繁程度较高,后台较为繁忙时,则减少置零阈值。
[0083]本发明的另一些实施例中,可以计算设定周期内的IO流量,根据IO流量的大小实时调整置零阈值的大小。IO流量是指设定周期内需要写入虚拟磁盘的数据的多少。若IO流量大于上限值,则增大置零阈值;若0流量小于下限值,则减少置零阈值。例如当此前30s内处理的IO流量大于上限值如600M,则认为IO流量较大,可以增大置零阈值;如果IO请求流量小于下限值如100M,则认为IO流量较小,可以降低置零阈值。
[0084]以上一些实施例中,通过自动化调整置零阈值,可以使IO空闲度预判更智能化,更有效的发挥功能。
[0085]关于本发明实施例一些具体应用的流程图,请参考图7a和图7b所不。
[0086]由上可见,在本发明的一些可行的实施方式中,判断主机的后台空闲时,在后台对虚拟磁盘进行预置零,使得:虚拟磁盘除了包括虚拟机实际占用、存储了虚拟机数据的存储空间外,还包括了已被预置零的存储空间,且,已被预置零的存储空间不断增长,当进行IO操作,这些IO操作落入这些已被预置零的存储空间时,则不必随IO分配空间,提升了 IO操作的性能。
[0087]以上,图3实施例和图5实施例分别提供了两种不同的虚拟机磁盘的管理方法,这两种方法可以分别实施,也可以结合实施。
[0088]为便于更好的理解本发明实施例的技术方案,下面通过一个具体场景下的实施方式为例进行介绍。
[0089]例如这样的实施场景,某台虚拟机的用户卷D盘,使用瘦磁盘的方式模拟虚拟磁盘。
[0090]当虚拟机刚安装好操作系统并开始运行时,用户卷D盘中的数据为空,则瘦磁盘的实际占用空间只是瘦磁盘的元数据,大约为24k大小。
[0091]此时,由于刚开始运行用户的IO请求较少,此时后台空闲置O会启动,预置O的阈值初始化为250M,则瘦磁盘的大小会逐渐增加到250M。
[0092]假设当瘦磁盘增长了 250M后,用户开始执行拷贝某个IG大小的视频文件到D盘的动作,此时IO流量突然上升,在刚开始的阶段,IO会落在250M已经预置了 O的区域中,这种情况下IO不需要再分配空间,性能与厚磁盘基本持平。但剩下的750M内容的IO会落在还没有来得及分配空间的区域,此时,性能会较低,这种情况下,可启用IO模型预判,由于是拷贝动作,IO模型通常为顺序模型,会随用户IO进行置O操作。则后续IO的性能得到提升。
[0093]这里如果不是拷贝动作,而是类似VSI办公操作,则,当用户使用了 250M之后,通常会被IO模型预判认为为随机模型,不会随用户IO进行置O操作。这样当IO落在250M之外时,由于不需要置零操作,IO性能可以得到提升。
[0094]随着用户使用,如果用户是视频爱好者,经常性的下载大文件,IO流量较大,这种情况下250M的阈值明显太小,由于有自动化调整后台置零阈值技术,因此会将250M的阈值增加到500M甚至更大来适应用户的需求。如果用户只是一个文档编辑者,可能不会经常产生大文件,这种情况下250M的阈值可以减少到128M,以此来节省瘦磁盘空间。
[0095]以上,本发明实施例技术方案通过IO预判,解决了瘦磁盘在首次写情况下的性能下降问题,IOPS (Input/Output Operations Per Second,每秒进行读写操作的次数)可以提升20%以上。本实施例技术方案在xen平台上的vhd (Virual Hard Disk,虚拟磁盘格式)瘦磁盘上实现后,在虚拟机内部进行iometer测试,分别对vhd上瘦磁盘的两种格式:精简卷和差分卷进行测试,测试用例覆盖顺序模型和随机模型,测试得到的iops如下表I所示。其中,iometer是一个工作在单系统和集群系统上用来衡量和描述1/0子系统的工具。[0096]表1
[0097]
【权利要求】
1.一种虚拟磁盘的管理方法,其特征在于,包括: 判断当前输入输出IO写请求是否已被分配存储块; 若所述当前IO写请求没有被分配存储块,则判断当前的IO模型的类型; 若所述当前的IO模型的类型是顺序模型,则对所述当前IO写请求需要访问的存储块进行预置零操作,并将所述当前IO写请求的数据写入已被预置零的所述存储块; 若所述当前的IO模型的类型是随机模型,则直接将所述当前IO写请求的数据写入所述当前IO写请求需要访问的存储块。
2.根据权利要求1所述的方法,其特征在于,所述判断当前的IO模型的类型包括: 根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型。
3.根据权利要求2所述的方法,其特征在于,所述根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型包括: 计算所述用户态进程中的第一类IO写请求的数量,所述第一类IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块相邻; 判断所述第一类IO写请求的数量是否达到第一临界值,若所述第一类IO写请求的数量达到第一临界值,则判断 所述当前的IO模型的类型是顺序模型,若所述第一类IO写请求的数量没有达到第一临界值,则判断所述当前的IO模型的类型是随机模型。
4.根据权利要求2所述的方法,其特征在于,所述根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型包括: 计算所述用户态进程中各个IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块的距离; 设定至少二个差值范围,并为每个差值范围设定不同的权重; 统计距离在每个差值范围内的IO写请求的数量; 根据距离在每个差值范围内的IO写请求的数量以及所述每个差值范围设定不同的权重,计算距离在每个差值范围内的IO写请求的数量与对应的权重的乘积,并对得到的所有乘积求和,计算所述求和得到的数值与所述用户态进程中各个IO写请求的总数量的比值;判断所述比值是否达到第二临界值,若所述比值达到第二临界值,则判断所述当前的IO模型的类型是顺序模型,若所述比值没有达到第二临界值,则判断所述当前的IO模型的类型是随机模型。
5.一种虚拟磁盘的管理方法,其特征在于,包括: 根据输入输出IO请求下发的频繁程度,判断主机的后台是否空闲; 若后台空闲,则在后台对虚拟磁盘进行预置零操作。
6.根据权利要求5所述的方法,其特征在于,所述根据IO请求下发的频繁程度,判断主机的后台是否空闲包括: 计算用户态进程中的IO请求的数量是否低于第三临界值; 若所述用户态进程中的IO请求的数量低于第三临界值,则判断主机的后台空闲。
7.根据权利要求5所述的方法,其特征在于,所述根据IO请求下发的频繁程度,判断主机的后台是否空闲包括: 计算用户态进程的每一种IO队列中的IO请求的数量,并为每一种IO队列设定不同的权重; 计算每一种IO队列中的IO请求的数量与对应的权重的乘积,并对得到的所有乘积求和; 判断所述求和得到的数值是否低于第四临界值,若所述求和得到的数值低于第四临界值,则判断主机的后台空闲。
8.根据权利要求5至7任一所述的方法,其特征在于,所述在后台对虚拟磁盘进行预置零操作包括: 获取虚拟磁盘的置零阈值; 在后台对虚拟磁盘的预置零范围进行预置零操作,所述预置零范围是指所述置零阈值内尚未被实际分配给虚拟机的存储空间。
9.根据权利要求8所述的方法,其特征在于,所述获取虚拟磁盘的置零阈值之前还包括: 计算设定周期内下发的IO请求的数量,在所述数量低于下限值时,增大所述置零阈值,在所述数量高于上限值时,减少所述置零阈值。
10.根据权利要求8所述的方法,其特征在于,所述获取虚拟磁盘的置零阈值之前还包括: 计算设定周期内的IO流量,所述IO流量是指所述设定周期内需要写入所述虚拟磁盘的数据的多少;` 若所述IO流量大于上限值,则增大所述置零阈值; 若所述IO流量小于下限值,则减少所述置零阈值。
11.一种虚拟磁盘的管理装置,其特征在于,包括: 分配判断模块,用于判断当前输入输出IO写请求是否已被分配存储块; IO模型判断模块,用于在所述分配判断模块判断当前IO写请求没有被分配存储块时,判断当前的IO模型的类型; 读写模块,用于在所述IO模型判断模块判断所述当前的IO模型的类型是顺序模型时,对所述当前IO写请求需要访问的存储块进行预置零操作,并将所述当前IO写请求的数据写入已被预置零的所述存储块;在所述IO模型判断模块判断所述当前的IO模型的类型是随机模型时,直接将所述当前IO写请求的数据写入所述当前IO写请求需要访问的存储块。
12.根据权利要求11所述的装置,其特征在于: 所述IO模型判断模块,具体用于根据用户态进程中各个IO写请求需要访问的存储块的相邻程度,判断当前的IO模型的类型。
13.根据权利要求12所述的装置,其特征在于,所述IO模型判断模块包括: 第一计算单元,用于计算所述用户态进程中的第一类IO写请求的数量,所述第一类IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块相邻; 判断单元,用于判断所述第一计算单元计算得到的所述第一类IO写请求的数量是否达到第一临界值,若所述第一类IO写请求的数量达到第一临界值,则判断所述当前的IO模型的类型是顺序模型,若所述第一类IO写请求的数量没有达到第一临界值,则判断所述当前的IO模型的类型是随机模型。
14.根据权利要求12所述的装置,其特征在于,所述IO模型判断模块包括:第二计算单元,用于计算所述用户态进程中各个IO写请求需要访问的存储块与所述当前IO写请求需要访问的存储块的距离,设定至少二个差值范围,并为每个差值范围设定不同的权重;统计距离在每个差值范围内的IO写请求的数量,根据所述距离在每个差值范围内的IO写请求的数量以及所述每个差值范围设定不同的权重,计算距离在每个差值范围内的IO写请求的数量与对应的权重的乘积,并对得到的所有乘积求和,计算所述求和得到的数值与所述用户态进程中各个IO写请求的总数量的比值; 判断单元,用于判断所述第二计算单元计算得到的所述比值是否达到第二临界值,若所述比值达到第二临界值,则判断所述当前的IO模型的类型是顺序模型,若所述比值没有达到第二临界值,则判断所述当前的IO模型的类型是随机模型。
15.一种虚拟磁盘的管理装置,其特征在于,包括: 判断模块,用于根据输入输出IO请求下发的频繁程度,判断主机的后台是否空闲; 预置零模块,用于在所述判断模块判断所述主机的后台空闲时,在后台对虚拟磁盘进行预置零操作。
16.根据权利要求15所述的装置,其特征在于,所述判断模块包括: 第一判断单元,用于计算用户态进程中的IO请求的数量是否低于第三临界值,若所述用户态进程中的IO请求的数量低于第三临界值,则判断主机的后台空闲。
17.根据权利要求15所述的装置,其特征在于,所述判断模块包括: 第二判断单元,用于计算用户态进程的每一种IO队列中的IO请求的数量,并为每一种IO队列设定不同的权重,计算`每一种IO队列中的IO请求的数量与对应的权重的乘积,并对得到的所有乘积求和;判断所述求和得到的数值是否低于第四临界值,若所述求和得到的数值低于第四临界值,则判断主机的后台空闲。
18.根据权利要求15至17中任一项所述的装置,其特征在于: 所述预置零模块,具体用于获取虚拟磁盘的置零阈值;在后台对虚拟磁盘的预置零范围进行预置零操作,所述预置零范围是指所述置零阈值内尚未被实际分配给虚拟机的存储空间。
19.根据权利要求18所述的装置,其特征在于,还包括: 第一调整模块,用于计算设定周期内下发的IO请求的数量,在所述数量低于下限值时,增大所述置零阈值,在所述数量高于上限值时,减少所述置零阈值。 所述预置零模块,具体用于获取所述第一调整模块调整过的置零阈值。
20.根据权利要求18所述的装置,其特征在于,还包括: 第二调整模块,用于计算设定周期内的IO流量,所述IO流量是指所述设定周期内需要写入所述虚拟磁盘的数据的多少;若所述IO流量大于上限值,则增大所述置零阈值;若所述IO流量小于下限值,则减少所述置零阈值; 所述预置零模块,具体用于获取所述第二调整模块调整过的置零阈值。
【文档编号】G06F9/455GK103631537SQ201310629173
【公开日】2014年3月12日 申请日期:2013年11月29日 优先权日:2013年11月29日
【发明者】陆丽娜, 吴斌 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1