CN107315746A - 基于非易失性主存的高效事务文件系统构建方法 - Google Patents
基于非易失性主存的高效事务文件系统构建方法 Download PDFInfo
- Publication number
- CN107315746A CN107315746A CN201610266175.6A CN201610266175A CN107315746A CN 107315746 A CN107315746 A CN 107315746A CN 201610266175 A CN201610266175 A CN 201610266175A CN 107315746 A CN107315746 A CN 107315746A
- Authority
- CN
- China
- Prior art keywords
- file system
- data
- affairs
- undetermined
- volatile main
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1865—Transactional file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于非易失性主存的高效事务文件系统构建方法,包括以下步骤:文件系统提供相应的文件操作事务接口;在事务开始时,文件系统给事务分配事务ID;在事务执行时,文件系统将日志区域分割成元数据日志区域和数据日志区域,并针对元数据更新和数据更新采用不同的日志处理方法;在事务提交时,文件系统强制将与事务相关的元数据内容和与事务相关数据日志内容持久化至非易失性主存,并写入提交日志条目代表该事务已完成;已提交的数据日志内容被周期性地写回至文件系统中,数据日志内容的写回采用并发选择写回机制。该方法可以通过文件系统提供的事务接口简化上层应用程序的设计,并可以保证事务处理过程中的高效性和正确性。
Description
技术领域
本发明涉及非易失性主存存储技术领域,特别涉及一种基于非易失性主存的高效事务文件系统构建方法。
背景技术
新兴的快速非易失性存储器(Non-Volatile Memory,NVM)技术,如相变存储器(PhaseChange Memory,PCM)、自旋矩存储器(Spin-Torque Transfer RAM,STT-RAM)、以及阻变存储器(Resistive RAM,RRAM),具有非易失性、高访问速度、字节寻址等特性。把这些非易失性存储器连接到主存总线上将产生非易失性主存(Non-Volatile Main Memory,NVMM),并使得存储设备能够具有内存级别的性能。
相关技术中的应用程序(例如文本编辑器,传统关系型数据库,以及key-value存储系统等)均需要保证他们的数据一致性。此外,这些应用程序大多数都是在文件系统之上实现。因此,为了使得应用程序能够运行在高速的非易失性主存上,已有不少研究单位或机构提出了基于非易失性主存的文件系统构建方法。
然而,已有的非易失性主存文件系统仅仅提供保证文件系统自身元数据或者数据一致性的相关机制,而忽略了对上层应用程序数据一致性的保障,即这些文件系统均不提供任何机制保证上层应用程序的数据一致性。为此,大多数应用程序需要设计并实现自己的一致性保证协议来防止数据丢失或者损坏。然而,威斯康辛大学麦迪逊分校已有研究表明,由于应用程序无法感知下层文件系统的持久性特性,应用程序层实现的一致性协议通常非常复杂并且容易出错。例如,由CPU乱序写导致的乱序持久化操作或者非易失性文件系统中无法保证sector粒度的原子性更新将都会导致应用程序在发生系统错误时仍然丢失或者损坏数据。此外,大部分应用程序使用基于磁盘而优化的日志机制来保证数据一致性,这些机制会进一步损害应用程序运行在非易失性主存上时的性能,因为它们将产生过多的数据拷贝。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的目的在于提出一种基于非易失性主存的高效事务文件系统构建方法,该方法可以保证事务处理过程中的高效性和正确性。
为达到上述目的,本发明实施例提出了一种基于非易失性主存的高效事务文件系统构建方法,包括以下步骤:文件系统给上层应用程序提供相应的文件操作事务接口,从而所述上层应用程序利用所述事务接口执行相关事务,以保证应用程序所需的一致性;在事务开始时,所述文件系统给事务分配事务ID,以跟踪和执行应用程序发出的事务操作,并保证事务操作的原子性和持久性;在事务执行时,所述文件系统将日志区域分割成元数据日志区域和数据日志区域,并针对元数据更新和数据更新采用不同的日志处理方法;在事务提交时,所述文件系统强制将与事务相关的元数据内容和与事务相关数据日志内容持久化至非易失性主存,并写入提交日志条目代表该事务已完成;已提交的数据日志内容被周期性地写回至所述文件系统中,数据日志内容的写回采用并发选择写回机制。
本发明实施例的基于非易失性主存的高效事务文件系统构建方法,文件系统为上层应用程序提供一系列基于文件操作的事务接口。应用程序可以直接利用这些事务接口有选择性地执行相关事务以保证其所需的一致性,而无需单独实现一套一致性保证机制,并且可以保证事务处理过程中的高效性和正确性。
另外,根据本发明上述实施例的基于非易失性主存的高效事务文件系统构建方法还可以具有以下附加的技术特征:
进一步地,在本发明的一个实施例中,当发生错误或者故障时,所述文件系统采用快速恢复机制进行系统故障恢复。
进一步地,在本发明的一个实施例中,对于元数据更新,所述文件系统使用字级别的回滚日志记录方法来记录元数据更新的日志,并且对于数据更新,所述文件系统使用cacheline粒度的重做日志记录方法来记录数据更新的日志。
进一步地,在本发明的一个实施例中,所述数据日志进一步分离日志头部和日志数据,其中,所述日志头部包括日志元数据,并存储在非易失性主存的全局可见区域,而所述日志数据存放于待定块中,所述待定块的空间由所述文件系统动态分配,所述日志元数据中包含相应指针指向与其对应的待定块。
进一步地,在本发明的一个实施例中,所述文件系统采用高效的两级易失性索引来检索数据日志区域内已提交但未写回的数据,以有效地跟踪数据日志区域的最新数据。
进一步地,在本发明的一个实施例中,所述两级易失性索引完全位于DRAM中以提供高效的索引操作,其中,首先给定一个逻辑块号和所述逻辑块号内的cacheline编号,索引将返回包含cacheline最新数据的物理块号,并且所述索引将和同一个逻辑块相关的待定块通过事务提交顺序组成待定链表。
进一步地,在本发明的一个实施例中,在每个待定块中,所述文件系统使用cacheline位图来识别在事务执行过程中所更新的cacheline。
进一步地,在本发明的一个实施例中,所述两级易失性索引具体包括以下两层索引:第一层索引,使用Linux内核中的基数树(radix tree)结构将每个文件中所有逻辑块对应的待定链表表头组织成一个基数树结构,以通过给定的逻辑块号,索引出对应该逻辑块号的待定链表表头;第二层索引,根据所述第一层索引得到的待定链表表头,从链表头部开始顺序遍历所述待定链表中的每个待定块,直到在其中一个待定块的cacheline位图中,和所要查询的cacheline编号对应的位显示为1时,退出并返回该待定块的块号,反之,相应位在所述待定链表中所有待定块的cacheline位图中都显示为0,则使用文件系统块索引机制,返回和该查询逻辑块对应的文件系统数据块的块号。
进一步地,在本发明的一个实施例中,所述并发选择写回机制将数据日志中属于不同逻辑块的已提交待定块并发地写回至所述文件系统中以提高写回操作的并发性,而属于同一逻辑块的不同版本的已提交待定块则在同一组中进行写回处理以保证写回操作的正确性,并且已提交待定块的写回操作采用选择写回算法以减少数据拷贝。
进一步地,在本发明的一个实施例中,所述选择写回算法为属于同一组已提交的待定块被写回至一个挑选的块中,所述挑选的块从属于该组的所有已提交待定块和与该组相对应的原始数据块中选出,其中该块含有的最新的cacheline数据在以上数据块中最多。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为根据本发明一个实施例的基于非易失性主存的高效事务文件系统构建方法的流程图;
图2为根据本发明一个实施例的使用事务文件系统接口执行事务的示例图;
图3为根据本发明一个实施例的事务文件系统的数据布局和事务数据结构图;
图4为根据本发明一个实施例的日志条目结构在事务执行过程中的状态转换示意图;
图5为根据本发明一个实施例的文件系统块在事务执行过程中的状态转换示意图;
图6为根据本发明一个实施例的两级易失性索引结构示意图;
图7为根据本发明一个实施例的使用选择写回算法进行已提交待定块的写回操作的示意图;以及
图8为根据本发明一个实施例的日志条目的结构体设计示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参照附图描述根据本发明实施例提出的基于非易失性主存的高效事务文件系统构建方法。
图1是本发明一个实施例的基于非易失性主存的高效事务文件系统构建方法的流程图。
如图1所示,该基于非易失性主存的高效事务文件系统构建方法包括以下步骤:
在步骤S101中,文件系统给上层应用程序提供相应的文件操作事务接口,从而上层应用程序利用事务接口执行相关事务,以保证应用程序所需的一致性。
举例而言,本发明实施例的基于非易失性主存的高效事务文件系统可以为应用程序提供如下四种事务访问接口:1、tx_begin(TxInfo);2、tx_add(TxID,Fd);3、tx_commit(TxID);4、tx_abort(TxID)。其中,tx_begin(TxInfo)创建一个新的事务,并把事务信息通过TxInfo参数传递给文件系统;tx_add(TxID,Fd)将一个指定的文件描述符Fd关联到与其相关的事务上,该事务编号为TxID;tx_commit(TxID)提交一个事务,该事务编号为TxID;tx_abort(TxID)中止一个事务,该事务编号为TxID。因此,应用程序可以通过使用以上四种事务接口来执行事务操作,而不需要实现一套复杂的事务处理机制。
进一步地,为了保证一组文件操作的原子性,应用程序需要在这组文件操作执行之前使用tx_begin()接口来创建一个新的事务,并且需要在这组文件操作执行完之后,调用tx_commit()/tx_abort()接口来提交/中止这个事务。为了让文件系统知道哪些操作属于一个特定的事务,应用程序开发者需要将相应的文件描述符关联到相关的事务ID上,并通过tx_begin()中的TxInfo参数或者通过tx_add()接口将相应的事务信息传递给文件系统。随后,所有和这些关联之后的文件描述符相关的文件操作均属于这个事务。为了结束一个事务,tx_commit()会将所有相关的更新持久化到非易失性主存上;相反,tx_abort()则会回滚所有已经执行的事务操作。需要注意的是,本发明中所述的事务文件系统所提供的接口并不会改变已有的文件I/O操作接口,从而极大地简化了本发明中所述事务文件系统的接口的使用。
如图2所示,图2显示了应用程序如何使用以上事务接口执行一个事务。该程序首先打开两个文件,然后使用tx_begin()接口开始一个新的事务;其中,tx_begin()中的参数info表明有两个文件描述符(fd1和fd2)属于该事务;接着,该程序执行两个文件写操作,并通过tx_commit()接口来持久化这两个写操作;最后,tx_commit()保证这两个写操作要么全部成功持久化至非易失性主存,或者两个都不成功,从而保证应用程序所需的原子性特点。
在步骤S102中,在事务开始时,文件系统给事务分配事务ID,以跟踪和执行应用程序发出的事务操作,并保证事务操作的原子性和持久性。
在步骤S103中,在事务执行时,文件系统将日志区域分割成元数据日志区域和数据日志区域,并针对元数据更新和数据更新采用不同的日志处理方法。
其中,在本发明的一个实施例中,数据日志进一步分离日志头部和日志数据,其中,日志头部包括日志元数据,并存储在非易失性主存的全局可见区域,而日志数据存放于待定块中,待定块的空间由文件系统动态分配,日志元数据中包含相应指针指向与其对应的待定块。
进一步地,在本发明的一个实施例中,对于元数据更新,文件系统使用字级别的回滚日志记录方法来记录元数据更新的日志,并且对于数据更新,文件系统使用cacheline粒度的重做日志记录方法来记录数据更新的日志。
具体地,如图3所示,本发明实施例的事务文件系统的数据布局由三部分组成:文件系统超级块、全局日志区域、以及动态分配的数据块和待定块区域。其中,全局日志区域进一步分为元数据日志区域和数据日志区域,全局日志区域的空间分配基于数据结构(即日志条目),而数据块和待定块区域的空间分配是基于块粒度。此外,为了避免高额的日志记录和顺序执行开销,所有用于空间分配的数据结构均位于易失性内存中。
其中,结合图4与图5所示,在事务执行过程中,所有的日志数据直接写入位于非易失性主存上的全局日志区域和待定块中。为此,对于文件系统元数据更新,本发明实施例的事务文件系统会首先将该元数据的老版本写入元数据日志区域,并在将新版本元数据原地更新到文件系统之前持久化这些相应的元数据日志条目;相反,对于文件系统数据更新,事务文件系统则将新版本数据按照cacheline粒度的异地更新方式将其写入新分配的待定块中,而其相关联的日志头部则被记录到全局可见的数据日志区域;日志头部包含相应的指针指向与其对应的待定块,从而使得待定块能在故障恢复过程中被找到。这种分离日志头部和日志数据的技术也同时使得本发明中所述的事务文件系统能够支持执行大事务,因为事务更新的大小由文件系统的空闲空间决定,而并非由一个固定的日志区域大小所决定。
另外,为了使得文件系统能够在故障恢复过程中识别出未完整写入的日志条目,本发明实施例的事务文件系统在日志条目中包含了一个有效字段,文件系统强制使得一个日志条目仅位于一个cacheline中,并且利用CPU缓存中同一个cacheline内的写入操作不会乱序的结构保证来写入一个日志条目。为此,在向全局日志区域写入一个日志条目时,有效字段将会在最后被写入,以保证其不会在日志条目中其它数据字段持久化至非易失性主存之前被持久化。当释放一个日志条目时,文件系统会利用处理器中8字节原子写的特性来原子性地将该条目中的有效字段从1修改为0。
在步骤S104中,在事务提交时,文件系统强制将与事务相关的元数据内容和与事务相关数据日志内容持久化至非易失性主存,并写入提交日志条目代表该事务已完成。
在步骤S105中,已提交的数据日志内容被周期性地写回至文件系统中,数据日志内容的写回采用并发选择写回机制。
另外,在本发明的一个实施例中,当发生错误或者故障时,文件系统采用快速恢复机制进行系统故障恢复。
具体地,在本发明的一个实施例中,文件系统采用高效的两级易失性索引来检索数据日志区域内已提交但未写回的数据,以有效地跟踪数据日志区域的最新数据。
进一步地,在本发明的一个实施例中,如图6所示,两级易失性索引完全位于DRAM中以提供高效的索引操作,其中,首先给定一个逻辑块号和逻辑块号内的cacheline编号,索引将返回包含cacheline最新数据的物理块号,并且索引将和同一个逻辑块相关的待定块通过事务提交顺序组成待定链表。
进一步地,在本发明的一个实施例中,在每个待定块中,文件系统使用cacheline位图来识别在事务执行过程中所更新的cacheline。
也就是说,所述的两级易失性索引完全位于DRAM中以提供高效的索引操作。给定要检索的逻辑块号和该逻辑块号内的cacheline编号,该索引将返回包含该cacheline最新数据的物理块号。此外,该索引将和同一个逻辑块相关的待定块通过事务提交顺序组成一个待定链表。在每个待定块中,文件系统使用cacheline位图来识别在事务执行过程中所更新的cacheline。
进一步地,在本发明的一个实施例中,两级易失性索引具体包括以下两层索引:第一层索引,使用Linux内核中的基数树(radix tree)结构将每个文件中所有逻辑块对应的待定链表表头组织成一个基数树结构,以通过给定的逻辑块号,索引出对应该逻辑块号的待定链表表头;第二层索引,根据第一层索引得到的待定链表表头,从链表头部开始顺序遍历待定链表中的每个待定块,直到在其中一个待定块的cacheline位图中,和所要查询的cacheline编号对应的位显示为1时,退出并返回该待定块的块号,反之,相应位在待定链表中所有待定块的cacheline位图中都显示为0,则使用文件系统块索引机制,返回和该查询逻辑块对应的文件系统数据块的块号。
进一步地,在本发明的一个实施例中,并发选择写回机制将数据日志中属于不同逻辑块的已提交待定块并发地写回至文件系统中以提高写回操作的并发性,而属于同一逻辑块的不同版本的已提交待定块则在同一组中进行写回处理以保证写回操作的正确性,并且已提交待定块的写回操作采用选择写回算法以减少数据拷贝。
进一步地,在本发明的一个实施例中,选择写回算法为属于同一组已提交的待定块被写回至一个挑选的块中,挑选的块从属于该组的所有已提交待定块和与该组相对应的原始数据块中选出,其中,该块含有的最新的cacheline数据在以上数据块中最多。
具体地,在事务已提交之后,已提交的数据日志内容将被周期性地写回至文件系统中。在写回过程中,文件系统需要保证写回过程的正确性,即不能将老版本的数据覆盖写回到新版的数据上,否则将导致数据不一致。为了解决这个问题,相关技术中采用同步写回机制或者使用顺序异步写回机制。然而,同步写回机制使得写回过程的延迟始终处于关键I/O路径上;而顺序异步写回机制则不能充分开发非易失性主存的高并发特性,从而影响系统的扩展性。更重要的是,这两类方法都使用固定写回算法,增加了写回过程中的拷贝开销。为了提高写回过程的效率,本发明实施例的并发选择写回机制将已提交的数据日志内容周期性地写回至文件系统中。
在本发明的实施例中,并发选择写回机制将数据日志中属于不同逻辑块的已提交待定块并发地写回至文件系统中以提高写回操作的并发性,而属于同一逻辑块的不同版本的已提交待定块则在同一组中进行写回处理以保证写回操作的正确性,并且该组已提交待定块的写回操作采用选择写回算法。
如上所述,两级易失性索引已经将属于同一逻辑块的所有已提交待定块链接到了同一个待定链表中,并发选择写回机制将位于不同待定链表中的已提交待定块的写回操作使用多线程并发地执行,而位于同一待定链表中的所有已提交待定块组成一个组,并且该组待定块的写回操作采用选择写回算法以减少数据拷贝。
对于选择写回算法,属于同一组已提交的待定块被写回至一个挑选的块中,该块从属于该组的所有已提交待定块和与该组相对应的原始数据块中选出,其中该块含有的最新的cacheline数据在以上数据块中最多。
具体而言,选择写回算法具体包括以下步骤:
S1,从属于同一组的所有已提交待定块和它们共同关联的原始数据块中选出一个包含有最新的cacheline数据最多的块,该块将替换原始数据块成为新的文件系统数据块;
S2,将位于该组中其它数据块中(即非新选出的文件系统数据块)的最新数据分别拷贝至上一步中新选出的文件系统数据块中;
S3,如果第一步新选出的文件系统数据块和原始数据块不是同一个数据块,则原子性地更新文件系统中的8字节大小的块指针,将该指针从原来指向原始数据块改变成为指向新选出的数据块。
进一步地,如图7所示,假设文件系统中每个数据块包含6个cacheline,每个cacheline的大小为64字节。图中
D1、D2、D3表示逻辑块D的不同版本的待定块,D0表示逻辑块D对应的文件系统原始数据块。Cij表示位于块Di中的第j个cacheline。加粗显示的cacheline表示该cacheline中包含有最新的数据。在该例中,本发明提出的选择写回算法将具体包含以下步骤:1)从D0、D1、D2、D3选出一个包含有最新的cacheline数据最多的块,根据示例可以看出,D3在该步骤中被选出;2)将D0、D1、D2中的包含有最新数据的cacheline拷贝至D3中,为此,C22、C13、C05将分别从D2、D1、D0中拷贝至D3;3)利用处理器中8字节原子写的特性将指向D0的文件系统块指针改为指向D3。在该例中,本发明实施例的选择写回算法在写回过程中总共产生了3个cacheline大小的数据拷贝以及一个8字节的指针更改,因此,总共产生200字节的数据写入。相比之下,传统固定写回算法需要把D1、D2、D3中的所有数据顺序拷贝至D0,该过程将总共产生1152字节的数据写入。因此,可以看出,本发明实施例的选择写回算法比传统固定写回算法减少了很多不必要的数据写入,减少了写回操作的开销,从而提升了系统性能。
另外,快速恢复能帮助提升系统的可用性。当系统发生错误或者故障时,本发明实施例的基于非易失性主存的高效事务文件系统采用一种快速恢复机制进行系统故障恢复。
当系统发生故障重启之后,位于全局日志区域的日志条目包含有以下三种状态:无效态(空闲态)、未提交态(待定态)、已提交态;为了提供快速恢复,本发明实施例的快速恢复机制仅回滚未提交的元数据日志,而延迟对已提交的数据日志的写回操作;对于数据日志,该算法会为其重建必要的数据结构。
具体地,快速恢复机制进一步包括以下步骤:
S1,扫描位于非易失性主存上的全局日志区域,通过日志条目结构体中的类型字段识别出提交日志条目,并通过提交日志条目识别出所有已经提交的事务ID,并为其建立有效的索引。
S2,根据步骤S1建立的已提交事务ID的索引,扫描数据日志区域,识别出所有已提交的数据日志条目,并释放所有未提交的数据日志条目;然后,将所有已提交的日志条目根据TxID使用排序算法进行排序;最后,所有已提交的数据日志根据排序的顺序被依次加入已提交事务链表(如图3)和相应的二级易失性索引中。
可以理解为,根据步骤S1建立的已提交事务ID的索引,扫描数据日志区域,为所有已提交的数据日志条目恢复出相应的二级易失性索引,并丢弃未提交的数据日志条目。
S3,根据步骤S1建立的已提交事务ID的索引,扫描元数据日志区域,识别出所有未提交的元数据日志条目,并释放所有已提交的元数据日志条目;将属于同一元数据的所有不同版本的元数据日志条目按照元数据日志条目结构体中的sequence_id字段进行排序,并将这些不同版本的元数据日志条目按照反序写回至文件系统中以回滚未提交的事务。
可以理解为,根据步骤S1建立的已提交事务ID的索引,扫描元数据日志区域,按正确顺序回滚未提交的元数据日志条目,并释放已提交的元数据日志条目。
完成以上三个步骤之后,虽然有些已提交的日志数据未被写回至文件系统中,这些未写回的日志数据仍然可以使用所述的二级易失性索引进行检索。此外,写回操作也可以通过所述的二级易失性索引中的待定链表以及相应的选择写回算法延迟地进行写回。而且,所有未提交的元数据日志条目都已经按照正确的顺序进行了回滚操作;因此,此时数据都处于一致性的状态,保证了发生故障之后数据的一致性。
进一步地,如图8所示,图8为本发明中日志条目的结构体设计图。对于本发明实施例的元数据日志条目,其日志数据和日志头部存放在一起。对于元数据日志条目结构体中的每个字段含义如下所示:
1、type字段表示日志条目的类型。其中日志条目的类型包含三种:元数据日志条目、数据日志条目、提交日志条目;
2、TxID字段表示事务的唯一编号;
3、addr字段表示和该日志条目对应的文件系统数据区域的元数据的地址;
4、sequence_id字段表示同一个事务中元数据的更新顺序;
5、size字段表示日志条目中日志数据的有效大小;
6、valid_flag字段表示该日志条目是否有效,如果为1则表示为有效日志条目,否则为0则表示为无效日志条目;
7、data数组用于存放该日志条目中的实际日志数据。
和元数据日志条目不同的是,数据日志条目分离日志头部和日志数据,即数据日志条目中仅仅包含日志头部(也即日志元数据);数据日志中实际的日志数据存放在由文件系统动态分配的待定块中。对于数据日志条目结构体中的每个字段含义如下所示:
1、type字段表示日志条目的类型。其中日志条目的类型包含三种:元数据日志条目、数据日志条目、提交日志条目;
2、TxID字段表示事务的唯一编号;
3、ino字段表示该日志条目所关联的文件inode结构编号;
4、logic_block_no表示该日志条目所关联的逻辑块号;
5、pointer_addr表示指向逻辑块号所对应的数据块的块指针的存放地址;
6、bitmap表示cacheline位图,用来标识在事务执行过程中在该逻辑块中所更新的cacheline;
7、valid_flag字段表示该日志条目是否有效,如果为1则表示为有效日志条目,否则为0则表示为无效日志条目;
8、reserve数组不存储有效数据,但是可以保证数据日志条目结构体的大小为一个cacheline大小(即64字节),从而使得一个日志条目仅位于一个cacheline中,而不会跨越两个不同的cacheline。
根据本发明实施例的基于非易失性主存的高效事务文件系统构建方法,文件系统为上层应用程序提供一系列基于文件操作的事务接口。应用程序可以直接利用这些事务接口有选择性地执行相关事务以保证其所需的一致性,而无需单独实现一套一致性保证机制,并且可以保证事务处理过程中的高效性和正确性。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
在本发明中,除非另有明确的规定和限定,第一特征在第二特征“上”或“下”可以是第一和第二特征直接接触,或第一和第二特征通过中间媒介间接接触。而且,第一特征在第二特征“之上”、“上方”和“上面”可是第一特征在第二特征正上方或斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”可以是第一特征在第二特征正下方或斜下方,或仅仅表示第一特征水平高度小于第二特征。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种基于非易失性主存的高效事务文件系统构建方法,其特征在于,包括以下步骤:
文件系统给上层应用程序提供相应的文件操作事务接口,从而所述上层应用程序利用所述事务接口执行相关事务,以保证应用程序所需的一致性;
在事务开始时,所述文件系统给事务分配事务ID,以跟踪和执行应用程序发出的事务操作,并保证事务操作的原子性和持久性;
在事务执行时,所述文件系统将日志区域分割成元数据日志区域和数据日志区域,并针对元数据更新和数据更新采用不同的日志处理方法;
在事务提交时,所述文件系统强制将与事务相关的元数据内容和与事务相关数据日志内容持久化至非易失性主存,并写入提交日志条目代表该事务已完成;以及
已提交的数据日志内容被周期性地写回至所述文件系统中,数据日志内容的写回采用并发选择写回机制。
2.如权利要求1所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,当发生错误或者故障时,所述文件系统采用快速恢复机制进行系统故障恢复。
3.如权利要求1所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,对于元数据更新,所述文件系统使用字级别的回滚日志记录方法来记录元数据更新的日志,并且对于数据更新,所述文件系统使用cacheline粒度的重做日志记录方法来记录数据更新的日志。
4.如权利要求1所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,所述数据日志进一步分离日志头部和日志数据,其中,所述日志头部包括日志元数据,并存储在非易失性主存的全局可见区域,而所述日志数据存放于待定块中,所述待定块的空间由所述文件系统动态分配,所述日志元数据中包含相应指针指向与其对应的待定块。
5.如权利要求1所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,所述文件系统采用高效的两级易失性索引来检索数据日志区域内已提交但未写回的数据,以有效地跟踪数据日志区域的最新数据。
6.如权利要求5所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,所述两级易失性索引完全位于DRAM中以提供高效的索引操作,其中,首先给定一个逻辑块号和所述逻辑块号内的cacheline编号,索引将返回包含cacheline最新数据的物理块号,并且所述索引将和同一个逻辑块相关的待定块通过事务提交顺序组成待定链表。
7.如权利要求6所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,在每个待定块中,所述文件系统使用cacheline位图来识别在事务执行过程中所更新的cacheline。
8.如权利要求5所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,所述两级易失性索引具体包括以下两层索引:
第一层索引,使用Linux内核中的基数树(radix tree)结构将每个文件中所有逻辑块对应的待定链表表头组织成一个基数树结构,以通过给定的逻辑块号,索引出对应该逻辑块号的待定链表表头;
第二层索引,根据所述第一层索引得到的待定链表表头,从链表头部开始顺序遍历所述待定链表中的每个待定块,直到在其中一个待定块的cacheline位图中,和所要查询的cacheline编号对应的位显示为1时,退出并返回该待定块的块号,反之,相应位在所述待定链表中所有待定块的cacheline位图中都显示为0,则使用文件系统块索引机制,返回和该查询逻辑块对应的文件系统数据块的块号。
9.如权利要求1所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,所述并发选择写回机制将数据日志中属于不同逻辑块的已提交待定块并发地写回至所述文件系统中以提高写回操作的并发性,而属于同一逻辑块的不同版本的已提交待定块则在同一组中进行写回处理以保证写回操作的正确性,并且已提交待定块的写回操作采用选择写回算法以减少数据拷贝。
10.如权利要求9所述的基于非易失性主存的高效事务文件系统构建方法,其特征在于,所述选择写回算法为属于同一组已提交的待定块被写回至一个挑选的块中,所述挑选的块从属于该组的所有已提交待定块和与该组相对应的原始数据块中选出,其中该块含有的最新的cacheline数据在以上数据块中最多。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610266175.6A CN107315746B (zh) | 2016-04-26 | 2016-04-26 | 基于非易失性主存的高效事务文件系统构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610266175.6A CN107315746B (zh) | 2016-04-26 | 2016-04-26 | 基于非易失性主存的高效事务文件系统构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107315746A true CN107315746A (zh) | 2017-11-03 |
CN107315746B CN107315746B (zh) | 2020-08-25 |
Family
ID=60184288
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610266175.6A Active CN107315746B (zh) | 2016-04-26 | 2016-04-26 | 基于非易失性主存的高效事务文件系统构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107315746B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446203A (zh) * | 2018-03-20 | 2018-08-24 | 万帮充电设备有限公司 | 服务器事务日志处理方法及装置 |
CN111104254A (zh) * | 2019-11-29 | 2020-05-05 | 北京浪潮数据技术有限公司 | 存储系统数据刷写方法、装置、设备及可读存储介质 |
CN111414320A (zh) * | 2020-02-20 | 2020-07-14 | 上海交通大学 | 基于日志文件系统的非易失内存构建磁盘cache的方法及系统 |
CN111414134A (zh) * | 2020-02-20 | 2020-07-14 | 上海交通大学 | 面向持久内存文件系统的事务写优化框架的方法及系统 |
CN111480149A (zh) * | 2017-12-15 | 2020-07-31 | 微软技术许可有限责任公司 | 持久存储器设备中的预写式日志记录 |
CN115981875A (zh) * | 2023-03-21 | 2023-04-18 | 人工智能与数字经济广东省实验室(广州) | 内存存储系统的增量更新方法、装置、设备、介质和产品 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6745286B2 (en) * | 2001-01-29 | 2004-06-01 | Snap Appliance, Inc. | Interface architecture |
CN101251814A (zh) * | 2008-02-04 | 2008-08-27 | 浙江大学 | 一种在操作系统中实现可信恢复系统的方法 |
CN101256526A (zh) * | 2008-03-10 | 2008-09-03 | 清华大学 | 检查点容错技术中文件状态一致性维护的实现方法 |
CN101710332A (zh) * | 2009-11-13 | 2010-05-19 | 广州从兴电子开发有限公司 | 一种事务日志通知内存数据库内容变化的方法及系统 |
CN103744961A (zh) * | 2014-01-06 | 2014-04-23 | 清华大学 | 用可重构的文件系统目录树提高非易失性存储寿命的方法 |
CN104778126A (zh) * | 2015-04-20 | 2015-07-15 | 清华大学 | 非易失性主存中事务数据存储优化方法及系统 |
-
2016
- 2016-04-26 CN CN201610266175.6A patent/CN107315746B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6745286B2 (en) * | 2001-01-29 | 2004-06-01 | Snap Appliance, Inc. | Interface architecture |
CN101251814A (zh) * | 2008-02-04 | 2008-08-27 | 浙江大学 | 一种在操作系统中实现可信恢复系统的方法 |
CN101256526A (zh) * | 2008-03-10 | 2008-09-03 | 清华大学 | 检查点容错技术中文件状态一致性维护的实现方法 |
CN101710332A (zh) * | 2009-11-13 | 2010-05-19 | 广州从兴电子开发有限公司 | 一种事务日志通知内存数据库内容变化的方法及系统 |
CN103744961A (zh) * | 2014-01-06 | 2014-04-23 | 清华大学 | 用可重构的文件系统目录树提高非易失性存储寿命的方法 |
CN104778126A (zh) * | 2015-04-20 | 2015-07-15 | 清华大学 | 非易失性主存中事务数据存储优化方法及系统 |
Non-Patent Citations (2)
Title |
---|
LU Y等: "LightTx: A lightweight transactional design in flash-based SSDs to support flexible transactions", 《PROCEEDINGS OF THE IEEE 31ST INTERNATIONAL CONFERENCE ON COMPUTER DESIGN》 * |
石伟等: "基于非易失存储器的事务存储系统综述", 《计算机研究与发展》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111480149A (zh) * | 2017-12-15 | 2020-07-31 | 微软技术许可有限责任公司 | 持久存储器设备中的预写式日志记录 |
CN111480149B (zh) * | 2017-12-15 | 2023-09-08 | 微软技术许可有限责任公司 | 持久存储器设备中的预写式日志记录 |
CN108446203A (zh) * | 2018-03-20 | 2018-08-24 | 万帮充电设备有限公司 | 服务器事务日志处理方法及装置 |
CN111104254A (zh) * | 2019-11-29 | 2020-05-05 | 北京浪潮数据技术有限公司 | 存储系统数据刷写方法、装置、设备及可读存储介质 |
CN111414320A (zh) * | 2020-02-20 | 2020-07-14 | 上海交通大学 | 基于日志文件系统的非易失内存构建磁盘cache的方法及系统 |
CN111414134A (zh) * | 2020-02-20 | 2020-07-14 | 上海交通大学 | 面向持久内存文件系统的事务写优化框架的方法及系统 |
CN111414134B (zh) * | 2020-02-20 | 2021-05-25 | 上海交通大学 | 面向持久内存文件系统的事务写优化框架的方法及系统 |
CN111414320B (zh) * | 2020-02-20 | 2023-06-06 | 上海交通大学 | 基于日志文件系统的非易失内存构建磁盘cache的方法及系统 |
CN115981875A (zh) * | 2023-03-21 | 2023-04-18 | 人工智能与数字经济广东省实验室(广州) | 内存存储系统的增量更新方法、装置、设备、介质和产品 |
CN115981875B (zh) * | 2023-03-21 | 2023-08-25 | 人工智能与数字经济广东省实验室(广州) | 内存存储系统的增量更新方法、装置、设备、介质和产品 |
Also Published As
Publication number | Publication date |
---|---|
CN107315746B (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107315746A (zh) | 基于非易失性主存的高效事务文件系统构建方法 | |
US11288252B2 (en) | Transactional key-value store | |
US11210220B2 (en) | Log-structured storage for data access | |
US11023453B2 (en) | Hash index | |
US10242050B2 (en) | Database caching in a database system | |
CN1983266B (zh) | 闪速类介质中存储事务记录的文件系统 | |
CN105335098B (zh) | 一种基于存储级内存的日志文件系统性能提高方法 | |
EP3170106B1 (en) | High throughput data modifications using blind update operations | |
CN103744936B (zh) | 一种数据库中的多版本并发控制方法及数据库系统 | |
CN103765393B (zh) | 存储系统 | |
Levandoski et al. | LLAMA: A cache/storage subsystem for modern hardware | |
US20180011892A1 (en) | Foster twin data structure | |
CN109407979A (zh) | 多线程持久性b+树数据结构设计与实现方法 | |
US20170351543A1 (en) | Heap data structure | |
CN105930500A (zh) | 数据库系统中事务恢复的方法与数据库管理系统 | |
US20100235587A1 (en) | Staged Software Transactional Memory | |
CN102722449A (zh) | 基于SSD的Key-Value型本地存储方法及系统 | |
US11100083B2 (en) | Read only bufferpool | |
CN105095261A (zh) | 数据插入方法和装置 | |
CN106716409A (zh) | 基于查询需求从行存储数据库自适应地构建和更新列存储数据库的方法和系统 | |
US20230342353A1 (en) | Targeted sweep method for key-value data storage | |
CN109690522B (zh) | 一种基于b+树索引的数据更新方法、装置及存储装置 | |
CN113495692A (zh) | 数据存储的方法和键值存储设备 | |
CN113821508A (zh) | 一种数组索引的实现方法和系统 | |
CN114816224A (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 |