CN111240588B - 一种持久性内存对象存储系统 - Google Patents
一种持久性内存对象存储系统 Download PDFInfo
- Publication number
- CN111240588B CN111240588B CN201911418599.XA CN201911418599A CN111240588B CN 111240588 B CN111240588 B CN 111240588B CN 201911418599 A CN201911418599 A CN 201911418599A CN 111240588 B CN111240588 B CN 111240588B
- Authority
- CN
- China
- Prior art keywords
- persistent
- client
- server
- metadata
- persistent memory
- 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.)
- Active
Links
- 230000002085 persistent effect Effects 0.000 title claims abstract description 155
- 238000000034 method Methods 0.000 claims abstract description 38
- 230000008569 process Effects 0.000 claims abstract description 21
- 230000007246 mechanism Effects 0.000 claims abstract description 16
- 238000011084 recovery Methods 0.000 claims abstract description 15
- 238000012545 processing Methods 0.000 claims abstract description 12
- 230000003993 interaction Effects 0.000 claims abstract description 4
- 238000004064 recycling Methods 0.000 claims description 9
- 230000002688 persistence Effects 0.000 claims description 8
- 238000005516 engineering process Methods 0.000 claims description 5
- 238000003672 processing method Methods 0.000 claims description 4
- 230000015556 catabolic process Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000007334 memory performance Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0607—Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0261—Garbage collection, i.e. reclamation of unreferenced memory using reference counting
-
- 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
- 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
-
- 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/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种持久性内存对象存储系统,包括:客户端和服务端;客户端向用户提供对象操作接口,以及通过远程过程调用进行交互;服务端用于对来自客户端的元数据请求进行处理,并通过远程过程调用将结果返回给客户端;服务端基于持久性内存空间分配器管理对象数据,通过三级索引结构进行对象索引,通过持久性对象操作日志实现系统崩溃一致性;客户端远程访问对象时,客户端直接完成数据读写请求,由客户端发起远程过程调用,由服务端间接完成元数据更新工作;通过持久性对象操作日志和Epoch结合的垃圾回收机制,由独立的后台线程批量地进行垃圾回收工作。该系统能够同时提供高效的读写性能、容量可扩展能力以及崩溃后恢复能力。
Description
技术领域
本发明涉及持久性内存存储技术领域,特别涉及一种持久性内存对象存储系统。
背景技术
持久性内存(Persistent Memory,PM)是一种新型的具有字节寻址能力的内存级存储器件,诸如相变存储器(Phase Change Memory,PCM)、自旋矩存储器(Spin-TorqueTransfer RAM,STT-RAM)以及阻变存储器(Resistive RAM,RRAM)等都属于持久性内存器件,Intel还推出了全新的持久性内存设备英特尔傲腾数据中心持久性内存(Intel OptaneDC persistent memory)。相较于传统磁盘等块设备,持久性内存在保证数据持久化的基础上,还能够提供更高的带宽和更低的读写延迟同时还能够支持按照字节粒度访问,而相较于动态随机存取存储器(Dynamic Random Access Memory,DRAM)而言,持久性内存又能够实现数据的持久化,因此持久性内存不仅具有同DRAM相近的读写性能,同时又能提供类似传统磁盘等外存类似的持久性。面对高性能的存储器件,构建能够充分发挥持久性内存性能的高效对象存储系统具有重要意义。
对象存储(Object Storage)是一种重要的数据存储方式,对象存储不同于文件存储,不存在树状的文件名字空间,各对象之间没有依赖关系,所有对象呈现出扁平化的拓扑结构。长久以来,对象存储系统构建于传统磁盘等块设备之上,也就是说,包括对象存储的元数据和对象数据都存储于磁盘这样的块设备上。然而,磁盘的带宽小,延迟高,将元数据存储在磁盘上的做法难以支持对元数据的更高效的并发更新操作,同时,将数据存储在磁盘上的做法难以提供对数据更高带宽,更低延迟的访问。
现有的一些设计提出在持久性内存上按照原有的方法构建对象存储系统。通过使用持久性内存替换原有的磁盘之类的块设备,以利用持久性内存的低延迟访问特性,加速对元数据和数据访问。然而,这样的方法并没能充分利用持久性内存能够支持以字节粒度访问的特点,并且当硬件开销大大降低后,传统的设计方法会在软件层面造成巨大的时间开销。
单纯的将传统的对象存储系统设计照搬到持久性内存上去,并不能充分的利用持久性内存的优点,发挥持久性内存这一新兴硬件的性能。不改变已有的软件设计,难以降低软件层面的性能损失。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的目的在于提出一种持久性内存对象存储系统,能够同时提供高效的读写性能、容量可扩展能力以及崩溃后恢复能力。
为达到上述目的,本发明实施例提出了一种持久性内存对象存储系统,包括:客户端和服务端;
所述客户端向用户提供对象操作接口,以及通过远程过程调用进行交互;
所述服务端用于对来自所述客户端的元数据请求进行处理,并通过远程过程调用将结果返回给所述客户端;
所述服务端包括:持久性内存空间分配管理器、从粗粒度到细粒度的三级索引结构、持久性对象操作日志和垃圾回收机制;
所述服务端基于所述持久性内存空间分配器管理对象数据,通过所述三级索引结构进行对象索引,通过所述持久性对象操作日志实现系统崩溃一致性;
所述客户端远程访问对象时,所述客户端直接完成数据读写请求,由所述客户端发起远程过程调用,由所述服务端间接完成元数据更新工作;
通过所述持久性对象操作日志和Epoch结合的垃圾回收机制,由独立的后台线程批量地进行垃圾回收工作。
本发明实施例的一种持久性内存对象存储系统,借助高速存储硬件特性,设计更适合于持久性内存的对象元数据组织管理方式,能够同时提供高效的读写性能、容量可扩展能力以及崩溃后恢复能力。
另外,根据本发明上述实施例的一种持久性内存对象存储系统还可以具有以下附加的技术特征:
进一步地,在本发明的一个实施例中,所述服务端和所述客户端均允许多个实例同时存在,所述服务端存储有服务端内部对象编号计数器和全局唯一的服务端实例编号。
进一步地,在本发明的一个实施例中,所述对象包括对象元数据和对象数据,所述对象元数据和所述对象数据均持久性地存储于持久性内存中;其中,所述对象元数据中包括全局唯一的对象标识符,用于索引所述对象,所述对象标识符由所述服务端在所述对象创建时生成,通过所述对象标识符确定一个唯一的对象。
进一步地,在本发明的一个实施例中,所述持久性内存空间分配器管理的持久性内存空间分为元数据区和数据区两种,所述元数据区用于存放所述对象索引和所述持久性对象操作日志,所述数据区用于存放对象内部数据。
进一步地,在本发明的一个实施例中,所述粗粒度到细粒度的三级索引结构包括:全局服务端实例索引、可扩展持久性哈希的对象元数据索引和数据块索引的三级索引结构;
所述全局服务端实例索引采用一致性哈希的方法用于指示存储给定的对象标识符对应的对象所属的服务端实例编号;
所述可扩展持久性哈希的对象元数据索引采用可扩展的持久性哈希表结构,以索引服务端实例中给定的对象标识符对应的对象的元数据所在地址;
所述数据块索引采用持久性跳表结构索引对象内部数据块。
进一步地,在本发明的一个实施例中,所述通过持久性对象操作日志实现系统崩溃一致性,包括:
所述持久性内存对象存储系统在更新元数据前记录所述持久性对象操作日志,所述持久性对象操作日志存储于持久性内存中,在确定所述持久性对象操作日志的日志项已被持久性化后,所述持久性内存对象存储系统再进行元数据更新操作,日志项在操作全部完成后被销毁,在所述持久性内存对象存储系统崩溃后的恢复阶段,通过重放所述持久性对象操作日志使所述持久性内存对象存储系统达到一致状态。
进一步地,在本发明的一个实施例中,所述客户端的写入对象操作包括:空间分配、数据直写和元数据更新三个阶段;
在所述空间分配阶段,所述客户端通过只读索引查找所述服务端信息并发送空间分配请求,所述服务端通过所述持久性内存空间分配器分配相应空间,并返回持久性内存空间地址;
在所述数据直写阶段,所述客户端在接收到新分配的持久性内存空间地址后,通过RDMA技术将数据直接写入到持久性内存中;
在所述元数据更新阶段,所述客户端向所述服务端发送元数据更新请求,所述服务端更新对象索引信息并返回给所述客户端,写入操作结束。
进一步地,在本发明的一个实施例中,所述客户端的读取对象操作包括:元数据获取、数据直读和对象解锁三个阶段;
在所述元数据获取阶段,所述客户端从所述服务端获取对象内部索引信息;
在所述数据直读阶段,所述客户端通过RDMA直接读取对象数据;
在所述对象解锁阶段,所述客户端向所述服务端发送解锁请求。
进一步地,在本发明的一个实施例中,所述通过所述持久性对象操作日志和Epoch结合的垃圾回收机制,包括:
所述持久性对象操作日志为环形队列,包含多个日志项,每个日志项大小相同,日志项在对象操作过程中产生,由后台线程销毁;
在执行元数据更新操作前,所述持久性内存对象存储系统将操作信息和有关的垃圾回收信息连带操作发生的时间戳同时记录到日志项中,并做持久化处理,而后进行元数据更新操作并返回,后续垃圾回收操作由所述后台线程执行;
所述后台线程执行完日志项记录的垃圾回收操作后,销毁对应的日志项。
进一步地,在本发明的一个实施例中,所述后台线程在处理日志项时,采用批量处理的方法,批量处理的程度根据系统负载情况实时调整。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为根据本发明一个实施例的持久性内存对象存储系统结构示意图;
图2为根据本发明一个实施例的对象标识符示意图;
图3为根据本发明一个实施例的持久性内存分配器的示意图;
图4为根据本发明一个实施例的对象索引的示意图;
图5为根据本发明一个实施例的日志和垃圾回收机制示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参照附图描述根据本发明实施例提出的一种持久性内存对象存储系统。
图1为根据本发明一个实施例的持久性内存对象存储系统结构示意图。
如图1所示,该持久性内存对象存储系统包括:客户端和服务端。
客户端向用户提供对象操作接口,以及通过远程过程调用进行交互;服务端用于对来自客户端的元数据请求进行处理,并通过远程过程调用将结果返回给客户端;
服务端包括:持久性内存空间分配管理器、从粗粒度到细粒度的三级索引结构、持久性对象操作日志和垃圾回收机制;
服务端基于持久性内存空间分配器管理对象数据,通过三级索引结构进行对象索引,通过持久性对象操作日志实现系统崩溃一致性;
客户端远程访问对象时,客户端直接完成数据读写请求,由客户端发起远程过程调用,由服务端间接完成元数据更新工作;
通过持久性对象操作日志和Epoch结合的垃圾回收机制,由独立的后台线程批量地进行垃圾回收工作。
可以理解的是,持久性内存是一种具有类似于DRAM的字节寻址能力同时又能提供数据持久性的新型存储器件。持久性内存对象存储系统是构建于持久性内存上的对象存储系统,对象存储系统以持久性内存作为数据存储设备。如图1所示,对象存储系统由两个组件组成:客户端和服务端。客户端和服务端均工作在用户态。客户端向用户提供对象操作接口如:创建对象、删除对象、读取对象、写入对象等,并通过远程过程调用同服务端通信。服务端处理来自客户端的元数据请求,并通过远程过程调用将结果返回给客户端。
进一步地,服务端和客户端允许多个实例同时存在,在服务端存储有服务端内部对象编号计数器以及全局唯一的服务端实例编号。
在本发明的实施例中,所述对象包括对象元数据和对象数据,所述对象元数据和所述对象数据均持久性地存储于持久性内存中;其中,所述对象元数据中包括全局唯一的对象标识符,用于索引所述对象,所述对象标识符由所述服务端在所述对象创建时生成,通过所述对象标识符确定一个唯一的对象。
具体地,对象标识符用于索引一个对象,对象标识符包含在对象元数据中,如图2所示,对象标识符长度固定为128比特。在服务端中,维护了服务端实例编号和实例内部对象编号计数器,分别为64比特无符号整数。其中,服务端实例编号全局唯一,每当有新的服务端实例生成时,服务端实例编号进行累加,服务端内部对象编号计数器单调递增,记录本服务端实例内部分配的最大对象编号,二者结合生成全局唯一的对象标识符,服务端实例编号占据高64位,服务端内部对象编号计数器的值占据低64位。
进一步地,持久性内存空间分配器管理的持久性内存空间分为元数据区和数据区两种,元数据区用于存放对象索引和持久性对象操作日志,数据区用于存放对象内部数据。
具体地,持久性内存空间分配器管理持久性内存空间以存储对象数据,如图3所示,其中,分配器管理的持久性内存空间分为元数据区和数据区两种,元数据区用于存放持久性内存对象索引和对象操作日志,数据区用于存放对象内部数据。元数据区采用日志结构的分配策略,将持久性内存空间组织成固定大小的内存块,多个内存块组成链表结构,图中阴影部分表示已经分配的持久性内存空间,由head和tail指定。数据区采用红黑树和持久性位图结合的分配策略,数据区在分配时,最小粒度为页面,每次分配的大小都是页面的整数倍。红黑树存储在内存中,树中节点记录大小不同的持久性内存地址空间,持久性位图存储在持久性内存中,位图中每一位代表对应持久性内存一个页面。红黑树可在恢复过程中有持久性位图进行重建。
进一步地,粗粒度到细粒度的三级索引结构包括:全局服务端实例索引、可扩展持久性哈希的对象元数据索引和数据块索引的三级索引结构。
全局服务端实例索引采用一致性哈希的方法用于指示存储给定对象标识符对应的对象所处的服务端实例编号。全局服务端实例索引采用一致性哈希方法,引入虚拟节点概念,多个虚拟节点可存在于同一个服务端实例上,根据一致性哈希服务端实例索引将对象标识符映射到不同的虚拟节点上,再根据虚拟节点找到对应的服务端实例,采用一致性哈希方法可以适应服务端实例的动态变化。为了方便客户端使用服务端实例索引,在客户端保存服务端实例索引的只读副本,通过该只读副本,客户端可根据对象标识符找到服务端实例,并与之通信。当服务端实例索引发生更新时,应将更新扩散到所有客户端上,服务端和客户端通过版本号决定所使用的服务端实例索引是否为最新版本。
可扩展持久性哈希的对象元数据索引采用可扩展的持久性哈希表结构,以索引服务端实例中给定的对象标识符对应的对象的元数据所在地址。数据块索引采用持久性跳表结构索引对象内部数据块。
在本发明的一个实施例中,基于可扩展持久性哈希的元数据索引和对象数据块索引均存储在服务端上,图4示出了两种索引:基于可扩展持久性哈希的元数据索引,采用可扩展哈希结构,如图4(a)所示,索引结构包括存储于内存中的树状索引节点和存储于持久性内存上的呈日志结构的哈希桶,用于索引给定对象标识符对象的元数据所在地址,一个哈希桶中包含固定数量的哈希表项,每个哈希表项记录着对象标识符和对象元数据块所在地址。其中存储于内存中的树状索引能够在恢复过程中通过存储在持久性内存上的哈希桶重建。当使用可扩展哈希结构时,将对象标识符进行哈希生成64位哈希值,根据哈希值的最高有效位(MSB),通过树状索引结构,索引对应的哈希桶,在哈希桶内,以哈希值低位起固定位数的值作为哈希桶内偏移,找到哈希桶内的哈希表项。在没有哈希冲突的情况下,查找和插入过程中,通过使用原子指令实现无锁地查找哈希表或者插入新的值。当出现哈希冲突时,采用分裂哈希桶的方法进行动态哈希表扩展。
作为具体示例,如图4(a),分裂前哈希表内存在两个哈希桶分别为0号和1号哈希桶,假设0号哈希桶容量已满需要分裂时,申请新的哈希桶2号,初始0号哈希桶对应的哈希值的最高有效位为0,将最高有效位扩展一位,变为00和01,建立相应的树状索引节点,对原来0号哈希桶中的哈希表项进行分类,哈希值最高有效位为00的仍然留在0号哈希桶中,哈希值最高有效位为01的拷贝到2号哈希桶中,1号哈希桶保持不变。另外,在分裂过程中,可采用延迟拷贝(Lazy-copy)方法,只拷贝哈希桶内偏移值冲突的索引项以达到腾出空间的目的,快速插入引起冲突的哈希表项,哈希桶内其他哈希表项的拷贝,可以延后到后续的分裂过程中,同时,为了保证正确性,哈希桶内的哈希表项设有标记位,当标记位被置位时,表示该哈希表项可能存储在临近的哈希桶中,在查找时应该查找临近哈希桶。
在本发明的一个实施例中,在基于可扩展持久性哈希的元数据索引中,一个哈希表项中记录着对应对象的元数据块地址,图4(b)示出了对象元数据块结构,其中主要包含以下几个字段:对象标识符、对象大小、对象版本信息、对象锁字段、对象数据块索引。对象数据块索引结构如图4(b)所示,采用跳表结构作为对象数据块索引,其中跳表中每个节点对应一段对象数据,多个节点之间按照对象内数据偏移进行排序,多个节点之间的数据区间不会重叠。跳表中所有节点均存储于持久性内存上,由持久性内存分配器分配。
进一步地,在本发明的一个实施例中,在持久性内存对象存储系统发生崩溃时,通过持久性对象操作日志实现系统崩溃一致性。
具体地,为保证对象操作的原子性,持久性内存对象存储系统在更新元数据前记录持久性对象操作日志,持久性对象操作日志存储于持久性内存中,在确定持久性对象操作日志的日志项已被持久性化后,持久性内存对象存储系统再进行元数据更新操作,日志项在操作全部完成后被销毁,在持久性内存对象存储系统崩溃后的恢复阶段,通过重放持久性对象操作日志使持久性内存对象存储系统达到一致状态。
在本发明的一个实施例中,采用基于锁的方法控制对对象的并发操作,具体地说,通过对象元数据块中的锁字段控制对对象的并发访问操作。
在本发明的一个实施例中,对象操作可以为对象创建、对象写入、对象读取、对象删除等操作,采用基于锁的并发机制来控制对于对象的并发操作,锁字段存在于对象元数据块中,锁字段本身存储于持久性内存上,但是不必特意地对锁字段进行持久化。在使用锁字段时,通过原子操作对锁字段进行加锁和解锁,通过在锁字段中嵌入版本信息,能够在崩溃后的恢复阶段识别出该锁字段的状态并进行恢复,恢复到解锁状态。在对象操作时,采用将数据操作与元数据操作解耦的方式,由客户端直接完成数据读写请求,元数据更新请求由服务端完成。这样的设计方式减轻了服务端的工作压力,提高了服务端的带宽。
进一步地,写入对象操作包括三个阶段:空间分配、数据直写和元数据更新。在空间分配阶段,客户端通过只读索引查找服务端信息并发送空间分配请求,服务端通过持久性内存空间分配器分配相应空间,并返回持久性内存空间地址;在数据直写阶段,客户端在接收到新分配的空间地址后,通过RDMA技术将数据直接写入到对应地址的持久性内存中,并进入元数据阶段;在元数据更新阶段,客户端向服务端发送元数据更新请求,服务端更新对象索引信息并将结果返回给客户端,至此,写入操作结束。在写入操作中,以页面为粒度,采用写时复制技术保证写操作的完整性和一致性。
进一步地,读取对象操作包括三个阶段:元数据获取、数据直读和对象解锁。在元数据获取阶段,客户端向服务端发送元数据获取请求,服务端根据请求中指定的数据区间,查找对象数据块索引,将数据区间地址信息返回给客户端;客户端收到数据区间地址信息后,进入数据直读阶段,客户端通过RDMA直接读取对象数据;在解锁对象阶段,客户端向服务端发送解锁请求。
通过所述持久性对象操作日志和Epoch结合的垃圾回收机制,包括:
持久性对象操作日志为环形队列,包含多个日志项,每个日志项大小相同,日志项在对象操作过程中产生,由后台线程销毁;
在执行元数据更新操作前,持久性内存对象存储系统将操作信息和有关的垃圾回收信息连带操作发生的时间戳同时记录到日志项中,并做持久化处理,而后进行元数据更新操作并返回,后续垃圾回收操作由后台线程执行;
后台线程执行完日志项记录的垃圾回收操作后,销毁对应的日志项。
后台线程在处理日志项时,采用批量处理的方法,批量处理的程度根据系统负载情况实时调整。
在本发明的实施例中,持久性内存对象存储系统采用基于Epoch和日志结合的一致性机制和垃圾回收机制。首先,持久性内存对象存储系统在执行对象操作时,面临着系统崩溃或者掉电的危险,为了保持数据一致性并实现崩溃后恢复,采用记录日志的方法,在执行对象操作前,将操作的有关信息记录下来,形成日志,之后即便是发生故障,根据已经形成的日志,仍能够继续没有完成的操作。其次,由于在索引结构中使用了无锁化技术使得需要将某些垃圾回收工作延后,直到能够保证再不会有对于被回收对象的引用时,才能安全地进行垃圾回收工作。所以,持久性内存对象存储系统采用了基于Epoch和日志结合的一致性机制和垃圾回收机制。
如图5所示,持久性对象操作日志表现为环形队列,包含多个日志项,每个日志项大小相同。队列的头部和尾部由Head和Tail字段指定,队列维护着一个本服务端实例中的日志编号计数器,该日志编号计数器在使用时只能单调递增,Head字段的值即为日志编号计数器的值,Head字段的值对日志队列中日志项总数取余即为队列头部位置。日志项包括日志编号、操作信息、分配空间列表、释放空间列表、时间戳及其他信息。日志编号用于记录该日志项的本服务端实例中唯一的编号,在生成日志项时通过对服务端实例中的日志编号计数器进行原子加操作获得;操作信息记录了本次操作的相关信息(如对象标识符和操作类型等);分配空间列表用于记录本次操作中新分配的空间地址和类型;释放空间列表用于记录本次操作中将要释放的空间地址;时间戳用于在垃圾回收过程中比较标识Epoch先后顺序,每个工作线程均维护一个线程本地的时间戳字段,在执行对象操作之前和之后都会更新该字段。日志项在对象操作过程中产生,由后台线程销毁。
服务端在执行元数据更新操作前,将操作信息和有关的垃圾回收信息连带操作发生的时间戳同时记录到日志项中,并做持久化处理,而后进行元数据更新操作并返回,后续垃圾回收操作由后台线程执行,后台线程执行完该日志项记录的垃圾回收操作后,销毁该日志项。后台线程在处理日志项时,采用批量处理的方法,批量处理的程度根据系统负载情况实时调整,当日志项生成较频繁时,可以适当增加批量程度。日志既具有保障一致性功能,同时也用于垃圾回收工作。
作为具体示例,以写入对象操作为例,在更新对象元数据前记录日志信息,通过原子加指令获取该日志编号,记录对象标识符和操作类型,分配空间列表包括本次写入的数据块编号和长度,以及本次写入操作修改的数据块索引中新生成的节点地址,释放空间列表包括被覆盖的数据块编号和长度以及数据块索引中无效的索引节点的地址。时间戳字段记录当前工作线程的时间戳,日志记录结束,开始执行元数据更新操作。当在后台运行的垃圾回收线程将要回收该日志项时,首先查看该日志项的时间戳字段是否小于所有工作线程的时间戳字段,如果小于,则可以安全的执行垃圾回收操作,更新数据块的位图信息和红黑树信息;如果不小于,后台线程必须等待,直到所有线程的时间戳均大于该日志项时间戳,方可继续垃圾回收操作。
根据本发明实施例提出的一种持久性内存对象存储系统,借助高速存储硬件特性,设计更适合于持久性内存的对象元数据组织管理方式,能够同时提供高效的读写性能、容量可扩展能力以及崩溃后恢复能力。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (9)
1.一种持久性内存对象存储系统,其特征在于,包括:客户端和服务端;
所述客户端向用户提供对象操作接口,以及通过远程过程调用进行交互;
所述服务端用于对来自所述客户端的元数据请求进行处理,并通过远程过程调用将结果返回给所述客户端;
所述服务端包括:持久性内存空间分配管理器、从粗粒度到细粒度的三级索引结构、持久性对象操作日志和垃圾回收机制,其中,所述粗粒度到细粒度的三级索引结构包括:全局服务端实例索引、可扩展持久性哈希的对象元数据索引和数据块索引的三级索引结构;所述全局服务端实例索引采用一致性哈希的方法用于指示存储给定的对象标识符对应的对象所属的服务端实例编号;所述可扩展持久性哈希的对象元数据索引采用可扩展的持久性哈希表结构,以索引服务端实例中给定的对象标识符对应的对象的元数据所在地址;所述数据块索引采用持久性跳表结构索引对象内部数据块;
所述服务端基于所述持久性内存空间分配器管理对象数据,通过所述三级索引结构进行对象索引,通过所述持久性对象操作日志实现系统崩溃一致性;
所述客户端远程访问对象时,所述客户端直接完成数据读写请求,由所述客户端发起远程过程调用,由所述服务端间接完成元数据更新工作;
通过所述持久性对象操作日志和Epoch结合的垃圾回收机制,由独立的后台线程批量地进行垃圾回收工作。
2.根据权利要求1所述的系统,其特征在于,所述服务端和所述客户端均允许多个实例同时存在,所述服务端存储有服务端内部对象编号计数器和全局唯一的服务端实例编号。
3.根据权利要求1所述的系统,其特征在于,
所述对象包括对象元数据和对象数据,所述对象元数据和所述对象数据均持久性地存储于持久性内存中;其中,所述对象元数据中包括全局唯一的对象标识符,用于索引所述对象,所述对象标识符由所述服务端在所述对象创建时生成,通过所述对象标识符确定一个唯一的对象。
4.根据权利要求1所述的系统,其特征在于,所述持久性内存空间分配器管理的持久性内存空间分为元数据区和数据区两种,所述元数据区用于存放所述对象索引和所述持久性对象操作日志,所述数据区用于存放对象内部数据。
5.根据权利要求1所述的系统,其特征在于,所述通过持久性对象操作日志实现系统崩溃一致性,包括:
所述持久性内存对象存储系统在更新元数据前记录所述持久性对象操作日志,所述持久性对象操作日志存储于持久性内存中,在确定所述持久性对象操作日志的日志项已被持久性化后,所述持久性内存对象存储系统再进行元数据更新操作,日志项在操作全部完成后被销毁,在所述持久性内存对象存储系统崩溃后的恢复阶段,通过重放所述持久性对象操作日志使所述持久性内存对象存储系统达到一致状态。
6.根据权利要求1所述的系统,其特征在于,所述客户端的写入对象操作包括:空间分配、数据直写和元数据更新三个阶段;
在所述空间分配阶段,所述客户端通过只读索引查找所述服务端信息并发送空间分配请求,所述服务端通过所述持久性内存空间分配器分配相应空间,并返回持久性内存空间地址;
在所述数据直写阶段,所述客户端在接收到新分配的持久性内存空间地址后,通过RDMA技术将数据直接写入到持久性内存中;
在所述元数据更新阶段,所述客户端向所述服务端发送元数据更新请求,所述服务端更新对象索引信息并返回给所述客户端,写入操作结束。
7.根据权利要求1所述的系统,其特征在于,所述客户端的读取对象操作包括:元数据获取、数据直读和对象解锁三个阶段;
在所述元数据获取阶段,所述客户端从所述服务端获取对象内部索引信息;
在所述数据直读阶段,所述客户端通过RDMA直接读取对象数据;
在所述对象解锁阶段,所述客户端向所述服务端发送解锁请求。
8.根据权利要求1所述的系统,其特征在于,所述通过所述持久性对象操作日志和Epoch结合的垃圾回收机制,包括:
所述持久性对象操作日志为环形队列,包含多个日志项,每个日志项大小相同,日志项在对象操作过程中产生,由后台线程销毁;
在执行元数据更新操作前,所述持久性内存对象存储系统将操作信息和有关的垃圾回收信息连带操作发生的时间戳同时记录到日志项中,并做持久化处理,而后进行元数据更新操作并返回,后续垃圾回收操作由所述后台线程执行;
所述后台线程执行完日志项记录的垃圾回收操作后,销毁对应的日志项。
9.根据权利要求8所述的系统,其特征在于,
所述后台线程在处理日志项时,采用批量处理的方法,批量处理的程度根据系统负载情况实时调整。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911418599.XA CN111240588B (zh) | 2019-12-31 | 2019-12-31 | 一种持久性内存对象存储系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911418599.XA CN111240588B (zh) | 2019-12-31 | 2019-12-31 | 一种持久性内存对象存储系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111240588A CN111240588A (zh) | 2020-06-05 |
CN111240588B true CN111240588B (zh) | 2021-09-24 |
Family
ID=70864823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911418599.XA Active CN111240588B (zh) | 2019-12-31 | 2019-12-31 | 一种持久性内存对象存储系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111240588B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559383B (zh) * | 2020-12-14 | 2024-07-05 | 百果园技术(新加坡)有限公司 | 一种crdt垃圾数据回收方法、装置、设备及存储介质 |
CN112947856B (zh) * | 2021-02-05 | 2024-05-03 | 彩讯科技股份有限公司 | 一种内存数据的管理方法、装置、计算机设备及存储介质 |
CN113010526A (zh) * | 2021-04-19 | 2021-06-22 | 星辰天合(北京)数据科技有限公司 | 基于对象存储服务的存储方法及装置 |
CN114330772A (zh) * | 2021-12-28 | 2022-04-12 | 北京字跳网络技术有限公司 | 一种协同实例的垃圾回收方法、系统、设备、介质及产品 |
CN115017128B (zh) * | 2022-05-26 | 2023-02-10 | 上海介方信息技术有限公司 | 基于corba中间件的轻量级日志服务设计方法及系统 |
CN115904264B (zh) * | 2023-03-13 | 2023-06-13 | 浪潮电子信息产业股份有限公司 | 一种存储系统中块的垃圾数据回收方法、装置以及介质 |
CN118260128A (zh) * | 2024-04-10 | 2024-06-28 | 中国科学院空天信息创新研究院 | 云平台掉电宕机自恢复方法、装置、设备、介质及程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN108694135A (zh) * | 2017-03-31 | 2018-10-23 | 英特尔公司 | 用于在页高速缓存中持久性地高速缓存存储数据的方法和设备 |
CN109408115A (zh) * | 2018-09-12 | 2019-03-01 | 上海数耕智能科技有限公司 | 一种基于容器环境中迁移对象的方法及计算系统 |
CN110377436A (zh) * | 2019-07-12 | 2019-10-25 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8812450B1 (en) * | 2011-04-29 | 2014-08-19 | Netapp, Inc. | Systems and methods for instantaneous cloning |
CN110134514B (zh) * | 2019-04-18 | 2021-04-13 | 华中科技大学 | 基于异构内存的可扩展内存对象存储系统 |
CN110221779B (zh) * | 2019-05-29 | 2020-06-19 | 清华大学 | 分布式持久性内存存储系统的构建方法 |
-
2019
- 2019-12-31 CN CN201911418599.XA patent/CN111240588B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN108694135A (zh) * | 2017-03-31 | 2018-10-23 | 英特尔公司 | 用于在页高速缓存中持久性地高速缓存存储数据的方法和设备 |
CN109408115A (zh) * | 2018-09-12 | 2019-03-01 | 上海数耕智能科技有限公司 | 一种基于容器环境中迁移对象的方法及计算系统 |
CN110377436A (zh) * | 2019-07-12 | 2019-10-25 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111240588A (zh) | 2020-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111240588B (zh) | 一种持久性内存对象存储系统 | |
CN111309270B (zh) | 一种持久性内存键值存储系统 | |
CN106874383B (zh) | 一种分布式文件系统元数据的解耦合分布方法 | |
CN107862064B (zh) | 一个基于nvm的高性能、可扩展的轻量级文件系统 | |
US7103616B1 (en) | Cookie-based directory name lookup cache for a cluster file system | |
US7725437B2 (en) | Providing an index for a data store | |
US7856437B2 (en) | Storing nodes representing respective chunks of files in a data store | |
TW440769B (en) | Parallel file system and method for granting byte range tokens | |
US7418544B2 (en) | Method and system for log structured relational database objects | |
US8825652B1 (en) | Small file aggregation in a parallel computing system | |
CN105868396A (zh) | 内存文件系统的多版本控制方法 | |
US11468011B2 (en) | Database management system | |
Braginsky et al. | Locality-conscious lock-free linked lists | |
US10803006B1 (en) | Persistent memory key-value store in a distributed memory architecture | |
CN107544859B (zh) | 在混合内存系统上用来保证数据一致性的检查点方法 | |
CN112597254B (zh) | 面向混合dram-nvm主存的联机事务型数据库系统 | |
CN113704217A (zh) | 一种分布式持久性内存文件系统中元数据及数据组织架构方法 | |
Pan et al. | Hart: A concurrent hash-assisted radix tree for dram-pm hybrid memory systems | |
WO2016187975A1 (zh) | 内存碎片整理方法及装置 | |
CN117271531B (zh) | 一种数据存储方法、系统、设备及介质 | |
Iwabuchi et al. | Metall: A persistent memory allocator enabling graph processing | |
Hu et al. | Parallel multi-split extendible hashing for persistent memory | |
Chen et al. | A unified framework for designing high performance in-memory and hybrid memory file systems | |
CN116226232A (zh) | 面向分布式数据库的持久内存数据存储方法及系统 | |
CN111274259A (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 |