CN106547703B - 一种基于块组结构的ftl优化方法 - Google Patents
一种基于块组结构的ftl优化方法 Download PDFInfo
- Publication number
- CN106547703B CN106547703B CN201610878981.9A CN201610878981A CN106547703B CN 106547703 B CN106547703 B CN 106547703B CN 201610878981 A CN201610878981 A CN 201610878981A CN 106547703 B CN106547703 B CN 106547703B
- Authority
- CN
- China
- Prior art keywords
- block group
- block
- page
- mapping
- logical
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于块组结构的FTL优化方法,包括在闪存架构上将若干块组成一个块组,并将预留空间相应分配每个块组;建立基于块组的地址映射,其中第一次映射是全局映射,第二次映射为局部映射表,其中每个块组维护一个局部映射,用于保存相应块组中逻辑偏移量与物理偏移量的映射关系;在写操作完成后,如果当前进行写操作块组中的空闲页占整个块组比例小于阈值时,则触发垃圾回收。本发明的方法在块组结构的页级地址映射方案的基础上,充分利用闪存设备的预留空间和通道间并行性,解决了基于块组的地址映射方案垃圾回收粒度大的问题,并利用块组的局部性,减少了元数据对缓存的消耗。
Description
技术领域
本发明属于固态存储设备领域,具体涉及一种闪存转换层的优化方法,特别适用于基于NAND Flash闪存转换层的优化。
背景技术
闪存英文简称Flash,全名是Flash Memory,是一种非易失性存储设备(Non-volatile Memory Device),非易失就是断电了,数据也不会丢失。NAND型闪存是一种主要的非易失闪存技术。NAND Flash存储介质就有高密度、大容量、非易失性等特点。和磁介质相比,它的读写延迟和能耗较低。按照内部存储数据单元的电压的不同层次,也就是单个闪存单元中,存储一位数据还是多位数据,可以分为SLC(Single Level Cell,单层单元)型和MLC(Multi Level Cell,多层单元)型。
虽然NAND型闪存存在很大的优势,但是闪存的一些属性,会影响基于闪存的固态盘的性能,主要包括以下三点:
1)读写不对称。Flash的读写操作的最小单位是一样的,都是页。但是读写速度差距大,读快于写,读操作可以直接进行,而写操作前需要进行擦除。2)写前擦除。如果待写的区域存在数据,首先须将这个区域擦除,然后才能继续进行写操作。但是擦除操作的基本单位为块,有多个页构成,其时间开销很大,所以NAND Flash中更新数据采用异地更新策略,即每次写操作将在擦出过的空闲页进行,将原页置为待擦状态,进行统一的擦除操作。3)寿命限制。NAND Flash中的每一个读写单元的擦除次数是有限的,一般SLC型Flash的可擦除次数是10万到100万次,MLC型Flash的可擦除次数是1万到10万次。为了能够提高NANDFlash型SSD的使用寿命,磨损均衡技术在SSD设计过程中是必不可少的。
以上特征导致在闪存介质上的同一物理位置更新数据的代价非常大,通常采用异地更新的方法。固态存储设备采用映射表来记录逻辑地址和物理地址之间的映射关系。闪存中的物理页可分为三种状态:空闲(free),即该物理页已被擦除过;有效(valid),即该物理页上记录的是有效数据;无效(invalid),即该物理页记录的是无效数据,处于可擦除状态,需要通过垃圾回收方法进行擦除。由于存储单元的擦除次数有限,所以需要尽可能的将写操作平均到每个数据块中。
闪存转换层(Flash Translation Layer,FTL)的存在是为了向上层隐藏NANDFlash的特性,将SSD仿真成一个普通的块设备。闪存读写操作的单位是页,而页的大小一般为2KB,但是文件系统下来的读写数据命令是按照传统的机械硬盘的扇区尺寸进行的(512字节)。更主要的是从文件系统下来的操作只有读操作和写操作,而SSD还存在着以块为单位的擦除操作,且采用异地更新策略。这导致操作系统现在使用的文件系统无法管理SSD,需要更为先进、复杂的文件系统去解决这个问题。
FTL主要完成的功能有地址映射、垃圾回收和磨损均衡。地址映射是整个闪存转换层的核心部分,因为它决定了垃圾回收和磨损均衡。通常地址映射分成三种基本类型:页级映射、块级映射、混合映射。现在最为通用的映射类型是页级映射。
页级映射以物理页为基本映射单元。在这种映射方法屮,逻辑页与物现页的对应关系是全相联的,即,逻辑页的数据可以存放在任何位的物理屮。每个逻辑页有一个映射关系,通常一条映射关系需要字节的储容,级映射的映射表通常较大。映射表作为需要经常读写的元数,在态盘运行吋需要将其放在内存中,因此采用页级映射的固态盘通常需要较大内存空间。
在基于闪存的固态盘屮,因为闪需要先擦后写,所以对固态盘的更新操作通常先写到其他空闲物理页,将之前的物理页标记为失效数据页,然后再修改映射关系。大量更新操作之后,固态盘中将出现大量失效数据页,大量失效数据页将导致固态盘中可用空间的减少。这些失效数据分散在固态盘的每个通道和芯片,失效数据页在没有被擦除之前将无法使用。垃圾回收就是将这些失效数据页集中起来,统一进行擦除操作,恢复固态盘的可用空间。通常在固态盘屮设置一个阈值(例如,20%)当固态盘屮空闲页的数量降低到这个阈值以下时,触发垃圾回收操作。垃圾回收涉及到大量的数据迁移,这个过程将占用固态盘内的大量通道、芯片资源,这势必影响固态盘对外部请求的服务。因为垃圾回收操作是固态盘内部固有操作,所以被称之为固态盘的后台操作。
在固态盘中,为了减少垃圾回收时对固态盘读写性能的影响,通常在整个固态盘中预留一定量的存储空间,这些预留的存储空间是用户不可见的。这个预留空间越大,垃圾回收对性能的影响就越小。
目前FTL的处理方法中,主要采用的地址映射方式是页级映射,之前说过,页级映射存在映射表过大的问题;同时,很多基于页级映射的算法并没有考虑除了映射表以外的元数据,比如块页状态表、块擦除次数记录,由于页级映射的任意性,映射表以外的元数据需要全部放置在缓存中,才能维持FTL的高效运行,这对缓存消耗很严重。
胡洋于2012年发表的博士论文《高性能固态盘的多级并行性及算法研究》中,提出了三层页级映射。该映射方法提出了块组结构,并再次基础上提出了两级映射,通过通道-块组-页的映射方式,可以减少一般的映射表的大小。同时他利用闪存的多级并行性,将连续的逻辑页分配到不同的块组,以提高固态盘整体的性能。
上述方案中所提出的三层页级映射虽然减轻了传统的页级映射映射表大小,但是他并没有考虑映射表以外的元数据对缓存的消耗问题,而且因为连续的逻辑页分配在不同的块组中,三层页级映射方案仍然需要缓存大量的元数据,才能够保持改方案的正常运行。同时三层页级方案在垃圾回收时,需要处理整个块组,即使利用了闪存的多级并行性,但是在垃圾回收时会占用整个通道,所以三层页级映射的垃圾回收会对性能造成很大的影响。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于块组结构的FTL优化方法,其通过对闪存内部结构的优化处理并进行预留空间分配,同时对地址映射方式进行优化改进,从而使得垃圾回收性能大大提高,另外该方法可以只需缓存少量的元数据,大大优化了元数据管理,同时也提高地址映射表的命中率。
为实现上述目的,按照本发明,提供一种基于块组结构的FTL优化方法,包括:
在闪存架构上将若干块(block)组成一个块组(block-group),其为连续物理块的集合,使得每个分组上有若干个块组,并将预留空间相应分配每个块组;
建立基于块组的地址映射,该地址映射为二次映射,其中第一次映射是全局映射,即逻辑块组号(LGN)到物理块组号(PGN)的映射关系;第二次映射为局部映射表,其中每个块组维护一个局部映射,用于保存相应块组中逻辑偏移量与物理偏移量的映射关系;
其中,映射建立方式为:将连续的逻辑页仅分配到不同的通道,而不是分配到不同的块组,以此方式建立地址映射。
作为本发明的进一步优选,所述映射建立方式具体为:
CN=LPN%a (1)
PPN=PGN×n×f+Poffset (4)
其中,a为通道数,f为每个块上的页数,n为块组数量,β为预留空间比例,LPN为逻辑页号,PPN为物理页号,LGN为逻辑块组号,PGN为物理块组号,Loffset为逻辑偏移量,CN为通道号。
作为本发明的进一步优选,所述物理块组内部的冗余的预留块为预留空间,其在物理上分配给每一个块组,分配给块组的预留空间与对应的块组在物理上连续,即每个块组中的物理页要多于分配给块组的逻辑页,优选是平均分配至各块组。
作为本发明的进一步优选,所述第一次映射即建立逻辑块组号(LGN)与物理块组号(PGN)的映射关系具体为:当FTL接收到文件系统下发的读写命令时,如果命令是写,则计算出通道号,并在该通道中顺序寻找一个空闲的块组,FTL为每一个通道维护一个上次分配的物理块组号(PGN),初始化为0,从维护的物理块组号(PGN)开始向高地址寻找空闲的块组,如果寻找到通道末尾,则从头开始寻找,将找到块组的物理块组号(PGN)分配给逻辑块组号(LGN),并修改全局映射表,建立逻辑块组号(LGN)与物理块组号(PGN)的映射关系。
作为本发明的进一步优选,所述第二次映射即建立逻辑偏移量(Loffset)与物理偏移量(Poffset)的映射关系,具体为:当FTL接收到文件系统下发的读写命令时,如果命令是写,则寻找一个空闲页分配给该逻辑偏移量(Loffset),FTL为每一个块组维护一个活跃块,用于分配空闲页,第一次选择块组中的第一个块作为活跃块,每个块组在同一时间只有一个活跃块,不含有有效页的块为空闲块,其他块为非活跃块,当活跃块中空闲页消耗完,顺序选择下一个全为空闲页的块作为活跃块;当寻找到块组的末尾,从头开始寻找。活跃块的空闲页分配过程是顺序进行的,从块的第一页开始,顺序将空闲页分配给逻辑偏移量(Loffset),并修改局部映射表,即可建立逻辑偏移量(Loffset)与物理偏移量(Poffset)的对应关系。
作为本发明的进一步优选,所述元数据缓存管理具体如下:
(3.1)接收到文件系统下发的命令,获取地址映射解析的逻辑偏移量(Loffset),判断逻辑块组号(LGN)对应的逻辑偏移量(Loffset)的映射信息是否在缓存中,如果在,转入步骤(3.4);否则转入步骤(3.2);
(3.2)从闪存设备中读取相应的元数据加入LRU队列,判断元数据LRU队列的空间是否写满,如果写满转入步骤(3.3);否则转入步骤(3.4);
(3.3)如果队列尾部的元数据没有修改过,转入步骤(3.4);否则将其写入闪存设备;
(3.4)将逻辑块组号(LGN)对应的元数据调整到LRU队列头部,结束。
作为本发明的进一步优选,在写操作完成后,如果当前进行写操作块组中的空闲页占整个块组比例小于阈值时,则触发垃圾回收。
作为本发明的进一步优选,所述垃圾回收具体步骤如下:
(4.1)写操作完成时,如果有活跃块发生了替换且旧的活跃块为全失效块,转入步骤(4.2);否则转入步骤(4.3);
(4.2)对旧的活跃块进行擦除操作,转入步骤(4.3);
(4.3)如果当前进行写操作的块组的空闲页页数在块组中所占比例如果小于所述阈值,转入步骤(4.4);否则转入步骤(4.7);
(4.4)当前块组的局部映射表信息如果都在缓存中,转入步骤(4.6);否则转入步骤(4.5);
(4.5)从闪存设备中读出当前进行垃圾回收的块组的局部映射表,暂存在缓存中,转入步骤(4.6);
(4.6)通过块组的页有效状态表统计每个块的有效页数,选择有效页最少的非活跃块作为牺牲块,将其中的有效页迁移到活跃块中,迁移完成后,对牺牲块进行擦除操作,修改相应元数据,并写回,释放临时缓存空间。
(4.7)结束此次垃圾回收。
本发明方案中,为了能够让垃圾回收能在在块组内进行,将预留空间等分到每一个块组内。另外,基于块组的地址映射是一个二次映射,第一次通过映射获取逻辑页所在的物理块组,第二次通过映射获取逻辑页所在的物理页。
本发明方案中,元数据包括映射表、页有效状态表和统计数据。其中页有效状态表记录每个页是否有效,用于垃圾回收时,迁移有效页;统计数据主要是统计块组的擦除次数,用于磨损均衡时选取数据交换的块组。
本发明方案中,由于为每一个块组分配预留空间,所以垃圾回收在块组内部进行。在写操作完成后,如果当前进行写操作块组中的空闲页占整个块组比例小于阈值γ(γ<β,β为预留空间比例),则触发垃圾回收。缓存管理中,映射表信息一般都只是部分缓存,所以在垃圾回收之前,需要当前块组的整个局部映射表信息从闪存设备中读出。同时为了减少空闲状态的判断,将全失效的块直接进行回收。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)本发明的优化方法为每个块组分配预留空间,使得垃圾回收能够在块组内部进行,有效的解决了基于块组的映射方案垃圾回收对整体性能的影响过大的问题;
(2)本发明的优化方法,通过合理的地址映射,使得仅需要缓存小部分的元数据,就可以维持FTL的正常运行,有效的减小了元数据对缓存的开销。
附图说明
图1是按照本发明实施例的优化方法所涉及的各个模块在SSD所处的层次示意图;
图2是按照本发明实施例的优化方法所适用的多通道SSD架构示意图;
图3是按照本发明实施例的优化方法进行映射后的逻辑页分布图;
图4是按照本发明实施例的优化方法中的地址映射处理流程图;
图5是按照本发明实施例的优化方法中的元数据管理流程图;
图6是按照本发明实施例的优化方法中的垃圾回收处理流程图;
图7是按照本发明实施例的优化方法中的SSD内元数据和数据分布图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
按照本发明实施例的基于块组结构的FTL优化算法,包括如下过程:
(1)块组结构和预留空间分配
闪存设备中有若干个通道(channel),每个通道上有若干个芯片(chip),每个芯片上有若干个晶圆(die),每个晶圆上有若干个分组(plane),每个分组上有若干个块(block),每个块上有若干个页(page)。
本实施例中,在原有的闪存架构上将若干块(block)组成一个块组(block-group),即块组(block-group)是连续物理块的集合,其大小介于NAND Flash的分组(plane)和块(block)之间,假设每个分组上有k个块,m个块组成一个块组,分组、块组、块之间的关系如图2所示。组成块组的块的数量可以根据具体需求进行选择,例如可以根据内部的页数进行确定,优选可以是2^16个页,但是,本发明中并不对组成块组数量进行具体限定,可以根据实际需求具体确定。
在闪存设备中,为了减少垃圾回收时对固态盘读写性能的影响,通常会在整个闪存设备中预留一些存储空间。本实施例中将预留空间分为两个部分,一部分在物理上分配给每一个块组,即每个块组中的物理页要多于分配给块组的逻辑页,其中逻辑空间为用户的可见空间,物理空间是闪存设备的实际空间。块组是物理上连续的块的集合,此处分配给块组的预留空间与块组在物理上是连续的,也就是说一个块组有一部分冗余的预留块。优选是将这部分预留空间等分给各块组。另外一部分预留空间用于块组之间的数据交换。块组之间的数据交换属于磨损均衡的内容,由于相比较等分给块组的预留空间大小,用于磨损均衡的预留空间大小可以忽略不计,本发明的发明重点不涉及磨损均衡,在此不再赘述,也不予考虑。
(2)地址映射
文件系统下发给闪存设备的读写命令主要包含逻辑页号(LPN)、操作类型(OP)和缓冲区地址(Buffer)。地址映射处理的是逻辑页号(LPN)到物理页号(PPN)的转化,其中间过程涉及通道号(CN)、逻辑块组号(LGN)、物理块组号(PGN)、逻辑偏移量(Loffset)、物理偏移量(Poffset)和预留空间比例β。逻辑偏移量是逻辑页在块组中的偏移量,物理偏移量是物理页在块组中的偏移量。
一个实施例中,闪存设备中有a个通道,每个通道上有b个芯片,每个芯片上有c个晶圆,每个晶圆上有d个分组,每个分组上有e个块,每个块上有f个页。假设n个块组合成一个块组。那么一个分组中有e/n个块组,一个块组中有n×f个物理页。整个转化过程包含以下4个公式,其中符号表示向下取整,符号“%”表示取余操作:
本发明的方案采取了与现有技术中存在的基于块组的映射(也称为三层页级映射)不同的映射方式。该方式中的映射公式将连续的逻辑页仅分配到不同的通道,而不是分配到不同的块组。如图3所示,也就是说,连续a个页分配在不同的通道中,第a+1个页和第1个页分配在同一个通道,也是同一个块组中,第a+2个页和第2个页分配在在同一个通道,也是同一个块组中,直到块组分配了n×f个物理页。具体地,映射公式如下:
CN=LPN%a (1)
PPN=PGN×n×f+Poffset (4)
其中,a为通道数,f为每个块上的页数,n为块组数量,β为预留空间比例β。
本发明实施例中,映射关系存在两种表中,一种是全局映射表,存放逻辑块组号(LGN)到物理块组号(PGN)的映射关系。另一种是局部映射表,每个块组维护一个局部映射表,用于保存块组中逻辑偏移量与物理偏移量的映射关系。
物理页有3种状态:空闲状态、有效状态和失效状态。空闲状态是指物理页没有被写过,或者物理页所在块被擦除后,该物理页没有被写过;有效状态是指该物理页被写过,存在LPN与该页的PPN建立映射关系;失效状态是指该映射到该物理页的LPN发生异地更新,映射关系被修改且该物理页所在块没有被擦除。FTL只记录物理页的有效状态和失效状态。
块组有2种状态:空闲状态和非空闲状态。空闲状态是指没有LGN与该PGN建立映射关系,PGN中所有的物理页都为空闲状态;非空闲状态是指该PGN中存在状态为有效或失效的页。
通过全局映射表可以查看LGN与PGN的映射关系。所有全局映射表会在第一次使用闪存设备时建立,并将每一个表项初始化为一个特殊值,表示LGN不存在对应的PGN。当LGN没有对应的PGN,其建立与PGN的映射关系过程如下:当FTL接收到文件系统下发的读写命令时,如果命令是读,由于还没有建立映射关系,所以这是个错误操作,返回错误;如果命令是写,则在通过公式(1)计算出的通道号,并在该通道中顺序寻找一个空闲的块组。FTL会为每一个通道维护一个上次分配的PGN,初始化为0。从维护的PGN开始向高地址寻找空闲的块组,如果寻找到通道末尾,则从头开始寻找;如果没有找到,则返回错误。将找到块组的PGN分配给LGN,并修改全局映射表,建立LGN与PGN的映射关系。
通过局部映射表可以查看Loffset和Poffset的对应关系。所有局部映射表会在第一次使用闪存设备时建立,并将每一个表项初始化为一个特殊值,表示Loffset不存在对应的Poffset。首先通过公式(2)、公式(3)和全局映射表可知Loffset所在的PGN。查询PGN的局部映射表,当Loffset没有对应的Poffset,其建立与Poffset的映射关系过程如下:当FTL接收到文件系统下发的读写命令时,如果命令是读,由于还没有建立映射关系,所以这是个错误操作,返回错误;如果命令是写,则寻找一个空闲页分配给该Loffset。FTL会为每一个块组维护一个活跃块,用于分配空闲页,第一次选择块组中的第一个块作为活跃块。每个块组在同一时间只有一个活跃块,不含有有效页的块为空闲块,其他块为非活跃块。当活跃块中空闲页消耗完,顺序选择下一个全为空闲页的块作为活跃块;当寻找到块组的末尾,从头开始寻找。活跃块的空闲页分配过程是顺序进行的,从块的第一页开始,顺序将空闲页分配给Loffset,并修改局部映射表,建立Loffset与Poffset的对应关系。
地址映射模块如图4所示,逻辑地址LPN到物理地址PPN的转化过程具体如下:
(2.1)当文件系统下发的命令到达闪存设备时,首先通过逻辑页号LPN和公式(1),计算得到通道号CN,再通过逻辑页号LPN和公式(2),计算得到LPN对应的逻辑块组号LGN,最后通过逻辑页号LPN和公式(3),计算得到逻辑页在块组中的偏移量Loffset,转入步骤(2.2);
(2.2)在全局映射表中查询得到逻辑块组号LGN对应的物理块组号PGN。如果LGN对应有PGN,转入步骤(2.4);否则如果操作类型OP是写操作,转入步骤(2.3),否则转入步骤(2.9);
(2.3)为LGN分配PGN,修改映射表。在缓存中建立LGN的局部映射表,并初始化。转入步骤(2.6);
(2.4)查看LGN对应的局部映射表中的Loffset的映射信息是否在缓存中,如果存在转入步骤(2.6),否则转入步骤(2.5);
(2.5)采取缓存管理策略,将Loffset对应的映射信息读取到缓存中。转入步骤(2.6);
(2.6)如果操作类型OP为写,转入步骤2.7。否则如果局部映射表中Loffset存在对应Poffset,转入步骤(2.8);否则转入步骤(2.9);
(2.7)为Loffset分配Poffset,修改映射关系。转入步骤(2.8)
(2.8)通过PGN、Poffset和公式四,计算得到物理页号PPN。结束。
(2.9)对上层文件系统返回“错误”,结束。
这种映射方式可以减少映射的任意性,一段连续的逻辑页,仅分配给少数几个块组,处理这段连续的逻辑页时,仅需要缓存几个块组的元数据信息。元数据包括映射表、页有效状态表和统计数据。其中页有效状态表记录每个页是否有效,用于垃圾回收时,迁移有效页;统计数据主要是统计块组的擦除次数,用于磨损均衡时选取数据交换的块组。每个通道的起始的块用于存储元数据。具体分布如图7所示。
通过公式(1)可以知道连续的a个逻辑页号LPN分布在不同的通道,通过公式(2)可以得到LPN的分布状况,其分布如图3所示。从图3可以看到虽然局部连续的LPN分布在不同的块组,但是它们分布在同一组块组中。利用数据的局部性,仅需要缓存一组块组中的部分映射表,即可满足映射需求。通过通道并行性,从每个通道相应的块组中读取部分局部映射表,组成连续的LPN对应的映射区。而页有效状态表以及统计数据,也仅需要缓存对应块组的信息。
当LPN在缓存的映射表中不命中时,从闪存设备中读取对应的元数据信息,存入缓存中,如果缓存空间不足,采取LRU队列的形式进行替换管理。
在一个优选实施例中,假设闪存设备有1TB的容量,16个通道,每个通道有2个芯片,每个芯片有2个晶圆,每个晶圆有4个分组,每个分组有2048个块,每个块有256个页,每个页有8KB,25%的预留空间,忽略用于块组数据交换的空间。设置32个块构成一个块组,则一共有2^16=16384个块组,每个块组有8192页。
映射表大小:全局映射映射表表项大小为4B,总大小为64KB。局部映射表表项大小为2B,每张局部映射表大小为16×75%=12KB,总大小为192MB。
页状态信息表大小:每一页只需要1bit,一个块组的页状态信息表大小1KB,总大小为16MB。
统计数据:每个块组统计数据消耗8B,总大小为128KB。
所以整个FTL对缓存的消耗为:64KB(全局映射表)+LRU队列长度×(12KB+1KB+8B)。
(3)元数据缓存管理流程如图5所示,具体步骤如下:
(3.1)当接收到文件系统下发的命令,获取地址映射解析的Loffset,判断LPN对应的Loffset的映射信息是否在缓存中,如果在,转入步骤(3.4);否则转入步骤(3.2);
(3.2)从闪存设备中读取相应的元数据加入LRU队列,判断元数据LRU队列的空间是否写满,如果写满转入步骤(3.3);否则转入步骤(3.4);
(3.3)如果队列尾部的元数据没有修改过,转入步骤(3.4);否则将其写入闪存设备。
(3.4)将LPN对应的元数据调整到LRU队列头部。结束
由于数据具有局部性,即短时间内访问的数据往往是连续的,这种映射在实际的应用可以在缓存少量元数据的情况下正常运作。
(4)垃圾回收
由于为每一个块组分配预留空间,所以垃圾回收在块组内部进行。在写操作完成后,如果当前进行写操作块组中的空闲页占整个块组比例小于阈值γ(γ<β,β为预留空间比例),则触发垃圾回收。
缓存管理中,映射表信息一般都只是部分缓存,所以在垃圾回收之前,需要当前块组的整个局部映射表信息从闪存设备中读出。同时为了减少空闲状态的判断,需要将全失效的块直接进行回收。垃圾回收设计一下3个部分:确定牺牲块、迁移有效页和擦除操作。通过查询页有效状态表,可以知道每个块有多少有效页,将有效页最少的非活跃块作为牺牲块,牺牲块是垃圾回收的擦除块;在擦除牺牲块之前,需要将牺牲块中的有效页迁移到活跃块中;在迁移结束后,将牺牲块擦除。由于FTL只维护每一页是否有效,而不记录空闲状态,所以无法区分全空闲页和全失效页。因此FTL在活跃块替换时,查看旧活跃块中是否存在有效页,如果不存在有效页,则立刻进行垃圾回收。由于局部映射表采取部分缓存策略,所以在垃圾回收之前,需要把块组的相关元数据读到缓存中。
垃圾回收流程如图6所示,具体步骤如下:
(4.1)当写操作完成时,如果有活跃块发生了替换且旧的活跃块为全失效块,转入步骤(4.2);否则转入步骤(4.3);
(4.2)对旧的活跃块进行擦除操作。转入步骤(4.3);
(4.3)如果当前进行写操作的块组的空闲页页数在块组中所占比例如果小于阈值β,转入步骤(4.4);否则转入步骤(4.7);
(4.4)当前块组的局部映射表信息如果都在缓存中,转入步骤(4.6);否则转入步骤(4.5);
(4.5)从闪存设备中读出当前进行垃圾回收的块组的局部映射表,暂存在缓存中。转入步骤(4.6)
(4.6)通过块组的页有效状态表统计每个块的有效页数,选择有效页最少的非活跃块作为牺牲块,将其中的有效页迁移到活跃块中。迁移完成后,对牺牲块进行擦除操作。修改相应元数据,并写回,释放临时缓存空间。
(4.7)结束此次垃圾回收。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于块组结构的FTL优化方法,包括:
在闪存架构上将若干块(block)组成一个块组(block-group),其为连续物理块的集合,使得每个分组(plane)上有若干个块组,块组内有冗余的预留块,以用于在块组内部进行垃圾回收;
建立基于块组的地址映射,该地址映射为二次映射,其中第一次映射是全局映射,即逻辑块组号(LGN)到物理块组号(PGN)的映射关系;第二次映射为局部映射表,其中每个块组维护一个局部映射,用于保存相应块组中逻辑偏移量与物理偏移量的映射关系;其中,映射建立方式为:将连续的逻辑页仅分配到不同的通道,而不是分配到不同的块组,以此方式建立地址映射。
2.根据权利要求1所述的一种基于块组结构的FTL优化方法,其中,所述映射建立方式具体为:
CN=LPN%a (1)
PPN=PGN×n×f+Poffset (4)
其中,a为通道数,f为每个块上的页数,n为块组数量,β为预留空间比例,LPN为逻辑页号,PPN为物理页号,LGN为逻辑块组号,PGN为物理块组号,Loffset为逻辑偏移量,CN为通道号,
3.根据权利要求1或2所述的一种基于块组结构的FTL优化方法,其中,所述物理块组内部的冗余的预留块为预留空间,其在物理上分配给每一个块组,分配给块组的预留空间与对应的块组在物理上连续,即每个块组中的物理页要多于分配给块组的逻辑页,优选是平均分配至各块组。
4.根据权利要求3所述的一种基于块组结构的FTL优化方法,其中,所述第一次映射即建立逻辑块组号(LGN)与物理块组号(PGN)的映射关系具体为:当FTL接收到文件系统下发的读写命令时,如果命令是写,则计算出通道号,并在该通道中顺序寻找一个空闲的块组,FTL为每一个通道维护一个上次分配的物理块组号(PGN),初始化为0,从维护的物理块组号(PGN)开始向高地址寻找空闲的块组,如果寻找到通道末尾,则从头开始寻找,将找到块组的物理块组号(PGN)分配给逻辑块组号(LGN),并修改全局映射表,建立逻辑块组号(LGN)与物理块组号(PGN)的映射关系。
5.根据权利要求4所述的一种基于块组结构的FTL优化方法,其中,所述第二次映射即建立逻辑偏移量(Loffset)与物理偏移量(Poffset)的映射关系,具体为:当FTL接收到文件系统下发的读写命令时,如果命令是写,则寻找一个空闲页分配给该逻辑偏移量(Loffset),FTL为每一个块组维护一个活跃块,用于分配空闲页,第一次选择块组中的第一个块作为活跃块,每个块组在同一时间只有一个活跃块,不含有有效页的块为空闲块,其他块为非活跃块,当活跃块中空闲页消耗完,顺序选择下一个全为空闲页的块作为活跃块;当寻找到块组的末尾,从头开始寻找;活跃块的空闲页分配过程是顺序进行的,从块的第一页开始,顺序将空闲页分配给逻辑偏移量(Loffset),并修改局部映射表,即可建立逻辑偏移量(Loffset)与物理偏移量(Poffset)的对应关系。
6.根据权利要求5所述的一种基于块组结构的FTL优化方法,其中元数据缓存管理具体如下:
(1)接收到文件系统下发的命令,获取地址映射解析的逻辑偏移量(Loffset),判断逻辑块组号(LGN)对应的逻辑偏移量(Loffset)的映射信息是否在缓存中,如果在,转入步骤(4);否则转入步骤(2);
(2)从闪存设备中读取相应的元数据加入LRU队列,判断元数据LRU队列的空间是否写满,如果写满转入步骤(3);否则转入步骤(4);
(3)如果队列尾部的元数据没有修改过,转入步骤(4);否则将其写入闪存设备;
(4)将逻辑块组号(LGN)对应的元数据调整到LRU队列头部,结束。
7.根据权利要求6所述的一种基于块组结构的FTL优化方法,在写操作完成后,如果当前进行写操作块组中的空闲页占整个块组比例小于阈值时,则触发垃圾回收。
8.根据权利要求7所述的一种基于块组结构的FTL优化方法,其中,所述垃圾回收具体步骤如下:
(1)写操作完成时,如果有活跃块发生了替换且旧的活跃块为全失效块,转入步骤(2);否则转入步骤(3);
(2)对旧的活跃块进行擦除操作,转入步骤(3);
(3)如果当前进行写操作的块组的空闲页页数在块组中所占比例如果小于所述阈值,转入步骤(4);否则转入步骤(7);
(4)当前块组的局部映射表信息如果都在缓存中,转入步骤(6);否则转入步骤(5);
(5)从闪存设备中读出当前进行垃圾回收的块组的局部映射表,暂存在缓存中,转入步骤(6);
(6)通过块组的页有效状态表统计每个块的有效页数,选择有效页最少的非活跃块作为牺牲块,将其中的有效页迁移到活跃块中,迁移完成后,对牺牲块进行擦除操作,修改相应元数据,并写回,释放临时缓存空间;
(7)结束此次垃圾回收。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610878981.9A CN106547703B (zh) | 2016-10-08 | 2016-10-08 | 一种基于块组结构的ftl优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610878981.9A CN106547703B (zh) | 2016-10-08 | 2016-10-08 | 一种基于块组结构的ftl优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106547703A CN106547703A (zh) | 2017-03-29 |
CN106547703B true CN106547703B (zh) | 2019-05-14 |
Family
ID=58368319
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610878981.9A Active CN106547703B (zh) | 2016-10-08 | 2016-10-08 | 一种基于块组结构的ftl优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106547703B (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107391393A (zh) * | 2017-07-28 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种ftl映射表的统计方法及装置 |
CN108121670B (zh) * | 2017-08-07 | 2021-09-28 | 鸿秦(北京)科技有限公司 | 一种减少固态硬盘元数据回刷频率的映射方法 |
CN107632940A (zh) * | 2017-08-11 | 2018-01-26 | 记忆科技(深圳)有限公司 | 一种固态硬盘raid垃圾回收方法 |
CN107632941A (zh) * | 2017-08-16 | 2018-01-26 | 南京扬贺扬微电子科技有限公司 | 一种提高闪存写入性能的方法 |
CN107632942A (zh) * | 2017-08-29 | 2018-01-26 | 记忆科技(深圳)有限公司 | 一种固态硬盘实现lba级别trim命令的方法 |
CN108153681A (zh) * | 2017-11-29 | 2018-06-12 | 深圳忆联信息系统有限公司 | 一种大容量固态硬盘映射表压缩方法 |
CN108829355B (zh) * | 2018-06-28 | 2022-03-01 | 新华三技术有限公司 | 一种垃圾回收方法及装置 |
CN111104045A (zh) * | 2018-10-25 | 2020-05-05 | 深圳市中兴微电子技术有限公司 | 一种存储控制方法、装置、设备和计算机存储介质 |
CN109582593B (zh) * | 2018-11-05 | 2022-09-30 | 华侨大学 | 一种基于计算的ftl地址映射读、写方法 |
CN109491927B (zh) * | 2018-11-06 | 2023-02-03 | 镕铭微电子(济南)有限公司 | 数据存储、读取方法、装置及电子设备 |
CN109376095B (zh) * | 2018-12-04 | 2023-06-13 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于flash区域地址映射机制的垃圾回收方法 |
US10871907B2 (en) * | 2018-12-31 | 2020-12-22 | Micron Technology, Inc. | Sequential data optimized sub-regions in storage devices |
KR20200088563A (ko) * | 2019-01-15 | 2020-07-23 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
CN109933570B (zh) * | 2019-03-15 | 2020-02-07 | 中山大学 | 一种元数据管理方法、系统及介质 |
CN110780814B (zh) * | 2019-10-10 | 2021-08-06 | 苏州浪潮智能科技有限公司 | 一种存储数据整理方法与装置 |
CN111258924B (zh) * | 2020-01-17 | 2021-06-08 | 中国科学院国家空间科学中心 | 一种基于星载固态存储系统自适应闪存转换层的映射方法 |
CN111597159A (zh) * | 2020-07-27 | 2020-08-28 | 成都智明达电子股份有限公司 | 一种提高ext4文件系统读写速率的方法 |
CN112015341B (zh) * | 2020-08-26 | 2024-03-22 | 合肥康芯威存储技术有限公司 | 一种数据存储方法、存储系统及存储介质 |
US20230297501A1 (en) * | 2020-12-07 | 2023-09-21 | Micron Technology, Inc. | Techniques for accessing managed nand |
US11507319B2 (en) * | 2021-02-04 | 2022-11-22 | Silicon Motion, Inc. | Memory controller having a plurality of control modules and associated server |
US11494299B2 (en) | 2021-02-18 | 2022-11-08 | Silicon Motion, Inc. | Garbage collection operation management with early garbage collection starting point |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819496A (zh) * | 2012-08-16 | 2012-12-12 | 无锡紫芯集成电路系统有限公司 | 闪存ftl的地址转换方法 |
CN104090847A (zh) * | 2014-06-25 | 2014-10-08 | 华中科技大学 | 一种固态存储设备的地址分配方法 |
-
2016
- 2016-10-08 CN CN201610878981.9A patent/CN106547703B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819496A (zh) * | 2012-08-16 | 2012-12-12 | 无锡紫芯集成电路系统有限公司 | 闪存ftl的地址转换方法 |
CN104090847A (zh) * | 2014-06-25 | 2014-10-08 | 华中科技大学 | 一种固态存储设备的地址分配方法 |
Non-Patent Citations (2)
Title |
---|
一种多通道并行固态存储系统的设计与实现;彭军,黎福海,罗旗舞;《计算机工程》;20131231;第39卷(第12期);第40-44页 |
基于NAND闪存的固态存储系统设计及优化;刘烈超,刘景宁;《中国优秀硕士学位论文数据库-信息科技辑》;20140615(第6期);I137-95 |
Also Published As
Publication number | Publication date |
---|---|
CN106547703A (zh) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106547703B (zh) | 一种基于块组结构的ftl优化方法 | |
CN102012867B (zh) | 资料储存系统 | |
CN102981963B (zh) | 一种固态盘的闪存转换层的实现方法 | |
CN101552032B (zh) | 用较大容量dram参与闪存介质管理构建高速固态存储盘的方法及装置 | |
CN104794070B (zh) | 基于动态非覆盖raid技术的固态闪存写缓存系统及方法 | |
CN101980177B (zh) | 一种操作Flash的方法和装置 | |
CN108121503B (zh) | 一种NandFlash地址映射及块管理方法 | |
CN103136121B (zh) | 一种固态盘的缓存管理方法 | |
CN104461393B (zh) | 一种闪存存储器的混合映射方法 | |
CN102789423B (zh) | 四池闪存磨损均衡方法 | |
CN106293521B (zh) | 一种映射粒度自适应的闪存转换层管理方法 | |
CN105930282B (zh) | 一种用于nand flash的数据缓存方法 | |
CN102779096B (zh) | 一种基于页块面三维的闪存地址映射方法 | |
CN102521160B (zh) | 写缓冲检测器、并行通道写入方法 | |
CN102163175B (zh) | 一种基于局部性分析的混合地址映射方法 | |
CN110413537B (zh) | 一种面向混合固态硬盘的闪存转换层及转换方法 | |
CN103688246A (zh) | 具有在活跃slc和mlc存储器分区之间分布的小逻辑组的非易失性存储器和方法 | |
CN109582593A (zh) | 一种基于计算的ftl地址映射方法及数据读、写方法 | |
CN103777905A (zh) | 一种软件定义的固态盘融合存储方法 | |
CN101329656A (zh) | 一种Nand-Flash存储系统的管理方法 | |
CN103092766A (zh) | 一种用于nand flash的均衡损耗实现方法 | |
CN109710541B (zh) | 针对NAND Flash主控芯片Greedy垃圾回收的优化方法 | |
CN106815152A (zh) | 一种优化页级闪存转换层的方法 | |
CN102023810A (zh) | 一种写数据的方法、装置以及廉价冗余磁盘阵列 | |
CN109324979B (zh) | 3d闪存固态盘系统的数据缓存划分方法及数据分配方法 |
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 |