CN111414134B - 面向持久内存文件系统的事务写优化框架的方法及系统 - Google Patents
面向持久内存文件系统的事务写优化框架的方法及系统 Download PDFInfo
- Publication number
- CN111414134B CN111414134B CN202010104546.7A CN202010104546A CN111414134B CN 111414134 B CN111414134 B CN 111414134B CN 202010104546 A CN202010104546 A CN 202010104546A CN 111414134 B CN111414134 B CN 111414134B
- Authority
- CN
- China
- Prior art keywords
- data
- metadata
- file
- linked list
- log
- 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
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/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- 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)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种面向持久内存文件系统的事务写优化框架的系统及方法,包括:元数据模块:写文件输入元数据模块,元数据模块动态备份写文件系统中的元数据以及支持元数据故障恢复;数据模块写文件输入数据模块,数据模块保证数据的一致性,并在发生故障时恢复一致性状态;原子性决策逻辑模块:当完成元数据模块和数据模块后,判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块。本发明主要针对持久内存文件系统的一致性实现问题,提供一种事务优化读写方法。
Description
技术领域
本发明涉及计算机系统结构技术领域,具体地,涉及一种面向持久内存文件系统的事务写优化框架的方法及系统。
背景技术
一致性是事务的最重要特性之一。文件系统维护数据的一致性状态对技术人员也是一项极大挑战。现有的一致性方法,如日志,将数据的double-write两次写操作执行在一个事务中,使得动作要么全部发生,要么都不发生。持久内存这一新型的存储设备,具有非易失、可字节寻址和高性能等特性,传统的一致性实现无法充分利用存储设备的可字节寻址特性,同时事务自身的局限性,将double-write限制在关键路径上。因此,专门针对持久内存设备的特性设计和优化一种面向持久内存文件系统的事务机制是十分必要且具有积极的意义。同时,现有技术中鲜有这方面的研究。
在本领域,涉及的术语如下:
元数据:描述文件数据的数据,主要是描述文件属性,如文件的大小,文件的访问权限等属性信息
DRAM:Dynamic Random Access Memory,动态随机存储器,即现阶段广泛使用的内存,其特点是断电后信息丢失,理论上读写寿命不受限制。
PM:Persistent Memory,非易失性内存或持久性内存,STTRAM,PCM,RRAM都属于PM,其特点是断电后信息不丢失,可字节寻址;但读写次数受限制,并且读写不均衡,根据材料的不同,PM写耗费时间大概是其读耗费时间的4到10倍,PM读的时间比DRAM慢1到4倍。
Red-black tree:红黑树,是一种自平衡二叉查找树,它是在计算机科学中用来组织数据比如数字的块的一种结构。红黑树中每一个节点的比较值都必须大于或等于在它的左子树中的所有节点,并且小于或等于在它的右子树中的所有节点。这确保红黑树运作时能够快速的在树中查找给定的值。
Radix tree:基数树,一种多叉搜索树,树的叶子节点是实际的数据条目。每个节点有一个固定的指针指向子节点。基数树可以根据一个长整型快速查找到其对应的对象指针。
transaction:事务,一个最小的不可再分的工作单元,恢复和并发控制的基本单位,事务必须由事务开始和事务结束之间执行的全体操作组成。
Inode:是UNIX操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。
double-write:两次写操作,先写入数据的日志区域,然后写到文件数据。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种面向持久内存文件系统的事务写优化框架的系统及方法。
根据本发明提供的一种面向持久内存文件系统的事务写优化框架的系统,包括:
元数据模块:写文件输入元数据模块,动态备份写文件系统中的元数据以及支持元数据故障恢复;
数据模块:写文件输入数据模块,保证写文件数据的一致性,并在发生故障时恢复一致性状态;
原子性决策逻辑模块:当完成元数据模块和数据模块后,原子性决策逻辑模块判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块;
所述元数据模块:动态备份写文件系统中的元数据以及支持元数据故障恢复;
所述数据模块:保证写文件数据的一致性,并在发生故障时恢复一致性状态;
所述原子性决策逻辑模块:由决策原子性逻辑单元组成,用于保障元数据与数据操作的原子性。
优选地,所述元数据模块包括:
元数据模块包括:元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元;
元数据模块M1:在程序运行的初始化阶段,在持久内存中划分出一块持久区域作为元数据备份数据存储管理单元,存放文件元数据备份数据;
元数据模块M2:在程序运行的初始化阶段,在动态随机存储器创建元数据检索管理单元的数据结构;
所述元数据检索管理单元包括:两颗红黑树和一个繁忙链表;
在动态随机存储器中创建两颗红黑树;一颗元数据备份空闲红黑树统计元数据备份数据存储管理单元的空闲插槽;另一颗元数据备份已用红黑树记录元数据备份数据存储管理单元已经使用的插槽;两颗红黑树的节点由最小索引号和最大索引号组成;在初始化阶段,元数据备份已用红黑树是一颗空树;元数据备份空闲红黑树则包含一个节点,所述节点的最小索引号为0,最大索引号为所有插槽的个数减1;
在动态随机存储器中另外创建一颗最近最少使用的红黑树;最近最少使用的红黑树的节点由索引号、最后一次修改时间、链表指针、插槽号四个域组成;在初始化阶段,所述最近最少使用的红黑树是一颗空树;
在动态随机存储器中创建一个繁忙链表,繁忙链表的每一个节点由插槽号、链表指针两个域构成,所述繁忙链表记录当前正在执行操作的元数据,不能被其他的元数据替换;
元数据模块M3:元数据预处理单元以元数据的索引号和最后一次修改时间为索引值,判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元;
当在最近最少使用的红黑树中找到,则当前元数据已经备份,直接本地修改文件元数据信息;
当所述元数据信息在最近最少使用的红黑树中没有找到,则执行操作的元数据并没有备份,查找所述的元数据备份空闲红黑树,当所述的元数据备份空闲红黑树不是空树,即还有空闲插槽分配,则返回空闲插槽号,获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份元数据信息;
当所述的元数据备份空闲红黑树是颗空树,即当前所有插槽都在使用中,则需要剔除一个最近最少使用插槽并写入新的元数据信息;依次遍历最近最少使用的红黑树中的节点,获取节点指向的元数据信息以及所占用的插槽编号;判断当前节点所指向的插槽是否用于记录当前正在执行操作的元数据的繁忙链表,当所述最近最少访问节点所指向的插槽用于记录当前正在执行操作的元数据,即该元数据位于繁忙链表时,则重新遍历下一个最近最少使用的节点;
当所述最近最少访问节点所指向插槽没有用于记录当前正在执行才做的元数据的繁忙链表中,则替换插槽中的元数据信息,同时将最近最少使用节点从最近最少使用的红黑树中删除,添加由新的元数据信息创建的节点;
所述元数据备份数据存储管理单元包括一个动态备份数组,所述动态备份数组中的每一个元素都是一个文件的元数据信息;
所述元数据备份空闲红黑树快速分配和释放元数据备份数据存储管理单元的空闲插槽,红黑树中的每一个节点包括当前节点中最小分配的空闲插槽和最大分配的空闲插槽;
所述元数据备份已用红黑树,记录当前已经做备份的元数据信息,每一个节点由索引节点号、最后一次修改时间、链表指针、空闲插槽号四个域组成;
所述繁忙链表用于记录当前正在执行元数据或文件数据操作的元数据备份地址,即链表中每个节点由链表指针和动态备份数组中的插槽号组成;
所述元数据预处理单元包括:提供对元数据备份数据的预处理操作。
优选地,所述数据模块包括:
数据模块包括:数据备份存储管理单元、数据检索单元、数据合并管理单元和数据写回管理单元;
数据模块M1:在程序执行的初始化阶段,在持久内存中划分出一块持久区域用于存放文件数据和文件数据的日志,文件数据块和文件数据日志块大小相同;
数据模块M2:数据备份存储管理单元中叶子节点由文件数据日志块构成;在程序执行的初始化阶段,在持久内存中划分出一块持久区域作为文件数据日志块的索引区域,即所述数据备份存储管理单元;所述文件数据的日志数据的索引区域记录文件数据日志块的地址信息;日志索引区域中每一个节点由文件写入地址、数据长度、文件数据日志块地址、下一个指针四个域构成;
数据模块M3:数据模块中的数据检索单元由一个全局链表、数据块链表和一颗文件数据日志块索引红黑树构成:
在程序执行的初始化阶段,在持久内存中创建全局链表;
在程序执行的初始化阶段,在动态随机存储器中创建数据检索单元中的数据块链表记录文件数据块和文件数据日志块;所述数据块链表中每一个节点由最小索引号、最大索引号和链表指针三个域构成;
将文件数据日志索引节点组织为一颗红黑树,即所述数据检索单元的文件数据日志块索引红黑树;在分配和释放日志索引节点的过程中,红黑树能够旋转节点以保持树的平衡;将每个文件获得的文件数据日志索引节点组织成基数树;
所述全局链表中的节点即数据备份存储管理单元中基数树的叶子节点;
所述数据块链表记录文件数据块和文件日志数据块的信息;
所述文件数据日志块索引红黑树用于组织文件数据日志块的索引数据节点;
数据模块M4:在程序执行的初始化阶段,在动态随机存储器中创建数据写回管理单元中的写回链表和读写回链表;
写回链表在初始化阶段是空链表,存放的节点是日志索引节点;读写回链表在初始化阶段也是空链表,存放的节点同样是日志索引节点;所述两个链表不会存在重复的日志索引节点;
写回链表存放所有要写回文件的数据,当数据在被写回文件之前被用户访问,则数据从写回链表迁移到读写回链表中;
数据模块M5:在程序执行的初始化阶段,在动态随机存储器中创建文件数据的写操作的文件日志链表,即数据合并管理单元的节点单链表,所述节点单链表中节点由日志索引节点构成,写入文件的数据要先写入文件日志数据块中,日志数据块则保存在节点单链表中;
数据模块M6:日志索引节点的红黑树中分配一个空闲日志索引节点,计算写入当前数据块的偏移量和写入长度,并记录在所分配的日志索引节点中;
数据模块M7:在数据块链表中分配一个空闲数据块;
数据模块M8:将分配的空闲数据块地址记录在日志索引节点的文件数据日志块地址中;
数据模块M9:将用户要写的数据写入分配的空闲数据块;
数据模块M10:查找要写入文件的数据备份存储管理基数树,判断当前要写入数据日志块的日志索引节点是否存在;
若当前要写入数据日志块的日志索引节点已经存在,则将新分配的日志索引节点添加到已经存在的日志索引节点的下一个指针域,同时将已经存在的日志索引节点从写回链表移除,然后添加到日志链表中;
若日志索引节点不存在,则将所述日志索引节点添加到文件的基数树和日志链表中;
若用户要写的数据没有写完,则转到数据模块M6继续执行;
数据模块M11:合并日志链表的日志索引节点;
所述数据备份存储管理单元由一颗基数树构成,基数树由叶子节点和非叶子节点构成,非叶子节点记录叶子节点或非叶子节点的地址,叶子节点记录备份的数据块;叶子节点由数据的位置、数据长度、指针块、下一个指针四个域组成;
所述数据合并管理单元由一个节点单链表构成;所述单链表将预设次数对同一数据块的覆盖写或交叉写合并为一个数据块,减少数据的写回次数。
优选地,所述原子性决策逻辑模块包括:
原子性决策逻辑模块M1:创建一个transaction事务,添加START标志;
原子性决策逻辑模块M2:当完成元数据模块和数据模块后,则添加COMMIT提交标志;否则,添加ABORTION终止标志;
原子性决策逻辑模块M3:若事务成功COMMIT提交,则文件日志链表中的日志索引节点添加到写回链表,同时更新元数据备份数据的状态;
所述原子性决策逻辑模块由队列构成,所述队列中每一个成员都是一个transaction事务,队列中具有两个指针,head指针和tail指针,分别指向队列中第一个事务和最后一个事务,保证元数据与数据操作的原子性,即要么都发生,要么都不发生。
优选地,所述原子性决策逻辑模块M3包括:
原子性决策逻辑模块M3.1:执行元数据写回管理单元将本地元数据信息写入元数据备份数据存储管理单元,保证文件元数据的一致性;
原子性决策逻辑模块M3.2:执行数据写回管理单元,将基数树中记录的数据块追加至全局链表中;
所述元数据写回管理单元包括在文件元数据和文件数据操作结束后,将最新的元数据信息写回元数据备份数据存储管理单元中,保证元数据的一致性;
所述数据写回管理单元由一个写回链表和一个读写回链表构成;在完成文件元数据和文件数据操作后,将所述基数树中记录的数据块追加至所述数据模块中的数据检索单元的全局链表和所述写回链表中;
所述读写回链表当前数据出现在全局链表和写回链表,但是尚未将数据从写回链表中写回文件数据块中,此时用户请求访问该数据块,则将数据块由写回链表转移到读写回链表中。
根据本发明提供的一种面向持久内存文件系统的事务写优化框架的方法,包括:
步骤M1:写文件输入元数据模块,动态备份写文件系统中的元数据以及支持元数据故障恢复;
步骤M2:写文件输入数据模块,保证写文件数据的一致性,并在发生故障时恢复一致性状态;
步骤M3:当完成元数据模块和数据模块后,原子性决策逻辑模块判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块;
所述元数据模块:动态备份写文件系统中的元数据以及支持元数据故障恢复;
所述数据模块:保证写文件数据的一致性,并在发生故障时恢复一致性状态;
所述原子性决策逻辑模块:由决策原子性逻辑单元组成,用于保障元数据与数据操作的原子性。
优选地,所述步骤M1包括:
元数据模块包括:元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元;
步骤M1.1:在程序运行的初始化阶段,在持久内存中划分出一块持久区域作为元数据备份数据存储管理单元,存放文件元数据备份数据;
步骤M1.2:在程序运行的初始化阶段,在动态随机存储器创建元数据检索管理单元的数据结构;
所述元数据检索管理单元包括:两颗红黑树和一个繁忙链表;
在动态随机存储器中创建两颗红黑树;一颗元数据备份空闲红黑树统计元数据备份数据存储管理单元的空闲插槽;另一颗元数据备份已用红黑树记录元数据备份数据存储管理单元已经使用的插槽;两颗红黑树的节点由最小索引号和最大索引号组成;在初始化阶段,元数据备份已用红黑树是一颗空树;元数据备份空闲红黑树则包含一个节点,所述节点的最小索引号为0,最大索引号为所有插槽的个数减1;
在动态随机存储器中另外创建一颗最近最少使用的红黑树;最近最少使用的红黑树的节点由索引号、最后一次修改时间、链表指针、插槽号四个域组成;在初始化阶段,所述最近最少使用的红黑树是一颗空树;
在动态随机存储器中创建一个繁忙链表,繁忙链表的每一个节点由插槽号、链表指针两个域构成,所述繁忙链表记录当前正在执行操作的元数据,不能被其他的元数据替换;
步骤M1.3:元数据预处理单元以元数据的索引号和最后一次修改时间为索引值,判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元;
当在最近最少使用的红黑树中找到,则当前元数据已经备份,直接本地修改文件元数据信息;
当所述元数据信息在最近最少使用的红黑树中没有找到,则执行操作的元数据并没有备份,查找所述的元数据备份空闲红黑树,当所述的元数据备份空闲红黑树不是空树,即还有空闲插槽分配,则返回空闲插槽号,获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份元数据信息;
当所述的元数据备份空闲红黑树是颗空树,即当前所有插槽都在使用中,则需要剔除一个最近最少使用插槽并写入新的元数据信息;依次遍历最近最少使用的红黑树中的节点,获取节点指向的元数据信息以及所占用的插槽编号;判断当前节点所指向的插槽是否用于记录当前正在执行操作的元数据的繁忙链表,当所述最近最少访问节点所指向的插槽用于记录当前正在执行操作的元数据,即该元数据位于繁忙链表时,则重新遍历下一个最近最少使用的节点;
当所述最近最少访问节点所指向插槽没有用于记录当前正在执行才做的元数据的繁忙链表中,则替换插槽中的元数据信息,同时将最近最少使用节点从最近最少使用的红黑树中删除,添加由新的元数据信息创建的节点;
所述元数据备份数据存储管理单元包括一个动态备份数组,所述动态备份数组中的每一个元素都是一个文件的元数据信息;
所述元数据备份空闲红黑树快速分配和释放元数据备份数据存储管理单元的空闲插槽,红黑树中的每一个节点包括当前节点中最小分配的空闲插槽和最大分配的空闲插槽;
所述元数据备份已用红黑树,记录当前已经做备份的元数据信息,每一个节点由索引节点号、最后一次修改时间、链表指针、空闲插槽号四个域组成;
所述繁忙链表用于记录当前正在执行元数据或文件数据操作的元数据备份地址,即链表中每个节点由链表指针和动态备份数组中的插槽号组成;
所述元数据预处理单元包括:提供对元数据备份数据的预处理操作。
优选地,所述步骤M2包括:
数据模块包括:数据备份存储管理单元、数据检索单元、数据合并管理单元和数据写回管理单元;
步骤M2.1:在程序执行的初始化阶段,在持久内存中划分出一块持久区域用于存放文件数据和文件数据的日志,文件数据块和文件数据日志块大小相同;
步骤M2.2:数据备份存储管理单元中叶子节点由文件数据日志块构成;在程序执行的初始化阶段,在持久内存中划分出一块持久区域作为文件数据日志块的索引区域,即所述数据备份存储管理单元;所述文件数据的日志数据的索引区域记录文件数据日志块的地址信息;日志索引区域中每一个节点由文件写入地址、数据长度、文件数据日志块地址、下一个指针四个域构成;
步骤M2.3:数据模块中的数据检索单元由一个全局链表、数据块链表和一颗文件数据日志块索引红黑树构成:
在程序执行的初始化阶段,在持久内存中创建全局链表;
在程序执行的初始化阶段,在动态随机存储器中创建数据检索单元中的数据块链表记录文件数据块和文件数据日志块;所述数据块链表中每一个节点由最小索引号、最大索引号和链表指针三个域构成;
将文件数据日志索引节点组织为一颗红黑树,即所述数据检索单元的文件数据日志块索引红黑树;在分配和释放日志索引节点的过程中,红黑树能够旋转节点以保持树的平衡;将每个文件获得的文件数据日志索引节点组织成基数树;
所述全局链表中的节点即数据备份存储管理单元中基数树的叶子节点;
所述数据块链表记录文件数据块和文件日志数据块的信息;
所述文件数据日志块索引红黑树用于组织文件数据日志块的索引数据节点;
步骤M2.4:在程序执行的初始化阶段,在动态随机存储器中创建数据写回管理单元中的写回链表和读写回链表;
写回链表在初始化阶段是空链表,存放的节点是日志索引节点;读写回链表在初始化阶段也是空链表,存放的节点同样是日志索引节点;所述两个链表不会存在重复的日志索引节点;
写回链表存放所有要写回文件的数据,当数据在被写回文件之前被用户访问,则数据从写回链表迁移到读写回链表中;
步骤M2.5:在程序执行的初始化阶段,在动态随机存储器中创建文件数据的写操作的文件日志链表,即数据合并管理单元的节点单链表,所述节点单链表中节点由日志索引节点构成,写入文件的数据要先写入文件日志数据块中,日志数据块则保存在节点单链表中;
步骤M2.6:日志索引节点的红黑树中分配一个空闲日志索引节点,计算写入当前数据块的偏移量和写入长度,并记录在所分配的日志索引节点中;
步骤M2.7:在数据块链表中分配一个空闲数据块;
步骤M2.8:将分配的空闲数据块地址记录在日志索引节点的文件数据日志块地址中;
步骤M2.9:将用户要写的数据写入分配的空闲数据块;
步骤M2.10:查找要写入文件的数据备份存储管理基数树,判断当前要写入数据日志块的日志索引节点是否存在;
若当前要写入数据日志块的日志索引节点已经存在,则将新分配的日志索引节点添加到已经存在的日志索引节点的下一个指针域,同时将已经存在的日志索引节点从写回链表移除,然后添加到日志链表中;
若日志索引节点不存在,则将所述日志索引节点添加到文件的基数树和日志链表中;
若用户要写的数据没有写完,则转到步骤M2.6继续执行;
步骤M2.11:合并日志链表的日志索引节点;
所述数据备份存储管理单元由一颗基数树构成,基数树由叶子节点和非叶子节点构成,非叶子节点记录叶子节点或非叶子节点的地址,叶子节点记录备份的数据块;叶子节点由数据的位置、数据长度、指针块、下一个指针四个域组成;
所述数据合并管理单元由一个节点单链表构成;所述单链表将预设次数对同一数据块的覆盖写或交叉写合并为一个数据块,减少数据的写回次数。
优选地,所述步骤M3包括:
步骤M3.1:创建一个transaction事务,添加START标志;
步骤M3.2:当完成元数据模块和数据模块后,则添加COMMIT提交标志;否则,添加ABORTION终止标志;
步骤M3.3:若事务成功COMMIT提交,则文件日志链表中的日志索引节点添加到写回链表,同时更新元数据备份数据的状态;
所述原子性决策逻辑模块由队列构成,所述队列中每一个成员都是一个transaction事务,队列中具有两个指针,head指针和tail指针,分别指向队列中第一个事务和最后一个事务,保证元数据与数据操作的原子性,即要么都发生,要么都不发生。
优选地,所述步骤M3.3包括:
步骤M3.3.1:执行元数据写回管理单元将本地元数据信息写入元数据备份数据存储管理单元,保证文件元数据的一致性;
步骤M3.3.2:执行数据写回管理单元,将基数树中记录的数据块追加至全局链表中;
所述元数据写回管理单元包括在文件元数据和文件数据操作结束后,将最新的元数据信息写回元数据备份数据存储管理单元中,保证元数据的一致性;
所述数据写回管理单元由一个写回链表和一个读写回链表构成;在完成文件元数据和文件数据操作后,将所述基数树中记录的数据块追加至所述数据模块中的数据检索单元的全局链表和所述写回链表中;
所述读写回链表当前数据出现在全局链表和写回链表,但是尚未将数据从写回链表中写回文件数据块中,此时用户请求访问该数据块,则将数据块由写回链表转移到读写回链表中。
与现有技术相比,本发明具有如下的有益效果:
1、本发明主要针对持久内存系统的一致性实现问题,提供一种事务优化读写方法。
2、实现方法使文件系统能够根据内存介质的硬件特性实现不同的元数据和数据一致性方案,提高硬件的利用率,延长硬件的使用寿命,优化事务读写操作,减少关键路径上的写开销,提高文件的存储效率和访问效率,具有广泛的应用价值。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为发明实施例中装置总模块示意图;
图2为本发明实施例中装置元数据模块单元示意图;
图3为本发明实施例中装置元数据替换之前示意图;
图4为本发明实施例中装置元数据替换之后示意图;
图5为本发明实施例中装置数据存储管理单元示意图;
图6为本发明实施例中装置数据做日志合并单元示意图;
图7为本发明实施例中装置一致性决策模块单元示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
本发明提供了一种面向持久内存文件系统的事务写优化框架及方法,所述事务读写优化框架解耦合文件系统中文件元数据与文件数据的一致性实现机制,划分为元数据模块、数据模块和原子性决策模块。所述元数据模块,包括元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元,该模块用于动态备份文件系统中的元数据以及支持元数据故障恢复。所述数据模块,包括数据备份数据存储管理单元、数据检索单元、数据合并管理单元以及数据写回管理单元,该模块用于保证文件数据的一致性,并在发生故障时恢复到某一一致性状态。所述原子性决策模块,由决策原子性逻辑单元组成,用于保障文件元数据与文件数据的原子性。所述框架能够快捷的添加到事务机制中,实现方法使文件系统能够根据内存介质的硬件特性实现不同的元数据和数据一致性方案,提高硬件的利用率,延长硬件的使用寿命,优化事务读写操作,减少关键路径上的写开销,提高文件的存储效率和访问效率,具有广泛的应用价值。
本发明提供的一种面向持久内存文件系统的事务写优化框架的系统,包括:
元数据模块:写文件输入元数据模块,元数据模块动态备份写文件系统中的元数据以及支持元数据故障恢复;
具体地,所述元数据模块包括:
元数据模块包括:元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元;
元数据模块M1:在程序运行的初始化阶段,在持久内存中划分出一块持久区域作为元数据备份数据存储管理单元,存放文件元数据备份数据;
元数据模块M2:在程序运行的初始化阶段,在动态随机存储器创建元数据检索管理单元的数据结构;
在动态随机存储器中创建两颗red-black tree红黑树;一颗元数据备份空闲红黑树统计元数据备份数据存储管理单元的空闲插槽;另一颗元数据备份已用红黑树记录元数据备份数据存储管理单元已经使用的插槽;两颗红黑树的节点由最小索引号min_sloth最大索引号max_slot组成;在初始化阶段,元数据备份已用红黑树是一颗空树;元数据备份空闲红黑树则包含一个节点,所述节点的最小索引号为0,最大索引号为所有插槽的个数减1;
在动态随机存储器中另外创建一颗最近最少使用的红黑树;最近最少使用的红黑树的节点由索引号、最后一次修改时间、链表指针、插槽号四个域组成;在初始化阶段,所述最近最少使用的红黑树是一颗空树;
在动态随机存储器中创建一个繁忙链表,繁忙链表的每一个节点由插槽号、链表指针两个域构成,所述繁忙链表记录当前正在执行操作的元数据,不能被其他的元数据替换;
元数据模块M3:一个写文件的任务到来,元数据预处理单元以元数据的索引号和最后一次修改时间为索引值,判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元;
当在最近最少使用的红黑树中找到,则当前元数据已经备份,直接本地修改文件元数据信息(如文件大小属性);
当所述元数据信息在最近最少使用的红黑树中没有找到,则执行操作的元数据并没有备份,查找所述的元数据备份空闲红黑树,当所述的元数据备份空闲红黑树不是空树,即还有空闲插槽分配,则返回空闲插槽号,获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份元数据信息;
当所述的元数据备份空闲红黑树是颗空树,即当前所有插槽都在使用中,则需要剔除一个最近最少使用插槽并写入新的元数据信息;依次遍历最近最少使用的红黑树中的节点,获取节点指向的元数据信息以及所占用的插槽编号;判断当前节点所指向的插槽是否用于记录当前正在执行操作的元数据的繁忙链表,当所述最近最少访问节点所指向的插槽用于记录当前正在执行操作的元数据,即该元数据位于繁忙链表时,则重新遍历下一个最近最少使用的节点;
当所述最近最少访问节点所指向插槽没有用于记录当前正在执行才做的元数据的繁忙链表中,则替换插槽中的元数据信息,同时将最近最少使用节点从最近最少使用的红黑树中删除,添加由新的元数据信息创建的节点;
所述元数据备份数据存储管理单元包括一个动态备份数组,所述动态备份数组中的每一个元素都是一个文件的元数据信息;
所述元数据检索管理单元包括:两颗红黑树和一个繁忙链表;
所述第一个红黑树快速分配和释放元数据备份数据存储管理单元的空闲插槽,红黑树中的每一个节点包括当前节点中最小分配的空闲插槽min_slot和最大可分配的空闲插槽max_slot;
所述第二个红黑树,记录当前已经做备份的元数据信息,每一个节点由inode索引节点号、最后一次修改时间mtime、链表指针next、空闲插槽号slot四个域组成;
所述busy-list繁忙链表用于记录当前正在执行元数据或文件数据操作的元数据备份地址,即链表中每个节点由链表指针next和动态备份数组中的插槽号组成;
所述元数据预处理单元包括:提供对元数据备份数据的预处理操作;包括四个功能:
功能1:判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元。
功能2:一旦发现当前要执行操作的元数据并没有备份,那么获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份该元数据信息。
功能3:从已经全部被占用的插槽中找到未在执行元数据和文件数据操作的插槽,然后备份当前要执行操作的文件元数据信息。
功能4:要释放一个插槽,让该插槽从被使用的状态切换到空闲的状态。
数据模块:写文件输入数据模块,数据模块保证数据的一致性,并在发生故障时恢复一致性状态;
具体地,所述数据模块包括:
数据模块包括:数据备份存储管理单元、数据检索单元、数据合并管理单元和数据写回管理单元;
数据模块M1:在程序执行的初始化阶段,在持久内存中划分出一块持久区域用于存放文件数据和文件数据的日志,文件数据块和文件数据日志块大小相同;
在动态随机存储器中创建数据检索单元中的数据块链表记录文件数据块和文件数据日志块;所述数据块链表中每一个节点由最小可用索引号、最大可用索引号和链表指针三个域构成;所述数据备份存储管理单元中叶子节点由文件数据日志块构成;
在持久内存中创建全局链表;
数据模块M2:在程序执行的初始化阶段,在持久内存中划分出一块持久区域作为文件数据日志块的索引区域,即所述数据备份存储管理单元;所述文件数据的日志数据的索引区域记录文件数据日志块的地址信息;日志索引区域中每一个节点由文件写入地址、数据长度、文件数据日志块地址、下一个指针四个域构成;
数据模块M3:将文件数据日志索引节点组织为一颗红黑树,即所述数据检索单元的文件数据日志块索引红黑树;在分配和释放日志索引节点的过程中,红黑树能够旋转节点以保持树的平衡;将每个文件获得的文件数据日志索引节点组织成radix-tree基数树;
数据模块M4:在程序执行的初始化阶段,在动态随机存储器中创建数据写回管理单元中的写回链表和读写回链表;
写回链表在初始化阶段是空链表,存放的节点是日志索引节点;读写回链表在初始化阶段也是空链表,其中存放的节点同样是日志索引节点;所述两个链表不会存在重复的日志索引节点;
所述写回链表和读写回链表的区别在于,写回链表存放所有要写回文件的数据,若数据在被写回文件之前被用户访问,则数据从写回链表迁移到读写回链表中;
数据模块M5:在动态随机存储器中创建文件数据的写操作的文件日志链表,即数据合并管理单元的节点单链表,所述节点单链表中节点由日志索引节点构成,写入文件的数据要先写入文件日志数据块中,日志数据块则保存在节点单链表中;
数据模块M6:日志索引节点的红黑树中分配一个空闲日志索引节点,计算写入当前数据块的偏移量和写入长度,并记录在所分配的日志索引节点中;
数据模块M7:在数据块链表中分配一个空闲数据块;
数据模块M8:将分配的空闲数据块地址记录在日志索引节点的文件数据日志块地址中;
数据模块M9:将用户要写的数据写入分配的空闲数据块;
数据模块M10:查找要写入文件的数据备份存储管理单元-基数树,判断当前要写入数据日志块的日志索引节点是否存在;
若当前要写入数据日志块的日志索引节点已经存在,则将新分配的日志索引节点添加到已经存在的日志索引节点的下一个指针域,同时将已经存在的日志索引节点从写回链表移除,然后添加到日志链表中;
若日志索引节点不存在,则将所述日志索引节点添加到文件的基数树和日志链表中;
若用户要写的数据没有写完,则转到数据模块M6继续执行;
数据模块M11:合并日志链表的日志索引节点;
所述数据备份存储管理单元由一颗基数树构成,基数树由叶子节点和非叶子节点构成,非叶子节点记录叶子节点或非叶子节点的地址,叶子节点记录备份的数据块;叶子节点由数据的位置、数据长度、指针块、下一个指针四个域组成;
所述数据模块中的数据检索单元由一个全局链表、数据块链表和一颗文件数据日志块索引红黑树构成:
所述全局链表中的节点即数据备份存储管理单元中基数树的叶子节点;
所述数据块链表记录文件数据块和文件日志数据块的信息;
所述文件数据日志块索引红黑树用于组织文件数据日志块的索引数据节点;
所述数据合并管理单元由一个节点单链表构成;所述单链表将两次对同一数据块的覆盖写或交叉写合并为一个数据块,减少数据的写回次数。
原子性决策逻辑模块:当完成元数据模块和数据模块后,判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块。
一种面向持久内存文件系统的事务写优化框架的系统利用持久内存的可字节寻址特性对文件元数据与文件数据的一致性提供不同的保障机制。
具体地,所述原子性决策逻辑模块包括:
原子性决策逻辑模块M1:创建一个transaction事务,添加START标志;
原子性决策逻辑模块M2:当完成元数据模块和数据模块后,则添加COMMIT提交标志;否则,添加ABORTION终止标志;
原子性决策逻辑模块M3:若事务成功COMMIT提交,则文件日志链表中的日志索引节点添加到写回链表,同时更新元数据备份数据的状态。
所述原子性决策逻辑模块由队列构成,所述队列中每一个成员都是一个transaction事务,队列中具有两个指针,head指针和tail指针,分别指向队列中第一个事务和最后一个事务,保证元数据与数据操作的原子性,即要么都发生,要么都不发生。
具体地,所述原子性决策逻辑模块M3包括:
原子性决策逻辑模块M3.1:执行元数据写回管理单元将本地元数据信息写入元数据备份数据存储管理单元,保证文件元数据的一致性;
原子性决策逻辑模块M3.2:执行数据写回管理单元,将基数树中记录的数据块追加至全局链表中;
所述元数据写回管理单元包括在文件元数据和文件数据操作结束后,将最新的元数据信息写回元数据备份数据存储管理单元中,保证元数据的一致性;
所述数据写回管理单元由一个写回链表和一个读写回链表构成;在完成文件元数据和文件数据操作后,将所述基数树中记录的数据块追加至所述数据模块中的数据检索单元的全局链表和所述写回链表中;
所述读写回链表当前数据出现在全局链表和写回链表,但是尚未将数据从写回链表中写回文件数据块中,此时用户请求访问该数据块,则将数据块由写回链表转移到读写回链表中。
本发明提供的一种面向持久内存文件系统的事务写优化框架的方法,包括:
步骤M1:写文件输入元数据模块,元数据模块动态备份写文件系统中的元数据以及支持元数据故障恢复;
具体地,所述步骤M1包括:
元数据模块包括:元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元;
步骤M1.1:在程序运行的初始化阶段,在持久内存中划分出一块持久区域作为元数据备份数据存储管理单元,存放文件元数据备份数据;
步骤M1.2:在程序运行的初始化阶段,在动态随机存储器创建元数据检索管理单元的数据结构;
在动态随机存储器中创建两颗red-black tree红黑树;一颗元数据备份空闲红黑树统计元数据备份数据存储管理单元的空闲插槽;另一颗元数据备份已用红黑树记录元数据备份数据存储管理单元已经使用的插槽;两颗红黑树的节点由最小索引号min_sloth最大索引号max_slot组成;在初始化阶段,元数据备份已用红黑树是一颗空树;元数据备份空闲红黑树则包含一个节点,所述节点的最小索引号为0,最大索引号为所有插槽的个数减1;
在动态随机存储器中另外创建一颗最近最少使用的红黑树;最近最少使用的红黑树的节点由索引号、最后一次修改时间、链表指针、插槽号四个域组成;在初始化阶段,所述最近最少使用的红黑树是一颗空树;
在动态随机存储器中创建一个繁忙链表,繁忙链表的每一个节点由插槽号、链表指针两个域构成,所述繁忙链表记录当前正在执行操作的元数据,不能被其他的元数据替换;
步骤M1.3:一个写文件的任务到来,元数据预处理单元以元数据的索引号和最后一次修改时间为索引值,判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元;
当在最近最少使用的红黑树中找到,则当前元数据已经备份,直接本地修改文件元数据信息(如文件大小属性);
当所述元数据信息在最近最少使用的红黑树中没有找到,则执行操作的元数据并没有备份,查找所述的元数据备份空闲红黑树,当所述的元数据备份空闲红黑树不是空树,即还有空闲插槽分配,则返回空闲插槽号,获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份元数据信息;
当所述的元数据备份空闲红黑树是颗空树,即当前所有插槽都在使用中,则需要剔除一个最近最少使用插槽并写入新的元数据信息;依次遍历最近最少使用的红黑树中的节点,获取节点指向的元数据信息以及所占用的插槽编号;判断当前节点所指向的插槽是否用于记录当前正在执行操作的元数据的繁忙链表,当所述最近最少访问节点所指向的插槽用于记录当前正在执行操作的元数据,即该元数据位于繁忙链表时,则重新遍历下一个最近最少使用的节点;
当所述最近最少访问节点所指向插槽没有用于记录当前正在执行才做的元数据的繁忙链表中,则替换插槽中的元数据信息,同时将最近最少使用节点从最近最少使用的红黑树中删除,添加由新的元数据信息创建的节点;
所述元数据备份数据存储管理单元包括一个动态备份数组,所述动态备份数组中的每一个元素都是一个文件的元数据信息;
所述元数据检索管理单元包括:两颗红黑树和一个繁忙链表;
所述第一个红黑树快速分配和释放元数据备份数据存储管理单元的空闲插槽,红黑树中的每一个节点包括当前节点中最小分配的空闲插槽min_slot和最大可分配的空闲插槽max_slot;
所述第二个红黑树,记录当前已经做备份的元数据信息,每一个节点由inode索引节点号、最后一次修改时间mtime、链表指针next、空闲插槽号slot四个域组成;
所述busy-list繁忙链表用于记录当前正在执行元数据或文件数据操作的元数据备份地址,即链表中每个节点由链表指针next和动态备份数组中的插槽号组成;
所述元数据预处理单元包括:提供对元数据备份数据的预处理操作;包括四个功能:
功能1:判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元。
功能2:一旦发现当前要执行操作的元数据并没有备份,那么获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份该元数据信息。
功能3:从已经全部被占用的插槽中找到未在执行元数据和文件数据操作的插槽,然后备份当前要执行操作的文件元数据信息。
功能4:要释放一个插槽,让该插槽从被使用的状态切换到空闲的状态。
步骤M2:写文件输入数据模块,数据模块保证数据的一致性,并在发生故障时恢复一致性状态;
具体地,所述步骤M2包括:
数据模块包括:数据备份存储管理单元、数据检索单元、数据合并管理单元和数据写回管理单元;
步骤M2.1:在程序执行的初始化阶段,在持久内存中划分出一块持久区域用于存放文件数据和文件数据的日志,文件数据块和文件数据日志块大小相同;
在动态随机存储器中创建数据检索单元中的数据块链表记录文件数据块和文件数据日志块;所述数据块链表中每一个节点由最小可用索引号、最大可用索引号和链表指针三个域构成;所述数据备份存储管理单元中叶子节点由文件数据日志块构成;
在持久内存中创建全局链表;
步骤M2.2:在程序执行的初始化阶段,在持久内存中划分出一块持久区域作为文件数据日志块的索引区域,即所述数据备份存储管理单元;所述文件数据的日志数据的索引区域记录文件数据日志块的地址信息;日志索引区域中每一个节点由文件写入地址、数据长度、文件数据日志块地址、下一个指针四个域构成;
步骤M2.3:将文件数据日志索引节点组织为一颗红黑树,即所述数据检索单元的文件数据日志块索引红黑树;在分配和释放日志索引节点的过程中,红黑树能够旋转节点以保持树的平衡;将每个文件获得的文件数据日志索引节点组织成radix-tree基数树;
步骤M2.4:在程序执行的初始化阶段,在动态随机存储器中创建数据写回管理单元中的写回链表和读写回链表;
写回链表在初始化阶段是空链表,存放的节点是日志索引节点;读写回链表在初始化阶段也是空链表,其中存放的节点同样是日志索引节点;所述两个链表不会存在重复的日志索引节点;
所述写回链表和读写回链表的区别在于,写回链表存放所有要写回文件的数据,若数据在被写回文件之前被用户访问,则数据从写回链表迁移到读写回链表中;
步骤M2.5:在动态随机存储器中创建文件数据的写操作的文件日志链表,即数据合并管理单元的节点单链表,所述节点单链表中节点由日志索引节点构成,写入文件的数据要先写入文件日志数据块中,日志数据块则保存在节点单链表中;
步骤M2.6:日志索引节点的红黑树中分配一个空闲日志索引节点,计算写入当前数据块的偏移量和写入长度,并记录在所分配的日志索引节点中;
步骤M2.7:在数据块链表中分配一个空闲数据块;
步骤M2.8:将分配的空闲数据块地址记录在日志索引节点的文件数据日志块地址中;
步骤M2.9:将用户要写的数据写入分配的空闲数据块;
步骤M2.10:查找要写入文件的数据备份存储管理单元-基数树,判断当前要写入数据日志块的日志索引节点是否存在;
若当前要写入数据日志块的日志索引节点已经存在,则将新分配的日志索引节点添加到已经存在的日志索引节点的下一个指针域,同时将已经存在的日志索引节点从写回链表移除,然后添加到日志链表中;
若日志索引节点不存在,则将所述日志索引节点添加到文件的基数树和日志链表中;
若用户要写的数据没有写完,则转到步骤M2.6继续执行;
步骤M2.11:合并日志链表的日志索引节点;
所述数据备份存储管理单元由一颗基数树构成,基数树由叶子节点和非叶子节点构成,非叶子节点记录叶子节点或非叶子节点的地址,叶子节点记录备份的数据块;叶子节点由数据的位置、数据长度、指针块、下一个指针四个域组成;
所述数据模块中的数据检索单元由一个全局链表、数据块链表和一颗文件数据日志块索引红黑树构成:
所述全局链表中的节点即数据备份存储管理单元中基数树的叶子节点;
所述数据块链表记录文件数据块和文件日志数据块的信息;
所述文件数据日志块索引红黑树用于组织文件数据日志块的索引数据节点;
所述数据合并管理单元由一个节点单链表构成;所述单链表将两次对同一数据块的覆盖写或交叉写合并为一个数据块,减少数据的写回次数。
步骤M3:当完成元数据模块和数据模块后,判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块。
一种面向持久内存文件系统的事务写优化框架的系统利用持久内存的可字节寻址特性对文件元数据与文件数据的一致性提供不同的保障机制。
具体地,所述步骤M3包括:
步骤M3.1:创建一个transaction事务,添加START标志;
步骤M3.2:当完成元数据模块和数据模块后,则添加COMMIT提交标志;否则,添加ABORTION终止标志;
步骤M3.3:若事务成功COMMIT提交,则文件日志链表中的日志索引节点添加到写回链表,同时更新元数据备份数据的状态。
所述原子性决策逻辑模块由队列构成,所述队列中每一个成员都是一个transaction事务,队列中具有两个指针,head指针和tail指针,分别指向队列中第一个事务和最后一个事务,保证元数据与数据操作的原子性,即要么都发生,要么都不发生。
具体地,所述步骤M3.3包括:
步骤M3.3.1:执行元数据写回管理单元将本地元数据信息写入元数据备份数据存储管理单元,保证文件元数据的一致性;
步骤M3.3.2:执行数据写回管理单元,将基数树中记录的数据块追加至全局链表中;
所述元数据写回管理单元包括在文件元数据和文件数据操作结束后,将最新的元数据信息写回元数据备份数据存储管理单元中,保证元数据的一致性;
所述数据写回管理单元由一个写回链表和一个读写回链表构成;在完成文件元数据和文件数据操作后,将所述基数树中记录的数据块追加至所述数据模块中的数据检索单元的全局链表和所述写回链表中;
所述读写回链表当前数据出现在全局链表和写回链表,但是尚未将数据从写回链表中写回文件数据块中,此时用户请求访问该数据块,则将数据块由写回链表转移到读写回链表中。
以下结合优选例对本发明作具体说明:
下面结合附图,对本发明做进一步阐述,显而易见地,附图是本发明的一些实施例,对本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他附图。
本发明提供的面向持久内存文件系统的事务写优化框架如图1所示。
在本发明的一个实施例程中,元数据模块包括元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元。
具体地,元数据备份数据存储管理单元中最多能存放128个元数据信息,元数据检索管理单元采用不同red-black tree红黑树分配和释放插槽及快速检索当前已经备份的inode元数据信息,同时,创建busy-list繁忙链表记录正在执行元数据或文件数据操作的文件元数据信息,如图2所示;
在本发明的一个实施例程中,数据模块包括数据备份数据存储管理单元、数据检索单元、数据合并管理单元以及数据写回管理单元。
具体地,使用radix tree基数树存放数据的日志数据,当重写的数据有1G时,radix tree基数树的高度只有3,如图5所示;
具体地,使用全局链表保存所有的文件数据日志块,inode-list节点日志链表临时保存用户写数据,写回链表记录所有从文件数据日志块写到文件数据块的数据,如图6所示。
在本发明的一个实施例程中,原子性决策模块使用Head头指针和Tail尾指针记录着第一个事务和最后一个事务,如图7所示。
在本发明的一个实施例程中,执行元数据操作分为两种情况:
步骤1:
第一种情况,写fileA文件,所述文件的inode号为30,检索数据检索管理单元中的已备份元数据red-black tree红黑树,判断当前fileA不存在于动态备份数组中,则查找数据检索管理单元中记录空闲slot插槽的red-black tree红黑树分配空闲slot插槽,slot号为1,备份fileA的元数据至slot_1插槽中,然后执行元数据的本地更新,进入步骤2;
第二种情况,如图3所示,写fileB文件,所述文件的inode号为257,检索数据检索管理单元中的已备份元数据red-black tree红黑树,判断当前fileA不存在于动态备份数组中,则查找数据检索管理单元中记录空闲slot插槽的red-black tree红黑树分配空闲slot插槽,而此时动态备份数组中已经不存在空闲slot插槽,则需要从已经备份在动态备份数组的元数据中剔除最近最少使用的元数据信息,从检索数据检索管理单元中的已备份元数据red-blacktree红黑树中发现,所用时间最早的是inode-21,存放在slot-111,此时检索busy-list繁忙链表发现inode-21正在被操作,不能剔除,同理,时间次早的inode-128也不能剔除,继续查找,发现时间再晚一些的inode-256所在的slot-110没有执行操作,因此,剔除slot-110位置inode-256的元数据信息,进而写入inode-257号元数据信息,替换之后如图4所示,下一步执行元数据的本地更新,进入步骤2;
步骤2:开始写文件数据操作,计算当前要写数据的写地址和数据长度,从数据模块中数据索引单元的red-black tree红黑树分配文件数据日志块空闲索引index,从数据块链表分配数据块,写入数据,填充文件数据日志块空闲索引index的写地址、数据长度、日志指针。调用元数据模块的元数据预处理管理单元的功能1判断当然日志块是否存在文件radix-tree基数树中,
若不存在,将所述文件数据日志块空闲索引index插入文件radix-tree基数树中,并将所述文件数据日志块空闲索引index添加到inode-list节点链表中;
若存在,将文件数据日志块空闲索引index填入已经存在index_old索引的next下一个指针,并将所述index_old添加到inode_list链表中。如图6所示的做文件数据日志,继续执行步骤2,直至数据写完;
步骤3:合并inode_list节点链表,如图6所示的合并日志;
步骤4:追加状态到所述transaction事务,分为两种情况
第一种情况:数据或元数据的操作未完成,则追加ABORTION终止状态至所述transaction事务,同事,删除元数据动态备份数组中备份的元数据信息;删除inode-list链表中的文件数据日志块空闲索引;
第二种情况:数据与元数据的操作都完成,将inode-list中数据写入全局链表,然后追加COMMIT提交状态至所述transaction事务,执行步骤6;
步骤5:将所述inode_list节点链表写回数据模块所述写回管理单元中的写回链表,如图6所示的写回数据;
步骤6:将最新更改的元数据信息再次备份到动态备份数组。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种面向持久内存文件系统的事务写优化框架的系统,其特征在于,包括:
元数据模块:写文件输入元数据模块,动态备份写文件系统中的元数据以及支持元数据故障恢复;
数据模块:写文件输入数据模块,保证写文件数据的一致性,并在发生故障时恢复一致性状态;
原子性决策逻辑模块:当完成输入元数据模块和数据模块后,原子性决策逻辑模块判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块;
所述元数据模块:动态备份写文件系统中的元数据以及支持元数据故障恢复;
所述数据模块:保证写文件数据的一致性,并在发生故障时恢复一致性状态;
所述原子性决策逻辑模块:由决策原子性逻辑单元组成,用于保障元数据与数据操作的原子性。
2.根据权利要求1所述的一种面向持久内存文件系统的事务写优化框架的系统,其特征在于,所述
元数据模块包括:元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元;
元数据模块M1:在程序运行的初始化阶段,在持久内存中划分出一块持久区域作为元数据备份数据存储管理单元,存放文件元数据备份数据;
元数据模块M2:在程序运行的初始化阶段,在动态随机存储器创建元数据检索管理单元的数据结构;
所述元数据检索管理单元包括:两颗红黑树和一个繁忙链表;
在动态随机存储器中创建两颗红黑树;一颗元数据备份空闲红黑树统计元数据备份数据存储管理单元的空闲插槽;另一颗元数据备份已用红黑树记录元数据备份数据存储管理单元已经使用的插槽;两颗红黑树的节点由最小索引号和最大索引号组成;在初始化阶段,元数据备份已用红黑树是一颗空树;元数据备份空闲红黑树则包含一个节点,所述节点的最小索引号为0,最大索引号为所有插槽的个数减1;
在动态随机存储器中另外创建一颗最近最少使用的红黑树;最近最少使用的红黑树的节点由索引号、最后一次修改时间、链表指针、插槽号四个域组成;在初始化阶段,所述最近最少使用的红黑树是一颗空树;
在动态随机存储器中创建一个繁忙链表,繁忙链表的每一个节点由插槽号、链表指针两个域构成,所述繁忙链表记录当前正在执行操作的元数据,不能被其他的元数据替换;
元数据模块M3:元数据预处理单元以元数据的索引号和最后一次修改时间为索引值,判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元;
当在最近最少使用的红黑树中找到,则当前元数据已经备份,直接本地修改文件元数据信息;
当所述元数据信息在最近最少使用的红黑树中没有找到,则执行操作的元数据并没有备份,查找所述的元数据备份空闲红黑树,当所述的元数据备份空闲红黑树不是空树,即还有空闲插槽分配,则返回空闲插槽号,获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份元数据信息;
当所述的元数据备份空闲红黑树是颗空树,即当前所有插槽都在使用中,则需要剔除一个最近最少使用插槽并写入新的元数据信息;依次遍历最近最少使用的红黑树中的节点,获取节点指向的元数据信息以及所占用的插槽编号;判断当前节点所指向的插槽是否用于记录当前正在执行操作的元数据的繁忙链表,当所述最近最少访问节点所指向的插槽用于记录当前正在执行操作的元数据,即元数据位于繁忙链表时,则重新遍历下一个最近最少使用的节点;
当所述最近最少访问节点所指向插槽没有用于记录当前正在执行操作的元数据,即元数据不在繁忙链表中,则替换插槽中的元数据信息,同时将最近最少使用节点从最近最少使用的红黑树中删除,添加由新的元数据信息创建的节点;
所述元数据备份数据存储管理单元包括一个动态备份数组,所述动态备份数组中的每一个元素都是一个文件的元数据信息;
所述元数据备份空闲红黑树快速分配和释放元数据备份数据存储管理单元的空闲插槽,红黑树中的每一个节点包括当前节点中最小分配的空闲插槽和最大分配的空闲插槽;
所述元数据备份已用红黑树,记录当前已经做备份的元数据信息,每一个节点由索引节点号、最后一次修改时间、链表指针、空闲插槽号四个域组成;
所述繁忙链表用于记录当前正在执行元数据或文件数据操作的元数据备份地址,即链表中每个节点由链表指针和动态备份数组中的插槽号组成;
所述元数据预处理单元包括:提供对元数据备份数据的预处理操作。
3.根据权利要求1所述的一种面向持久内存文件系统的事务写优化框架的系统,其特征在于,所述数据模块包括:
数据模块包括:数据备份存储管理单元、数据检索单元、数据合并管理单元和数据写回管理单元;
数据模块M1:在程序执行的初始化阶段,在持久内存中划分出一块持久区域用于存放文件数据和文件数据的日志,文件数据块和文件数据日志块大小相同;
数据模块M2:数据备份存储管理单元中叶子节点由文件数据日志块构成;在程序执行的初始化阶段,在持久内存中划分出一块持久区域作为文件数据日志块的索引区域,即所述数据备份存储管理单元;所述文件数据的日志数据的索引区域记录文件数据日志块的地址信息;日志索引区域中每一个节点由文件写入地址、数据长度、文件数据日志块地址、下一个指针四个域构成;
数据模块M3:数据模块中的数据检索单元由一个全局链表、数据块链表和一颗文件数据日志块索引红黑树构成:
在程序执行的初始化阶段,在持久内存中创建全局链表;
在程序执行的初始化阶段,在动态随机存储器中创建数据检索单元中的数据块链表记录文件数据块和文件数据日志块;所述数据块链表中每一个节点由最小索引号、最大索引号和链表指针三个域构成;
将文件数据日志索引节点组织为一颗红黑树,即所述数据检索单元的文件数据日志块索引红黑树;在分配和释放日志索引节点的过程中,红黑树能够旋转节点以保持树的平衡;将每个文件获得的文件数据日志索引节点组织成基数树;
所述全局链表中的节点即数据备份存储管理单元中基数树的叶子节点;
所述数据块链表记录文件数据块和文件日志数据块的信息;
所述文件数据日志块索引红黑树用于组织文件数据日志块的索引数据节点;
数据模块M4:在程序执行的初始化阶段,在动态随机存储器中创建数据写回管理单元中的写回链表和读写回链表;
写回链表在初始化阶段是空链表,存放的节点是日志索引节点;读写回链表在初始化阶段也是空链表,存放的节点同样是日志索引节点;所述两个链表不会存在重复的日志索引节点;
写回链表存放所有要写回文件的数据,当数据在被写回文件之前被用户访问,则数据从写回链表迁移到读写回链表中;
数据模块M5:在程序执行的初始化阶段,在动态随机存储器中创建文件数据的写操作的文件日志链表,即数据合并管理单元的节点单链表,所述节点单链表中节点由日志索引节点构成,写入文件的数据要先写入文件日志数据块中,日志数据块则保存在节点单链表中;
数据模块M6:日志索引节点的红黑树中分配一个空闲日志索引节点,计算写入当前数据块的偏移量和写入长度,并记录在所分配的日志索引节点中;
数据模块M7:在数据块链表中分配一个空闲数据块;
数据模块M8:将分配的空闲数据块地址记录在日志索引节点的文件数据日志块地址中;
数据模块M9:将用户要写的数据写入分配的空闲数据块;
数据模块M10:查找要写入文件的数据备份存储管理基数树,判断当前要写入数据日志块的日志索引节点是否存在;
若当前要写入数据日志块的日志索引节点已经存在,则将新分配的日志索引节点添加到已经存在的日志索引节点的下一个指针域,同时将已经存在的日志索引节点从写回链表移除,然后添加到日志链表中;
若日志索引节点不存在,则将所述日志索引节点添加到文件的基数树和日志链表中;
若用户要写的数据没有写完,则转到数据模块M6继续执行;
数据模块M11:合并日志链表的日志索引节点;
所述数据备份存储管理单元由一颗基数树构成,基数树由叶子节点和非叶子节点构成,非叶子节点记录叶子节点或非叶子节点的地址,叶子节点记录备份的数据块;叶子节点由数据的位置、数据长度、指针块、下一个指针四个域组成;
所述数据合并管理单元由一个节点单链表构成;所述单链表将对同一数据块的覆盖写或交叉写合并为一个数据块,减少数据的写回次数。
4.根据权利要求1所述的一种面向持久内存文件系统的事务写优化框架的系统,其特征在于,所述原子性决策逻辑模块包括:
原子性决策逻辑模块M1:创建一个transaction事务,添加START标志;
原子性决策逻辑模块M2:当完成元数据模块和数据模块后,则添加COMMIT提交标志;否则,添加ABORTION终止标志;
原子性决策逻辑模块M3:若事务成功COMMIT提交,则文件日志链表中的日志索引节点添加到写回链表,同时更新元数据备份数据的状态;
所述原子性决策逻辑模块由队列构成,所述队列中每一个成员都是一个transaction事务,队列中具有两个指针,head指针和tail指针,分别指向队列中第一个事务和最后一个事务,保证元数据与数据操作的原子性,即要么都发生,要么都不发生。
5.根据权利要求4所述的一种面向持久内存文件系统的事务写优化框架的系统,其特征在于,所述原子性决策逻辑模块M3包括:
原子性决策逻辑模块M3.1:执行元数据写回管理单元将本地元数据信息写入元数据备份数据存储管理单元,保证文件元数据的一致性;
原子性决策逻辑模块M3.2:执行数据写回管理单元,将基数树中记录的数据块追加至全局链表中;
所述元数据写回管理单元包括在文件元数据和文件数据操作结束后,将最新的元数据信息写回元数据备份数据存储管理单元中,保证元数据的一致性;
所述数据写回管理单元由一个写回链表和一个读写回链表构成;在完成文件元数据和文件数据操作后,将所述基数树中记录的数据块追加至所述数据模块中的数据检索单元的全局链表和所述写回链表中;
所述读写回链表当前数据出现在全局链表和写回链表,但是尚未将数据从写回链表中写回文件数据块中,此时用户请求访问当前数据块,则将数据块由写回链表转移到读写回链表中。
6.一种面向持久内存文件系统的事务写优化框架的方法,其特征在于,包括:
步骤M1:写文件输入元数据模块,动态备份写文件系统中的元数据以及支持元数据故障恢复;
步骤M2:写文件输入数据模块,保证写文件数据的一致性,并在发生故障时恢复一致性状态;
步骤M3:当完成输入元数据模块和数据模块后,原子性决策逻辑模块判断文件元数据和数据操作的原子性;并将原子性决策逻辑模块判断后的最新的元数据信息和/或数据信息写回元数据模块和/或数据模块;
所述元数据模块:动态备份写文件系统中的元数据以及支持元数据故障恢复;
所述数据模块:保证写文件数据的一致性,并在发生故障时恢复一致性状态;
所述原子性决策逻辑模块:由决策原子性逻辑单元组成,用于保障元数据与数据操作的原子性。
7.根据权利要求6所述的一种面向持久内存文件系统的事务写优化框架的方法,其特征在于,所述步骤M1包括:
元数据模块包括:元数据备份数据存储管理单元、元数据检索管理单元、元数据预处理单元以及元数据写回管理单元;
步骤M1.1:在程序运行的初始化阶段,在持久内存中划分出一块持久区域作为元数据备份数据存储管理单元,存放文件元数据备份数据;
步骤M1.2:在程序运行的初始化阶段,在动态随机存储器创建元数据检索管理单元的数据结构;
所述元数据检索管理单元包括:两颗红黑树和一个繁忙链表;
在动态随机存储器中创建两颗红黑树;一颗元数据备份空闲红黑树统计元数据备份数据存储管理单元的空闲插槽;另一颗元数据备份已用红黑树记录元数据备份数据存储管理单元已经使用的插槽;两颗红黑树的节点由最小索引号和最大索引号组成;在初始化阶段,元数据备份已用红黑树是一颗空树;元数据备份空闲红黑树则包含一个节点,所述节点的最小索引号为0,最大索引号为所有插槽的个数减1;
在动态随机存储器中另外创建一颗最近最少使用的红黑树;最近最少使用的红黑树的节点由索引号、最后一次修改时间、链表指针、插槽号四个域组成;在初始化阶段,所述最近最少使用的红黑树是一颗空树;
在动态随机存储器中创建一个繁忙链表,繁忙链表的每一个节点由插槽号、链表指针两个域构成,所述繁忙链表记录当前正在执行操作的元数据,不能被其他的元数据替换;
步骤M1.3:元数据预处理单元以元数据的索引号和最后一次修改时间为索引值,判断当前要执行操作的元数据是否已经存在于元数据备份数据存储管理单元;
当在最近最少使用的红黑树中找到,则当前元数据已经备份,直接本地修改文件元数据信息;
当所述元数据信息在最近最少使用的红黑树中没有找到,则执行操作的元数据并没有备份,查找所述的元数据备份空闲红黑树,当所述的元数据备份空闲红黑树不是空树,即还有空闲插槽分配,则返回空闲插槽号,获取当前元数据备份数据存储管理单元中空闲的插槽,用于备份元数据信息;
当所述的元数据备份空闲红黑树是颗空树,即当前所有插槽都在使用中,则需要剔除一个最近最少使用插槽并写入新的元数据信息;依次遍历最近最少使用的红黑树中的节点,获取节点指向的元数据信息以及所占用的插槽编号;判断当前节点所指向的插槽是否用于记录当前正在执行操作的元数据的繁忙链表,当所述最近最少访问节点所指向的插槽用于记录当前正在执行操作的元数据,即元数据位于繁忙链表时,则重新遍历下一个最近最少使用的节点;
当所述最近最少访问节点所指向插槽没有用于记录当前正在执行才做的元数据的繁忙链表中,则替换插槽中的元数据信息,同时将最近最少使用节点从最近最少使用的红黑树中删除,添加由新的元数据信息创建的节点;
所述元数据备份数据存储管理单元包括一个动态备份数组,所述动态备份数组中的每一个元素都是一个文件的元数据信息;
所述元数据备份空闲红黑树快速分配和释放元数据备份数据存储管理单元的空闲插槽,红黑树中的每一个节点包括当前节点中最小分配的空闲插槽和最大分配的空闲插槽;
所述元数据备份已用红黑树,记录当前已经做备份的元数据信息,每一个节点由索引节点号、最后一次修改时间、链表指针、空闲插槽号四个域组成;
所述繁忙链表用于记录当前正在执行元数据或文件数据操作的元数据备份地址,即链表中每个节点由链表指针和动态备份数组中的插槽号组成;
所述元数据预处理单元包括:提供对元数据备份数据的预处理操作。
8.根据权利要求6所述的一种面向持久内存文件系统的事务写优化框架的方法,其特征在于,所述步骤M2包括:
数据模块包括:数据备份存储管理单元、数据检索单元、数据合并管理单元和数据写回管理单元;
步骤M2.1:在程序执行的初始化阶段,在持久内存中划分出一块持久区域用于存放文件数据和文件数据的日志,文件数据块和文件数据日志块大小相同;
步骤M2.2:数据备份存储管理单元中叶子节点由文件数据日志块构成;在程序执行的初始化阶段,在持久内存中划分出一块持久区域作为文件数据日志块的索引区域,即所述数据备份存储管理单元;所述文件数据的日志数据的索引区域记录文件数据日志块的地址信息;日志索引区域中每一个节点由文件写入地址、数据长度、文件数据日志块地址、下一个指针四个域构成;
步骤M2.3:数据模块中的数据检索单元由一个全局链表、数据块链表和一颗文件数据日志块索引红黑树构成:
在程序执行的初始化阶段,在持久内存中创建全局链表;
在程序执行的初始化阶段,在动态随机存储器中创建数据检索单元中的数据块链表记录文件数据块和文件数据日志块;所述数据块链表中每一个节点由最小索引号、最大索引号和链表指针三个域构成;
将文件数据日志索引节点组织为一颗红黑树,即所述数据检索单元的文件数据日志块索引红黑树;在分配和释放日志索引节点的过程中,红黑树能够旋转节点以保持树的平衡;将每个文件获得的文件数据日志索引节点组织成基数树;
所述全局链表中的节点即数据备份存储管理单元中基数树的叶子节点;
所述数据块链表记录文件数据块和文件日志数据块的信息;
所述文件数据日志块索引红黑树用于组织文件数据日志块的索引数据节点;
步骤M2.4:在程序执行的初始化阶段,在动态随机存储器中创建数据写回管理单元中的写回链表和读写回链表;
写回链表在初始化阶段是空链表,存放的节点是日志索引节点;读写回链表在初始化阶段也是空链表,存放的节点同样是日志索引节点;所述两个链表不会存在重复的日志索引节点;
写回链表存放所有要写回文件的数据,当数据在被写回文件之前被用户访问,则数据从写回链表迁移到读写回链表中;
步骤M2.5:在程序执行的初始化阶段,在动态随机存储器中创建文件数据的写操作的文件日志链表,即数据合并管理单元的节点单链表,所述节点单链表中节点由日志索引节点构成,写入文件的数据要先写入文件日志数据块中,日志数据块则保存在节点单链表中;
步骤M2.6:日志索引节点的红黑树中分配一个空闲日志索引节点,计算写入当前数据块的偏移量和写入长度,并记录在所分配的日志索引节点中;
步骤M2.7:在数据块链表中分配一个空闲数据块;
步骤M2.8:将分配的空闲数据块地址记录在日志索引节点的文件数据日志块地址中;
步骤M2.9:将用户要写的数据写入分配的空闲数据块;
步骤M2.10:查找要写入文件的数据备份存储管理基数树,判断当前要写入数据日志块的日志索引节点是否存在;
若当前要写入数据日志块的日志索引节点已经存在,则将新分配的日志索引节点添加到已经存在的日志索引节点的下一个指针域,同时将已经存在的日志索引节点从写回链表移除,然后添加到日志链表中;
若日志索引节点不存在,则将所述日志索引节点添加到文件的基数树和日志链表中;
若用户要写的数据没有写完,则转到步骤M2.6继续执行;
步骤M2.11:合并日志链表的日志索引节点;
所述数据备份存储管理单元由一颗基数树构成,基数树由叶子节点和非叶子节点构成,非叶子节点记录叶子节点或非叶子节点的地址,叶子节点记录备份的数据块;叶子节点由数据的位置、数据长度、指针块、下一个指针四个域组成;
所述数据合并管理单元由一个节点单链表构成;所述单链表将对同一数据块的覆盖写或交叉写合并为一个数据块,减少数据的写回次数。
9.根据权利要求6所述的一种面向持久内存文件系统的事务写优化框架的方法,其特征在于,所述步骤M3包括:
步骤M3.1:创建一个transaction事务,添加START标志;
步骤M3.2:当完成元数据模块和数据模块后,则添加COMMIT提交标志;否则,添加ABORTION终止标志;
步骤M3.3:若事务成功COMMIT提交,则文件日志链表中的日志索引节点添加到写回链表,同时更新元数据备份数据的状态;
所述原子性决策逻辑模块由队列构成,所述队列中每一个成员都是一个transaction事务,队列中具有两个指针,head指针和tail指针,分别指向队列中第一个事务和最后一个事务,保证元数据与数据操作的原子性,即要么都发生,要么都不发生。
10.根据权利要求9所述的一种面向持久内存文件系统的事务写优化框架的方法,其特征在于,所述步骤M3.3包括:
步骤M3.3.1:执行元数据写回管理单元将本地元数据信息写入元数据备份数据存储管理单元,保证文件元数据的一致性;
步骤M3.3.2:执行数据写回管理单元,将基数树中记录的数据块追加至全局链表中;
所述元数据写回管理单元包括在文件元数据和文件数据操作结束后,将最新的元数据信息写回元数据备份数据存储管理单元中,保证元数据的一致性;
所述数据写回管理单元由一个写回链表和一个读写回链表构成;在完成文件元数据和文件数据操作后,将所述基数树中记录的数据块追加至所述数据模块中的数据检索单元的全局链表和所述写回链表中;
所述读写回链表当前数据出现在全局链表和写回链表,但是尚未将数据从写回链表中写回文件数据块中,此时用户请求访问该数据块,则将数据块由写回链表转移到读写回链表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010104546.7A CN111414134B (zh) | 2020-02-20 | 2020-02-20 | 面向持久内存文件系统的事务写优化框架的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010104546.7A CN111414134B (zh) | 2020-02-20 | 2020-02-20 | 面向持久内存文件系统的事务写优化框架的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111414134A CN111414134A (zh) | 2020-07-14 |
CN111414134B true CN111414134B (zh) | 2021-05-25 |
Family
ID=71494115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010104546.7A Active CN111414134B (zh) | 2020-02-20 | 2020-02-20 | 面向持久内存文件系统的事务写优化框架的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111414134B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11507482B2 (en) * | 2021-01-20 | 2022-11-22 | EMC IP Holding Company LLC | Recovering consistency of a raid (redundant array of independent disks) metadata database |
CN112965805B (zh) * | 2021-03-25 | 2023-12-05 | 兴业数字金融服务(上海)股份有限公司 | 基于内存映射文件的跨进程异步任务处理方法及系统 |
CN113590536B (zh) * | 2021-05-20 | 2023-12-29 | 济南浪潮数据技术有限公司 | 一种数据存储方法、系统、电子设备及存储介质 |
CN116048384A (zh) * | 2022-11-02 | 2023-05-02 | 中国科学院空间应用工程与技术中心 | 一种文件系统元数据的写入方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404667A (zh) * | 2015-11-13 | 2016-03-16 | 重庆大学 | 一种用于内存文件系统的文件数据一致性更新方法 |
CN106250320A (zh) * | 2016-07-19 | 2016-12-21 | 诸葛晴凤 | 一种数据一致性及磨损均衡的内存文件系统管理方法 |
CN107315746A (zh) * | 2016-04-26 | 2017-11-03 | 清华大学 | 基于非易失性主存的高效事务文件系统构建方法 |
CN107544859A (zh) * | 2017-07-12 | 2018-01-05 | 上海交通大学 | 在混合内存系统上用来保证数据一致性的检查点方法 |
CN110569105A (zh) * | 2019-08-14 | 2019-12-13 | 上海交通大学 | 分布式虚拟机自适应内存一致性协议及其设计方法、终端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9208071B2 (en) * | 2010-12-13 | 2015-12-08 | SanDisk Technologies, Inc. | Apparatus, system, and method for accessing memory |
-
2020
- 2020-02-20 CN CN202010104546.7A patent/CN111414134B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404667A (zh) * | 2015-11-13 | 2016-03-16 | 重庆大学 | 一种用于内存文件系统的文件数据一致性更新方法 |
CN107315746A (zh) * | 2016-04-26 | 2017-11-03 | 清华大学 | 基于非易失性主存的高效事务文件系统构建方法 |
CN106250320A (zh) * | 2016-07-19 | 2016-12-21 | 诸葛晴凤 | 一种数据一致性及磨损均衡的内存文件系统管理方法 |
CN107544859A (zh) * | 2017-07-12 | 2018-01-05 | 上海交通大学 | 在混合内存系统上用来保证数据一致性的检查点方法 |
CN110569105A (zh) * | 2019-08-14 | 2019-12-13 | 上海交通大学 | 分布式虚拟机自适应内存一致性协议及其设计方法、终端 |
Non-Patent Citations (2)
Title |
---|
事务控制的面向服务系统的动态更新协调;王德俊 等;《软件学报》;20110115;正文 * |
面向非易失内存的数据一致性研究综述;肖仁智 等;《计算机研究与发展》;20191108;正文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111414134A (zh) | 2020-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111414134B (zh) | 面向持久内存文件系统的事务写优化框架的方法及系统 | |
US11308071B2 (en) | Update and query of a large collection of files that represent a single dataset stored on a blob store | |
US10496283B2 (en) | Adaptive prefix tree based order partitioned data storage system | |
US5204958A (en) | System and method for efficiently indexing and storing a large database with high data insertion frequency | |
EP3724764B1 (en) | Write-ahead style logging in a persistent memory device | |
US11301379B2 (en) | Access request processing method and apparatus, and computer device | |
US9043334B2 (en) | Method and system for accessing files on a storage system | |
CN109407978B (zh) | 高并发索引b+链表数据结构的设计与实现方法 | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
CN109407979A (zh) | 多线程持久性b+树数据结构设计与实现方法 | |
US11468011B2 (en) | Database management system | |
CN112597254B (zh) | 面向混合dram-nvm主存的联机事务型数据库系统 | |
CN113253932B (zh) | 一种分布式存储系统的读写控制方法和系统 | |
Brandstatter et al. | Novoht: a lightweight dynamic persistent NoSQL key/value store | |
CN114115711B (zh) | 基于非易失内存文件系统的快速缓存系统 | |
KR100775141B1 (ko) | 저널링이 적용된 fat 파일 시스템의 구현 방법 | |
Weinberger | Database Systems: Making UNIX* Operating Systems Safe for Databases | |
US20230333939A1 (en) | Chunk and snapshot deletions | |
US20240028566A1 (en) | Efficient append-only file system for high-performance key-value stores | |
Ji et al. | TaC: An Anti-Caching Key-Value Store on Heterogeneous Memory Architectures. | |
CN116401416A (zh) | 支持无锁化并发访问的持久可变基数树访问系统 | |
CN114416742A (zh) | Key-Value存储引擎实现方法及系统 | |
CN118012669A (zh) | 一种分布式文件系统的文件元数据恢复系统与方法 | |
CN113821177A (zh) | 一种基于nvm的lsm树的存储结构及其数据存储方法 | |
Yoon et al. | Recovery techniques for Main-Memory database system: A Survey: A Survey |
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 |