一种提升SSD在垃圾回收器件期间读性能的方法与流程

文档序号:12119172阅读:472来源:国知局
一种提升SSD在垃圾回收器件期间读性能的方法与流程

本发明属于固态盘(SSD)读写性能控制技术领域,具体涉及一种提升SSD在垃圾回收期间读性能的方法。



背景技术:

近些年来,基于NAND Flash的固态硬盘(Solid State Drive,SSD)由于性能高、功耗低、可靠性高、抗震性好、无噪声等诸多优点获得广泛的应用。但是SSD在使用一段时间之后,其访问性能会有显著下降。垃圾回收对SSD的性能有显著的影响,通过对Intel SSD DC P3700(800G)进行测试发现,针对读写粒度为4KB,读写比例是7:3的随机混合请求。当Intel SSD是空盘时,其IOPS能达到20万,读写带宽能达到800MB/s;当对Intel SSD进行数据预埋和碎片化处理后,其IOPS下降到9W,读写带宽下降到360MB/s。主要原因是,在使用一段时间后,SSD内部垃圾回收的频繁触发,降低了SSD的读写性能。

由于闪存芯片具有写前擦除的特性,更新数据时通常采用异地更新策略,这会产生大量无效页。为保证SSD的正常使用,需要对无效页进行垃圾回收操作,擦除选择的目标块以便再使用。由于闪存芯片的读写粒度和擦除粒度不同,在擦除一个块之前,垃圾回收一般涉及到有效数据的迁移,在数据迁移时,数据的源物理页和目的物理页所处的芯片(chip)和通道(channel)会被占用。在执行擦除操作时,虽然不会占用通道资源,但擦除对象所处的晶圆(die)会被占用。因此,垃圾回收过程中SSD的读写性能将受到较大影响。

如图3所示,一个完整的垃圾回收操作包括三步:1)选择要回收的目标块,2)进行有效数据的迁移,3)擦除目标块。在擦除目标块时,整个die将被占用,容易造成请求冲突,不能及时响应外界请求。写请求的冲突可以通过缓存和预留空间等方式解决,相较之下读冲突更难处理,一般只能被迫等待擦除操作完成,另外同步的读操作不仅影响本通道(channel)的请求,还会影响各个通道(channel)的响应。比较Flash的擦除操作和读操作时间,擦除操作时间为ms级,读操作时间为us级,两者时间比接近100:1;并且随着SSD容量的增加,擦除块大小进一步变大,两者的时间相差会越来越大。综上所述,对读请求而言,被迫等待擦除操作的完成会显著降低SSD的访问性能。

因为垃圾回收涉及到有效数据的迁移和块擦除操作,占用大量系统资源,为尽可能减少垃圾回收对SSD访问性能的影响,目前存在充分利用系统空闲资源进行垃圾回收或通过最大程度提高垃圾回收效率的垃圾回收的方案,但是这些方案中垃圾回收始终被视为一个不可拆分整体,缺少垃圾回收对SSD正常请求冲突的考虑。为解决上述问题,现有技术中出现了一种可中断的垃圾回收机制,其在有效数据迁移期间,每迁移一个数据页能够中断正在进行的垃圾回收响应正常的读写请求。该方案能够在一定程度上解决垃圾回收和正常请求的冲突,但是其中断时间选择有局限性,只能在数据迁移中发生,没有考虑垃圾回收过程中耗时最长的擦除操作和读写请求的冲突。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种提升SSD在垃圾回收期间的读性能的方法,其通过在固态盘通道间搭建RAID,从而能够及时响应读请求,解决目前的SSD在垃圾回收期间读请求性能低,克服现有技术中存在的垃圾回收过程中耗时最长的擦除操作和读写请求的冲突缺陷。

为实现上述目的,按照本发明,提供一种提升SSD在垃圾回收期间读性能的方法,包括:

在各通道间以数据页为条带建立RAID;

处理读请求时,如果读请求访问的数据页所在的晶圆(die)没有进行擦除操作,此时读请求正常响应;

如果读请求访问的数据页所在的晶圆(die)正被擦除操作所占用,发生短暂失效,此时利用通道间的所述RAID通过读取同一条带上其他数据页的数据进行RAID重建,从而及时响应该读请求。

作为本发明的进一步优选,所述RAID重建即通过RAID条带中的其他数据页用异或的方式来恢复所述读请求所需要读取的数据页。

作为本发明的进一步优选,在进行RAID重建过程中若擦除操作完成,晶圆(die)可重新被访问,则消除所述RAID重建痕迹,正常响应读请求。

作为本发明的进一步优选,各个通道的RAID重建读操作能够并行处理,且不影响该通道上的正常的读写请求,重建读操作完成可以有先后顺序。

作为本发明的进一步优选,在每次处理写请求时计算或者更新校验数据页数据,所述计算或者更新校验数据页数据包括整个条带第一次写数据、单个数据页第一次写数据、单个数据页更新数据以及整个条带更新数据。

作为本发明的进一步优选,所述整个条带第一次写数据包括同时向各数据页写数据,校验页数据由各数据页数据做异或运算得到,最后将各数据页和校验页构成一个条带写入闪存。

作为本发明的进一步优选,所述单个数据页第一次写数据包括向任一条带中的一个新数据页写入数据,首先将原始校验页数据从闪存中读取到DRAM,然后校验页的校验数据与所述新数据页数据异或得到新校验数据,最后将所述新数据页数据和新校验数据写入闪存。

作为本发明的进一步优选,所述单个数据页更新写数据包括将所述单个数据页的原数据和校验页的原校验数据从闪存中读取出来,然后将所述原数据与新数据按位异或,异或后的结果再与原校验数据按位异或,得到的结果即为新校验数据,最后将新数据与新校验数据写回到闪存中。

作为本发明的进一步优选,所述整个条带更新写数据包括同时使用新数据更新各数据页,校验页数据由各数据页更新的新数据异或得到,最后将各数据页更新的新数据和新校验页数据写回闪存。

按照本发明的另一方面,提供一种通过通道间内建RAID响应系统读请求的方法,其步骤如下:

1)在各通道间以数据页为条带建立RAID;

2)有读请求,置计数器i=1;

3)判断该读请求所在的晶圆(die)是否被擦除操作占用,是转步骤4),否步骤转9);

4)判断i是否等于1,是则转步骤5),否则转步骤6);

5)生成n-1个重建读请求分别挂载到n-1个通道上,读取剩余RAID条带的数据,其中n为通道总数;

6)并行处理n-i个通道,依次处理通道上已有的读写请求;

7)读取通道上同一条带的相应数据块,每处理一个通道上的重建读请求,i++;

8)判断n-i是否等于0,是则转步骤10),否则转步骤3);

9)直接读取数据块,清除RAID重建的痕迹,转步骤11);

10)根据已有的n-1个数据块,利用RAID5来恢复要读取的数据块;

11)响应读请求。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:

(1)本发明中,利用SSD内建的RAID,将垃圾回收过程中擦除块所在的die视作短暂失效,类似RAID的降级模式,通过RAID重建的方式来响应读请求,能够有效解决垃圾回收中读冲突。

(2)本发明中,在通道间搭建RAID,充分利用SSD内部的并行性,因为固态盘的数据读写粒度为一个闪存页,故其条带以页为单位组织。

附图说明

图1是本发明实施例的多通道SSD架构示意图;

图2是NAND Flash芯片的内部结构示意图;

图3是NAND Flash执行垃圾回收的过程示意图;

图4是本发明实施例的读写请求处理流程图;

图5是本发明实施例的SSD通道间搭建RAID5工作原理示意图;

图6是本发明实施例的方法中针对不同写请求4种计算校验页方式示意图;

图7本发明实施例的方法中利用RAID5同一条带来重建数据页的示意图;

图8是本发明实施例的方法处理读请求流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,SSD由一系列闪存阵列组成,SSD内部有多个闪存控制器(nfc),每个闪存控制器控制一个通道(channel),闪存控制器之间独立工作,每个通道有自己的通道总线;每个通道上挂载多个闪存芯片(chip)。图2为芯片内部结构,每个闪存芯片由多个晶圆(die)组成;每个晶圆由多个分组(plane)组成;每个分组有多个块(block),块是闪存芯片擦除的基本单位,每个块有多个页(page),页是闪存芯片读写的基本单位。

按照本发明一个实施例的方法,如图5所示,首先在各通道(channel)间以数据页(page)为条带建立RAID,本实施例中优选为RAID5,内建RAID5的通道数优选为5个,但本发明中并不限于此,只要能够校验的RAID都适用此。每个条带由D0,D1,D2,D3四个数据页和P一个校验页组成,分别属于组成RAID5的5个通道。

针对SSD内建RAID的存在,为保证SSD数据的一致性,每次处理写请求除了写其本身的数据页之外,还会更新RAID条带的校验数据页。计算或者更新校验数据页包括整个条带第一次写数据、单个数据页第一次写数据、单个数据页第一次写数据以及单个数据页更新写数据。

本方案中第一次写数据页和更新数据写以及整条带写数据和写单个数据页计算校验数据页的方式不同。

如图6所示,对于整个条带第一次写数据,其具体过程可以如下:如图6(A),条带为空,数据D0,D1,D2,D3所在页一开始为空,校验数据P所在的页也为空。同时写入数据D0,D1,D2,D3后,校验数据P由数据D0,D1,D2,D3做异或运算得到,最后将数据D0,D1,D2,D3和校验数据P都写入闪存构成一个条带。

如图6所示,对于单个数据页第一次写数据,其具体过程可以如下:如图6(B),向某一条带中写入新数据D0,首先将原始校验数据P从闪存中读取到DRAM,然后校验数据P与数据D0异或得到新的校验数据P’,最后将数据D0和新校验数据P’写入闪存。

如图6所示,对于单个数据页更新写数据,其具体过程可以如下:如图6(C),当要使用新数据D0’来更新旧数据D0时,首先将旧数据D0和校验数据P0从闪存中读取出来,然后将旧数据D0与新数据D0’按位异或,异或后的结果再与校验数据P0按位异或,得到的结果P0’即为新的校验数据,最后将新数据D0’与新校验数据P0’写回到闪存中。

如图6所示,对于整个条带更新写数据,其具体过程可以如下:如图6(D)所示,同时使用新数据D0’,D1’,D2’,D3’更新旧数据D0,D1,D2,D3,新校验数据P’由新数据D0’,D1’,D2’,D3’异或得到,最后将新数据D0’,D1’,D2’,D3’和新校验数据P’一起写回闪存。

如图7所示,描述数据重建的过程:此时有读请求要读取channel2上的数据D2,D2所属die被擦除操作占用,出现短暂失效,通过RAID5条带中的其他页的数据用异或的方式来恢复数据D2。

本发明中,提升SSD在垃圾回收期间读性能的方法主要包括:

在各通道间以数据页为条带建立RAID;

处理读请求时,如果读请求访问的数据页所在的晶圆(die)没有正在进行擦除操作,此时读请求正常响应;

如果读请求访问的数据页所在的晶圆(die)正被擦除操作所占用,发生短暂失效,此时利用通道间的所述RAID通过读取同一条带上其他数据页的数据进行RAID重建,从而及时响应该读请求。

其中RAID重建即通过RAID条带中的其他数据页用异或的方式来恢复所述读请求所需要读取的数据页。

具体地,如图8所示,本发明一个实施例的提升SSD在垃圾回收期间读性能的方法,通过在通道间内建RAID5响应系统读请求的方式进行,其具体步骤如下:

①有读请求,置计数器i=1,i用来记录重建读请求已完成的通道数;

②判断该读请求所在的die是否被擦除操作占用,是转步骤③,否步骤转⑧;

③判断i是否等于1,是则转步骤④,否则转步骤⑤;

④生成(n-1)个重建读请求分别挂载到(n-1)个通道上;读取剩余RAID条带的数据,n为通道总数;

⑤并行处理(n-i)个channel;依次处理通道上已有的读写请求;

⑥读取channel上同一条带的相应数据块,每处理一个channel上的重建读请求,i++;

⑦判断(n-i)是否等于0,是转⑨,否转②;

⑧直接读取数据块,清除RAID重建的痕迹,转⑩;

⑨根据已有的n-1个数据块,利用RAID5来恢复要读取的数据块;

⑩响应读请求。

本方案中,通道上的请求是顺序处理的,重建读请求也被顺序挂载到对应channel上。因为每个channel上已有的请求数一般不相同,所以完成重建读的时间也不同。通过轮询的方式来保证所有channel都完成重建读。因为可能存在RAID重建操作未完成之前,原channel上擦除操作先一步完成,此时不需要再进行RAID重建,需要将未完成的raid重建的痕迹清除(主要是清除重建读请求所生成的数据),即在进行RAID重建过程中若擦除操作完成,晶圆(die)可重新被访问,则消除所述RAID重建痕迹,正常响应读请求。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1