CN116360698A - 一种基于多级位图的持久化内存文件***磨损感知空间分配方法 - Google Patents
一种基于多级位图的持久化内存文件***磨损感知空间分配方法 Download PDFInfo
- Publication number
- CN116360698A CN116360698A CN202310340783.7A CN202310340783A CN116360698A CN 116360698 A CN116360698 A CN 116360698A CN 202310340783 A CN202310340783 A CN 202310340783A CN 116360698 A CN116360698 A CN 116360698A
- Authority
- CN
- China
- Prior art keywords
- heap
- bitmap
- minimum
- bmp
- wear
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 62
- 230000002085 persistent effect Effects 0.000 title claims abstract description 46
- 238000000034 method Methods 0.000 title claims abstract description 24
- 238000005299 abrasion Methods 0.000 claims abstract description 24
- 238000009826 distribution Methods 0.000 claims abstract description 12
- 235000019580 granularity Nutrition 0.000 claims description 39
- 238000003780 insertion Methods 0.000 claims description 13
- 230000037431 insertion Effects 0.000 claims description 13
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 claims description 8
- 230000011218 segmentation Effects 0.000 abstract 1
- 230000007246 mechanism Effects 0.000 description 17
- 238000003860 storage Methods 0.000 description 7
- 238000013508 migration Methods 0.000 description 6
- 230000005012 migration Effects 0.000 description 6
- 238000012217 deletion Methods 0.000 description 5
- 230000037430 deletion Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 238000005520 cutting process Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 240000002044 Rhizophora apiculata Species 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
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/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- 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/064—Management of blocks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于存储器领域,具体涉及一种基于多级位图的持久化内存文件***磨损感知空间分配方法;所述方法包括根据空闲块最小堆包含的连续页面个数,构建细粒度的多粒度分配堆;根据最小堆的可用性,构建基于多级位图的索引结构;根据上层应用申请最小堆的选定粒度,采用所述基于多级位图的索引结构快速定位第一个粒度大于等于申请粒度的可用最小堆,并从该最小堆中分配平均磨损度最小的空闲块。本发明解决现有持久化内存文件***磨损均衡精度低的问题,进一步提高了磨损精度;解决了大块分割和子块平均磨损度而产生的性能开销大的问题,显著提高持久化内存文件***的性能。
Description
技术领域
本发明属于存储器领域,具体涉及一种基于多级位图的持久化内存文件***磨损感知空间分配方法。
背景技术
近年来,出现诸多具有低延迟、非易失性、按字节寻址、低功耗和高存储密度等优点的新型持久化内存(Persistent Memory,简称PM),例如相变存储器(Phase ChangeMemory,简称PCM)、电阻式存储器(Resistive RAM,简称ReRAM)和3D-Xpoint等。这些持久化内存可以通过DIMM插槽直接连接在内存总线上,提供按字节寻址的高速数据访问,同时还能像磁盘一样持久性地存储数据。此外,CPU也可以通过load/store指令直接访问持久化内存。大容量持久化内存技技的持续发展,推动了存储***软件优化研究领域的发展。近年来,出现诸多以持久化内存作为存储设备的持久化内存文件***(Persistent MemoryFile System),例如BPFS、SCMFS、PMFS、SIMFS、NOVA和HiNFS等。这类文件***在软件设计思想上充分发掘新型持久化内存的高级特性,通过优化文件数据的组织方式和数据一致性机制,极大提升文件***的性能,使得文件访问的吞吐率达到GB/s级。
然而,大容量持久化内存普遍存在读写不对称,即写延迟/功耗高于读延迟/功耗。同时还普遍具有写耐受度低的缺陷(PCM的写耐受度约为108),如当PCM的存储单元写次数达到108左右时,该存储单元被磨损穿,导致整个文件***的数据变得不可靠,严重缩短持久化内存的使用寿命。因此,必须把对少量存储单元的大量写操作分散到其它存储空间,使得每个存储单元的磨损度相对平均,从而提高持久化内存的使用寿命。
现有持久化内存文件***,如PMFS,普遍使用4KB物理页来组织文件数据,并使用链表来管理内存的空闲块或已分配块。为支持多粒度分配,链表的每个节点代表若干连续的页面,即一段连续的物理空间。在分配空闲块时,PMFS需要遍历链表以找到大小合适的空闲块节点;在回收页面时,PMFS同样需要遍历链表以找到相邻块进行合并操作。而NOVA为每个CPU分配一个内存池,并使用红黑树排序内存池地址以降低合并空闲块的开销。同时,为了达到快速分配的目的,NOVA对普通页的分配采取每次分配头节点的做法,而对超级页的分配则需遍历链表以找到大小合适的空闲块节点。
2013年,卡内基梅隆大学的Iulian Moraru等针对传统内存分配器没有考虑持久化内存写磨损和硬件实现磨损均衡导致较大的性能开销等问题,提出考虑持久化内存考虑写磨损的分配器NVMalloc。2015年,国防科技大学肖侬教授团队针对传统内存分配器会导致持久化内存严重的磨损不均衡和空间分配元数据导致大量写操作等问题,提出考虑持久化内存考虑写磨损的分配器(Wear-ware allocator,简称Walloc)。2017年,清华大学舒继武教授团队针对PMFS现有的空间管理策略存在严重的磨损不均衡问题,提出一种考虑文件数据页磨损度的空闲页分配技技SanGuo。2018年,重庆大学的诸葛晴凤教授团队针对现有持久化内存文件***没有考虑底层持久化内存写耐受度低的缺陷,提出基于磨损度动态范围管理机制(Dynamic Wear-Aware Range Management,简称DWARM)。2020年,重庆大学刘铎教授团队针对现有考虑写磨损持久化内存文件***空间分配器仅支持单粒度分配,存在磨损均衡开销大的问题,提出了持久化内存文件***磨损感知的多粒度分配机制(Wear-leveling-aware Multi-grained Allocator,WMAlloc)。
现有考虑写磨损的持久化内存空间管理优化研究虽然通过优先分配低磨损页面实现了一定程度的磨损均衡,但依然存在磨损均衡精度低和实现磨损均衡开销大的问题。下面以DWARM和WMAlloc为例进行说明。
图1所示为DWARM的总体设计。首先,为了记录每个页面的磨损情况,DWARM在超级块后面预留一段连续空间来为每个页面维护一个8字节大小的写计数器,写计数器可以通过访问数组元素的方式快速访问,当一个页面写入数据后,该页面对应的写计数器的值将增加一。其次,DWARM根据页面的写计数器将持久化内存的所有空闲页面划分为若干分组,磨损度在同一范围的分为一组,属于同一分组的所有空闲页面由单链表链接起来。为了减轻定位相应分组的开销,DWARM在DRAM中构造一个链表来管理所有分组,并设置分组里页面最大磨损度为该组磨损范围的阈值,所有分组按其磨损范围阈值从低到高排列。DRAM链表节点的Key为分组磨损阈值,Ptr为指向分组的指针,Next为指向链表下一个节点的指针。然后,DWARM采用最少使用先出策略,总是将磨损最小分组的第一个页面分配出去,或根据写计数器将空闲页回收到相应分组的尾部。
最后,DWARM提出了一种自适应磨损范围确定算法,以动态调整所有分组的磨损范围。当一个分组包含的空闲页数超过持久化内存总空闲页数的α倍时,将引发分组的***。***时,DWARM首先找到分组中页磨损度的中位数,并将磨损度小于中位数的页面和磨损度大于中位数的页面***为两个子分组,若子分组的页数依然满足***条件,则继续递归***子分组,直到子分组的页数小于总页数的α倍。自适应磨损范围确定算法保证了前α倍最小磨损页面被优先分配出去,极大提升了磨损均衡精度。此外,DWARM创建一个临时链表来组织回收的页面,只有当临时链表包含的空闲页数达到阈值时,该链表的空闲页才被后台线程迁移到对应磨损范围的分组链表里,从而降低了文件***资源争用的开销。
DWARM虽然通过为每个分配请求选择低磨损页面,从而达到了一定的磨损均衡精度,但仍存在以下两个问题:一是磨损均衡精度和性能开销与设置的分组密切相关,即分组磨损范围越大,持久化内存的磨损越不平衡,分组磨损范围越小,磨损均衡的元数据管理开销越大;二是DWARM是一个单粒度分配器,每次只能分配一个4KB页面,对于一次多粒度分配请求需要多次分配操作来完成,严重降低DWARM性能和加剧其日志区的磨损。
图2所示为磨损均衡感知多粒度分配器(Wear-Leveling-Aware Multi-GrainedAllocator,简称WMAlloc)的总体设计,WMAlloc包括多粒度分配堆(MGAH)、磨损感知的回收森林(WARF)和磨损均衡的节点迁移(WBNM)三个关键技技。首先,为了在实现磨损均衡的同时提供多粒度分配,WMAlloc构建了11棵最小堆树(编号从0到10)来管理空闲块,以快速定位堆中平均磨损度最小的空闲块。对于第i棵最小堆树,如果i小于10,则该堆中的块节点代表一个由2i个连续页组成的块;如果i等于10,则该最小堆树管理的块大小超过512个连续页。因此,除了第10棵最小堆树之外,每棵最小堆树以堆中节点包含的页数最为分配堆的粒度。当申请的块大小小于或等于512个页时,WMAlloc仅需从相应的最小堆树分配头节点,一次分配即可完成请求,极大提升了文件***的性能。为解决堆间的不均匀磨损问题,WMAlloc提出磨损均衡节点迁移机制,将磨损最小的堆树中的节点与磨损最大的堆树中的节点进行交换。此外,WMAlloc的磨损感知的回收森林机制根据页面写计数器将释放的块临时划分为多个红黑树分组以加速块合并操作。迁移时,WMAlloc总是将最小磨损红黑树中的块迁移到最小堆。
WMAlloc虽然通过以上三个关键技技实现了比DWARM更高的磨损均衡精度和文件***性能,但仍然存在以下两个问题。第一,当最小堆树中的空闲块数小于设置的阈值时,其它最小堆树或红黑树中的较大空闲块将被拆分为多个子块,然后迁移到该最小堆树中,拆分时需重新计算每个子块的磨损度,这会带来巨大的性能开销。例如,我们假设红黑树中包含15个连续页面的块将迁移到第3棵最小堆树,那么该块将被分成四个子块,分别包含8、4、2和1个连续页,并分别***到第3、第2、第1和第0棵最小堆树中。更可怕的是,这种通过主动切割大块以使子块大小适合分配堆粒度的做法,会产生较多的外部碎片,而外部碎片将严重降低文件***的性能和加剧文件***日志区的磨损。第二,当分配块粒度大于申请块粒度时,分配产生的剩余块需要重新计算其平均磨损度,然后插回多粒度分配堆。然而,计算平均磨损度需要遍历剩余块的每个页面,当剩余块粒度较大时,将引发较大的性能开销。
发明内容
针对上述现有技技的缺点,本发明提出了一种基于多级位图的持久化内存文件***磨损感知空间分配方法,以解决现有持久化内存分配器依然存在磨损均衡精度低和实现磨损均衡开销大的问题。
该机制所要解决的技技问题主要有两个:
1)基于位图的多粒度堆。通过构建多级位图索引结构以快速查找可分配堆,使得分配堆的粒度分布可以多样化,新的多粒度分配堆能容纳任意粒度块,从而避免大块***分配堆时的冗余切割及子块平均磨损度的重新计算,减少了外部碎片,提高文件***性能和持久化内存磨损均衡精度。
2)条件磨损继承机制。通过此机制将遍历剩余块产生的巨大开销限制到合理范围内。
本发明通过如下技技方案以解决上述技技问题:
一种基于多级位图的持久化内存文件***磨损感知空间分配方法,所述多粒度分配方法包括:
根据空闲块包含的连续页面个数,构建细粒度的多粒度分配堆;
根据最小堆的可用性,构建基于多级位图的索引结构;
根据上层应用申请粒度,采用所述基于多级位图的索引结构快速定位第一个粒度大于等于申请粒度的可用最小堆,并从该最小堆中分配平均磨损度最小的空闲块。
优选的,所述方法还包括将所述分配请求对应的原始块的大小记为T,请求块的大小记为Q,比率γ作为继承阈值;使用Q/T表示分配请求导致的磨损波动;如果Q/T≤γ,则认为剩余块的平均磨损不会剧烈波动,剩余块直接继承原始块的平均磨损度;否则,重新计算剩余块的平均磨损度。
本发明的有益效果:
1、本发明能实现更高精度的磨损均衡,同时显著提高持久化内存文件***的性能。
2、本发明通过构建多级位图索引结构以支持快速查找可分配堆,使得分配堆的粒度分布多样化,新的多粒度分配堆能容纳任意粒度块,从而避免大块***分配堆时的冗余切割,减少外部碎片,提高文件***的性能和持久化内存磨损均衡精度。
3、本发明通过条件磨损继承机制将遍历剩余块产生的巨大开销限制到合理范围内,进一步提升了文件***的性能。
附图说明
图1是现有技技中持久化内存文件***磨损均衡感知的分配架构示意图;
图2是现有技技中持久化内存文件***高效多粒度分配架构示意图;
图3是本发明一实施例的一种基于多级位图的持久化内存文件***磨损感知空间分配方法流程图;
图4是本发明一实施例的基于位图的索引结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技技方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技技人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
常见的堆结构有最大堆,最小堆,斐波那锲堆,左派堆,斜堆等;在本发明中,重新定义了最小堆节点的元数据,使其可以快速找到磨损最小的节点,因此,本发明中的所有堆都是指的最小堆,为了方便描述,本发明部分实施例将所述最小堆简称为堆。
为了便于理解,先对本发明可能涉及的技技关键点进行说明:首先,本发明提供了基于位图的多粒度堆能够提供多粒度分配,极大提升了***性能。最后,本发明采用的条件磨损继承机制,有效解决了上述机制中存在的冗余开销问题,更进一步提高了传统WMAlloc的性能和磨损均衡精度。
在一些实施例中,本发明还可以沿用传统WMAlloc的磨损感知的回收森林机制WARF和磨损均衡的节点迁移机制WBNM,来实现高精度的磨损均衡。其中,对于磨损感知的回收森林机制WARF,本发明可以根据现有技技构建一个磨损感知的红黑树森林,用来临时管理最近释放的空闲块。每棵红黑树代表一个磨损范围分组,新释放的空闲块根据磨损度将被***到相应的红黑树中,并可以快速与其相邻块合并。当最小堆中的空闲块总数小于阈值时,将触发红黑树森林中的前一部分低磨损块迁移到最小堆中,以供将来分配使用。对于磨损均衡的节点迁移机制WBNM,由于上层应用申请粒度不均衡,一些堆中的块从未分配,而另一些堆中的块被频繁分配,导致堆间的严重磨损不均衡。因此,本发明可以根据现有技技采用一种最小堆之间的块节点迁移机制。
图3是本发明一实施例的一种基于多级位图的持久化内存文件***磨损感知空间分配方法流程图;如图3所示,所述方法包括:
101、根据空闲块包含的连续页面个数,构建细粒度的多粒度分配堆;
102、根据最小堆的可用性,构建基于多级位图的索引结构;
103、根据上层应用申请粒度,采用所述基于多级位图的索引结构快速定位第一个粒度大于等于申请粒度的可用最小堆,并从该最小堆中分配平均磨损度最小的空闲块。
在传统技技中,WMAlloc可以利用多粒度分配堆MAGH以O(1)复杂度高效地执行多粒度分配任务。然而,当红黑树中的空闲块或分配产生的剩余块迁移/插回到最小堆时,WMAlloc会产生巨大的冗余开销。具体来说,在多粒度分配堆中,由于堆i管理具有2i个连续页的块,当从红黑树迁移一个包含511页的块时,MGAH会将其拆分为9个子块,分别包含256、128、64、32、16、8、4、2和1个连续页,并将它们逐一***相应的最小堆中。类似地,当从具有711页的块中分配200页时,同样需将剩余块分割成9个子块,并执行上述***过程。
这种机制将从两方面降低WMAlloc性能。首先,大块被分割成几个离散的小块,导致未来可分配的大块稀缺。因此,MGAH需要为大粒度分配请求分配几个小块。更糟糕的是,由于每个分配操作都必须记录在日志区域中,因此大量的小粒度分配会严重降低***性能和日志区域的耐久性。其次,为保证磨损均衡精度,大块分割成小块时需要遍历该子块内所有页的写计数器以重新计算每个子块的平均磨损度,从而引入大量开销和不可预测的长尾延迟。
为了避免这些冗余拆分,本发明提出了一种基于位图的多粒度堆树(BMT)来替代原始的MGAH。BMT的基本思想是细化最小堆的粒度,通过构建细粒度的多粒度分配堆,以容纳其余子块,并切断递归分割。最小堆中的块节点包括固定数量的连续页面,并将连续页面的数量定义为最小堆的粒度,使用M个不同粒度的最小堆来组织空闲块,第i个最小堆的粒度为i+1;i≤M,M≥64。采用基于位图的多粒度堆树,为最小堆构建多层位图,以i=511为例,BMT可以将最小堆的数量扩展到512,编号从0到511,第i个最小堆记录包含i+1个连续页的块,而不是MGAH中的2i个页。所有超过512页的块都记录在最后一个最小堆中。基于这种设计,每种粒度的迁移块都可以直接***到相应的最小堆,而无需拆分。尽管从大块分配仍然可能产生拆分操作,但其余子块也将直接***到相应的最小堆中,而无需进一步拆分。
在传统技技中,当申请块粒度为N且第个堆为空时,WMAlloc需要往后遍历以寻找下一个更大粒度的可分配堆。为了解决这种低效的定位问题,本发明提出了一种基于位图的索引结构BMT。底层位图的每一位直接指示一个最小堆的可用性,采用基于位图的多粒度堆树,为最小堆构建多级位图;如果第i个最小堆可用,则底层位图的第i位设置为1,否则设置为0;其它层的每一位j指示下一层位图的m位代表的最小堆的可用性,如果存在可用最小堆,则该位j设置为1,否则设置为0,将多级位图的每m位分为一组,全部记录在整数数组bmp中,用于指示各个最小堆的可用性;底层位图的信息记录在bmp的第0到第nb个整数中,第二层位图信息记录在bmp的第nb+1到第nb+1+sb个整数中,以此类推,顶层位图信息记录在bmp的最后一个整数tb中;其中,m≤64,nb=M/m,sb=(nb+1)/m。
如图4(a)所示,BMT在512个最小堆上构建了三层位图,顶层位图占用一个字节,而第二层和底层位图分别占用8和64字节。64字节(512位)底层位图中的第i位指示第i个最小堆的可用性,即如果第i个最小堆为空,则对应的第i位为0,否则为1。
第二层位图的每一位指示底层位图每8位代表的8个最小堆的可用性。具体来说,如果第二层位图中的位为0,则其对应的底层位图中的8个位全部为0,这意味着对应的8个最小堆全部为空;否则,对应的底层位图中的8个位不完全为0,也即对应的8个最小堆中至少存在一个可用的最小堆。类似地,顶层位图使用一个字节来指示整个空间的可用性。如果顶层位图的位为0,则对应的第二层位图的8个位和底层位图64个位为全部0,也即64个堆全为空;反之则表示第二层位图的8个位和底层位图64个位不全为0,也即存在可用堆。
为了便于存储和索引,本发明将上述三层位图记录在整数数组bmp中。bmp的第0到第63个整数记录底层位图,第64到第71个整数记录第二层位图,第72个整数记录顶层位图。初始时,整个PM空间为一个连续的大块,记录在最后一个最小堆,即第511个最小堆中。因此,初始时,底层位图的第511位、中间层位图的第63位以及顶层位图的第7位设置为1,其余位为0。也就是说,bmp[63]、bmp[71]、bmp[72]的值都设置为128,其余bmp元素值都是0。基于位图的索引结构能够以最小的维护成本快速定位可用的细粒度最小堆。
在本发明实施例中,所述多级位图的索引结构的操作包括将空闲块***最小堆,并更新多级位图(块节点***);将空闲块从最小堆中删除,并更新多级位图(块节点删除);采用多级位图快速定位可用的最小堆(c)快速定位可用的最小堆)。
a)块节点***
所述将空闲块***最小堆,并更新多级位图包括在将空闲块***到第i个最小堆时,如果该最小堆在所述空闲块***之前为空,则***所述空闲块后需更新整数数组bmp;首先将第i个最小堆在整数数组bmp的底层位图中对应的比特位置为1,即将bmp的第blb=i/m个整数的第i%m位置1,表示第i个最小堆现在为非空状态;如果bmp[blb]在***之前的值为0,则将第i个最小堆在bmp第二层位图中对应的比特位置1,即将bmp中的第slb=nb+1+blb/m个元素的第blb%m位置为1;如果在***空闲块之前bmp[slb]为0,则还需修改第三层位图,依此类推,直至最多更新到顶层位图,此时,将bmp的最后一个整数tb相应的比特位置1。
同样以三级位图为例,在将空闲块***到第i个最小堆时,如果该堆在***之前为空,则***后需更新bmp。首先将第i个堆在bmp底层位图中对应的比特位置为1,即bmp第i/8个元素的第i%8位设置为1,表示第i个最小堆现在为非空状态。如果bmp[i/8]在***之前的值为0,则还需要将第i个堆在bmp第二层位图中对应的比特位置1。因为第i个堆在bmp底层位图中对应的元素位置为blb=i/8,则该堆在bmp第二层位图中对应的元素位置为slb=64+blb/8。因此,只需将bmp中的第slb个元素的第blb%8位置为1。同样,如果在***之前bmp[slb]为0,则还需修改顶层位图,即将bmp第72个元素的第slb%8位更新为1。
b)块节点删除
所述将空闲块从最小堆中删除,并更新多级位图包括当第i个最小堆中的最后一个空闲块被分配时,将bmp中的第i/m个元素的第i%m位设置为0;检查bmp[i/m]的值是否为0;如果是,还需要将第i个最小堆在bmp第二层位图中的对应位修改为0;检查bmp[i/m2]是否为0,以决定是否需要进一步修改上一级位图,直至最多修改到顶层位图。
同样以三级位图为例,块节点删除过程基本上与块节点***过程类似,不同的是块节点删除是把位图中的某个比特位由1置0,而块节点***是由0置1。当第i个最小堆中的最后一个空闲块被分配时,需将bmp中的第i/8个元素的第i%8位设置为0。然后检查bmp[i/8]的值是否为0。如果是,还需要将第i个最小堆在bmp第二层位图中的对应位修改为0,操作类似于***。最后检查bmp[i/64]是否为0,以决定是否需要进一步修改顶层位图。请注意,如果修改的元素在块***之前已经大于0,或者在删除之后仍然大于0,则无需操作上层位图;此外,由于BMT的高度只有3,按位修改最多为3次。因此,BMT的维护开销是可控和可接受的。
c)快速定位可用的最小堆
在本发明中,当所述分配请求包含P个连续页面的空闲块时,就采用基于多级位图快速定位可用的最小堆;BMT首先检查相应的最小堆N=P-1是否为空。如果不为空,则直接返回堆N为目标堆。如果不为空,则直接返回粒度为N的最小堆为目标堆;否则,通过底层位图搜索附近的m个最小堆,通过计算B=bmp[N/m]>>(N%m),以排除粒度小于P的最小堆,如果B不为0,则直接返回编号为N+m[B&(-B)]的最小堆为目标堆;否则,通过在第二层位图搜索,确定可用堆对应的位,再从该位对应的底层位图进行搜索,以最终确定目标堆;如果第二层仍未搜索到目标堆,则递归搜索上层位图,直到搜索代表整个内存空闲空间的顶层位图,返回目标堆;若递归搜索后仍未搜索到目标堆,则说明不存在可分配堆,分配请求不能由一次分配完成;其中,/表示取整,%表示取余,>>表示右移运算符。
以三层位图,且m=8为例,BMT将通过底层位图bmp[N/8]检查附近的8个最小堆是否存在目标堆。具体来说,BMT先执行B=bmp[N/8]>>(N%8),以排除粒度小于N的最小堆。然后,通过计算B&(-B)获得B的二进制位中最低位1对应的值,而最低位1在B的二进制位置表示目标堆到堆N的距离。为了映射最低位1的值和其位置的关系,BMT预先构造了一个映射表m。对于i∈[0,7],m[2i]的值设置为i。通过这种方式,在B不等于0时,BMT直接返回序号为N+m[B&(-B)]的最小堆为目标堆。
当B为0但不是最后一个底层位图时,BMT需要通过第二层位图从附近的64个最小堆中检查可分配堆。由于堆N附近的8个最小堆没有可分配堆,BMT让p=N/8+1,于是,第二层位图B=bmp[64+p/8]。与底层位图搜索类似,BMT将B右移p%8并计算B&(-B)以确定第二层位图下是否存在可分配堆。如果是,BMT将对p+m[B&(-B)]表示的底层位图进行一次搜索以最终确定可分配堆的位置。否则,说明附近的64个最小堆中没有可分配堆。在这种情况下,如果N/64不等于7(这意味着仍有未搜索的第二层位图),BMT还需通过顶层位图B=bmp[72]从512个堆中搜索。BMT令q=p/8+1,并将B右移q%8。如果B不等于0,将对q+m[B&(-B)]进行第二层位图搜索。否则,说明不存在可分配堆,请求不能由一次分配完成。
图4说明了BMT快速定位可分配堆的三个示例。当分配包含两个连续页面的块时,如图4(b)所示,BMT首先访问最小堆1以寻找空闲块。不幸的是,这个最小堆是空的(因为它的对应位是0),因此,BMT需要在其附近的8个最小堆(从第0位到第7位)查找可分配堆。首先将底层位图的第一个字节B右移(2-1)%8=1并计算B&(-B)得到结果0x0001000,然后,从映射表得知其最低1位的序列号是3。最后,返回1+3=4,表示找到目标最小堆。
图4(c)中的示例更为复杂。BMT无法在第一个底层位图下面分配具有六个连续页面的块,因此,BMT转而通过相应的第二层位图搜索最近的64个最小堆。经过类似的计算,发现第二层位图的第4位存在可分配堆。于是,进一步利用底层位图的第4个字节进行搜索,最后定位到序号为34的可分配堆。
图4(d)显示了定位可分配堆的最坏情况。它在底层和第二层位图探测中都找不到可行的最小堆。因此,BMT检查顶层位图,并在第2位中找到最低位1。然后,BMT向下搜索相应的第二层位图以定位目标底层位图。通过第二个二层位图(序列号19)中第三位的引导,BMT进入第19个底层位图对可分配堆进行搜索,最后定位到序号为154的可分配堆。
基于上述示例,可以观察到,BMT只需要几次位图计算就可以找到合适的最小堆。即使在最坏的情况下,最大计算次数也只有五次。因此,与大规模遍历相比,BMT大大降低了定位可分配最小堆的开销。
在本发明实施例中,当选定的最小堆的粒度大于请求粒度时,分配的空闲块将被拆分为两个子块,一个子块作为请求块用于分配,另一个子块作为剩余块将插回到多粒度的最小堆中。针对重新计算剩余块平均磨损度会产生巨大的冗余开销问题,本发明提出了一种条件磨损继承机制,以减少开销,同时保证良好的磨损精度。
首先,将原始块的大小记为T,请求块的大小记为P,比率γ作为阈值。然后,使用P/T表示分配请求导致的磨损波动。如果P/T≤γ,则认为剩余块的平均磨损不会剧烈波动,因此,剩余块直接继承原始块的平均磨损度。否则,说明剩余块只占原始块的一小部分,因此,有必要重新计算剩余块的平均磨损度。由于剩余块远小于原始块,计算开销会显著降低。
本领域普通技技人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技技人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (8)
1.一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述方法包括:
根据空闲块包含的连续页面个数,构建细粒度的多粒度分配堆;
根据最小堆的可用性,构建基于多级位图的索引结构;
根据上层应用申请粒度,采用所述基于多级位图的索引结构快速定位第一个粒度大于等于申请粒度的可用最小堆,并从该最小堆中分配平均磨损度最小的空闲块。
2.根据权利要求1所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述构建细粒度的多粒度分配堆包括最小堆中的块节点包括固定数量的连续页面,并将连续页面的数量定义为最小堆的粒度,使用M个不同粒度的最小堆来组织空闲块,第i个最小堆的粒度为i+1;i≤M,M≥64。
3.根据权利要求1所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述构建基于多级位图的索引结构包括采用基于位图的多粒度堆树,为最小堆构建多级位图,底层位图的每一位直接指示一个最小堆的可用性,如果第i个最小堆可用,则底层位图的第i位设置为1,否则设置为0;其它层的每一位指示下一层位图的m位代表的最小堆的可用性,如果存在可用最小堆,则该位设置为1,否则设置为0,将多级位图的每m位分为一组,全部记录在整数数组bmp中,用于指示各个最小堆的可用性;底层位图的信息记录在bmp的第0到第nb个整数中,第二层位图信息记录在bmp的第nb+1到第nb+1+sb个整数中,顶层位图信息记录在bmp的最后一个整数tb中;其中,m≤64,nb=M/m,sb=(nb+1)/m。
4.根据权利要求3所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述多级位图的索引结构的操作包括将空闲块***最小堆,并更新多级位图;将空闲块从最小堆中删除,并更新多级位图;采用多级位图快速定位可用的最小堆。
5.根据权利要求4所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述将空闲块***最小堆,并更新多级位图包括在将空闲块***到第i个最小堆时,如果该最小堆在所述空闲块***之前为空,则***所述空闲块后需更新整数数组bmp;首先将第i个最小堆在整数数组bmp的底层位图中对应的比特位置为1,即将bmp的第blb=i/m个整数的第i%m位置1,表示第i个最小堆现在为非空状态;如果bmp[blb]在***之前的值为0,则将第i个最小堆在bmp第二层位图中对应的比特位置1,即将bmp中的第slb=nb+1+blb/m个元素的第blb%m位置为1;如果在***空闲块之前bmp[slb]为0,则还需修改第三层位图,直至最多更新到顶层位图,此时,将bmp的最后一个整数tb相应的比特位置1。
6.根据权利要求4所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述将空闲块从最小堆中删除,并更新多级位图包括当第i个最小堆中的最后一个空闲块被分配时,将bmp中的第i/m个元素的第i%m位设置为0;检查bmp[i/m]的值是否为0;如果是,还需要将第i个最小堆在bmp第二层位图中的对应位修改为0;检查bmp[i/m2]是否为0,以决定是否需要进一步修改上一级位图,直至最多修改到顶层位图。
7.根据权利要求4所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述采用基于多级位图快速定位可用的最小堆包括当所述分配请求包含P个连续页面的空闲块时,检查编号为N的最小堆是否为空,N=P-1;如果不为空,则直接返回编号为N的最小堆为目标堆;否则,通过底层位图搜索附近的m个最小堆,通过计算B=bmp[N/m]>>(N%m),以排除粒度小于P的最小堆,如果B不为0,则直接返回编号为N+m[B&(-B)]的最小堆为目标堆;否则,通过在第二层位图搜索,确定可用堆对应的位,再从该位对应的底层位图进行搜索,以最终确定目标堆;如果第二层仍未搜索到目标堆,则递归搜索上层位图,直到搜索代表整个内存空闲空间的顶层位图,返回目标堆;若递归搜索后仍未搜索到目标堆,则说明不存在可分配堆,分配请求不能由一次分配完成;其中,/表示取整,%表示取余,>>表示右移运算符。
8.根据权利要求1-7任一所述的一种基于多级位图的持久化内存文件***磨损感知空间分配方法,其特征在于,所述方法还包括将所述分配请求对应的原始块的大小记为T,请求块的大小记为Q,比率γ作为继承阈值;使用Q/T表示分配请求导致的磨损波动;如果Q/T≤γ,则认为剩余块的平均磨损不会剧烈波动,剩余块直接继承原始块的平均磨损度;否则,重新计算剩余块的平均磨损度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310340783.7A CN116360698A (zh) | 2023-03-31 | 2023-03-31 | 一种基于多级位图的持久化内存文件***磨损感知空间分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310340783.7A CN116360698A (zh) | 2023-03-31 | 2023-03-31 | 一种基于多级位图的持久化内存文件***磨损感知空间分配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116360698A true CN116360698A (zh) | 2023-06-30 |
Family
ID=86923239
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310340783.7A Pending CN116360698A (zh) | 2023-03-31 | 2023-03-31 | 一种基于多级位图的持久化内存文件***磨损感知空间分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116360698A (zh) |
-
2023
- 2023-03-31 CN CN202310340783.7A patent/CN116360698A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110347336B (zh) | 一种基于nvm与ssd混合存储结构的键值存储*** | |
US11893238B2 (en) | Method of controlling nonvolatile semiconductor memory | |
US8880544B2 (en) | Method of adapting a uniform access indexing process to a non-uniform access memory, and computer system | |
US10275361B2 (en) | Managing multiple namespaces in a non-volatile memory (NVM) | |
KR101982251B1 (ko) | 저장 디바이스들이 낮은 과도 공급으로 낮은 기입 증폭을 달성하기 위한 방법 | |
CN102779096B (zh) | 一种基于页块面三维的闪存地址映射方法 | |
JP6678230B2 (ja) | ストレージ装置 | |
US8954656B2 (en) | Method and system for reducing mapping table size in a storage device | |
CN103838853B (zh) | 一种基于不同存储介质的混合文件*** | |
US6742078B1 (en) | Management, data link structure and calculating method for flash memory | |
US11520696B2 (en) | Segregating map data among different die sets in a non-volatile memory | |
CN113568562A (zh) | 一种存储***、内存管理方法和管理节点 | |
US8954658B1 (en) | Method of LUN management in a solid state disk array | |
CN110968269A (zh) | 基于scm与ssd的键值存储***及读写请求处理方法 | |
CN111522507A (zh) | 一种低延迟的文件***地址空间管理方法、***及介质 | |
CN113590045A (zh) | 数据分层式存储方法、装置及存储介质 | |
CN116364148A (zh) | 一种面向分布式全闪存储***的磨损均衡方法及*** | |
CN116126743A (zh) | 一种基于持久化内存文件***的磨损感知空间分配方法 | |
US10877698B2 (en) | Semiconductor device for managing cold addresses of nonvolatile memory device | |
CN111338569A (zh) | 一种基于直接映射的对象存储后端优化方法 | |
CN116360698A (zh) | 一种基于多级位图的持久化内存文件***磨损感知空间分配方法 | |
US10552086B2 (en) | Global pool of garbage collection units (GCUs) in a shared non-volatile memory device | |
KR100868674B1 (ko) | 플래시메모리 관리방법 | |
CN111338982B (zh) | 一种大容量固态盘内地址映射方法 | |
JPH0282332A (ja) | 索引ファイルのインデックス用入出力バッファ方式 |
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 |