一种延长固态盘使用寿命的方法

文档序号:6365252阅读:98来源:国知局
专利名称:一种延长固态盘使用寿命的方法
技术领域
本发明属于计算机存储技术领域,特别涉及一种延长固态盘使用寿命的方法。
背景技术
存储器是计算机系统中的一个非常重要组成部分。闪存(FLASH)作为一种可擦除 的非易失性半导体存储器,由于具有存储密度大、功耗低、掉电数据不丢失以及抗震性好等优点,在嵌入式设备领域已经非常普及。基于闪存的固态存储器(也叫固态盘,SSD SolidState Disk)相对传统硬盘在存储性能以及功耗、抗震耐摔等方面拥有明显的优势,越来越多的被用来部分或全部取代传统硬盘来提升存储系统的性能。然而,其可靠性以及使用寿命问题已经成了固态盘迅速大规模商用化的主要制约因素之一。目前阻碍固态盘大规模商业应用的主要因素有两点,一、闪存擦写次数有限,由于闪存介质通过注入和擦除栅极电荷来存储信息,因制造工艺的缘故,这种反复的注入和擦除到达一定次数后,其工作变得不稳定因而不能继续用来存储数据。二、价格,目前固态盘的单位存储空间价格比传统硬盘的单位价格要高约一个数量级,而随着制造工艺的提升以及多层存储技术(MLC,Multi-Level Cell)的应用,价格会逐步下降。但随着工艺的提升以及MLC技术的应用,都使得闪存存储单元的可擦除次数也随着急剧降低,从最初90nm工艺时的10万次到现在3X nm工艺时小于5千次。可擦除次数的急剧降低,就意味着固态盘的使用寿命也跟着急剧下降,使得提出提升固态盘使用寿命的方法变得更加有必要。NAND型闪存颗粒是目前广泛使用的固态存储介质,后文中所述的“闪存”也仅指NAND FLASH。NAND型FLASH颗粒的组成形式是,一个颗粒由多个块组成,每个块又由多个页组成。NAND FLASH的基本操作有读、写、擦除。读和写操作的基本单位都是页,而擦除的基本单位是块。市面上常见的NAND FLASH的页大小4K字节或2K字节,而每个块包含64个页或128个页。闪存操作主要有以下三个特点一、不能直接覆盖写,每个物理页在写之前必须先进行擦除操作。二、必须顺序写,在每个块中的页必须按顺序依次写入,否则会引起存储的数据不稳定。三、擦除写入次数有限,每个存储单元的写入次数大约在I万至10万次(针对单层存储,SLC)。固态盘的使用寿命主要由以下三个因素决定一、固态盘的数据写入量,这主要是由用户负载决定;二、固态盘中的冗余空间大小,冗余空间越大,触发垃圾回收(GC,GarbageCollection)操作的频率越低,对闪存的擦除次数也相对较少,但这一因素主要由生产厂家决定,且受成本因素制约;三、与垃圾回收操作和磨损均衡算法的效率有关。当前市场主流固态盘产品中的提高使用寿命的方法主要是通过磨损均衡技术实现的,没有考虑到通过减少对固态盘的实际数据写入,间接增大固态盘中的冗余空间来提升固态盘的使用寿命。

发明内容
本发明的目的在于提出一种延长固态盘使用寿命的方法,通过减少对固态盘的实际数据写入,间接增大固态盘中的冗余空间,从而提升固态盘的使用寿命,本发明的方法与现有的磨损均衡技术可以共存,共同提升固态盘的使用寿命。实现本发明的目的所采用的具体技术方案如下一种延长固态盘使用寿命的方法,通过对写请求的处理判断出待写数据是否为已写入过固态盘中的重复数据,从而减少对固态盘的实际写入,延长固态盘的使用寿命,其具体步骤如下(I)将来自上层接口的写请求加入固态盘缓冲区中的写请求队列中;(2)取样哈希,即针对该写请求,选择其中一个数据页作为取样页;(3)计算该取样页的哈希值即指纹,并与指纹库中的指纹比对以进行匹配,获得匹 配结果,其中,所述指纹库指该固态盘中所存储数据的指纹的集合;(4)如果匹配结果为没有找到匹配的指纹,则将取样页以及该请求中的其余数据页直接写入固态盘闪存,并更新映射表;(5)如果匹配结果为找到匹配的指纹,则不将该取样页写入固态盘闪存,而直接将该取样页对应的映射表更新;同时,对该请求中的其余数据页中的每一页分别计算指纹,并将所述每一页的指纹分别与指纹库中的指纹比对以进行匹配对于找到匹配指纹的数据页,直接更新其对应的映射表,对于没有找到匹配指纹的数据页,将其直接写入固态盘闪存并更新映射表。作为本发明的改进,所述的步骤(3)中计算指纹及进行匹配的具体过程为首先,对数据页预先计算一个低级别的指纹,并将该指纹与固态盘中的指纹库进行匹配,如果没有找到匹配的指纹,则匹配不成功,该页数据为非重复数据;如果找到匹配的指纹,则再进一步计算该数据页的更高级别的指纹,并与指纹库进行匹配,如果找到匹配的指纹,则匹配成功,该页数据为重复数据,否则,匹配不成功,该页数据为非重复数据。作为本发明的改进,所述步骤(2)中进行取样哈希的具体为选取写请求中每个数据页的头四个字节,并进行32位的数值比较,并将数值最大的数据页作为该写请求的取样页。作为本发明的改进,所述指纹库中的存储方式为所有指纹被分为N段存储,N为自然数,其中,对于任一指纹f,将其映射存储到第η段,其中η为指纹数值对N取模。作为本发明的改进,上述存储指纹的每个段中,均包含一个簇队列,每簇为一个内存数据页,其由多个项构成,每个项即为一个指纹数据结构,在每个簇中,指纹按照数值大小进行升序排列。作为本发明的改进,所述指纹数据结构为{指纹,(索引地址,热度因子)},其中,索引地址是页的物理地址或页的虚拟地址,热度因子是指纹对应数据在存储系统中的重复次数。作为本发明的改进,如果固态盘系统缓存剩余空间少于5%时,将写请求队列中的写请求,直接写入闪存盘中,直至缓存剩余空间重新大于50%时,再重新执行步骤⑵ _(5)。本发明可以减少数据的固态盘存储空间的实际占用,从而间接的在不增加固态盘成本的前提下增大了系统的冗余空间。本发明结合在线重删消除重复写入闪存中的数据与离线重删技术消除固态盘中的重复数据,从而减少对闪存的写入以及对闪存的实际空间占有,间接增大固态盘的冗余空间,减少GC操作的触发,从而减少固态盘中闪存的擦除次数,提高固态盘的使用寿命。本发明可与当前现有的延长固态盘使用寿命常用的磨损均衡策略同时存在,共同延长固态盘的使用寿命。通过在线重删通过预先检测写入数据,从而取消那些重复的数据写入。当从系统上层来了一个写请求时,先将该写请求缓存到固态盘的设备缓冲区,通过一个hash引擎(该引擎可以是处理器本身,或者仅仅是控制器逻辑的一部分)计算出该写请求内容的hash值,即内容指纹,将该指纹与系统中已有内容的指纹进行比对,若匹配到相同的指纹,则表明该请求的数据已经在固态盘中,将取消该次写请求对固态盘的实际写入,只是修改固态盘元数据中的映射表,将本次请求的逻辑请求页地址(LB A)添加到相应指纹的页表项。否则将该请求内容的指纹添加到元数据中,为该页实际分配一个物理页地址,并将该写请求内容写入固态盘闪存中。其具体流程如图I所示。本发明为了降低重复数据删除对系统性能造成的影响,采用如下三种策略1、取样哈希。即对于一段写请求,只对其中某一页进行计算哈希值,即指纹。在系统写请求中普遍存在一个规律,即若每段写请求中存在重复数据页,则该段写请求中大部分页也是重复数据页。如果取样指纹与系统中现有指纹数据相匹配,则表明该页为重复数据页,且该段中的其他页也极有可能为重复数据页,进一步计算其它也的哈希值并进行指纹比对。若取样页的指纹在系统中没有找到匹配项,即该页数据为非重复数据,则该段请求的其它页也很有可能为非重复数据,为了尽量避免对系统性能造成负面影响,认为该段的其它数据页为非重复数据页,直接写入闪存。2、预先轻量级哈希。通常情况下轻量级的哈希例如计算一个32位的CRC32哈希值要比计算一个160位的SHA-I哈希值要快10倍。通过轻量级哈希32位的CRC32哈希可以过滤掉绝大部分非重复数据,如果轻量级的哈希值匹配成功,则表明该数据极有可能为重复数据,将进一步计算160位的SHA-I哈希值,与系统现有的指纹数据进行比对,如果比对成功,则表明该数据的确是重复数据,否则为非重复数据。通过该策略可以大大系统的性能。要实现轻量级哈希,在系统指纹存储中,在保存160位的指纹同时,需要保存一份32位的CRC32哈希指纹。3、动态开启策略。由于开启数据重删时需要消耗系统的计算资源,为了保证系统的服务质量,当固态盘系统缓存剩余空间少于5%时,表明此时系统比较繁忙,将取消对写请求数据的哈希值计算,而直接将其当作非重复数据写入闪存。当缓存剩余空间大于50%时,表明系统此时有空余资源,将重新开启对写请求的哈希计算,检测重复数据,取消对重复数据的闪存写入。4、离线重复数据删除。对于没有计算哈希值而直接写入闪存的数据也有部分可能为重复数据,因此为了更好地实现固态盘中的重复数据删除技术,当系统空闲时,可利用系统的空闲计算资源,为无对应指纹的数据页计算指纹,并更新系统指纹数据库。通过对指纹进行排序从而找出重复数据,进而删除重复数据。本发明充分利用系统的空余计算资源,为写入数据页计算哈希指纹,通过与系统中已有数据指纹进行比对,找出重复数据,避免对重复数据的闪存写入。在基本不影响系统的整体服务性能的前提下,有效减少对闪存的写入次数,减少固态盘中数据对闪存的实际物理占用,间接的增大了系统的冗余空间,减少了系统进行垃圾回收操作频度,从而减少固态盘中块的擦除次数,提高固态盘的使用寿命。


图I是本发明实施的结构流程示意图; 图2是本发明实施结构流程框3是传统固态盘的映射关系表;图4是本发明实施的两级映射关系表;图5是本发明中指纹数据存储结构示意表。
具体实施例方式下面结合附图和具体实施例对本发明进行详细说明。如图I所示,该方法主要由以下几大步骤实现。首先,步骤(I)当设备(固态盘)接收到来自上层接口的请求时,先将该写请求加入设备缓冲区中的写请求队列中,步骤(2)判断在线重复数据删除功能是否开启,即如图I中所示判断动态开关是否为开,如果为关,表明设备比较繁忙,转步骤(3)直接将写请求数据写入闪存,并将该写请求的映射关系添加入一级映射表中。步骤(2)中,为保证设备服务质量,当设备缓存的剩余容量小于10%时,表明设备处于忙状态,此时将关闭设备在线重复数据删除开关(动态开关)。当设备缓存剩余容量大于50%时,表明系统处于比较空闲状态,将重新开启在线重复数据删除开关。如果动态开关为开,则执行步骤(4),对写请求进行取样,接着执行步骤(5)计算哈希值,得到指纹f。接下来,转步骤出),将指纹f与指纹数据库中的指纹进行比对,若找到匹配,则该页为重复数据页,将不写入闪存,转步骤(7)更新数据映射关系表,该写请求中的其他数据页也将执行步骤(4)到步骤¢),计算指纹进行比对。若取样页的指纹在指纹数据库中未找到匹配指纹,则转步骤(8)将该写请求的所有数据页直接写入闪存,并更新一级映射关系表。其中,步骤(4)为取样哈希步骤,即确定写请求中的取样页。为了提升系统的性能,对每个写请求只选择其中一个页作为取样页,用于进行计算哈希值,即指纹。在进行取样哈希时,最关键的是选择哪个页进行计算哈希指纹。本实施例中采用的方法是,先选取每个写请求页的头四个字节进行32位的数值比较,取数值最大的页为取样页。这主要是因为如果两个写请求具有相似内容,则其请求数据页中,前四字节的最大数值也很有可能相同。与此同时,当写请求数据块很大时,如果只取其中一个页进行采样哈希,则很有可能会漏掉对重复数据的检测。因此为了尽量避免此种状况的发生,本实施例中对大的写请求进行分段采样,以32个页为一个单位进行采样计算哈希指纹。步骤(5)为计算数据页的哈希值,并进行比对匹配的步骤,以验证待写数据是否为已写入过的重复数据。为了尽量减少本发明方法对系统性能的影响,采用预先轻量级哈希技术。首先,对需要计算指纹的数据预先计算一个轻量级的指纹,例如进行32位的CRC32哈希,如果该指纹与固态盘中的轻量级指纹库匹配成功,则该数据很有可能为重复数据,进一步计算更高级别的指纹,如160位的SHA-I哈希值,以确保其确实为重复数据。如果轻量指纹匹配不成功,则该页数据一定为非重复数据,转步骤(8)直接写入闪存。计算一个32、位的CRC32哈希值要比计算一个160位的SHA-I哈希值要快10倍。通过该策略可以大大减小本发明方法对系统的性能影响。要实现轻量级哈希技术,在系统指纹存储中,需要保存数据指纹,同时保存一份数据的轻量级的哈希指纹。对于取样页的哈希指纹,如果在系统中找到与该指纹相同的指纹数据,表明该请求中取样页数据为重复数据,则该请求的其他数据页也极有可能是重复数据,将进一步对其它数据页转步骤(5)计算指纹数据,进行一一比对确认,过滤掉重复数据的闪存写入,对于重复数据只是更新系统中的对应映射关系表。否则如果系统中没有与取样数据页相同的指纹,则该请求的其它数据页也极有可能不是重复数据,进而取消对该请求其他数据页的指纹计算,转步骤(8)直接将该请求的数据页写入闪存。如果其中有重复数据,则仍可通过静态重复数据删除,删除那些重复的数据。哈希强度的选择。本发明为了降低系统设计复杂度,采用定长的哈希单元,而固态盘中的数据都是以页为单位进行管理的,所以选择以页为单位计算哈希值。
为了加快指纹的比对速度,需要对指纹进行有序分块存储。指纹的存储。为了通过指纹快速定位该指纹对应的数据物理页,本发明设计了一个指纹数据结构,用来存储指纹数据。该内存指纹数据结构为{指纹,(索引地址,热度因子)},索引地址部分占32位,可以是页的物理地址(物理地址,PBA)也可以是页虚拟地址(页虚拟地址,VBA,即二级索引地址,当该数据页为重复数据时,索引地址指向二级映射表。与物理地址通过最高有效位来判别),通过该索引地址可以找到该指纹对应的数据。热度因子,主要用来表征该指纹对应数据在存储系统中的重复次数即热度,每当该指纹对应的数据被写请求一次,热度因子加一。在进行指纹存储时,首先将所有指纹分为N段存储(N通常取值4、8或16),对于一个给定的指纹f,将其映射到第η段(其中η为指纹数值对N取模运算的结果,即n = fmod N),以将数据指纹平均分布到N个段。每个段包含一个簇(本发明中用bucket表示)队列,每个bucket为一个内存数据页,由多个项构成,每个项即为一个指纹数据结构{指纹,(索引地址,热度因子)}。在每个bucket中,指纹按照指纹的数值大小进行升序排列,以便于快速查找指纹。在内存中存放的指纹数据结构是固态盘中热度因子最高的指纹数据。在固态盘启动时,首先从闪存中将映射关系表载入内存,然后扫描映射表以及闪存中的元数据,将指纹项数据结构{指纹,(索引地址,热度因子)}载入内存。本方案中采用间接映射方式更新映射表。间接映射是固态盘体系结构中的一个重要组成机制,通常采用I对I的映射机制,如图3所示,其映射表表项为{LBA,PBA},LBA表示逻辑页地址,PBA表示物理页地址。在本发明中采用N对I的映射关系,当多个逻辑页LBA对应的内容相同时,在物理页PBA中将只保存一份物理数据,并将这几个逻辑页LBA同时映射到该物理页,即N个逻辑页LBA对应一个物理页PBA。本发明采用两级映射的方式。如图4所示,其中第一级映射表的表项为{LBA,PBA/VBA},LBA表示逻辑页地址,PBA表示物理页地址,VBA表示二级映射表中对应的虚拟页地址。当LBA对应的指纹在系统中唯一时,LBA——> PBA,在一级映射表中,将LBA直接映射到相应的物理页PBA ;当LBA对应的指纹在系统中不唯一时,即系统中有多个逻辑页LBA对应同一个物理页PBA,LBA——> VBA——> PBA,在一级映射表中,将指纹相同的LBA对应到二级映射表中的同一个VBA地址,在二级映射表中表项为IVBA,(PBA,热度因子)},其中VBA表示虚拟页地址,PBA表示物理页地址。其中在一级映射表中,VBA与PBA通过最高有效位判定,最高有效位为I时为VBA,否则为 PBA0当执行步骤(3)和步骤(8)时,认为该数据是非重复数据,此时将数据实际写入闪存的同时,仍然需要执行步骤(7)更新映射关系表,将该数据的LBA与PBA对应关系添加到一级映射关系表中。若在步骤(6)过程中判定,找到匹配指纹,即对应数据为重复数据时,则找到该指纹对应的VBA地址,将LBA与VBA的对应关系添加到一级映射关系表,并将VBA对应的二级映射表项中的热度因子加一。通过两级映射方式,有效的简化了 GC操作。当LBA直接对应PBA时,在删除LBA的同时,将PBA对应的物理页标记为失效页;当LBA对应VBA时,表明该LBA对应的物理页 与其他逻辑页共有,在删除该逻辑页时,只需将一级映射表中对应映射关系删除,并修改二级映射表中的热度因子,将热度因子减I只有当热度因子减为O时,才将对应的物理页标记为失效页。所有的映射关系表在闪存中都有相应记录,通过日志形式将一级和二级映射表都存放在固态盘中的专用闪存空间中。当更新内存中的映射表项时,更新记录将会先存放在一个小的内存缓冲区中,直到缓冲区满才会将更新记录添加到闪存日志文件中。在系统中设置一个大的电容或电池,当系统突发掉电状况时,能够提供电力支持将所有未写入闪存的日志信息写入闪存,以确保存储器中映射数据的安全性。当系统启动时,闪存中的映射表项将首先被载入系统内存,并根据闪存中的更新日志文件重新构造数据存储映射表。当系统空闲时,为了完善固态盘中的指纹数据库,对固态盘中已存储的数据页进行扫描。若数据未计算指纹,而直接写入闪存时(有两种情况1、系统繁忙,在线重删开关为关闭,2、取样哈希,未找到匹配指纹,写请求中除取样页的其他数据页都将不计算指纹直接写入闪存),将该页对应的页表项添加到一级映射关系表中。当写请求数据计算过指纹时,若该页为重复数据页,则将{LBA,VBA}添加到一级映射表中,并将二级映射表中VBA对应项的热度因子加一;若该页为非重复数据,则将{LBA,PBA}添加到一级映射表中。离线重复数据删除。在系统空闲时,对元数据页进行扫描,找出那些尚未计算哈希值的数据页,进行计算哈希值,更新其元数据。计算完数据页的指纹后,对存储空间中所有数据的指纹进行归并排序,对相同指纹进行合并元数据,从而消除固态盘中的重复数据。对于离线重复数据删除,通常和系统的垃圾回收操作一起进行,也可单独进行。
权利要求
1.一种延长固态盘使用寿命的方法,通过对写请求的处理判断出待写数据是否为已写入过固态盘中的重复数据,从而减少对固态盘的实际写入,延长固态盘的使用寿命,其具体步骤如下 (1)将来自上层接口的写请求加入固态盘缓冲区中的写请求队列中; (2)取样哈希,即针对该写请求,选择其中一个数据页作为取样页; (3)计算该取样页的哈希值即指纹,并与指纹库中的指纹比对以进行匹配,获得匹配结果,其中,所述指纹库指该固态盘中所存储数据的指纹的集合; (4)如果匹配结果为没有找到匹配的指纹,则将取样页以及该请求中的其余数据页直接写入固态盘闪存,并更新映射表; (5)如果匹配结果为找到匹配的指纹,则不将该取样页写入固态盘闪存,而直接将该取样页对应的映射表更新;同时,对该请求中的其余数据页中的每一页分别计算指纹,并将所述每一页的指纹分别与指纹库中的指纹比对以进行匹配对于找到匹配指纹的数据页,直接更新其对应的映射表,对于没有找到匹配指纹的数据页,将其直接写入固态盘闪存并更新映射表。
2.根据权利I所述的延长固态盘使用寿命的方法,其特征在于,所述的步骤(3)中计算指纹及进行匹配的具体过程为 首先,对数据页预先计算一个低级别的指纹,并将该指纹与固态盘中的指纹库进行匹配,如果没有找到匹配的指纹,则匹配不成功,该页数据为非重复数据;如果找到匹配的指纹,则再进一步计算该数据页的更高级别的指纹,并与指纹库进行匹配,如果找到匹配的指纹,则匹配成功,该页数据为重复数据,否则,匹配不成功,该页数据为非重复数据。
3.根据权利要求1-2之一所述的延长固态盘使用寿命的方法,其特征在于,所述步骤(2)中进行取样哈希的具体为选取写请求中每个数据页的头四个字节,并进行32位的数值比较,并将数值最大的数据页作为该写请求的取样页。
4.根据权利要求1-3之一所述的延长固态盘使用寿命的方法,其特征在于,所述指纹库中的存储方式为所有指纹被分为N段存储,N为自然数,其中,对于任一指纹f,将其映射存储到第η段,其中η为指纹数值对N取模。
5.根据权利要求4所述的延长固态盘使用寿命的方法,其特征在于,上述存储指纹的每个段中,均包含一个簇队列,每簇为一个内存数据页,其由多个项构成,每个项即为一个指纹数据结构,在每个簇中,指纹按照数值大小进行升序排列。
6.根据权利要求5所述的延长固态盘使用寿命的方法,其特征在于,所述指纹数据结构为{指纹,(索引地址,热度因子)},其中,索引地址是页的物理地址或页的虚拟地址,热度因子是指纹对应数据在存储系统中的重复次数。
7.根据权利要求1-6之一所述的延长固态盘使用寿命的方法,其特征在于,如果固态盘系统缓存剩余空间少于5%时,将写请求队列中的写请求,直接写入闪存盘中,直至缓存剩余空间重新大于50%时,再重新执行步骤(2)-(5)。
全文摘要
本发明公开了一种延长固态盘使用寿命的方法,包括(1)将写请求加入固态盘缓冲区中的写请求队列中(2)选择写请求中一个数据页作为取样页(3)计算取样页的指纹,并与指纹库中的指纹比对以进行匹配(4)如果没有找到匹配的指纹,则将取样页以及该请求中的其余数据页直接写入固态盘闪存(5)如果有匹配的指纹,则对其余每一页分别进行计算指纹,并分别与指纹库中的指纹比对以进行匹配对于找到匹配指纹的数据页,直接更新对应的映射表,找到匹配指纹的数据页将则其写入固态盘。本发明减少固态盘中数据对闪存的实际物理占用,间接的增大了系统的冗余空间,减少了系统进行垃圾回收操作频度,从而提高固态盘的使用寿命。
文档编号G06F12/02GK102646069SQ201210042620
公开日2012年8月22日 申请日期2012年2月23日 优先权日2012年2月23日
发明者冯丹, 刘景宁, 张建权, 童薇, 苏福钦, 葛雄资 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1