CN117931066A - 一种磁盘空间的分配方法、装置、电子设备及存储介质 - Google Patents
一种磁盘空间的分配方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117931066A CN117931066A CN202311813413.7A CN202311813413A CN117931066A CN 117931066 A CN117931066 A CN 117931066A CN 202311813413 A CN202311813413 A CN 202311813413A CN 117931066 A CN117931066 A CN 117931066A
- Authority
- CN
- China
- Prior art keywords
- space
- search
- target
- search tree
- allocated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000015654 memory Effects 0.000 claims description 30
- 238000004891 communication Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 claims description 4
- 238000013467 fragmentation Methods 0.000 abstract description 12
- 238000006062 fragmentation reaction Methods 0.000 abstract description 12
- 230000009286 beneficial effect Effects 0.000 abstract 1
- 230000006870 function Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 239000012634 fragment Substances 0.000 description 5
- 230000007547 defect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开公开了一种磁盘空间的分配方法、装置、电子设备及存储介质,包括:获取空间分配请求,其中,空间分配请求包括待分配空间;查询分配器中与待分配空间相匹配的目标搜索树,其中,分配器中包括多个搜索树,每个搜索树对应一个独立的空间范围,每个搜索树包括多个节点,节点用于表示搜索树对应空间范围内的可用连续空间,在分配器内搜索树按照空间范围由小到大进行排列;从目标搜索树包含的节点中查找满足待分配空间的目标节点;基于目标节点执行磁盘空间分配操作。本公开提高了磁盘空间的分配效率,也有利于减少空间碎片化。相比在碎片化的空间中进行线性搜索,减少了时间消耗,同时也降低了碎片化空间导致的分配失败的可能性。
Description
技术领域
本公开涉及计算机技术领域,具体涉及一种磁盘空间的分配方法、装置、电子设备及存储介质。
背景技术
磁盘块分配器负责管理磁盘物理空间地址与用户数据的映射关系。通常在分配器第一次创建时,分配器将整块连续的磁盘空间作为可分配空间。当用户向对象/文件写入数据时,分配器从可分配空间中分配一段满足需求的空间大小,并返回已分配空间在磁盘上的物理地址范围给调用者,用户数据被写入这一段分配的磁盘空间。已分配的空间地址保存在相应的对象/文件的元数据中。分配器将已分配的空间地址从可分配空间中删除,并维护剩余可分配空间。
然而分配器在长时间运行后,所管理的可分配空间会变得越来越碎片化。碎片化的空间会导致分配器在满足各种大小的写入请求时变得更加困难,因为它需要花费更多时间来查找合适的空闲块。这种情况会直接导致分配器的性能下降。在某些情况下,当磁盘可用空间足够时,碎片化的空间可能导致分配失败,即无法找到足够的连续空间来满足写入请求,进而导致写入失败并引发程序崩溃,从而造成磁盘故障。
发明内容
有鉴于此,本公开实施例提供了一种磁盘空间的分配方法、装置、电子设备及存储介质,以解决碎片化的空间会导致分配器在满足各种大小的写入请求时变得更加困难,且碎片化的空间可能导致分配失败的问题。
第一方面,本公开实施例提供了一种磁盘空间的分配方法,所述方法包括:
获取空间分配请求,其中,所述空间分配请求包括待分配空间;
查询分配器中与所述待分配空间相匹配的目标搜索树,其中,所述分配器中包括多个搜索树,每个所述搜索树对应一个独立的空间范围,每个搜索树包括多个节点,所述节点用于表示所述搜索树对应空间范围内的可用连续空间,在所述分配器内所述搜索树按照空间范围由小到大进行排列;
从所述目标搜索树包含的节点中查找满足所述待分配空间的目标节点;
基于所述目标节点执行磁盘空间分配操作。
第二方面,本公开实施例提供了一种磁盘空间的分配装置,所述装置包括:
获取模块,用于获取空间分配请求,其中,所述空间分配请求包括待分配空间;
查询模块,用于查询分配器中与所述待分配空间相匹配的目标搜索树,其中,所述分配器中包括多个搜索树,每个所述搜索树对应一个独立的空间范围,每个搜索树包括多个节点,所述节点用于表示所述搜索树对应空间范围内的可用连续空间,在所述分配器内所述搜索树按照空间范围由小到大进行排列;
处理模块,用于从所述目标搜索树包含的节点中查找满足所述待分配空间的目标节点。
执行模块,用于基于所述目标节点执行磁盘空间分配操作。
第三方面,本公开实施例提供了一种电子设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的方法。
第四方面,本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的方法。
本公开实施例提供的方法将分配空间划分为多个独立的空间范围,实现了空间的分片化,每一个空间范围对应一个搜索树,来负责该空间范围内不同空间大小的分配。以此在处理不同的分配请求时,分配器可以快速定位到与分配请求相匹配的搜索树,并从搜索树中找到合适大小的连续空间块进行分配,以此提高了磁盘空间的分配效率,也有利于减少空间碎片化。相比在碎片化的空间中进行线性搜索,减少了时间消耗,同时也降低了碎片化空间导致的分配失败的可能性。
附图说明
为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本公开一些实施例的磁盘空间的分配方法的流程示意图;
图2是根据本公开一些实施例的分配器中搜索树的排列示意图;
图3是根据本公开一些实施例的搜索树中节点对应的数据结构示意图;
图4是根据本公开一些实施例的磁盘空间的分配方法的流程示意图;
图5是根据本公开一些实施例的在分配器中节点查找过程的示意图;
图6是根据本公开一些实施例的在分配器中节点查找过程的示意图;
图7是根据本公开一些实施例的在分配器中节点查找过程的示意图;
图8是根据本公开实施例的磁盘空间的分配装置的结构框图;
图9是本公开实施例的电子设备的硬件结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
分配器作为存储引擎的一部分,与存储引擎的性能密切相关,分配器的性能是限制存储引擎高性能的因素之一。目前常用分配器设计有:bitmap分配器,avl-tree分配器。
bitmap分配器的缺陷:
①代码实现简单,易维护,其缺点是bitmap查找空闲块的方式是线性查找,在空间使用率高的时候,线性查找需要更多的时间开销,表现为分配性能缓慢。
②当有大量的小对象/小文件,或者随机小块写入时,bitmap表示的可用空间会变的零碎,当尝试在零碎的bitmap上分配空间时,会需要更多的时间。
③当尝试为对象/文件分配大块的空间时,由于线性查找的原因,bitmap总是在按照顺序寻找一个个可分配单元,最终拼凑成用户需要的大块空间,这会造成对对象/文件的顺序读写实际是在磁盘上的多次读写。
avl-tree分配器的缺陷:
①avl-tree解决了bitmap线性查找空闲块的问题,优化了查找性能。但是依然无法解决高碎片化问题,当大量的小对象/小文件,或者随机小块写入时,avl-tree表示的可用空间节点变得非常之多随之树的高度也会增加,从而降低分配性能。
②插入和删除操作可能需要频繁的旋转来维持树的平衡,因此在数据频繁变动的情况下,avl-tree的效率可能会降低。
③avl-tree分配器在运行过程中,不断的增加节点,随之内存开销也不断增加,这会导致较高的内存开销。
基于此,为了提高分配器的分配性能以及降低磁盘空间的碎片率,本公开实施例分配器为(Multiple Shard Btree,缩写:MSB)多分片B树分配器,多分片B树分配器采用了多个搜索树btree来分片存储数据,每个搜索树负责一个特定的范围。这样可以在并发访问时减少争用,提高性能。分配内存时,根据待分配内存的大小选择合适的搜索树进行分配,并在其中找到合适的空闲块。释放空间时,将相应的空间加入到对应的搜索树中,以便后续的分配操作使用。
根据本公开实施例,提供了一种磁盘空间的分配方法、装置、电子设备及存储介质,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种磁盘空间的分配方法,图1是根据本公开实施例的一种磁盘空间的分配方法的流程图,如图1所示,该流程包括如下步骤:
步骤S11,获取空间分配请求,其中,空间分配请求包括待分配空间。
本公开实施例提供的方法应用于分配器,分配器部署在存储引擎,需要说明的是,存储引擎负责管理数据在磁盘或其他存储介质上的存储、访问和操作。它提供了数据的持久性、一致性、并发性和性能等方面的支持。存储引擎依赖于分配器进行磁盘空间的分配。存储引擎需要将数据持久地存储到磁盘上,并在需要时从磁盘上检索数据。为了完成这些操作,存储引擎需要获得合适大小和连续性的磁盘空间。分配器作为系统中的一个组件,负责管理和分配磁盘空间。它维护一个数据结构(如B树)来跟踪和管理空闲的磁盘空间。当存储引擎需要分配磁盘空间来存储数据时,它会向分配器发送一个空间分配请求,请求一个合适大小的连续空间。分配器根据请求的大小,在其管理的空闲空间中查找合适的空间,并将其分配给存储引擎。存储引擎将使用分配到的空间来存储数据。
具体的,请求方可以向分配器提交一个空间分配的请求,表明需要分配特定大小的连续空间。分配器获取到请求方提交的请求,并从中提取出待分配空间。空间范围可以由起始位置和长度组成,用于指定需要分配的连续空间的起始位置和大小。通过获取空间分配请求,并确定其中待分配空间,以此将这个范围作为后续步骤的依据,从分配器中找到相应的搜索树,并执行磁盘空间分配操作。
步骤S12,查询分配器中与待分配空间相匹配的目标搜索树,其中,分配器中包括多个搜索树,每个搜索树对应一个独立的空间范围,每个搜索树包括多个节点,节点用于表示搜索树对应空间范围内的可用连续空间,在分配器内搜索树按照空间范围由小到大进行排列。
本公开实施例中,如图2所示,分配器由多个搜索树btree组成,每个搜索树负责不同的空间范围,按空间范围由小到大的顺序排列,如图2中14个搜索树:≤4K,≤8K,≤16K,≤32K,≤64k,≤128k,≤256K,≤512K,≤1M,≤2M,≤4M,≤8M,≤16M,>16M。
每个搜索树包括多个节点,如图3所示,节点代表磁盘地址空间,即节点所在搜索树的空间范围内的一段可用连续空间,使用btree_node_t数据结构来表示一段连续的磁盘地址空间。btree_set是btree_node_t的集合,用于按照btree逻辑进行管理。当btree_node_t被插入到btree_set中时,它们会根据shorter_t作为比较函数进行排序。比较函数会根据btree_node_t所表示的块范围大小来进行排序,即根据磁盘地址空间的大小进行排序。块范围越大的插入到树的末尾,即排在树的最后。这样的排序方式可以确保btree_set中的btree_node_t按照磁盘地址空间大小从小到大排列。这样,在进行查找或分配磁盘空间时,可以更快速地定位到合适大小的磁盘地址空间。也可以通过比较函数对btree_set进行维护,以保持有序状态。
在查找过程中,会首先在最适合的搜索树上查找,如果查找失败,继续搜索合适的搜索树。在选择搜索树的过程中,尽量的利用现有碎片,以防止更多的碎片产生。需要说明的是,使用btree数据结构能够降低树的高度,btree是一种自平衡的多路搜索树,btree的高度通常比avl-tree低,从而减少了查找路径长度,达到减小分配器的allocate/release延迟。
在本公开实施例中,查询分配器中与待分配空间相匹配的目标搜索树,包括:对比待分配空间与各个搜索树对应的空间范围,确定与待分配空间相匹配的目标搜索树。
具体的,首先,从待分配空间请求中提取出待分配空间。对于每个搜索树,比较待分配空间与该搜索树对应的空间范围。确定与待分配空间相匹配的搜索树作为目标搜索树。在查询过程中,如果待分配空间的起始位置和长度与某个搜索树的空间范围完全匹配,则确定该搜索树为目标搜索树。
步骤S13,从目标搜索树包含的节点中查找满足待分配空间的目标节点。
在本公开实施例中,从目标搜索树包含的节点中查找满足待分配空间的目标节点,包括以下步骤A1-A3:
步骤A1,获取目标搜索树内各个节点对应的可用容量,其中,可用容量用于表示节点的可用连续空间的大小。
在本公开实施例中,遍历目标搜索树内的所有节点,并获取每个节点对应的可用容量。可用容量用于表示节点的可用连续空间的大小。这可以通过节点中存储的信息或计算得出,例如存储空闲空间的大小或通过计算节点所覆盖的空间范围来确定节点的可用容量。
步骤A2,对比待分配空间以及可用容量。
在本公开实施例中,对比待分配的空间范围与目标搜索树内各个节点的可用容量。目的是确定哪些节点的可用容量能够满足待分配空间的需求。
步骤A3,将待分配空间大于或等于可用容量的节点作为目标节点。
在本公开实施例中,步根据比较的结果,筛选出待分配空间大于或等于可用容量的节点作为目标节点。这些目标节点的可用容量能够满足待分配空间的要求,可以进行磁盘空间的分配操作。
通过执行步骤A1到步骤A3,可以确定目标搜索树内哪些节点的可用容量与待分配空间相匹配,并将它们作为目标节点,以便后续的磁盘空间分配操作。这样可以确保分配的空间满足需求,并有效地利用可用容量。
步骤S14,基于目标节点执行磁盘空间分配操作。
在本公开实施例中,在查找到满足待分配空间的目标节点后,直接依据目标节点进行磁盘空间分配操作。这意味着将目标节点标记为已分配,并将相关的信息记录在对象或文件的元数据结构。例如:并将节点表示的空间范围(start,length)插入extents容器。
本公开实施例提供的方法将分配空间划分为多个独立的空间范围,实现了空间的分片化,每一个空间范围对应一个搜索树,来负责该空间范围内不同空间大小的分配。以此在处理不同的分配请求时,分配器可以快速定位到与分配请求相匹配的搜索树,并从搜索树中找到合适大小的连续空间块进行分配,以此提高了磁盘空间的分配效率,也有利于减少空间碎片化。相比在碎片化的空间中进行线性搜索,减少了时间消耗,同时也降低了碎片化空间导致的分配失败的可能性。
在本公开实施例中,在查询分配器中与待分配空间相匹配的搜索树之前,方法还包括:
步骤B1,获取缓存列表,其中,缓存列表包括多个已释放空间。
在本公开实施例中,缓存列表中的已释放空间指的是之前分配给其他任务但现在已经被释放的空间。
需要说明的是,访问缓存列表的过程是通过std::atomic来实现无锁访问。具体的,使用std::atomic模板类定义一个原子类型的变量,例如std::atomic<std::list<T*>>cache_atomic,其中T*表示指向可用空间的指针。
在访问缓存列表时,使用std::atomic_load函数来获取cache_atomic的当前值,以确保读取操作是原子的。例如,使用std::list<T*>cache_list=std::atomic_load(&cache_atomic)。对缓存列表cache的更新操作也需要保证原子性。可以使用std::atomic_store函数来将更新后的cache_list存储回cache_atomic中。例如,使用std::atomic_store(&cache_atomic,cache_list)。
以此通过使用std::atomic来实现无锁访问cache,可以避免使用显式的锁来保护缓存列表,从而减少了锁带来的开销。同时,由于原子操作是硬件级别的支持,可以保证多线程环境下的线程安全性。
步骤B2,查询缓存列表,确定是否存在与待分配空间相匹配的已释放空间。
在本公开实施例中,遍历缓存列表中的每个已释放空间。对于每个已释放空间,检查其大小是否与当前的待分配空间匹配。
需要说明的是,由于分配器是共享资源,在并发访问必须要加锁。锁通常会成为高性能限制的因素之一,在真正访问分配器之前设置一个缓存列表,用于缓存容量较小的可用空间,被回收的可用空间会首先进入缓存列表,通过优先在缓存列表中查找可用空间,能够实现加速的效果。减少直接对分配器的分配请求压力。
步骤B3,若存在与待分配空间相匹配的已释放空间,则将与待分配空间相匹配的已释放空间作为目标空闲范围;若不存在与待分配空间相匹配的已释放空间,则执行从分配器中查询待分配空间相匹配的搜索树的步骤。
在本公开实施例中,如果存在一个已释放空间的大小与当前任务的待分配空间匹配,那么该已释放空间可以作为目标空闲范围。可以将其标记为已分配状态,并将其进行分配。如果没有找到匹配的已释放空间,需要返回失败的结果,表示需要执行执行从分配器中查询待分配空间相匹配的搜索树的步骤(即上述实施例中的步骤S12)。
本公开实施例提供的方法查询缓存列表,确定是否存在与待分配空间相匹配的已释放空间,并将其作为目标空闲范围的技术方案具有以下好处:通过查询缓存列表,可以快速确定是否存在与待分配空间相匹配的已释放空间。如果存在,可以直接将其作为目标空闲范围,避免了从分配器中进行额外的搜索和分配操作,从而节省了时间和资源。使用已释放的空间作为目标空闲范围可以避免新的空间分配,减少了内存碎片化的可能性,提高内存的利用率和整体性能。通过使用已释放的空间来满足待分配空间,可以减少对分配器的依赖。这样可以降低分配器出错的可能性和对分配器的负载,提高系统的可靠性。
图4是根据本公开实施例的一种磁盘空间的分配方法的流程图,如图4所示,方法还包括:
步骤S21,在目标搜索树中各个节点对应的可用容量均小于待分配空间的情况下,获取分配器对应的权重中心。
在本公开实施例中,当目标搜索树中不存在可进行分配的节点时,需要确定一个权重中心(weight_center)来确定查找区间和的查找方向。权重中心可以是预先配置的,也可以是根据分配器当前的空间利用情况确定的。
具体的,在设计分配器时,可以预先配置一个固定的权重中心,权重中心可以理解为是一个容量值。例如,在某个应用场景中,经过分析和测试得出1M阈值可以作为较为适合的权重中心,以此来划分查找区间和确定查找方向。另外,还可以根据分配器当前的空间利用情况动态确定权重中心。根据已分配和未分配空间的情况,可以计算出当前的权重中心。例如,可以根据已分配空间和可用空间的平均值、中位数或其他统计指标来确定权重中心。
步骤S22,利用权重中心将分配器的多个搜索树划分为第一查找区间以及第二查找区间,其中,第一查找区间的最后一个搜索树的空间范围与第二查找区间的第一个搜索树的空间范围相邻。
在本公开实施例中,通过权重中心将多个搜索树划分为第一查找区间和第二查找区间,其中,第一查找区间在权重中心的左侧,第二查找区间在权重中心的右侧。
步骤S23,确定目标搜索树落入的目标查找区间,并根据目标查找区间确定查找方向。
在本公开实施例中,如果目标搜索树在权重中心的左侧,则第一查找区间为目标查找区间。如果目标搜索树在权重中心的右侧,则第二查找区间为目标查找区间。查找方向:以目标搜索树为起点,由左向右查找,直至查找至目标查找区间的最后一个搜索树。
以此通过从左侧向右查找拥有可用容量的搜索树,可以充分利用碎片,减少新碎片的产生,提高碎片的利用率。另外,通过将搜索范围限制在权重中心周围的区域内,可以有效地缩小搜索的范围,减少了搜索整个存储空间的时间和资源开销。这样可以避免在整个存储空间中遍历查找,减少了无效的碎片生成。
步骤S24,基于目标查找区间查找位于查找方向的第一搜索树,得到满足待分配空间的目标节点。
作为一个示例,设目标搜索树为“≤64k”。如果目标搜索树(≤64k)中各个节点对应的可用容量均小于待分配空间,则获取权重中心,如图5所示,权重中心表示为1M,利用权重中心对多个搜索树进行划分,得到第一查找区间以及第二查找区间,其中,第一查找区间中的搜索树包括:≤4K,≤48K,≤16K,≤32K,≤64k,≤128k,≤256K,≤512K,≤1M。第二查找区间包括:≤2M,≤4M,≤8M,≤16M,>16M。此时可以确定目标搜索树(≤64k)落入第一查找区间,并确定查找方向为向右查找,查找范围为:≤128k,≤256K,≤512K,≤1M,最终得到满足待分配空间的目标节点。
本公开实施例提供的方法在确定待分配空间落入的查找区间后,可以从该查找区间中优先选择已经存在可用容量的搜索树进行分配。这样可以充分利用已有的碎片化空间,减少新碎片化空间的生成。降低了碎片率,提高空间的利用率。
在本公开实施例中,在目标查找区间为第一查找区间,且按照查找方向未查找到满足待分配空间的情况下,方法还包括以下步骤C1-C4:
步骤C1,遍历第一查找区间中的剩余搜索树,得到第一可用容量,其中,剩余搜索树为第一查找区间中位于查找方向反方向的搜索树;
在本公开实施例中,如果目标区间为第一查找区间,且第一查找区间内不存在满足待分配空间的节点,此时需要更换查找策略,首先确定第一查找区间中剩余搜索树,遍历各个剩余搜索树得到第一可用容量,第一可用容量为剩余搜索树的总可用容量,例如:第一查找区间中的搜索树包括:≤4K,≤48K,≤16K,≤32K,≤64k,≤128k,≤256K,≤512K,≤1M。目标搜索树为≤64k,查找范围为:≤128k,≤256K,≤512K,≤1M。此时可以确定剩余搜索树为≤4K,≤48K,≤16K,≤32K,遍历≤4K,≤48K,≤16K,≤32K,得到第一可用容量。
步骤C2,遍历第二查找区间中第二搜索树,得到第二可用容量。
在本公开实施例中,将第二查找区间中的搜索树定义为第二搜索树,遍历各个第二搜索树的可用容量,可以得到第二查找区间的总可用容量,并将其记为第二可用容量。
步骤C3,对比第一可用容量与第二可用容量,确定剩余搜索树与第二搜索树的优先级。
在本公开实施例中,对比第一可用容量与第二可用容量,确定剩余搜索树与第二搜索树的优先级,包括:若第一可用容量大于第二可用容量,则剩余搜索树的优先级大于第二搜索树的优先级;若第一可用容量小于第二可用容量,则剩余搜索树的优先级小于第二搜索树的优先级。
步骤C4,按照优先级从剩余搜索树以及第二搜索树中查找满足待分配空间的目标节点。
作为一个示例,可以定义剩余搜索树对应的第一可用容量为left_weight,第二搜索树对应的第二可用容量为right_weight。然后,比较left_weight和right_weight的大小来确定查找的方向。
如图6所示,如果left_weight大于right_weight,说明剩余搜索树的可用容量更大,此时优先从剩余搜索树向左查找,如果剩余搜索树中不存在满足待分配空间的节点,再查找第二查找区间,得到满足待分配空间的目标节点。
如图7所示,如果left_weight小于等于right_weight,说明第二查找区间的可用容量更大,此时优先第二查找区间由左向右查找,如果第二查找区间内不存在满足待分配空间的节点,再查找剩余搜索树,得到满足待分配空间的目标节点。
以此通过根据left_weight和right_weight的比较,选择合适的查找方向,可以提高分配器的效率,减少碎片的生成,并更好地利用空闲块。
在本公开实施例中,在基于目标节点执行磁盘空间分配操作之后,方法还包括:将目标节点从分配器中删除,并更新目标节点所在查找区间对应的可用容量。其中,更新目标节点所在查找区间对应的可用容量,包括:
若目标可用容量小于权重中心所表示的容量,则确定目标节点处于第一查找区间,并将第一查找区间对应的可用容量更新为第一预设容量,其中,第一预设容量是第一查找区间的可用容量与目标可用容量之间的差值。
若目标可用容量大于权重中心所表示的容量,则确定目标节点处于第二查找区间,并将第二查找区间对应的可用容量更新为第二预设容量,其中,第二预设容量是第二查找区间的可用容量与目标可用容量之间的差值。
作为一个示例,如果被删除的目标节点的目标可用容量小于等于权重中心(weight_center)所表示的容量:说明被删除的目标节点的范围在权重中心的左侧。在这种情况下,分配器的左侧可用容量(left_weight)需要更新。即左侧可用容量减去目标节点的目标可用容量。
如果被删除的目标节点的目标可用容量大于权重中心(weight_center)所表示的容量,说明被删除的目标节点在weight_center的右侧。在这种情况下,分配器的右侧可用容量(right_weight)需要更新。即右侧可用容量减去目标节点的目标可用容量。
在本公开实施例中,分配器在对释放的空间进行回收时,需要考虑是否可以与现有节点进行合并,以优化空间利用。包括:在分配其中获取大于回收范围的起始地址的节点,如果该节点的起始地址与回收范围的末端相等,则确定为一段连续空间,此时可以已进行合并。
具体的,使用upper_bound函数在分配器中找到大于回收范围的起始地址(start)的节点。upper_bound函数返回一个迭代器,指向分配器中第一个大于给定值(回收范围的start)的节点。如果存在upper_bound节点,且该节点的起始地址与回收范围的末端(start+length)相等,则可以判断这段地址空间是连续的,可以进行向后合并。
使用std::prev函数找到upper_bound节点的前一个节点(before)。如果before节点存在,并且该节点的起始地址与回收范围的start相等,则可以判断这段地址空间是连续的,可以进行向前合并。
通过上述步骤,可以判断回收范围是否可以与分配器中的现有节点进行合并。如果可以合并,可以将回收范围扩展到合并后的地址空间,从而减少碎片化和提高存储空间的利用率。合并操作有助于优化分配器的空间管理和资源回收。
在本实施例中还提供了一种磁盘空间的分配装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种磁盘空间的分配装置,如图8所示,包括:
获取模块81,用于获取空间分配请求,其中,空间分配请求包括待分配空间;
查询模块82,用于查询分配器中与待分配空间相匹配的目标搜索树,其中,分配器中包括多个搜索树,每个搜索树对应一个独立的空间范围,每个搜索树包括多个节点,节点用于表示搜索树对应空间范围内的可用连续空间,在分配器内搜索树按照空间范围由小到大进行排列;
处理模块83,用于从目标搜索树包含的节点中查找满足待分配空间的目标节点。
执行模块84,用于基于目标节点执行磁盘空间分配操作。
在本公开实施例中,装置还包括:缓存模块,用于获取缓存列表,其中,缓存列表包括多个已释放空间;查询缓存列表,确定是否存在与待分配空间相匹配的已释放空间;若存在与待分配空间相匹配的已释放空间,则将与待分配空间相匹配的已释放空间作为目标空闲范围;若不存在与待分配空间相匹配的已释放空间,则执行从分配器中查询待分配空间相匹配的搜索树的步骤。
在本公开实施例中,查询模块82,用于对比待分配空间与各个搜索树对应的空间范围,确定与待分配空间相匹配的目标搜索树。
在本公开实施例中,处理模块83,用于获取目标搜索树内各个节点对应的可用容量,其中,可用容量用于表示节点的可用连续空间的大小;对比待分配空间以及可用容量;将待分配空间大于或等于可用容量的节点作为目标节点。
在本公开实施例中,装置还包括:第一查找模块,用于在目标搜索树中各个节点对应的可用容量均小于待分配空间的情况下,获取分配器对应的权重中心;利用权重中心将分配器的多个搜索树划分为第一查找区间以及第二查找区间,其中,第一查找区间的最后一个搜索树的空间范围与第二查找区间的第一个搜索树的空间范围相邻;确定目标搜索树落入的目标查找区间,并根据目标查找区间确定查找方向;基于目标查找区间查找位于查找方向的第一搜索树,得到满足待分配空间的目标节点。
在本公开实施例中,装置还包括:第二查找模块,用于遍历第一查找区间中的剩余搜索树,得到第一可用容量,其中,剩余搜索树为第一查找区间中位于查找方向反方向的搜索树;遍历第二查找区间中第二搜索树,得到第二可用容量;对比第一可用容量与第二可用容量,确定剩余搜索树与第二搜索树的优先级;按照优先级从剩余搜索树以及第二搜索树中查找满足待分配空间的目标节点。
在本公开实施例中,第二查找模块,具体用于若第一可用容量大于第二可用容量,则剩余搜索树的优先级大于第二搜索树的优先级;若第一可用容量小于第二可用容量,则剩余搜索树的优先级小于第二搜索树的优先级。
在本公开实施例中,装置还包括:更新模块,用于将目标节点从分配器中删除,并更新目标节点所在查找区间对应的可用容量。
在本公开实施例中,更新模块,用于若目标可用容量小于权重中心所表示的容量,则确定目标节点处于第一查找区间,并将第一查找区间对应的可用容量更新为第一预设容量,其中,第一预设容量是第一查找区间的可用容量与目标可用容量之间的差值;若目标可用容量大于权重中心所表示的容量,则确定目标节点处于第二查找区间,并将第二查找区间对应的可用容量更新为第二预设容量,其中,第二预设容量是第二查找区间的可用容量与目标可用容量之间的差值。
请参阅图9,图9是本公开可选实施例提供的一种电子设备的结构示意图,如图9所示,该电子设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据一种小程序落地页的展现的电子设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
该电子设备还包括通信接口30,用于该电子设备与其他设备或通信网络通信。
本公开实施例还提供了一种计算机可读存储介质,上述根据本公开实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的方法。
虽然结合附图描述了本公开的实施例,但是本领域技术人员可以在不脱离本公开的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (12)
1.一种磁盘空间的分配方法,其特征在于,所述方法包括:
获取空间分配请求,其中,所述空间分配请求包括待分配空间;
查询分配器中与所述待分配空间相匹配的目标搜索树,其中,所述分配器中包括多个搜索树,每个所述搜索树对应一个独立的空间范围,每个搜索树包括多个节点,所述节点用于表示所述搜索树对应空间范围内的可用连续空间,在所述分配器内所述搜索树按照空间范围由小到大进行排列;
从所述目标搜索树包含的节点中查找满足所述待分配空间的目标节点;
基于所述目标节点执行磁盘空间分配操作。
2.根据权利要求1所述的方法,其特征在于,在查询分配器中与所述待分配空间相匹配的搜索树之前,所述方法还包括:
获取缓存列表,其中,所述缓存列表包括多个已释放空间;
查询所述缓存列表,确定是否存在与所述待分配空间相匹配的已释放空间;
若存在与所述待分配空间相匹配的已释放空间,则将与所述待分配空间相匹配的已释放空间作为目标空闲范围;若不存在与所述待分配空间相匹配的已释放空间,则执行从分配器中查询所述待分配空间相匹配的搜索树的步骤。
3.根据权利要求1所述的方法,其特征在于,所述查询分配器中与所述待分配空间相匹配的目标搜索树,包括:
对比所述待分配空间与各个所述搜索树对应的空间范围,确定与所述待分配空间相匹配的目标搜索树。
4.根据权利要求1所述的方法,其特征在于,所述从所述目标搜索树包含的节点中查找满足所述待分配空间的目标节点,包括:
获取所述目标搜索树内各个节点对应的可用容量,其中,所述可用容量用于表示所述节点的可用连续空间的大小;
对比所述待分配空间以及所述可用容量;
将所述待分配空间大于或等于所述可用容量的节点作为所述目标节点。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述目标搜索树中各个节点对应的可用容量均小于所述待分配空间的情况下,获取所述分配器对应的权重中心;
利用所述权重中心将所述分配器的多个搜索树划分为第一查找区间以及第二查找区间,其中,所述第一查找区间的最后一个搜索树的空间范围与所述第二查找区间的第一个搜索树的空间范围相邻;
确定所述目标搜索树落入的目标查找区间,并根据所述目标查找区间确定查找方向;
基于所述目标查找区间查找位于所述查找方向的第一搜索树,得到满足所述待分配空间的目标节点。
6.根据权利要求5所述的方法,其特征在于,在所述目标查找区间为第一查找区间,且按照所述查找方向未查找到满足所述待分配空间的情况下,所述方法还包括:
遍历所述第一查找区间中的剩余搜索树,得到第一可用容量,其中,所述剩余搜索树为所述第一查找区间中位于所述查找方向反方向的搜索树;
遍历所述第二查找区间中第二搜索树,得到第二可用容量;
对比所述第一可用容量与所述第二可用容量,确定所述剩余搜索树与第二搜索树的优先级;
按照所述优先级从所述剩余搜索树以及所述第二搜索树中查找满足所述待分配空间的目标节点。
7.根据权利要求6所述的方法,其特征在于,所述对比所述第一可用容量与所述第二可用容量,确定所述剩余搜索树与第二搜索树的优先级,包括:
若所述第一可用容量大于所述第二可用容量,则所述剩余搜索树的优先级大于所述第二搜索树的优先级;
若所述第一可用容量小于所述第二可用容量,则所述剩余搜索树的优先级小于所述第二搜索树的优先级。
8.根据权利要求7所述的方法,其特征在于,在按照所述优先级从所述剩余搜索树以及所述第二搜索树中查找满足所述待分配空间的目标节点之后,所述方法还包括:
将所述目标节点从所述分配器中删除,并更新所述目标节点所在查找区间对应的可用容量。
9.根据权利要求8所述的方法,其特征在于,所述更新所述目标节点所在查找区间对应的可用容量,包括:
若所述目标可用容量小于所述权重中心所表示的容量,则确定所述目标节点处于第一查找区间,并将所述第一查找区间对应的可用容量更新为第一预设容量,其中,所述第一预设容量是所述第一查找区间的可用容量与目标可用容量之间的差值;
若所述目标可用容量大于所述权重中心所表示的容量,则确定所述目标节点处于第二查找区间,并将所述第二查找区间对应的可用容量更新为第二预设容量,其中,所述第二预设容量是所述第二查找区间的可用容量与目标可用容量之间的差值。
10.一种磁盘空间的分配装置,其特征在于,所述装置包括:
获取模块,用于获取空间分配请求,其中,所述空间分配请求包括待分配空间;
查询模块,用于查询分配器中与所述待分配空间相匹配的目标搜索树,其中,所述分配器中包括多个搜索树,每个所述搜索树对应一个独立的空间范围,每个搜索树包括多个节点,所述节点用于表示所述搜索树对应空间范围内的可用连续空间,在所述分配器内所述搜索树按照空间范围由小到大进行排列;
处理模块,用于从所述目标搜索树包含的节点中查找满足所述待分配空间的目标节点;
执行模块,用于基于所述目标节点执行磁盘空间分配操作。
11.一种电子设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1至9中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令,所述计算机指令用于使计算机执行权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311813413.7A CN117931066A (zh) | 2023-12-26 | 2023-12-26 | 一种磁盘空间的分配方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311813413.7A CN117931066A (zh) | 2023-12-26 | 2023-12-26 | 一种磁盘空间的分配方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117931066A true CN117931066A (zh) | 2024-04-26 |
Family
ID=90760175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311813413.7A Pending CN117931066A (zh) | 2023-12-26 | 2023-12-26 | 一种磁盘空间的分配方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117931066A (zh) |
-
2023
- 2023-12-26 CN CN202311813413.7A patent/CN117931066A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11106586B2 (en) | Systems and methods for rebuilding a cache index | |
US10289315B2 (en) | Managing I/O operations of large data objects in a cache memory device by dividing into chunks | |
US9575678B2 (en) | Hierarchical allocation for file system storage device | |
US9086820B2 (en) | System and methods for managing storage space allocation | |
US7610468B2 (en) | Modified buddy system memory allocation | |
US8176233B1 (en) | Using non-volatile memory resources to enable a virtual buffer pool for a database application | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
KR102498668B1 (ko) | 플래시-인지 힙 메모리 관리 방법 및 호스트 장치 | |
CN107066498A (zh) | 键值kv存储方法和装置 | |
US10620844B2 (en) | System and method to read cache data on hybrid aggregates based on physical context of the data | |
CN109977078B (zh) | 一种数据的处理方法、装置、计算机设备和存储介质 | |
US8566534B1 (en) | Low overhead space management for large caches | |
WO2016150259A1 (en) | Efficient performance of insert and point query operations in a column store | |
CN113157600A (zh) | 一种叠瓦式硬盘的空间分配方法、文件存储系统及服务器 | |
US9009204B2 (en) | Storage system | |
US11474938B2 (en) | Data storage system with multiple-size object allocator for disk cache | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
CN116225693A (zh) | 元数据管理方法、装置、计算机设备及存储介质 | |
US8028011B1 (en) | Global UNIX file system cylinder group cache | |
CN110825732A (zh) | 数据查询方法、装置、计算机设备和可读存储介质 | |
CN117931066A (zh) | 一种磁盘空间的分配方法、装置、电子设备及存储介质 | |
CN113901018A (zh) | 一种待迁移文件识别方法、装置、计算机设备及存储介质 | |
CN114207602A (zh) | 使用概率数据结构减少请求 | |
US12086411B2 (en) | Storage control apparatus and method for a database storing data in pages | |
US8966220B2 (en) | Optimizing large page processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |