CN106598730A - 基于非易失性内存的可在线恢复对象分配器设计方法 - Google Patents
基于非易失性内存的可在线恢复对象分配器设计方法 Download PDFInfo
- Publication number
- CN106598730A CN106598730A CN201611060153.0A CN201611060153A CN106598730A CN 106598730 A CN106598730 A CN 106598730A CN 201611060153 A CN201611060153 A CN 201611060153A CN 106598730 A CN106598730 A CN 106598730A
- Authority
- CN
- China
- Prior art keywords
- nonvolatile memory
- version
- distribution
- online
- recover
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于非易失性内存的可在线恢复的对象分配器设计方法,包括:使用两个版本号保存每个对象的分配信息;使用版本矩阵保存非易失性内存中每个对象的版本号;在对象分配和对象释放过程中不需要进行持久化操作;故障后的恢复过程中,分配器无需等待恢复完成,可根据已持久化的信息处理新的请求;使用两个版本号在恢复过程中验证一个对象是否在恢复中被重新分配。本发明消除了在分配和释放的时的持久化操作,在故障发生后能够在对分配信息进行恢复的同时,根据已经持久化的信息处理新的请求,提高了正常运行情况下以及在故障发生后对象分配的性能,减少了因故障宕机和恢复导致的服务中断时间。
Description
技术领域
本发明涉及一种对象分配器设计方法,具体地,涉及一种基于非易失性内存的可在线恢复的对象分配器设计方法。
背景技术
随着STT-MRAM、Phase Change Memory、NVDIMM、3D XPoint以及Memristor等非易失性内存技术的兴起和成熟,非易失性内存成为替代传统磁盘的持久存储的选择之一。非易失性内存具有延迟低、带宽高、可字节寻址、能耗低等优点,因而出现了很多基于非易失性内存的文件系统和应用。在这些系统中,不可避免的是对于内存对象的分配管理。现有的非易失性内存对象分配器的具体流程包括:
(1)加载阶段,在非易失性内存被使用之前,分配器需先读取存储在非易失性内存中的点阵(Bitmap),并将其转化为易失性内存中的数据结构(如空闲链表);
(2)分配阶段,查找易失性内存中的数据结构,在找到合适的空闲内存区间之后,将易失性内存数据结构中的相关地方标记为已分配;
(3)释放阶段,在易失性内存数据结构的进行查找,在找到相应的内存区域之后,将其易失性内存数据结构中相应地方标记为未分配;
(4)保存阶段,在非易失性内存使用完毕之后,分配器将易失性内存数据结构中保存的分配信息转化成点阵,保存在非易失性内存之中,供下次使用时读取;
(5)恢复阶段,在系统发生故障或因断电而重启后,非易失性内存中保存的点阵分配信息与非易失性内存的实际事情情况发生偏差。分配需要先从非易失性内存中的根节点开始扫描整个数据结构,从而获知那些区域已经被分配,哪些区域是空闲区域。在扫描完毕之后,分配器将扫描得到的信息进行保存,之后才可以继续处理分配和释放内存等请求。
上述的对象分配器的好处在于不需要频繁的进行持久化操作,因而在分配阶段和释放阶段对于系统的整体性能影响较小。但其缺点在于需要加载阶段和保存阶段,另外当系统发生故障或因断电而需要重启后,恢复阶段的时间过长,且此时分配器是完全无法工作的,因而整个非易失性内存都无法使用。
另外一种分配器设计方式是将最新的分配信息直接保存在非易失性内存中。在这种设计中,不需要上述的加载、保存和恢复阶段;但其缺点在于:若想获得较快的分配和释放性能,保存分配信息的结构需要复杂,涉及到大量的零散的内存操作,而若要保证分配信息的持久化,每次分配或释放结束后,需要调用大量的持久化操作,对性能造成影响;若使用点阵等简单的结构,则在释放和分配内存时需要进行大量的查找操作,性能差。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于非易失性内存的可在线恢复的对象分配器设计方法,其充分利用非易失性内存的特点,采用版本阵列的取消在分配和释放的时候的持久化操作,并在故障发生后能够在线地对分配信息进行恢复,提高对象分配器在正常运行情况下以及故障恢复时的性能。
为达到上述目的,本发明所采用的技术方案如下:
一种基于非易失性内存的可在线恢复的对象分配器设计方法,包括:
存储,在非易失性内存使用版本阵列(Version Map)管理对象分配信息,每个可分配对象使用两个版本号进行标识:出生版本(birth-gen)以及检查版本(check-gen)。此外有一个最新版本号(latest-gen)表示当前系统的版本。
加载,分配器读取存储在非易失性内存中的版本阵列,并将其转化为易失性内存中的数据结构(如空闲链表);
分配,查找易失性内存中的数据结构,在找到合适的空闲内存区间之后,将易失性内存数据结构中的相关地方标记为已分配,且在其对应的非易失性内存的版本阵列中,保存此分配对象的出生版本和检查版本为当前的最新版本号;
释放,在易失性内存数据结构中进行查找,在找到相应的内存区域之后,将其易失性内存数据结构中相应地方标记为未分配,且在其对应的非易失性内存版本阵列中,将此分配对象的出生版本和检查版本均标记为0;
恢复准备,在系统发生故障或因断电而重启后,将非易失性内存中的最新版本号加一,并将其持久化,随后分配器执行加载阶段。在加载阶段执行后,分配器可根据已持久化的分配信息处理请求,同时恢复进程启动;
在线恢复,恢复进程从非易失性内存中保存的数据根部开始,首先检查根部的完整性,随后根据指针的指向遍历所有的对象并进行检查,当一个对象中保存的所有指针都已经被检查完毕之后,此对象的检查版本可被更新为当前的最新版本号。
优选的,在线恢复阶段时,对于通过指针相关联的两个对象1和对象2,首先检查对象2是否均已经被分配以及完整的持久化,若其未被分配或未被完整持久化,则该指针被删除,已分配但未为完整持久化的对象交由上层应用决定如何处理和回收,若对象2已被分配且自身完整,则检查对象2的出生版本是否小于等于对象1的检查版本号,如果不是,则说明对象2在建立此指针关系时的分配信息未被持久化,此时已经被重新分配,所以将此指针删除。
优选地,所述分配和释放阶段中,不需要对分配信息进行持久化操作。
优选地,所述在线恢复阶段进行的同时,可以处理分配和释放请求。
优选地,所述在线恢复阶段进行时,一个对象只有在被检查之后才可以进行修改操作。
优选地,所述在线恢复阶段不依赖于易失性内存的数据结构,易失性内存中的数据结构只是用来加速分配和释放请求。
与现有技术相比,本发明具有如下的有益效果:本发明提出的基于非易失性内存的可在线恢复对象分配器设计方法,采用版本阵列的方法为每个分配对象保存两个版本号,能够消除在分配和释放的时的持久化操作,在故障发生后能够在对分配信息进行恢复的同时,根据已经持久化的信息处理新的请求,提高了正常运行情况下以及在故障发生后对象分配的性能,减少了因故障宕机和恢复导致的服务中断时间。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明提出的基于非易失性内存的可在线恢复对象分配器设计方法存储结构图;
图2是本发明提出的基于非易失性内存的可在线恢复对象分配器设计方法存储中的在线恢复示例。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
如图1所示,本发明基于非易失性内存的可在线恢复的对象分配器设计方法包括以下方面:
一,存储结构,在非易失性内存使用版本阵列(Version Map)管理对象分配信息,每个可分配对象使用两个版本号进行标识:出生版本(birth-gen)以及检查版本(check-gen)。此外有一个最新版本号(latest-gen)表示当前系统的版本;
二,加载阶段,分配器读取存储在非易失性内存中的版本阵列,并将其转化为易失性内存中的数据结构,如图中易失性内存中的空闲链表,此步骤将内存分配信息以更高效的方式表示,用以加快分配和释放操作的处理;
三,分配,查找易失性内存中的空闲链表结构,在找到合适的空闲内存区间之后,将易失性内存数据结构中的相关地方标记为已分配,且在其对应的非易失性内存的版本阵列中,保存此分配对象的出生版本和检查版本为当前的最新版本号,但不执行持久化操作;
四,释放,将要释放的内存区间插入到空闲链表中,将其易失性内存数据结构中相应地方标记为未分配,且在其对应的非易失性内存版本阵列中,将此分配对象的出生版本和检查版本均标记为0,但不执行持久化操作;
五,恢复准备阶段,在系统发生故障或因断电而重启后,将非易失性内存中的最新版本号加一,并将其持久化,随后分配器执行加载阶段。在加载阶段执行后,分配器可直接被使用,同时恢复进程启动;
六,在线恢复阶段,恢复进程从非易失性内存中保存的数据根部开始,根据之指针的指向遍历所有的对象并进行检查。对于通过指针相关联的两个对象(假设对象1有指针指向对象2),首先检查对象2是否均已经被分配以及完整的持久化。若其未被分配或未被完整持久化,则该指针被删除,已分配但未为完整持久化的对象交由上层应用决定如何处理和回收。若对象2已被分配且自身完整,则检查对象2的出生版本是否小于等于对象1的检查版本号。如果不是,则说明对象2在建立此指针关系时的分配信息未被持久化,此时已经被重新分配,所以将此指针删除(如图2中断开的箭头)。当一个对象中保存的所有指针都已经被检查完毕之后,此对象的检查版本可被更新为当前的最新版本号。
图2是本发明提出的基于非易失性内存的可在线恢复对象分配器设计方法存储中的在线恢复示例。本示例中,方框表示一个数据对象,箭头表示指针关系,方框右下角的数字表示该数据对象的出生版本和检查版本。当前的最新版本号为5。图中的恢复操作正在进行,曲线左方的区域已经检查完毕,其中对象的检查版本均被更新为当前版本号(即5);而右方区域的对象还未被检查。由于恢复为在线恢复,在已经被检查的元素上可以进行其他操作。因而对象C由于其之前的分配信息未被持久化(可看出在故障之前,对象C被分配,且对象B指向了对象C),在故障之后被重新分配给对象A。此时,当检查对象时B,会发现对象B指向了对象C,但是对象C的出生版本(即5)比对象B的检查版本(即4)要大,因而检查不通过,B指向C的指针关系(图中断开的箭头)被取消,以确保随后程序的正确运行。
在分配和释放阶段中,不需要对分配信息进行持久化操作。
在线恢复阶段进行的同时,可以处理分配和释放请求。
在线恢复阶段进行时,一个对象只有在被检查之后才可以进行修改操作。
在线恢复阶段不依赖于易失性内存的数据结构,易失性内存中的数据结构只是用来加速分配和释放请求。
综上所述,本发明提出的基于非易失性内存的可在线恢复的对象分配器设计方法,采用版本阵列的方法为每个分配对象保存两个版本号,能够取消在分配和释放的时候的持久化操作,且在故障发生后能够在对分配信息进行恢复的同时,根据已经持久化的信息处理新的请求,提高了正常运行情况下以及在故障发生后对象分配的性能,减少了因故障宕机和恢复导致的服务中断时间。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (7)
1.一种基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,包括:
存储,在非易失性内存使用版本阵列管理对象分配信息,每个可分配对象使用两个版本号进行标识,分别为出生版本和检查版本,另有一个最新版本号表示当前系统的版本;
加载,分配器读取存储在非易失性内存中的版本阵列,并将其转化为易失性内存中的数据结构;
分配,查找易失性内存中的数据结构,在找到合适的空闲内存区间之后,将易失性内存数据结构中的相关地方标记为已分配,且在其对应的非易失性内存的版本阵列中,保存此分配对象的出生版本和检查版本为当前的最新版本号;
释放,在易失性内存数据结构中进行查找,在找到相应的内存区域之后,将其易失性内存数据结构中相应地方标记为未分配,且在其对应的非易失性内存版本阵列中,将此分配对象的出生版本和检查版本均标记为0;
恢复准备,在系统发生故障或因断电而重启后,将非易失性内存中的最新版本号增加,并将其持久化,随后分配器执行加载阶段,在加载阶段执行后,分配器可根据已持久化的分配信息处理请求,同时恢复进程启动;
在线恢复,恢复进程从非易失性内存中保存的数据根部开始,首先检查根部的完整性,随后根据指针的指向遍历所有的对象并进行检查,当一个对象中保存的所有指针都已经被检查完毕之后,此对象的检查版本可被更新为当前的最新版本号。
2.根据权利要求1所述的基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,在线恢复阶段,对于通过指针相关联的两个对象1和对象2,首先检查对象2是否均已经被分配以及完整的持久化,若其未被分配或未被完整持久化,则该指针被删除,已分配但未为完整持久化的对象交由上层应用决定如何处理和回收,若对象2已被分配且自身完整,则检查对象2的出生版本是否小于等于对象1的检查版本号,如果不是,则说明对象2在建立此指针关系时的分配信息未被持久化,此时已经被重新分配,所以将此指针删除。
3.根据权利要求1所述的基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,在分配和释放阶段中,不需要对分配信息进行持久化操作。
4.根据权利要求1所述的基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,在线恢复阶段进行的同时,能处理分配和释放请求。
5.根据权利要求1所述的基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,在线恢复阶段进行时,一个对象只有在被检查之后才可进行修改操作。
6.根据权利要求1所述的基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,在线恢复阶段不依赖于易失性内存的数据结构,易失性内存中的数据结构只是用来加速分配和释放请求。
7.根据权利要求1所述的基于非易失性内存的可在线恢复的对象分配器设计方法,其特征在于,在线恢复能适用于多次重复故障后的恢复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611060153.0A CN106598730B (zh) | 2016-11-24 | 2016-11-24 | 基于非易失性内存的可在线恢复对象分配器设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611060153.0A CN106598730B (zh) | 2016-11-24 | 2016-11-24 | 基于非易失性内存的可在线恢复对象分配器设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106598730A true CN106598730A (zh) | 2017-04-26 |
CN106598730B CN106598730B (zh) | 2020-06-12 |
Family
ID=58594095
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611060153.0A Active CN106598730B (zh) | 2016-11-24 | 2016-11-24 | 基于非易失性内存的可在线恢复对象分配器设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598730B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107728937A (zh) * | 2017-09-15 | 2018-02-23 | 上海交通大学 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
CN113515501A (zh) * | 2021-06-21 | 2021-10-19 | 清华大学 | 非易失性内存数据库管理系统恢复方法、装置和电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070130238A1 (en) * | 2005-12-07 | 2007-06-07 | Microsoft Corporation | Garbage collector support for transactional memory |
US20090249001A1 (en) * | 2008-03-31 | 2009-10-01 | Microsoft Corporation | Storage Systems Using Write Off-Loading |
CN101646993A (zh) * | 2006-12-06 | 2010-02-10 | 弗森多系统公司(dba弗森-艾奥) | 恢复固态存储器内的存储空间的装置、系统和方法 |
US20100106753A1 (en) * | 2008-10-24 | 2010-04-29 | Microsoft Corporation | Cyclic commit transaction protocol |
CN103984605A (zh) * | 2013-02-08 | 2014-08-13 | 希捷科技有限公司 | 在多层存储器结构中存储纠错码 |
CN104937576A (zh) * | 2013-03-28 | 2015-09-23 | 惠普发展公司,有限责任合伙企业 | 协调存储在基于非易失性存储器的系统中的数据的复制 |
-
2016
- 2016-11-24 CN CN201611060153.0A patent/CN106598730B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070130238A1 (en) * | 2005-12-07 | 2007-06-07 | Microsoft Corporation | Garbage collector support for transactional memory |
CN101646993A (zh) * | 2006-12-06 | 2010-02-10 | 弗森多系统公司(dba弗森-艾奥) | 恢复固态存储器内的存储空间的装置、系统和方法 |
US20090249001A1 (en) * | 2008-03-31 | 2009-10-01 | Microsoft Corporation | Storage Systems Using Write Off-Loading |
US20100106753A1 (en) * | 2008-10-24 | 2010-04-29 | Microsoft Corporation | Cyclic commit transaction protocol |
CN103984605A (zh) * | 2013-02-08 | 2014-08-13 | 希捷科技有限公司 | 在多层存储器结构中存储纠错码 |
CN104937576A (zh) * | 2013-03-28 | 2015-09-23 | 惠普发展公司,有限责任合伙企业 | 协调存储在基于非易失性存储器的系统中的数据的复制 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107728937A (zh) * | 2017-09-15 | 2018-02-23 | 上海交通大学 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
CN107728937B (zh) * | 2017-09-15 | 2020-09-04 | 上海交通大学 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
CN113515501A (zh) * | 2021-06-21 | 2021-10-19 | 清华大学 | 非易失性内存数据库管理系统恢复方法、装置和电子设备 |
CN113515501B (zh) * | 2021-06-21 | 2022-10-25 | 清华大学 | 非易失性内存数据库管理系统恢复方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106598730B (zh) | 2020-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425592B (zh) | 一种多进程系统中的内存管理方法及装置 | |
CN106980636A (zh) | 保单数据处理方法和装置 | |
CN1179281C (zh) | 利用逻辑闪速存储器件进行最小单元更新的方法和设备 | |
EP0249090A2 (en) | Database index journaling for enhanced recovery | |
EP3462324B1 (en) | Pointers in a memory managed system | |
US20150058295A1 (en) | Data Persistence Processing Method and Apparatus, and Database System | |
US8200627B2 (en) | Journaling database changes using a bit map for zones defined in each page | |
CN105930500A (zh) | 数据库系统中事务恢复的方法与数据库管理系统 | |
CN104685474B (zh) | 用于处理不可纠正的内存错误的方法及非瞬态处理器可读介质 | |
US6971102B2 (en) | Computer system, memory management method, storage medium and program transmission apparatus | |
US20190324947A1 (en) | Method, device and computer program product for deleting snapshots | |
US20240289389A1 (en) | Graph data loading | |
CN103902407A (zh) | 一种虚拟机恢复方法及服务器 | |
CN106598730A (zh) | 基于非易失性内存的可在线恢复对象分配器设计方法 | |
US20080320494A1 (en) | Data processing method, data processing apparatus, and data processing program | |
WO2015183316A1 (en) | Partially sorted log archive | |
CN103984639B (zh) | 一种动态内存分配方法 | |
CN107644041A (zh) | 保单结算处理方法和装置 | |
CN103699681B (zh) | 数据回滚的处理方法和装置 | |
CN101615136B (zh) | linux环境下快速转换调用堆栈地址的系统及方法 | |
US20150379788A1 (en) | Method for managing fault messages of a motor vehicle | |
DE69626263T2 (de) | System zur Zuteilung mehrerer Befehle ohne Verzweigungsunterbrechung in einem Pipelineprozessor | |
CN105988885A (zh) | 基于补偿回滚的操作系统故障自恢复方法 | |
CN115422231A (zh) | 一种数据页处理方法、装置、电子设备及介质 | |
CN113919261A (zh) | 一种基于数据并行的数字电路静态学习方法及系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |