CN111506458A - 一种提升f2fs文件系统事务性能的方法、模块及存储系统 - Google Patents
一种提升f2fs文件系统事务性能的方法、模块及存储系统 Download PDFInfo
- Publication number
- CN111506458A CN111506458A CN202010328660.8A CN202010328660A CN111506458A CN 111506458 A CN111506458 A CN 111506458A CN 202010328660 A CN202010328660 A CN 202010328660A CN 111506458 A CN111506458 A CN 111506458A
- Authority
- CN
- China
- Prior art keywords
- page
- dirty
- metadata
- data
- transaction
- 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
Images
Classifications
-
- 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/1474—Saving, restoring, recovering or retrying in transactions
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/122—File system administration, e.g. details of archiving or snapshots using management policies
-
- 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/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- 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/1847—File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种提升F2FS文件系统事务性能的方法、模块及存储系统,属于文件系统领域,包括:提交事务时,先遍历所写文件F在内存中的脏数据页,后遍历F的脏元数据页;对于所遍历到的脏数据/元数据页,相应在存储器的当前数据/元数据段为其分配一个物理页;在内存中为当前脏数据/元数据页分配一个额外空间,并在其中记录上一次分配的物理页地址,若该脏数据/元数据页为所遍历的第一个页,则记录其自身对应的物理页地址;将脏数据/元数据页与额外空间一起添加到对应的BIO中;脏数据页遍历结束后,提交对应的BIO;脏元数据页遍历结束后,为最后一个脏元数据页添加fsync标识,提交对应的BIO并直接结束操作。本发明能够有效提升F2FS文件系统的事务性能。
Description
技术领域
本发明属于文件系统领域,更具体地,涉及一种提升F2FS文件系统事务性能的方法、模块及存储系统。
背景技术
开放通道固态盘(Open-ChannelSSD)是一种新型的固态盘设备。区别于传统的固态盘设备,开放通道固态盘不包含闪存转换层,将对闪存物理地址交给主机管理,主机的驱动程序向开放通道固态盘发送的命令直接对闪存的物理地址进行处理。现有的闪存芯片往往为每一个闪存页提供一片额外的存储空间,被称为带外区域(Out of Band,OOB)。OOB与闪存的物理页同时被读写,可以用来存放元数据。开放通道固态盘允许设备将OOB暴露给主机软件,主机软件可以在读写闪存物理页的同时对OOB进行读写。
F2FS是一个现有的文件系统,它可以运行在通用块设备之上,并对用户程序提供POSIX接口,并借助POSIX协议的IOCTL()接口为应用程序提供事务接口。在现有的系统中,设备驱动程序中或者设备内部,可以根据需要设计缓存,这些缓存在掉电的时候数据无法保留。如无特别标识,接收到请求后,带有缓存的设备可以在缓存接收完数据,但数据还没有持久化时,就通知文件系统请求已完成,从而提高性能。此外,无特别标识的情况下,现有的通用块设备接口允许设备驱动程序对来自于文件系统的请求进行重排序。因此,文件系统发送请求的顺序,设备驱动程序真正执行请求的顺序,和数据持久化的顺序,三者可能两两不相同。
文件系统向通用块设备发送请求的方式是构造一个BIO结构体,然后将其传递给设备驱动程序。PREFLUSH和FUA是BIO结构体中的两个标志位,它们的值均可以为0或者1。在不进行置位的情况下,二者的值均为0。如果一个BIO中的PREFLUSH标识被置为1,则表明设备驱动程序需要保证在执行这个请求之前,将比这个请求先发送的所有请求均执行完成,并将设备缓存(如果存在)中的数据全部持久化;如果一个BIO中的FUA被置为1,则表明设备驱动程序需要将这个请求中的数据持久化之后,才通知文件系统该请求已完成。PREFLUSH需要在执行请求前将缓存数据全部持久化,因此会增加请求的时延。此外,PREFLUSH阻碍了设备驱动程序对请求进行重排序,从而消除了重排序可能带来的性能提升。由于阻碍了重排序和刷回了缓存数据,PREFLUSH对当前请求以外的其他请求也会产生负面影响。FUA不会造成额外的缓存数据刷回,且不阻碍请求重排序,但是他会延后请求的完成时间,因此会增加当前请求的时延。
文件系统事务原子性指的是文件系统在经历了系统突然掉电并重新启动之后,能够保证一个事务中的多个写请求要么都完成,要么都没有完成,不会出现一部分完成而一部分没有完成的情况。F2FS在用户提交事务时,将事务过程中接收到的所有数据写回并持久化,其流程如图1所示,根据图1可知,为了保障事务的原子性,F2FS需要添加PREFLUSH和FUA(即将PREFLUSH标识和FUA标识置为1)来对BIO进行标记,这会对对整个系统的性能会带来负面的影响。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种提升F2FS文件系统事务性能的方法、模块和存储系统,其目的在于,有效提升F2FS文件系统的事务性能。
为实现上述目的,按照本发明的一个方面,提供了一种提升F2FS文件系统事务性能的方法,包括:
按照如下步骤提交事务:
(S1)判断所写的文件F在内存中是否存在脏数据页,若是,则初始化一个链接地址后,转入步骤(S2);否则,初始化一个链接地址后,转入步骤(S3);
(S2)遍历文件F的脏数据页,对于所遍历到的每一个脏数据页,在存储器中当前负责接收数据的数据段为该脏数据页分配一个物理页;在内存中为当前所遍历的脏数据页分配一个额外空间,若当前所遍历的脏数据页是第一个脏数据页,则将链接地址更新为该脏数据页所对应的物理页地址后,记录到该脏数据页的额外空间;否则,在该脏数据页的额外空间中记录链接地址后,将链接地址更新为该脏数据页对应的物理页地址;将当前所遍历到的脏数据页连同额外空间一起添加到当前数据段所绑定的BIO结构体中;脏数据页遍历结束后,提交当前数据段所绑定的BIO结构体,并转入步骤(S3);
(S3)遍历文件F的脏元数据页,对于所遍历到的每一个脏元数据页,在存储器中当前负责接收元数据的元数据段中为该脏元数据页分配一个物理页;在内存中为当前所遍历的脏元数据页分配一个额外空间,若文件F在内存中不存在脏数据页,且所遍历到的脏元数据页是第一个脏元数据页,则将链接地址更新为该脏元数据页所对应的物理页地址后,记录到该脏元数据页的额外空间;否则,在该脏元数据页的额外空间中记录链接地址后,将链接地址更新为该脏元数据页对应的物理页地址;将当前所遍历到的脏元数据页连同额外空间一起添加到当前元数据段所绑定的BIO结构体中;在脏元数据页遍历结束后,为最后一个脏元数据页添加fsync标识,并提交当前元数据段所绑定的BIO结构体,之后直接结束操作;
其中,存储器为开放通道固态盘。
本发明在提交事务时,会在内存空间中为文件的脏数据页/脏元数据页分配一个额外空间,并在额外空间中记录链接地址,即上一次分配的物理页的地址,因此,本发明能够优化F2FS文件系统的事务提交处理流程,利用额外内存空间存放指针,将文件系统待写回的数据和元数据构建成一个链表结构,从而可根据链接地址判断事务的写请求是否全部完成,因此,本发明在提交BIO结构体时,不需要添加PREFLUSH标识,即可保证事务的原子性。相比于传统的F2FS文件系统中的事务提交方法,本发明在提交BIO结构体时,并不为其添加PREFLUSH标识,能够避免由于添加PREFLUSH标识而阻碍重排序和导致刷回缓存数据,从而避免对当前请求及其他请求产生负面影响,因此,本发明能够有效提高F2FS的事务性能。
进一步地,提交BIO结构体时,对于其中的读请求,将所请求的物理页数据读取到对应的内存页中,同时将该物理页中的OOB区域数据读取到该内存页的额外空间中;对于所提交的BIO结构体中的写请求,将内存页写入对应的物理页中,同时将该内存页的额外空间中的数据页写入该物理页的OOB区域中。
本发明利用上述方式处理所提交的BIO结构体中的读、写请求,能够允许文件系统对OOB区域进行读写方法,并建立内存中额外空间与物理页中OOB区域之间的联系,保证了OOB区域数据与数据共享原子性,即发生写操作时,要么都完成,要么都不完成。
进一步地,本发明所提供的提升F2FS文件系统事务性能的方法,还包括:
按照如下步骤进行数据恢复:
(T1)将F2FS文件系统恢复到最新的有效的检查点,并根据检查点信息获取当前元数据段;
(T2)依次读取当前元数据段中未在恢复过程中被读取的物理页,直到所读取的物理页的fsync标识为1或者当前元数据段中的所有物理页均读取完成;
(T3)若当前元数据段中的所有物理页均读取完成,则转入步骤(T8);否则,初始化一个待恢复链表,并将步骤(T2)中fsync标识为1的物理页加入恢复链表后,转入步骤(T4);
(T4)从当前所读取的物理页的OOB区域中获取链接地址,若链接地址为空,表明该内存页丢失了,事务不可恢复,则转入步骤(T7);若链接地址为当前所读取的物理页的地址,表明已成功找到事务的所有数据,事务可以恢复,则转入步骤(T6);若链接地址为其他物理页地址,表明事务还有数据未被到,则转入步骤(T5);
(T5)根据链接地址找到对应的物理页后,读取该物理页,并将其加入待恢复链表,转入步骤(T4);
(T6)对待恢复链表中的所有物理页进行恢复以进行事务重现,并在恢复完成后,清空待恢复链表,转入步骤(T2);
(T7)将待恢复链表清空,以进行事务回滚,转入步骤(T2);
(T8)数据恢复结束。
本发明基于上述数据恢复处理流程,能够对事物的数据进行完整性检查,恢复符合完整性检查的数据,丢弃不符合完整性检查的数据,保证将文件系统恢复到一个正确的状态。
进一步地,本发明所提供的提升F2FS文件系统事务性能的方法,还包括:在提交事务的过程中,在当前数据段或元数据段满时,提交当前数据段或元数据段所绑定的BIO体结构体,并新分配一个数据段或元数据段。
进一步地,本发明所提供的提升F2FS文件系统事务性能的方法,还包括:根据设备驱动程序的需求,在BIO结构体中添加或者不添加FUA标识。
本发明中,由于F2FS的事务完成不需要等待事务内的请求全部完成,因此,本发明中F2FS文件系统的事务性能并不受FUA标识的影响,能够进一步提高F2FS文件系统的事务性能。
按照本发明的另一个方面,提供了一种提升F2FS文件系统事务性能的模块,包括:处理器和计算机可读存储介质;
计算机可读存储介质用于存储可执行程序;
处理器用于读取计算机可读存储介质中存储的可执行程序,执行本发明所提供的提升F2FS文件系统事务性能的模块。
按照本发明的又一个方面,提供了一种存储系统,包括:F2FS文件系统、开放通道固态盘、存储有设备驱动程序的驱动模块以及本发明所提供的提升F2FS文件系统事务性能的方法。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明通过优化F2FS文件系统的事务提交处理流程,利用额外内存空间存放指针,将文件系统待写回的数据和元数据构建成一个链表结构,从而避免在文件系统提交事务的过程中发送带有PREFLUSH的请求,有效提高F2FS文件系统的事务性能。
(2)本发明中,由于F2FS的事务完成不需要等待事务内的请求全部完成,因此,本发明中F2FS文件系统的事务性能并不受FUA标识的影响,能够进一步提高F2FS文件系统的事务性能。
附图说明
图1为现有的F2FS文件系统中提交事务的处理流程图;
图2为本发明实施例提供的F2FS文件系统中提交事务的处理流程图;
图3为本发明实施例提供的扩展BIO结构体示意图;
图4为本发明实施例提供的事务提交后的设备数据分布示意图;
图5为本发明实施例提供的数据恢复的处理流程图;
图6为本发明实施例提供的数据恢复时可以读出的第二种情况;
图7为本发明实施例提供的数据恢复时可以读出的第三种情况。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
在详细解释本发明的技术方案之前,F2FS文件系统的物理地址管理方法及应用程序使用F2FS的事务接口的工作流程作出如下简要介绍:
F2FS将设备以段为单位进行划分,每个段的大小固定为2MiB。进一步的,每个段被分为若干个页,每个页的大小为4KiB。对段进行写入时,F2FS总是顺序地进行写入。一个文件在设备上的信息包括元数据和数据。元数据存放在元数据段中,数据存放在数据段中,元数据段和数据段的大小均为2MiB;元数据段和数据段进一步分为大小相等的页,每个页的大小均为4KiB。
F2FS借助于POSIX协议的IOCTL()接口为应用程序提供事务接口。应用程序使用F2FS的事务接口的工作流程如下:
(1)打开一个文件。
(2)发送IOCTL(START_ATOMIC_WRITE)开始新事务。
(3)对文件发送写请求(可以是多个写请求)。
(4)使用IOCTL(COMMIT_ATOMIC_WRITE)提交事务。
(5)关闭文件。
F2FS在用户提交事务(即执行IOCTL(COMMIT_ATOMIC_WRITE))时,将事务过程中接收到的所有数据写回并持久化,如图1所示,为了保障事务的原子性,F2FS需要使用PREFLUSH和FUA来对BIO进行标记。虽然在结束事务之前,不需要等待BIO完成,但是,标记有PREFLUSH的BIO对整个系统的性能会带来负面的影响。
为了有效提升F2FS文件系统的事务性能,在本发明的一个实施例中,提供了一种提升F2FS文件系统事务性能的方法,如图2所示,包括:
按照如下步骤提交事务:
(S1)判断所写的文件F在内存中是否存在脏数据页,若是,则初始化一个链接地址后,转入步骤(S2);否则,初始化一个链接地址后,转入步骤(S3);
为便于描述,在本实施例中,将链接地址简记为P,P经过初始化之后,其值被设置为-1;应当说明的是,此处所设置的初始值,仅为一种示例性的描述,不应理解为对本发明的唯一限定,其他可与正常的物理页地址区别开的值,均可用作P的初始值;
(S2)遍历文件F的脏数据页,对于所遍历到的每一个脏数据页,在存储器中当前负责接收数据的数据段为该脏数据页分配一个物理页(设其地址为K);在内存中为当前所遍历的脏数据页分配一个额外空间,若当前所遍历的脏数据页是第一个脏数据页,即P=-1,则将链接地址更新为该脏数据页所对应的物理页地址(即设置P=K)后,记录到该脏数据页的额外空间;否则,在该脏数据页的额外空间中记录链接地址后,将链接地址更新为该脏数据页对应的物理页地址(即设置P=K);将当前所遍历到的脏数据页连同额外空间一起添加到当前数据段所绑定的BIO结构体中;脏数据页遍历结束后,提交当前数据段所绑定的BIO结构体,并转入步骤(S3);
(S3)遍历文件F的脏元数据页,对于所遍历到的每一个脏元数据页,在存储器中当前负责接收元数据的元数据段中为该脏元数据页分配一个物理页(设其地址为K);内存中为当前所遍历的脏元数据页分配一个额外空间,若文件F在内存中不存在脏数据页,且所遍历到的脏元数据页是第一个脏元数据页(即P=-1),则将链接地址更新为该脏元数据页所对应的物理页地址(即设置P=K)后,记录到该脏元数据页的额外空间;否则,在该脏元数据页的额外空间中记录链接地址后,将链接地址更新为该脏元数据页对应的物理页地址(即设置P=K);将所遍历到的脏元数据页连同额外空间一起添加到当前元数据段所绑定的BIO结构体中;在脏元数据页遍历结束后,为最后一个脏元数据页添加fsync标识,并提交当前元数据段所绑定的BIO结构体,之后直接结束操作;
其中,存储器为开放通道固态盘;
对比图1和图2可以看到,事务提交时,本发明提出的方法与现有的F2FS的方法主要有两大区别:(1)在构造请求的过程中,使用一个变量P来记录上一次分配的空间地址,并且在将页信息添加到BIO的时候,将P放入与页相关联的额外区域中;(2)不需要对BIO添加PREFLUSH标识。
本实施例优化了F2FS文件系统的事务提交处理流程,利用额外内存空间存放指针,将文件系统待写回的数据和元数据构建成一个链表结构,从而可根据额外空间中的内容判断事务的写请求是否全部完成。因此,提交BIO结构体时,不需要添加PREFLUSH标识,即可保证事务的原子性;相比于传统的F2FS文件系统中的事务提交方法,本实施例在提交BIO结构体时,并不为其添加PREFLUSH标识,能够避免由于添加PREFLUSH标识而阻碍重排序和导致刷回缓存数据,从而避免对当前请求及其他请求产生负面影响,因此,本实施例能够有效提高F2FS的事务性能。
为了实现内存空间中,脏数据页或脏元数据页与额外空间之间的关联,可选地,在本实施例中,具体通过是扩展通用块接口,在原有的BIO结构体中定以了特殊字段的含义,传统BIO结构体中原有的功能不变,以下举例说明:
如图3所示,虚线框中的内容是为了将设备的额外空间区域暴露给文件系统在BIO结构上做的改进,其他部分内容是传统BIO结构体中的内容。在本示例中,BIO已经添加了5个物理内存页,分别用m1-m5来表示,同时,这5个物理内存页m1-m5已经和5个额外内存空间进行了绑定,分别用o1-o5来表示。具体地,在BIO结构体中,新增bi_metabase这个指针数组来存放指向额外空间的指针。本示例中,bi_metabase这个数组最多可以添加10个指针,由于每个指针与每个物理内存页需要一一对应,因此,这个BIO最多可以添加10个物理内存页。在本示例中,已经添加了的5个物理内存页与5个额外内存空间依顺序一一对应。m1对应于o1,m2对应于o2,以此类推。BIO中使用一个无符号整形数bi_metafilled来表示当前BIO中已经填入了多少个物理内存页。在本示例中,bi_metafilled的值为5。
应当说明的是,上述实现方式仅为本发明一种可选的实施方式,为了实现内存页与额外空间之间的关联,本发明并不限于扩展BIO结构体这一种方式,其他能够实现两类内存空间关联的方式,同样可以应用于本发明;在实际应用中,根据实际需要选择合适的方式实现即可,更多的实现方式,在此将不做一一列举说明。
为了使本发明中的事务提交处理流程更为清晰明了,在此结合一个实际场景进行说明:
如图4所示,一个事务1对一个文件1进行了写操作,使得文件1包含4个脏数据页(A、B、C、D)和3个脏元数据页(E、F、G)。通过本实施例提供的上述提升F2FS文件系统事务性能的方法进行事务提交后,在设备上的数据页和元数据页的分布图如图4所示;需要指明的是,图4是本实施例在经过本发明提出的方法进行写回后的一种具体情况,其他情况可能会和图4所示的情形不同。事务提交的具体过程如下:
在还没有开始对事物进行提交的时候,图4中的元数据段和数据段均不包含任何数据。按照图2所述的方法进行事务提交操作,首先设置P为-1。事务提交处理程序检查到文件含有脏数据A,因此在设备的数据段中分配一页新空间(如图4中A所示,设其地址为A(A))。由于P值为-1,因此设置P值为A(A),然后找到当前数据段所对应的BIO,将脏数据页添加到BIO中,同时将A(A)添加到该页所对应的额外信息区域中(如图4中数据页A和指向其自身的箭头所示)。接下来,继续检查文件,发现有脏数据B。因此,在设备的数据段中分配一页新空间(如图4中B所示,设其地址为A(B))。由于此时P值为A(A),因此找到当前负责接收数据的段所绑定的BIO,将脏数据页添加到BIO中,同时将P的值A(A)添加到该页所对应的额外信息区域中(如图4中数据页B和指向数据页A的箭头所示)。重复这样的过程,将脏数据页C和D添加到BIO中。值得注意的是,在本实例中,在添加数据页C和D之间,有其他的线程对另一个事务2进行提交,该事务2对文件2进行了修改并将其写回,因此将文件2的脏数据Z添加在了C和D之间。尽管如此,利用本发明提供的方法,D的额外空间仍然指向同一个事务(即事务1)的上一个脏数据的地址(即指向C,而不是指向Z)。接下来,事务1的提交操作继续执行,发现文件没有脏数据了,于是提交当前数据段所绑定的BIO。接下来,判断文件是否有脏元数据,检查到有脏元数据E。因此,在设备的元数据段中分配一页新空间(如图4中E所示,设其地址为A(E))。由于此时P值为A(D)(即D的地址),因此找到当前负责接收元数据的段所绑定的BIO,将脏元数据页添加到BIO中,同时将P的值A(D)添加到该页所对应的额外信息区域中(如图4中元数据页E和指向数据页D的箭头所示)。重复这样的过程,将脏元数据页F和G添加到BIO中。值得注意的是,在本实例中,有其他的线程将文件2的脏元数据Y添加在了F和G之间。尽管如此,利用本发明提供的方法,G的额外空间仍然指向同一个事务(即事务1)的上一个脏元数据地址(即指向F而非指向Y)。接下来,事务1的提交操作继续执行,发现文件没有脏元数据了。因此,为最后一个元数据页(即G)中添加fsync标识。接下来,不需要添加PREFLUSH,直接提交当前元数据段所绑定的BIO,不等待请求完成就可以结束这次事务提交操作。
在本实施例中,提交BIO结构体时,对于其中的读请求,将所请求的物理页数据读取到对应的内存页中,同时将该物理页中的OOB区域数据读取到该内存页的额外空间中;对于所提交的BIO结构体中的写请求,将内存页写入对应的物理页中,同时将该内存页的额外空间中的数据页写入该物理页的OOB区域中;
本实施例利用上述方式处理所提交的BIO结构体中的读、写请求,能够允许文件系统对OOB区域进行读写方法,并建立内存中额外空间与物理页中OOB区域之间的联系,保证了OOB区域数据与数据共享原子性,即发生写操作时,要么都完成,要么都不完成。
如图5所示,本实施例还包括,按照如下步骤进行数据恢复:
(T1)将F2FS文件系统恢复到最新的有效的检查点,并根据检查点信息获取当前元数据段;
(T2)依次读取当前元数据段中未在恢复过程中被读取的物理页,直到所读取的物理页的fsync标识为1或者当前元数据段中的所有物理页均读取完成;
(T3)若当前元数据段中的所有物理页均读取完成,则转入步骤(T8);否则,初始化一个待恢复链表,并将步骤(T2)中fsync标识为1的物理页加入恢复链表后,转入步骤(T4);
(T4)从当前所读取的物理页的OOB区域中获取链接地址,若链接地址为空,表明该内存页丢失了,事务不可恢复,则转入步骤(T7);若链接地址为当前所读取的物理页的地址,表明已成功找到事务的所有数据,事务可以恢复,则转入步骤(T6);若链接地址为其他物理页地址,表明事务还有数据未被到,则转入步骤(T5);
(T5)根据链接地址找到对应的物理页后,读取该物理页,并将其加入待恢复链表,转入步骤(T4);
(T6)对待恢复链表中的所有物理页进行恢复以进行事务重现,并在恢复完成后,清空待恢复链表,转入步骤(T2);
(T7)将待恢复链表清空,以进行事务回滚,转入步骤(T2);
(T8)数据恢复结束。
为了使上述数据恢复流程更为清晰明了,以下结合系统掉电后可能存在的三种情形对上述数据恢复流程做更进一步的说明。
当经历了系统突然掉电后,重新挂载文件系统时,需要按照图5所示的流程图进行数据恢复。数据恢复首先将文件系统恢复到上一个有效的检查点,然后对未汇入检查点的数据进行恢复。首先找到当前的元数据段,并依次读出元数据段中的页。
第一种情形,如果此时,设备的数据如图4所示,则恢复程序首先读出页E,发现页E的fsync标识非1,因此忽略该页,继续读出下一页。重复这个过程,读出的F和Y都被恢复程序忽略。接下来读出的是页G,由于其fsync标识为1,因此这可能是一个可以被恢复的事务,对其尝试进行恢复。G的额外空间的值P非空,因此将G添加至待恢复链表中。P为数据页F的地址,因此恢复程序读出页F的内容。同样的,页F的额外空间的值P非空,也不是F的地址,因此将F添加至待恢复链表中。F的额外空间指向E的地址,因此读出页E的内容。重复此过程,恢复程序依次将页E,D,C,B,A添加至待恢复链表中。由于页A的额外空间的值为A自身的地址,这表明这个事务的所有数据和元数据已经被恢复程序找到,恢复程序将待恢复链表中的所有页进行恢复,以实现事务1的重现,并清空链表。接下来继续扫描当前元数据段。由于后面的所有页读出都是空闲,因此没有数据需要恢复,恢复程序完成并结束。
第二种情形,如果此时,设备的数据如图6所示(页E丢失了),则恢复程序依次读出第一个空闲页、F和Y,由于他们均没有fsync标识,因此被恢复程序忽略。接下来读出的是页G,由于其fsync标识为1,因此这是一个可能可以被恢复的事务,对其尝试进行恢复。G的额外空间的值P非空,因此将G添加至待恢复链表中。P为数据页F的地址,因此恢复程序读出页F的内容。同样的,页F的额外空间的值P非空,也不是F的地址,因此将F添加至待恢复链表中。F的额外空间指向丢失页E,因此将丢失了页E的空闲页读出。由于该页的额外空间值为空,恢复程序可以得知当前需要恢复的事务存在丢失数据。因此,恢复程序放弃恢复该事务,以实现事务1的回滚,并将待恢复链表清空,继续扫描当前元数据段。由于后面的所有页读出都是空闲,因此没有数据需要恢复,恢复程序完成并结束。
第三种情形,如果此时,设备的数据如图7所示(页G丢失了),则恢复程序依次读出页E、F和Y,以及后面的所有空闲页,由于他们均没有fsync标识,因此均被恢复程序忽略,恢复程序完成并结束。
在为脏数据页或脏元数据页分配物理页时,有可能需要分配多个段,相应地,本实施例除了在脏数据页或脏元数据页遍历完成时提交当前数据段或元数据段所绑定的BIO结构体,还可能包括:在提交事务的过程中,在当前数据段或元数据段满时,提交当前数据段或元数据段所绑定的BIO结构体,并新分配一个数据段或元数据段。
为了适应设备驱动程序的实际需求,本实施例所提供的提升F2FS文件系统事务性能的方法,还可能包括:根据设备驱动程序的需求,在BIO结构体中添加或者不添加FUA标识。
由于F2FS的事务完成不需要等待事务内的请求全部完成,因此,本实施例中F2FS文件系统的事务性能并不受FUA标识的影响,能够进一步提高F2FS文件系统的事务性能。
在本发明的另一个实施例中,提供了一种提升F2FS文件系统事务性能的模块,包括:处理器和计算机可读存储介质;
计算机可读存储介质用于存储可执行程序;
处理器用于读取计算机可读存储介质中存储的可执行程序,执行上述方法实施例所提供的提升F2FS文件系统事务性能的方法。
在本发明的有一个实施例中,提供了一种存储系统,包括:F2FS文件系统、开放通道固态盘、存储有设备驱动程序的驱动模块以及上述模块实施例所提供的提升F2FS文件系统事务性能的模块。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种提升F2FS文件系统事务性能的方法,其特征在于,包括:
按照如下步骤提交事务:
(S1)判断所写的文件F在内存中是否存在脏数据页,若是,则初始化一个链接地址后,转入步骤(S2);否则,初始化一个链接地址后,转入步骤(S3);
(S2)遍历所述文件F的脏数据页,对于所遍历到的每一个脏数据页,在存储器中当前负责接收数据的数据段为该脏数据页分配一个物理页;在内存中为当前所遍历的脏数据页分配一个额外空间,若当前所遍历的脏数据页是第一个脏数据页,则将所述链接地址更新为该脏数据页所对应的物理页地址后,记录到该脏数据页的额外空间;否则,在该脏数据页的额外空间中记录所述链接地址后,将所述链接地址更新为该脏数据页对应的物理页地址;将当前所遍历到的脏数据页连同额外空间一起添加到当前数据段所绑定的BIO结构体中;脏数据页遍历结束后,提交当前数据段所绑定的BIO结构体,并转入步骤(S3);
(S3)遍历所述文件F的脏元数据页,对于所遍历到的每一个脏元数据页,在所述存储器中当前负责接收元数据的元数据段中为该脏元数据页分配一个物理页;在内存中为当前所遍历的脏元数据页分配一个额外空间,若所述文件F在内存中不存在脏数据页,且所遍历到的脏元数据页是第一个脏元数据页,则将所述链接地址更新为该脏元数据页所对应的物理页地址后,记录到该脏元数据页的额外空间;否则,在该脏元数据页的额外空间中记录所述链接地址后,将所述链接地址更新为该脏元数据页对应的物理页地址;将所遍历到的脏元数据页连同额外空间一起添加到当前元数据段所绑定的BIO结构体中;在脏元数据页遍历结束后,为最后一个脏元数据页添加fsync标识,并提交当前元数据段所绑定的BIO结构体,之后直接结束操作;
其中,所述存储器为开放通道固态盘。
2.如权利要求1所述的提升F2FS文件系统事务性能的方法,其特征在于,提交BIO结构体时,对于其中的读请求,将所请求的物理页数据读取到对应的内存页中,同时将该物理页中的OOB区域数据读取到该内存页的额外空间中;对于所提交的BIO结构体中的写请求,将内存页写入对应的物理页中,同时将该内存页的额外空间中的数据页写入该物理页的OOB区域中。
3.如权利要求2所述的提升F2FS文件系统事务性能的方法,其特征在于,还包括:
按照如下步骤进行数据恢复:
(T1)将F2FS文件系统恢复到最新的有效的检查点,并根据检查点信息获取当前元数据段;
(T2)依次读取当前元数据段中未在恢复过程中被读取的物理页,直到所读取的物理页的fsync标识为1或者当前元数据段中的所有物理页均读取完成;
(T3)若当前元数据段中的所有物理页均读取完成,则转入步骤(T8);否则,初始化一个待恢复链表,并将步骤(T2)中所述fsync标识为1的物理页加入所述恢复链表后,转入步骤(T4);
(T4)从当前所读取的物理页的OOB区域中获取链接地址,若所述链接地址为空,则转入步骤(T7);若所述链接地址为当前所读取的物理页的地址,则转入步骤(T6);若所述链接地址为其他物理页地址,则转入步骤(T5);
(T5)根据所述链接地址找到对应的物理页后,读取该物理页,并将其加入所述待恢复链表,转入步骤(T4);
(T6)对所述待恢复链表中的所有物理页进行恢复以进行事务重现,并在恢复完成后,清空所述待恢复链表,转入步骤(T2);
(T7)将所述待恢复链表清空,以进行事务回滚,转入步骤(T2);
(T8)数据恢复结束。
4.如权利要求1-3任一项所述的提升F2FS文件系统事务性能的方法,其特征在于,还包括:在提交事务的过程中,在当前数据段或元数据段满时,提交当前数据段或元数据段所绑定的BIO体结构体,并新分配一个数据段或元数据段。
5.如权利要求1-3任一项所述的提升F2FS文件系统事务性能的方法,其特征在于,还包括:根据设备驱动程序的需求,在BIO结构体中添加或者不添加FUA标识。
6.一种提升F2FS文件系统事务性能的模块,其特征在于,包括:处理器和计算机可读存储介质;
所述计算机可读存储介质用于存储可执行程序;
所述处理器用于读取所述计算机可读存储介质中存储的可执行程序,执行权利要求1-5任一项所述的提升F2FS文件系统事务性能的方法。
7.一种存储系统,其特征在于,包括:F2FS文件系统、开放通道固态盘、存储有设备驱动程序的驱动模块以及权利要求6所述的提升F2FS文件系统事务性能的模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010328660.8A CN111506458B (zh) | 2020-04-23 | 2020-04-23 | 一种提升f2fs事务性能的方法、模块及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010328660.8A CN111506458B (zh) | 2020-04-23 | 2020-04-23 | 一种提升f2fs事务性能的方法、模块及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111506458A true CN111506458A (zh) | 2020-08-07 |
CN111506458B CN111506458B (zh) | 2023-04-07 |
Family
ID=71869783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010328660.8A Active CN111506458B (zh) | 2020-04-23 | 2020-04-23 | 一种提升f2fs事务性能的方法、模块及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111506458B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113093997A (zh) * | 2021-04-19 | 2021-07-09 | 深圳市安信达存储技术有限公司 | 一种基于Host Based FTL架构分离数据的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140095437A1 (en) * | 2012-09-28 | 2014-04-03 | Samsung Electronics Co., Ltd. | Computing system and related data management method thereof |
CN107015920A (zh) * | 2015-12-30 | 2017-08-04 | 三星电子株式会社 | 存储设备和存储设备的操作方法 |
US20190018601A1 (en) * | 2017-07-11 | 2019-01-17 | Western Digital Technologies, Inc. | Bitmap Processing for Log-Structured Data Store |
US20190324859A1 (en) * | 2018-04-20 | 2019-10-24 | Cnex Labs, Inc. | Method and Apparatus for Restoring Data after Power Failure for An Open-Channel Solid State Drive |
CN110600070A (zh) * | 2019-09-18 | 2019-12-20 | 南威软件股份有限公司 | 一种提升固态硬盘阵列系统修复性能的编码和修复方法 |
-
2020
- 2020-04-23 CN CN202010328660.8A patent/CN111506458B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140095437A1 (en) * | 2012-09-28 | 2014-04-03 | Samsung Electronics Co., Ltd. | Computing system and related data management method thereof |
CN107015920A (zh) * | 2015-12-30 | 2017-08-04 | 三星电子株式会社 | 存储设备和存储设备的操作方法 |
US20190018601A1 (en) * | 2017-07-11 | 2019-01-17 | Western Digital Technologies, Inc. | Bitmap Processing for Log-Structured Data Store |
US20190324859A1 (en) * | 2018-04-20 | 2019-10-24 | Cnex Labs, Inc. | Method and Apparatus for Restoring Data after Power Failure for An Open-Channel Solid State Drive |
CN110600070A (zh) * | 2019-09-18 | 2019-12-20 | 南威软件股份有限公司 | 一种提升固态硬盘阵列系统修复性能的编码和修复方法 |
Non-Patent Citations (4)
Title |
---|
YUAN FANG等: "Continuous data recovery method based on FTL with timestamp" * |
付曼迪: "面向固态存储设备的混合文件系统研究" * |
杨伟健: "固态盘存储系统的性能优化研究" * |
殷聪敏: "基于开放通道固态硬盘的内存数据库持久化优化研究" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113093997A (zh) * | 2021-04-19 | 2021-07-09 | 深圳市安信达存储技术有限公司 | 一种基于Host Based FTL架构分离数据的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111506458B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10379954B2 (en) | Method and apparatus for cache management of transaction processing in persistent memory | |
WO2017190604A1 (zh) | 数据库系统中事务恢复的方法与数据库管理系统 | |
US7266669B2 (en) | File system with file management function and file management method | |
JP3708047B2 (ja) | フラッシュメモリの管理方法 | |
KR100862661B1 (ko) | 지연된 로깅 방법 및 그 장치 | |
CN108431783B (zh) | 访问请求处理方法、装置及计算机系统 | |
US10191851B2 (en) | Method for distributed transaction processing in flash memory | |
CN107735774B (zh) | 一种smr感知只追加文件系统 | |
WO2007066720A1 (ja) | 不揮発性記憶装置並びにデータ書込み方法及びデータ読み出し方法 | |
CN107992269B (zh) | 一种基于去重ssd的事务写入方法 | |
US10552377B2 (en) | Data discard method for journaling file system and memory management apparatus thereof | |
US20060200500A1 (en) | Method of efficiently recovering database | |
CN110750356B (zh) | 适用于非易失性内存的多核交互方法、系统及存储介质 | |
CN113515501B (zh) | 非易失性内存数据库管理系统恢复方法、装置和电子设备 | |
CN110515705B (zh) | 可扩展的持久性事务内存及其工作方法 | |
US20220129420A1 (en) | Method for facilitating recovery from crash of solid-state storage device, method of data synchronization, computer system, and solid-state storage device | |
US20090164524A1 (en) | Shadow-page deferred-update recovery technique integrating shadow page and deferred update techniques in a storage system | |
US11841801B2 (en) | Metadata management in non-volatile memory devices using in-memory journal | |
CN108431784B (zh) | 访问请求处理方法、装置及计算机系统 | |
CN111506458B (zh) | 一种提升f2fs事务性能的方法、模块及系统 | |
CN113220490A (zh) | 异步写回持久化内存的事务持久化方法及系统 | |
CN115640238A (zh) | 针对持久化内存的可靠内存映射i/o实现方法及系统 | |
US20230044942A1 (en) | Conditional update, delayed lookup | |
WO2022100064A1 (zh) | 数据回滚更新方法、装置、计算机设备和存储介质 | |
US11237925B2 (en) | Systems and methods for implementing persistent data structures on an asymmetric non-volatile memory architecture |
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 |