基于日志文件系统的非易失内存构建磁盘cache的方法及系统

文档序号:1324100 发布日期:2020-07-14 浏览:18次 >En<

阅读说明:本技术 基于日志文件系统的非易失内存构建磁盘cache的方法及系统 (Method and system for constructing disk cache based on nonvolatile memory of log file system ) 是由 黄林鹏 郑圣安 屠要峰 杨洪章 沈艳艳 陈雨亭 闫格 于 2020-02-20 设计创作,主要内容包括:本发明提供了一种基于日志文件系统的非易失内存构建磁盘cache的方法及系统,包括:非易失内存cache包括非易失内存数据cache和非易失内存元数据cache;在非易失内存cache的初始化阶段,检查非易失内存中设置的关机标记,当检查到不是正常关机时,则非易失内存cache执行故障恢复操作保证系统一致性;在非易失内存cache的初始化完成后,在数据cache执行数据提交,在元数据cache执行元数据提交操作,在非易失内存cache的存储空间不足时,由数据cache执行数据回写操作,由元数据cache执行元数据回写操作;本发明避免数据的双重写,减少元数据的写放大,提高系统整体性能。(The invention provides a method and a system for constructing a disk cache based on a nonvolatile memory of a log file system, wherein the method comprises the following steps: the nonvolatile memory cache comprises a nonvolatile memory data cache and a nonvolatile memory metadata cache; in the initialization stage of the nonvolatile memory cache, checking a shutdown mark set in the nonvolatile memory, and when the nonvolatile memory cache is checked to be not normally shutdown, executing fault recovery operation to ensure the consistency of the system; after the initialization of the nonvolatile memory cache is completed, data submission is performed on the data cache, metadata submission operation is performed on the metadata cache, when the storage space of the nonvolatile memory cache is insufficient, data write-back operation is performed by the data cache, and metadata write-back operation is performed by the metadata cache; the invention avoids double writing of data, reduces the writing amplification of metadata and improves the overall performance of the system.)

基于日志文件系统的非易失内存构建磁盘cache的方法及 系统

技术领域

本发明涉及非易失内存cache,具体地,涉及一种基于日志文件系统的非易失内存构建磁盘cache的方法及系统,更为具体地,涉及一种基于日志文件系统的非易失性内存cache。

背景技术

日志文件系统是将单独的磁盘作为日志或是从磁盘划分出一块区域作为日志的一种文件系统。在普通文件系统中,数据直接写回磁盘并覆盖掉原来的数据。但是由于数据的原子写粒度小于文件系统的数据块大小,若在向磁盘写数据过程中发生断电或系统崩溃等故障,就会发生磁盘的数据只更新了一部分,导致文件系统的一致性问题。为了解决这个问题,日志文件系统应运而生。它的思想是,在将数据写到磁盘上文件系统的本来位置之前,先将其记录到预先设置的日志区域,写日志成功后再将数据写回本来位置。根据日志记录的是更新前的数据还是更新后的数据,又可以分为undo型日志文件系统和redo型日志文件系统。

非易失内存是近些年兴起的一个研究领域,它为存储器的发展提供了新的思路,它的广阔前景也吸引着越来越多的研究人员参与进来。非易失内存融合了内存和存储的优点,它的特性主要包括:字节寻址特性,即最小的数据访问单元是字节而不是数据块,这一点和内存相似;持久性,不同于断电后数据即丢失的内存,非易失内存的数据在断电后依然存在,不会丢失,这一点和磁盘类似;读写速度快,非易失内存的读写速度远远快于传统磁盘介质(HDD和SSD),读写延迟在数量级上和内存具有可比性。以上几种特性使得非易失内存具备广泛应用于系统的各个层次结构的潜力,包括内存、磁盘以及内存和磁盘之间的cache。

Cache是计算机系统领域一个非常重要的思想,也就是用容量较小但是读写速度很快的设备来作为容量较大但是读写速度很慢的设备的缓存,以此来提高系统的整体读写性能。在计算机系统的存储器层次结构中,从寄存器、高速cache、内存到磁盘,每一层都可以看作是下一层的cache。

专利文献CN108897701A(申请号:201810634621.3)公开了本申请涉及一种cache存储架构。cache存储架构包括:多个内核、一个cache存储器以及物理内存;各内核分别与cache存储器连接;cache存储器与物理内存以组相联映射关系相连。

发明内容

针对现有技术中的缺陷,本发明的目的是提供一种一种基于日志文件系统的非易失内存cache的存储方法及系统。

根据本发明提供的一种基于日志文件系统的非易失内存cache的存储方法,包括:

非易失内存cache包括非易失内存数据cache和非易失内存元数据cache;

步骤M1:在非易失内存cache的初始化阶段,检查非易失内存中设置的关机标记,当检查到不是正常关机时,则非易失内存cache执行故障恢复操作保证文件系统一致性;

步骤M2:在非易失内存cache的初始化完成后,在数据cache执行数据提交,在元数据cache执行元数据提交操作,即数据和元数据更新完成后,分别写到数据cache和元数据cache;

步骤M3:在非易失内存cache的存储空间不足时,由数据cache执行数据回写操作,由元数据cache执行元数据回写操作,即将原来的数据块和元数据块写回磁盘,并为新的数据腾出存储空间;

所述关机标记为读取非易失内存的值,根据非易失内存的值判断是否为正常关机;设置关机标记具体地说可以设置一个变量来存储数据,由于非易失内存具有持久性,开机之后读取它的值,根据它的值可以知道是否是正常关机。

非易失内存指的就是非易失内存cache

所述非易失内存数据cache位于内存和磁盘之间,暂存由内存更新的数据,并将数据写回磁盘;

所述非易失内存元数据cache提供元数据存储,保证元数据的一致性和故障恢复。

优选地,所述非易失内存数据cache依次存放环形缓冲区、数据cache条目和数据块存储区。

优选地,所述环形缓冲区由预设值字节的条目组成,其中预设值字节为磁盘块号,另外的预设值字节为非易失内存块号;

环形缓冲区是在数据提交过程中记录对应数据块在数据cache中原来的存储位置;

所述数据cache条目大小为预设值字节,其中预设值字节磁盘块号,另外预设值字节为非易失内存块号;

非易失内存数据cache条目是记录对应数据块在数据cache中最新的存储位置;

所述数据块存储区根据文件系统配置默认由预设值大小的数据块组成;数据块存储区是存储从内存提交的数据块,最终数据块写回磁盘。

优选地,所述非易失内存元数据cache依次存放元数据日志,元数据cache条目和元数据块存储区。

优选地,所述元数据日志是记录元数据更新前的信息,当发生包括断电和/或操作系统崩溃故障时,利用元数据日志将元数据恢复到一致性状态;

所述元数据cache条目大小为预设值字节,其中预设值字节为磁盘块号,另外预设值字节为非易失内存块号;

所述元数据cache条目是记录元数据块在元数据cache中的存储位置;

所述元数据块存储区根据文件系统配置默认由预设值大小的元数据块组成,存储更新的元数据块。

本发明提供的一种基于日志文件系统的非易失内存cache的存储系统,包括:

非易失内存cache包括数据cache和元数据cache;

模块M1:在非易失内存cache的初始化阶段,检查非易失内存中设置的关机标记,当检查到不是正常关机时,则非易失内存cache执行故障恢复操作保证文件系统一致性;

模块M2:在非易失内存cache的初始化完成后,在数据cache执行数据提交,在元数据cache执行元数据提交操作,即数据和元数据更新完成后,分别写到数据cache和元数据cache;

模块M3:在非易失内存cache的存储空间不足时,由数据cache执行数据回写操作,由元数据cache执行元数据回写操作,即将原数据块和元数据块写回磁盘,并未新的数据腾出存储空间。

所述关机标记为读取非易失内存的值,根据非易失内存的值判断是否为正常关机;设置关机标记具体地说可以设置一个变量来存储数据,由于非易失内存具有持久性,开机之后读取它的值,根据它的值可以知道是否是正常关机。

所述非易失内存数据cache位于内存和磁盘之间,暂存由内存更新的数据,并将数据写回磁盘;

所述非易失内存元数据cache提供元数据存储,保证元数据的一致性和故障恢复。

优选地,所述数据cache依次存放环形缓冲区、数据cache条目和数据块存储区。

优选地,所述环形缓冲区由预设值字节的条目组成,其中预设值字节为磁盘块号,另外的预设值字节为非易失内存块号;

环形缓冲区是在数据提交过程中记录对应数据块在数据cache中原来的存储位置。

所述数据cache条目大小为预设值字节,其中预设值字节磁盘块号,另外预设值字节为非易失内存块号;

非易失内存数据cache条目是记录对应数据块在数据cache中最新的存储位置。

所述数据块存储区根据文件系统配置默认由预设值大小的数据块组成;数据块存储区是存储从内存提交的数据块,最终数据块写回磁盘。

优选地,所述非易失内存元数据cache依次存放元数据日志,元数据cache条目和元数据块存储区。

优选地,所述元数据日志是记录元数据更新前的信息,当发生包括断电和/或操作系统崩溃故障时,利用元数据日志将元数据恢复到一致性状态;

所述元数据cache条目大小为预设值字节,其中预设值字节为磁盘块号,另外预设值字节为非易失内存块号;

所述元数据cache条目是记录元数据块在元数据cache中的存储位置;

所述元数据块存储区根据文件系统配置默认由预设值大小的元数据块组成,存储更新的元数据块。

与现有技术相比,本发明具有如下的有益效果:

1、本发明提供了数据恢复和元数据恢复功能,保证文件系统等数据和元数据一致性。

2、本发明避免了数据的双重写,减少了元数据的写放大,从而提高了系统整体性能。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明实施例的一种基于日志文件系统的非易失内存cache的主要操作流程图;

图2为本发明一个实施例的非易失内存数据cache说明图;

图3为本发明一个实施例的非易失内存元数据cache说明图;

图4为本发明一个实施例的数据提交流程图;

图5为本发明一个实施例的数据提交前的内存和非易失内存cache说明图;

图6为本发明一个实施例的数据提交中的内存和非易失内存cache说明图;

图7为本发明一个实施例的故障恢复的数据恢复流程图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

由于日志文件系统需要先将内存的脏数据写到日志,之后再将数据写到磁盘上文件的本来位置,同一份数据带来了两次的磁盘写操作,也就是数据的双重写问题。由于磁盘是一个慢速设备,写数据比较耗时,所以日志的双重写问题会带来较大的性能损耗。此外,由于传统日志文件系统按照块来组织元数据,而元数据本身的粒度小于数据块的大小,这就导致了元数据的写放大问题。以linux自带的ext4文件系统为例,默认数据块大小和元数据块大小都为4kB,而一个inode的默认大小是256B,即一个元数据块包含16个inode。然而由于文件系统的设计,即使元数据块是部分更新,在向磁盘写元数据时也要写整个数据块的内容。最坏情况下,即使更新的只有一个inode,也要向磁盘写4096B的数据,这带来了16倍的元数据写放大。对于元数据更新频繁而数据更新较少的负载,元数据写放大带来的开销是难以忽视的。

本发明旨在提供一种基于日志文件系统的非易失内存cache,以解决日志文件系统存在的数据双重写问题和元数据写放大问题。

本发明公开了一种基于日志文件系统的非易失内存cache,该cache由数据cache和元数据cache两个部分组成。数据cache支持数据更新、数据恢复和数据回写操作。元数据cache则支持元数据更新、元数据更新和元数据恢复三种操作。文件系统的数据在内存进行处理,处理完毕时提交到非易失内存组成的数据cache。文件系统的元数据则在元数据cache处理,并执行就地更新。当数据cache或元数据cache空间不够时,会执行数据回写或元数据回写操作,将数据块或元数据块写回磁盘,以此为新的数据提供存储空间。为了解决断电和系统崩溃等故障带来的文件系统一致性问题,本发明还提供了数据恢复和元数据恢复功能,保证文件系统等数据和元数据一致性。

根据本发明提供的一种基于日志文件系统的非易失内存cache的存储方法,包括:非易失内存cache包括非易失内存数据cache和非易失内存元数据cache;所述数据cache位于内存和磁盘之间,暂存由内存更新的数据,最后将数据写回磁盘。所述元数据cache则提供元数据存储,并保证元数据的一致性和故障恢复。

步骤M1:在非易失内存cache的初始化阶段,检查非易失内存中设置的关机标记,当检查到不是正常关机时,则非易失内存cache执行故障恢复操作保证文件系统一致性;

步骤M2:在非易失内存cache的初始化完成后,在数据cache执行数据提交,在元数据cache执行元数据提交操作,即数据和元数据更新完成后,分别写到数据cache和元数据cache;

步骤M3:在非易失内存cache的存储空间不足时,由数据cache执行数据回写操作,由元数据cache执行元数据回写操作,即将原来的数据块和元数据块写回磁盘,并为新的数据腾出存储空间。

所述关机标记为读取非易失内存的值,根据非易失内存的值判断是否为正常关机;

具体地,所述非易失内存数据cache依次存放环形缓冲区、数据cache条目和数据块存储区。

具体地,所述环形缓冲区由16字节的条目组成,其中8字节为磁盘块号,另外的8字节为非易失内存块号;

环形缓冲区的作用是在数据提交过程中记录对应数据块在数据cache中原来的存储位置;

所述数据cache条目大小为16字节,其中8字节磁盘块号,另外8字节为非易失内存块号;

非易失内存数据cache条目是记录对应数据块在数据cache中最新的存储位置;

所述数据块存储区根据文件系统配置默认由4KB大小的数据块组成;数据块存储区是存储从内存提交的数据块,最终数据块写回磁盘。

具体地,所述非易失内存元数据cache依次存放元数据日志,元数据cache条目和元数据块存储区。

具体地,所述元数据日志是记录元数据更新前的信息,当发生包括断电和/或操作系统崩溃故障时,利用元数据日志将元数据恢复到一致性状态;

所述元数据cache条目大小为16字节,其中8字节为磁盘块号,另外8字节为非易失内存块号;

所述元数据cache条目是记录元数据块在元数据cache中的存储位置;

所述元数据块存储区根据文件系统配置默认由4KB大小的元数据块组成,存储更新的元数据块。

根据本发明提供的一种基于日志文件系统的非易失内存cache的存储系统,包括:非易失内存cache包括非易失内存数据cache和非易失内存元数据cache;所述数据cache位于内存和磁盘之间,暂存由内存更新的数据,最后将数据写回磁盘。所述元数据cache则提供元数据存储,并保证元数据的一致性和故障恢复。

模块M1:在非易失内存cache的初始化阶段,检查非易失内存中设置的关机标记,当检查到不是正常关机时,则非易失内存cache执行故障恢复操作保证文件系统一致性;当

模块M2:在非易失内存cache的初始化完成后,在数据cache执行数据提交,在元数据cache执行元数据提交操作,即数据和元数据更新完成后,分别写到数据cache和元数据cache;

模块M3:在非易失内存cache的存储空间不足时,由数据cache执行数据回写操作,由元数据cache执行元数据回写操作,即将原来的数据块和元数据块写回磁盘,并为新的数据腾出存储空间。

所述关机标记为读取非易失内存的值,根据非易失内存的值判断是否为正常关机;

具体地,所述非易失内存数据cache依次存放环形缓冲区、数据cache条目和数据块存储区。

具体地,所述环形缓冲区由16字节的条目组成,其中8字节为磁盘块号,另外的8字节为非易失内存块号;

环形缓冲区的作用是在数据提交过程中记录对应数据块在数据cache中原来的存储位置;

所述数据cache条目大小为16字节,其中8字节磁盘块号,另外8字节为非易失内存块号;

非易失内存数据cache条目是记录对应数据块在数据cache中最新的存储位置;

所述数据块存储区根据文件系统配置默认由4KB大小的数据块组成;数据块存储区是存储从内存提交的数据块,最终数据块写回磁盘。

具体地,所述非易失内存元数据cache依次存放元数据日志,元数据cache条目和元数据块存储区。

具体地,所述元数据日志是记录元数据更新前的信息,当发生包括断电和/或操作系统崩溃故障时,利用元数据日志将元数据恢复到一致性状态;

所述元数据cache条目大小为16字节,其中8字节为磁盘块号,另外8字节为非易失内存块号;

所述元数据cache条目是记录元数据块在元数据cache中的存储位置;

所述元数据块存储区根据文件系统配置默认由4KB大小的元数据块组成,存储更新的元数据块。

以下优选例对本发明作进一步详细说明:

日志文件系统是一种具有故障恢复功能的文件系统,它通过一种被称为日志的数据结构(通常是循环日志)来记录尚未被提交到文件系统主要部分的修改。在系统崩溃或电源故障的情况下,日志文件系统可以更快地恢复联机状态,并且受损的可能性更低。取决于具体的实现方式,日志文件系统可能仅跟踪存储的元数据,从而以更大的数据损坏可能性来提升系统性能。或者,日志文件系统可以同时记录存储的数据和相关元数据,牺牲一定的性能来保证更低的数据损坏可能性。根据日志的内容记录的是修改前的数据还是修改后的数据,日志文件系统的日志可以分为两种类型:redo logging和undologging。Redologging是在日志中记录更新后的数据,当redo log写成功后,数据写回文件失败时可以利用日志内容重做一次数据提交操作。Undo logging则是在日志中记录更新前的数据,写日志成功而写文件失败时,利用日志进行回滚操作,将文件恢复到更新之前的状态。

非易失内存NVM(Non-Volatile Memory)技术是一种断电后信息不回丢失的新型存储技术,除了类似于内存DRAM的低延迟、高带宽、字节寻址等特性,它还具有类似磁盘的大容量、低功耗等特性。这些特性使得系统工程师可以将其部署在计算机系统中从内存到磁盘的各个层次,以此提升系统性能。

在本发明等一个实施例中,所述非易失内存cache由数据cache和元数据cache两部分组成,所述数据cache连接内存和磁盘,暂存内存提交的数据,最终将数据写回磁盘,所述元数据cache提供元数据存储服务。图1是本发明实施例的一种基于日志文件系统的非易失内存cache的主要操作流程图。根据本发明实施例的基于日志文件系统的非易失内存cache,主要执行以下操作:

S1:在所述非易失内存cache的初始化阶段,检查系统上次关机是否是正常关机。若不是正常关机则执行故障恢复操作。

S2:在所述非易失内存cache的初始化完成之后,可以执行数据提交和元数据提交操作。

S3:当所述非易失内存cache的存储空间不足时,执行数据回写和元数据回写操作。

在本发明的一个实施例中,非易失内存数据cache的布局如图2所示,具体地,数据cache由循环缓冲区、数据cache条目和数据块存储区三部分组成,用于暂存内存提交的更新过的数据块。

在本发明的一个实施例中,循环缓冲区和数据cache条目都由8字节的磁盘块号和8字节的非易失内存块号组成。所述循环缓冲区用于记录事务提交过程中数据块原来的存储位置,而数据cache条目记录数据块的最新存储位置。数据块存储区则用于存储数据块,它的首部存放着数据块cache的位图,用于记录该区域的占用情况。

在本发明的一个实施例中,非易失内存元数据cache的布局如图3所示,具体地,元数据cache由元数据日志、元数据cache条目和元数据块存储区三部分组成。非易失元数据cache负责元数据的更新、故障恢复和写回磁盘。

在本发明的一个实施例中,元数据日志记录了元数据更新前的信息,用于解决元数据更新时发生断点或系统崩溃导致的一致性问题。元数据cache条目由8字节的磁盘块号和8字节的非易失内存块号组成,用于记录元数据块的存储位置。元数据块存储区用于存放元数据块,它的首部存放的是元数据cache的位图,用于记录元数据cache的占用情况。

在本发明的一个实施例中,数据提交操作如图4所示,图4中循环缓冲区部分有Head和Tail两个指针,用于记录此次数据提交开始的位置和当前结束位置,数据提交开始之前和成功结束之后,Head指针和Tail指针指向循环缓冲区中相同的位置。数据提交的步骤如图4的流程图所示,具体描述如下:

A:对于每一个需要提交的数据块,在数据cache条目中查找是否存在磁盘块号匹配的条目。若存在,执行B;否则,执行C。

B:存在匹配的条目,则该数据块之前在数据cache中存储过,需要将对应数据cache条目复制到循环缓冲区中Head所指的位置,执行D。

C:数据cache条目中找不到磁盘块号匹配的条目,说明该数据块之前没有被数据cache缓存过。本发明在Head指向的位置记录该数据块的磁盘块号,并在该循环缓冲区条目的非易失内存块号部分记录一个特殊的NON标记,表示该数据块之前并未被数据cache缓存,执行D。

D:在数据块存储区中选择一个空闲的数据块进行分配,之后将数据块的内容写入。若该数据块对应的数据cache条目存在,则将它对应的非易失内存块号更新为新分配的数据块的块号。若该数据块对应的数据cache条目不存在,则创建一个新的数据cache条目,并将该数据块的磁盘块号和新分配的数据块的非易失内存块号填入对应数据cache条目。

E:完成了数据cache条目的更新或创建后,将Tail指针加一使其指向下一个位置。

F:重复上述步骤,直到所有数据块都处理完毕。对Head指针进行更新,使其和Tail指针的值相同。

至此,数据提交操作成功完成。之后,可以选择将非易失内存数据cache中数据块之前的版本删除掉,为后面提交的的数据腾出空闲空间。

图5和图6显示了本发明一个实施例的数据提交前和提交后的非易失内存cache的内容。具体地,在数据提交之前,内存中的运行的事务存储着从上一次数据提交后更改过的脏数据块和脏的元数据的指针,其中待提交的数据块的磁盘块号分别为227和1018。在元数据cache中,有两个元数据cache条目,对应的元数据块的磁盘块号分别是1105和325,对应的元数据块的非易失内存块号分别为127和278.在数据cache中,Head和Tail指针指向循环缓冲区中相同的条目。数据cache中存在一个条目,对应的数据块的磁盘块号和非易失内存块号分别是227和705。数据提交开始时,先处理数据块227。首先在数据cache条目中查找227对应的条目,可以看见数据cache中存在匹配的条目,将其复制到Tail指针指向的循环缓冲区条目。之后在数据cache的数据块存储区分配一个空闲的数据块,如图6所示,可知,分配给它的是非易失内存块号为619。随后,将内存中更新过的数据块227的内容写到非易失内存块号为619的数据块,更新该数据块对应条目的非易失内存块号为619。数据cache条目更新完成后,将Tail指针的值指向下一个循环缓冲区条目。接着处理数据块1018,在数据cache条目中没有跟数据块1018匹配的条目,根据图4流程图所示,需要在Tail指针指向的位置创建新的循环缓冲区条目。本发明在Tail所指循环缓冲区条目的磁盘块号和非易失内存块号分别填上1018和特殊的NON标记,NON表明对应数据块是第一次提交到非易事内存数据cache。随后给该数据块分配非易失内存数据块,图6显示分配到非易失内存块号为611。将数据块内容写到新分配到数据块后,在数据cache条目中查找空闲条目并为该数据块创建新的条目,在磁盘块号和非易失内存块号处分别填入1018和611。之后将Tail指针指向下一个循环缓冲区条目。最后,将Tail指针的内容复制到Head指针使Head和Tail相等。至此,数据提交到操作就全部完成。

在本发明的一个实施例中,元数据cache中的元数据更新过程如下:

A:在元数据开始更新志前,在元数据cache的元数据日志区分配存储空间,并将该元数据复制到新分配到日志存储空间;

B:对元数据块存储区中的元数据进行就地更新(in-place update)。

在本发明的一个实施例中,数据块写回磁盘发生在非易失内存数据cache的数据块存储区没有空闲数据块,而元数据块写回磁盘发生在非易失内存元数据cache的元数据块存储区没有空闲数据块,由于数据cache选择写回的数据块和元数据cache选择写回的元数据块的策略不同,以下分别阐述。

在本发明的一个实施例中,数据块采用最近最少使用(Least Recently Used)算法选择写回磁盘的数据块。具体地,本发明为非易失内存数据cache中的每一个缓存的数据块维护一个链表。一个链表头指针指向最近最少使用的数据块,一个链表尾指针指向最近一次使用的数据块。事务提交过程中,对于每一个数据块,在链表中查找该数据块并将其移动到链表尾部,随后更新链表尾指针。选择写回的数据块时,将链表头指针指向的数据块取出即可,并将链表头指针指向下一个数据块。随后将该数据块写回磁盘,并更新位图和对应的数据cache条目。

在本发明的一个实施例中,元数据cache回写的策略是为每一个缓存的元数据cache维护一个计数器。由于一个元数据块会包含多个inode,当元数据块中任意一个inode被访问时,该元数据块的计数器的计数值都会加一。当需要将元数据块写回磁盘时,选择对应计数器计数值最小的元数据块写回磁盘。

在本发明的一个实施例中,故障恢复分为数据恢复和元数据两部分。数据恢复的步骤如图7所示,文字描述如下:

A:令cur=Head,cur表示当前处理的循环缓冲区条目。

B:当cur小于Tail+1时,执行下述步骤:

B1:用cur指向的循环缓冲区条目的非易失内存块号为NON,若是则执行b2,否则执行b3.

B2:用cur指向的循环缓冲区条目的磁盘块号在数据cache中查找匹配的条目,并将对应的条目删除。接着执行B4。

B3:用cur指向的循环缓冲区条目的磁盘块号在数据cache条目中查找匹配数据cache条目,将对应数据cache条目的非易失内存块号更改为cur指向条目的非易失内存块号。接着执行B4。

B4:将cur加一,指向下一个待处理的循环缓冲区条目。

C:将Head指针的值更新为Tail指针的值。

在本发明的一个实施例中,元数据恢复的操作相对简单,描述如下:对于元数据日志区的链表连接起来的所有元数据,使用它来覆盖元数据日志块中对应的元数据,最后将元数据日志区的内容清空。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于动态映射机制的cache防护方法及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类