一种空闲block查询的方法及系统与流程

文档序号:13614454阅读:280来源:国知局
一种空闲block查询的方法及系统与流程

本申请涉及存储系统领域,特别涉及一种空闲block查询的方法、系统及计算机可读存储介质。



背景技术:

现有技术中通过使用bitmap的方法来查询存储系统中的存储容量是否分配,然而随着存储容量的增长,特别是pb、eb、zb等存储容量级别的存储系统出现,仅使用bitmap来查询容量已经相当困难。

以1tb硬盘、4kb的block(容量存储单位)为例,总共由268435456(总容量/block容量=1024*1024*1024kb/4kb)个block组成。按照uint64,即一次查询64个block为例,遍历一次需要查询4194304(总数/一次查询个数=268435456/64)次,对于存储系统来说太过繁琐。同时,1tb容量的bitmap需要32mb(总数/8/1024/1024=268435456/8/1024/1024)的内存空间,而1pb(1pb=1024tb)存储系统中,存储bitmap需要的内存为1024*32mb=32gb,存储系统难以一次将bitmap载入,更不用提eb、zb等存储容量级别的存储系统了。

因此,如何快速查询大存储容量的存储系统中的空闲block是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本申请的目的是提供一种空闲block查询的方法、系统及计算机可读存储介质,该方法能够快速查询大存储容量的存储系统中的空闲block。

为解决上述技术问题,本申请提供一种空闲block查询的方法,该方法包括:

判断block信息队列的状态是否为空闲状态;

若是,则将所述block信息队列载入内存;

依次判断载入内存的所述block信息队列中的block信息是否为空闲block信息;其中,所述空闲block信息为对应的block处于空闲状态时的表现信息;

若为空闲block信息,则确定所述空闲block信息对应的block为空闲block。

可选的,当所述block信息队列中包括空闲数量时,还包括:

判断接收到的指令为空闲block分配指令或繁忙block收回指令;

若所述指令为所述空闲block分配指令,则分配所述空闲block,并将所述空闲block对应的block信息修改为繁忙block信息;其中,所述繁忙block信息为对应的block处于繁忙状态时的表现信息;

若所述指令为所述繁忙block收回指令,则收回所述繁忙block,并将所述繁忙block对应的block信息修改为所述空闲block信息;

将所述空闲数量更新为现有的所述空闲信息的数量。

可选的,在将所述block信息队列载入内存之后,还包括:

判断所述block信息队列中的空闲数量是否小于阈值;

若是,则将新block信息队列载入所述内存,并判断所述空闲数量是否为零;

若所述空闲数量为零,则将所述block信息队列从所述内存中移除。

本申请还提供一种空闲block查询的系统,该系统包括:

第一判断模块,用于判断block信息队列的状态是否为空闲状态;

载入模块,用于当所述block信息队列的状态为空闲状态时,将所述block信息队列载入内存;

第二判断模块,用于依次判断载入内存的所述block信息队列中的block信息是否为空闲block信息;其中,所述空闲block信息为对应的block处于空闲状态时的表现信息;

确定模块,用于当载入内存的所述block信息队列中的block信息为所述空闲block信息时,确定所述空闲block信息对应的block为空闲block。

可选的,该系统还包括:

第三判断模块,用于判断接收到的指令为空闲block分配指令或繁忙block收回指令;

第一分配修改模块,用于当所述指令为所述空闲block分配指令时,分配所述空闲block,并将所述空闲block对应的block信息修改为繁忙block信息;其中,所述繁忙block信息为对应的block处于繁忙状态时的表现信息;

第二分配修改模块,用于当所述指令为所述繁忙block收回指令时,收回所述繁忙block,并将所述繁忙block对应的block信息修改为所述空闲block信息;

更新模块,用于当所述block信息队列中包括空闲数量时,将所述空闲数量更新为现有的所述空闲信息的数量。

可选的,所述载入模块还包括:

判断子模块,用于判断所述block信息队列中的空闲数量是否小于阈值;

载入判断子模块,用于当所述block信息队列中的空闲数量小于阈值时,将新block信息队列载入所述内存,并判断所述空闲数量是否为零;

移除子模块,用于若所述空闲数量为零,则将所述block信息队列从所述内存中移除。

本申请还提供一种空闲block查询的计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述空闲block查询的方法的步骤。

本申请所提供的一种空闲block查询的方法,通过判断block信息队列的状态是否为空闲状态;若是,则将该block信息队列载入内存;依次判断载入内存的block信息队列中的block信息是否为空闲block信息;其中,该空闲block信息为对应的block处于空闲状态时的表现信息;若是,则确定该空闲block信息对应的block为空闲block。

本申请所提供的技术方案,先判断判断block信息队列的状态是否为空闲状态,若是,才将该block信息队列载入内存,再依次判断载入内存的block信息队列中的block信息是否为空闲block信息,若为空闲block信息则确定该空闲block信息对应的block为空闲block,达到了快速查询大存储容量的存储系统中空闲block的目的,同时,通过将block信息队列载入内存,解决了存储系统难以一次将大数据量bitmap载入内存的问题。本申请同时还提供了一种空闲block查询的系统及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种空闲block查询的方法的流程图;

图2为本申请实施例所提供的一种实现block信息队列的数据结构的设计方式;

图3为本申请实施例所提供的一种实现block信息队列的数据结构;

图4本申请实施例所提供的另一种空闲block查询的方法的流程图;

图5为本申请实施例所提供的一种空闲block查询的系统的结构图;

图6为本申请实施例所提供的另一种空闲block查询的系统的结构图。

具体实施方式

本申请的核心是提供一种空闲block查询的方法、系统及计算机可读存储介质,该方法能够快速查询大存储容量的存储系统中的空闲block。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种空闲block查询的方法的流程图。

其具体包括如下步骤:

s101:判断block信息队列的状态是否为空闲状态;

若是,则进入步骤s102;

通常存储容量以bitmap来标记是否已经分配,每一个bit,置0为空闲,置1为已分配,比如一个byte字节为8bit组成,可以表示8个block是分配;

而本申请实施例中存储系统的bitmap采用双层设计,以block为4kb为例进行说明,最底层为4kb的block对应一层bitmap,连续多层bitmap组成一层alloc_bitmap,当alloc_bitmap中有所有的bitmap对应的block被分配时,该alloc_bitmap中对应的bit值为1,即状态为繁忙状态,否则bit值为0,即状态为空闲状态,也就是说,若alloc_bitmap中存在未被分配的block对应的bitmap时,那么该alloc_bitmap的状态即为空闲状态;

这里提到的alloc_bitmap即为block信息队列,bitmap即为block信息,alloc_bitmap中对应的bit值即为block信息队列的状态;

可选的,该block信息队列还可以通过另一种方式来实现:

请参考图2及图3,图2为本申请实施例所提供的一种实现block信息队列的数据结构的设计方式;图3为本申请实施例所提供的一种实现block信息队列的数据结构;

block信息队列可以通过如下步骤实现:

申请l_block,将该l_block添加到链表中;

申请block信息,并且将该block信息加入对应的l_block中;

同样,以block为4kb为例进行说明,最底层为4kb的block对应一层bitmap,连续多个block组成一个l_block,对应一层alloc_bitmap,当l_block中有所有的block被分配时,该l_block对应的alloc_bitmap中对应的bit值为1,即状态为繁忙状态,否则bit值为0,即状态为空闲状态,也就是说,若l_block中存在未被分配的block,那么该l_block的状态即为空闲状态;

这里提到的l_block为block队列,l_block对应的alloc_bitmap为block信息队列,alloc_bitmap中对应的bit值即为block信息队列的状态。

s102:将该block信息队列载入内存;

当block信息队列的状态为空闲状态时,将该block信息队列载入内存。

s103:依次判断载入内存的block信息队列中的block信息是否为空闲block信息;

若是,则进入步骤s104;

可选的,当检测到某一block信息为空闲block信息时,可以停止该判断动作,然后进入步骤s104;

这里提到的空闲block信息即为对应的block处于空闲状态时的表现信息。

s104:确定该空闲block信息对应的block为空闲block。

本申请所提供的技术方案在容量较大的存储系统中可大大缩短系统查询空闲block过程,这里同样以1tb硬盘、block为4kb为例进行说明,按照64bit进行检测,现有技术中查询空闲block最多需要查询4194304(总数/一次查询个数=268435456/64)次,而根据本申请实施例所提供的技术方案,按照64bit进行检测,查询空闲block最多需要查询512次(1tb硬盘共有16384个block信息队列,最多需要查询256次来查询到空闲block信息队列,当查询到空闲block信息队列时,再查询其中的16384个block信息是否为空闲block信息,最多需要256次来查询到空闲block信息,256+256=512次)。

同时,现有技术中1tb容量的bitmap需要32mb的内存空间,而1pb(1pb=1024tb)存储系统中,存储bitmap需要的内存为32gb,而本申请所提供的技术方案仅需在系统初始化和运行过程中将一个空闲block信息队列及其对应的block信息加载到内存,假设每1tb载入2个block信息队列进入内存,每个block信息队列包含16384个block信息,每8个的block信息占用为1bit,block信息总共需要256kb,整体不超过300kb。对于1pb系统整体内存消耗小于300mb,相比现有技术中的32gb的bitmap,节省了大量的内存空间。

基于上述技术方案,本申请所提供的一种空闲block查询的方法,先判断判断block信息队列的状态是否为空闲状态,若是,才将该block信息队列载入内存,再依次判断载入内存的block信息队列中的block信息是否为空闲block信息,若为空闲block信息则确定该空闲block信息对应的block为空闲block,达到了快速查询大存储容量的存储系统中空闲block的目的,同时,通过将block信息队列载入内存,解决了存储系统难以一次将大数据量bitmap载入内存的问题。

请参考图4,图4为本申请实施例所提供的另一种空闲block查询的方法的流程图。

其具体包括如下步骤:

s201:判断接收到的指令为空闲block分配指令或繁忙block收回指令;

当接收到指令时,判断该指令为空闲block分配指令或繁忙block收回指令;

若该指令为空闲block分配指令,则进入步骤s202,若该指令为繁忙block收回指令,则进入步骤s203。

s202:分配空闲block,并将空闲block对应的block信息修改为繁忙block信息;

当该指令为空闲block分配指令时,分配依据上一实施例确定的空闲block,并将该空闲block在block信息队列中对应的block信息修改为繁忙block信息;

这里提到的繁忙block信息即为对应的block处于繁忙状态时的表现信息。

s203:收回繁忙block,并将繁忙block对应的block信息修改为空闲block信息;

当该指令为繁忙block收回指令时,收回该指令对应的繁忙block,并将该繁忙block在block信息队列中对应的block信息修改为空闲block信息。

s204:将block信息队列中的空闲数量更新为现有的空闲信息的数量;

当block信息队列中包括空闲数量时,将block信息队列中的空闲数量更新为现有的空闲信息的数量;

这里提到的空闲数量即为block信息队列中的空闲block信息的数量。

s205:判断block信息队列中的空闲数量是否小于阈值;

当block信息队列中包括空闲数量时,判断block信息队列中的空闲数量是否小于阈值;

若是,则进入步骤s206。

s206:将新block信息队列载入内存;

这里提到的新block信息队列为未载入内存的空闲状态的block信息队列;

可选的,还可根据block的排序方式对block信息队列进行排序,当前一个block信息队列中的空闲数量小于阈值时,可将后一个block信息队列载入到内存中。

s207:判断该block信息队列中的空闲数量是否为零;

若是,则进入步骤s208。

s208:将该block信息队列从内存中移除。

当该block信息队列中的空闲数量为零时,说明该block信息队列处于繁忙状态,也就是说该block信息队列中的block信息全为繁忙block信息,该block信息队列中block信息对应的block全处于繁忙状态,这时,将该block信息队列从内存中移除,同时开始读取下一个载入到内存中block信息队列。

需要说明的是,上述步骤s205至s208与步骤s201至s204之间并没有必然的顺序联系,步骤s205至s208也可以排在步骤s201至s204之前,本申请对步骤s205至s208与步骤s201至s204之间的顺序并不做具体限定。

请参考图5,图5为本申请实施例所提供的一种空闲block查询的系统的结构图。

该系统可以包括:

第一判断模块100,用于判断block信息队列的状态是否为空闲状态;

载入模块200,用于当block信息队列的状态为空闲状态时,将block信息队列载入内存;

第二判断模块300,用于依次判断载入内存的block信息队列中的block信息是否为空闲block信息;其中,空闲block信息为对应的block处于空闲状态时的表现信息;

确定模块400,用于当载入内存的block信息队列中的block信息为空闲block信息时,确定空闲block信息对应的block为空闲block。

请参考图6,图6为本申请实施例所提供的另一种空闲block查询的系统的结构图。

该系统还可以包括:

第三判断模块,用于判断接收到的指令为空闲block分配指令或繁忙block收回指令;

第一分配修改模块,用于当指令为空闲block分配指令时,分配空闲block,并将空闲block对应的block信息修改为繁忙block信息;其中,繁忙block信息为对应的block处于繁忙状态时的表现信息;

第二分配修改模块,用于当指令为繁忙block收回指令时,收回繁忙block,并将繁忙block对应的block信息修改为空闲block信息;

更新模块,用于当block信息队列中包括空闲数量时,将空闲数量更新为现有的空闲信息的数量。

该载入模块还可以包括:

判断子模块,用于判断block信息队列中的空闲数量是否小于阈值;

载入判断子模块,用于当block信息队列中的空闲数量小于阈值时,将新block信息队列载入内存,并判断空闲数量是否为零;

移除子模块,用于若空闲数量为零,则将block信息队列从内存中移除。

以上系统中的各个组成部分可应用于以下实际流程中:

第一判断模块判断block信息队列的状态是否为空闲状态,当block信息队列的状态为空闲状态时,载入模块将block信息队列载入内存;第二判断模块依次判断载入内存的block信息队列中的block信息是否为空闲block信息,若是,则确定模块确定空闲block信息对应的block为空闲block;

第三判断模块判断接收到的指令为空闲block分配指令或繁忙block收回指令;当指令为空闲block分配指令时,第一分配修改模块分配空闲block,并将空闲block对应的block信息修改为繁忙block信息;当指令为繁忙block收回指令时,第二分配修改模块收回繁忙block,并将繁忙block对应的block信息修改为空闲block信息;当block信息队列中包括空闲数量时,更新模块将空闲数量更新为现有的空闲信息的数量;

判断子模块判断block信息队列中的空闲数量是否小于阈值;若小于,则载入判断子模块将新block信息队列载入内存,并判断空闲数量是否为零;若空闲数量为零,则移除子模块将block信息队列从内存中移除;

其中,空闲block信息为对应的block处于空闲状态时的表现信息,繁忙block信息为对应的block处于繁忙状态时的表现信息。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用装置,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上对本申请所提供的一种空闲block查询的方法、系统及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1