一种高性能高可靠的固态盘实现方法

文档序号:6510907阅读:122来源:国知局
一种高性能高可靠的固态盘实现方法
【专利摘要】本发明提供了一种高性能高可靠的固态盘实现方法,包括:(1)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;(2)通过缓冲区接收并存储数据,(3)判断缓冲区是否已满,若是,则进入步骤(4);若否,则返回步骤(2);(4)从缓冲区中取N-1个数据块,计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;返回步骤(2)。本发明通过将固态盘内的闪存芯片构建成RAID4级别的物理阵列来保证数据可靠性,可以处理不同层次的故障,包括页级、块级、甚至是芯片级;并通过满条带写和顺序写来提高写性能,将数据出错带来的空间损失和性能损失降到最低。
【专利说明】一种高性能高可靠的固态盘实现方法
【技术领域】
[0001]本发明属于固态盘(Solid State Drive, SSD)数据可靠性【技术领域】,具体涉及一种高性能高可靠的固态盘实现方法。
【背景技术】
[0002]随着计算机技术和网络通信技术的发展,信息化程度越来越高,人们对数据存储的性能要求也越来越高。固态盘(Solid State Drive, SSD)作为一种新兴的存储设备,以其体积小、质量轻、抗震动、读写性能高等特性而备受青睐。固态盘内部一般存在多个通道(channel),每个通道连接一定数量的闪存芯片(flash chip),每个芯片由五个层次组成:芯片(chip) —晶圆(die) —分组(plane) —块(block) —页(page)。其中页是读、写的最小单位,块是擦除(erase)的最小单位。
[0003]和机械磁盘一样,固态盘也存在数据丢失的风险,在大容量固态盘中尤其突出。原始的数据保护方法是在页内部采用ECC校验方法,但随着闪存颗粒越来越小、控制器复杂度越来越高、存储容量越来越大,闪存的出错率也越来越高,当在页、块甚至分组层次发生数据故障时,传统的ECC校验方法显然无能为力。在固态盘内部采用RAID技术,利用一定的数据冗余,将出错数据迅速恢复,成为固态盘可靠性研究方面的一个热点。但是,传统的固态盘实现方法中仍然存在可靠性和随机写性能不佳的问题。

【发明内容】

[0004]本发明的目的在于提供一种高性能高可靠的固态盘实现方法;该高性能高可靠的固态盘实现方法针对传统固态盘可靠性和随机写性能不佳的问题,在固态盘内部构建RAID4级别的物理阵列来保证数据可靠性,并通过满条带写和顺序写来提高写性能,将数据出错带来的空间损失和性能损失降到最低。
[0005]本发明所采用的技术方案如下:
[0006]一种高性能高可靠的固态盘实现方法,包括以下步骤:
[0007](I)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;在闪存阵列中取每个闪存芯片相同偏移位置的页组成一个条带;其中,N为大于2的正整数;
[0008](2)通过缓冲区接收并存储数据,所述缓冲区的大小大于等于闪存芯片中N-1个页的大小;
[0009](3)判断缓冲区是否已满,若是,则进入步骤⑷;若否,则返回步骤⑵;
[0010](4)从缓冲区中取N-1个数据块,计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;返回步骤(2)。
[0011]进一步的,步骤(2)中所述缓冲区在接收数据时还进行冷热数据分离,具体包括:
[0012](2.1)在缓冲区中建立并维持一个冷数据链表和一个热数据链表;
[0013](2.2)判断接收到的数据是否为新数据,若是,则将该数据的热度的初始值记为O ;若否,则将该数据的热度加I;
[0014](2.3)判断接收到的数据的热度是否高于预先设定的热度阈值,若是,将该数据加入热数据链表;若否,将该数据加入冷数据链表。
[0015]进一步的,步骤(4)具体包括如下步骤:
[0016](A)判断冷数据链表中的数据块的个数是否大于等于N-1个,若是,则从冷数据链表中按照热度从小到大的顺序选择N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的冷区,转入步骤⑶;若否,进入步骤⑶;
[0017](B)判断热数据链表中的数据块的个数是否大于等于N-1个,若是,则从热数据链表中按照热度从小到大的顺序选取N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的热区,转入步骤⑶;若否,进入步骤(C);
[0018](C)从冷数据链表中选取所有的NI个数据块,从热数据链表中选取N2个数据块,组成N-1个数据块;其中,N1+N2=N-1 ;
[0019]通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据;
[0020]若上一次写操作在闪存阵列的冷区,则将所述满条带数据写回闪存阵列的冷区;若上一次写操作在闪存阵列的热区,则将所述满条带数据写回闪存阵列的热区;
[0021](D)完成本次写操作,返回步骤(2)。
[0022]进一步的,步骤(4)中所述满条带数据写回闪存阵列的过程具体包括如下步骤:
[0023](4.1)在冷区或热区内分别自上而下按顺序以条带为单位为所述满条带数据分配条带空间;
[0024](4.2)判断分配的条带空间中是否存在X个坏页,X为正整数;若是,则进入步骤
(4.3);若否,则将满条带数据写入该条带空间,转入步骤(4.7);
[0025](4.3)判断所述坏页的信息是否已经记录在坏页哈希表中,若没有记录,则把所述坏页的信息添加到坏页哈希表;若有记录,则不做操作;
[0026](4.4)判断X是否等于N-1,若是,则跳过该条带空间,返回步骤(4.1);若否,则进入步骤(4.5);
[0027](4.5)判断X是否等于N-2,若是,则从所述满条带数据中选择热度最小的I个数据块,写入该条带空间中第一个未损坏页,并拷贝一份该数据块写入第二个未损坏页,转入步骤(4.7);若否,则进入步骤(4.6);
[0028](4.6)从所述满条带数据中按照热度从小到大的顺序选择N-1-x个数据块,通过异或运算计算出所述N-1-x个数据块的校验值;将所述N-1-x个数据块写在该条带空间的前N-1-x个未损坏页,所述校验值写在最后一个未损坏页;
[0029](4.7)完成本次写操作。
[0030]进一步的,步骤(2)-(4)进行的同时还包括:
[0031]当固态盘的剩余空间小于预先设定的空间阈值,系统负载小于预先设定的负载阈值时,以段为最小单位进行垃圾回收,并将回收的段中的有效数据提交至缓冲区;所述段由闪存阵列中每个闪存芯片相同偏移位置的块组成。[0032]进一步的,步骤(2)-(4)进行的同时还包括:
[0033](5.1)判断当前的操作类型,若为读操作,执行步骤(5.2);若为擦除操作,执行步骤(5.3);
[0034](5.2)判断读操作的任一页是否为坏页,若不是坏页,则读出该页存储的数据;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,则读所述重定向物理地址对应的页,直到读出数据;
[0035]若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,将恢复后的数据提交至缓冲区,在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
[0036]按照上述方法遍历读操作的每一页,直至完成读操作;
[0037](5.3)判断擦除操作的段中的任一页是否为坏页,若不是坏页,则不做处理;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,将重定向物理地址置为空,不作处理;
[0038]若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,并将恢复后的数据提交至缓冲区;并在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
[0039]按照上述方法遍历擦除操作的段中的每个页,之后逐块擦除整个段。
[0040]本发明所述的高性能高可靠性的固态盘实现方法,具有如下有益效果:
[0041]1、本发明通过将固态盘内的闪存芯片构建成RAID4级别的物理阵列来保证数据可靠性,可以处理不同层次的故障,包括页级、块级、甚至是芯片级。
[0042]2、本发明把所有随机写合并成满条带写和顺序写,由于固态盘的顺序写速度远高于随机与速度,因此可减少与次数,提闻与速度,进而提闻闪存芯片的与性能。
[0043]3、传统逻辑结构的RAID4阵列构建,需要比较大的重定向表,存在小写问题,也即每次更新都需要读出旧数据计算校验值并更新校验值;而本发明采用满条带写,实现了延迟更新,省去了读出旧数据的过程,同时把多次计算和更新校验值简化为一次,大大减少了校验块的计算次数和更新次数,减少了闪存芯片的擦写次数,进一步提高了写性能。
[0044]4、本发明中损坏一个页就只丢弃这个页(页是闪存芯片读写的最小单位),而不用丢弃整个块,因此能够将空间损失降到最低。
[0045]5、在固态盘内部组建RAID阵列,会带来一定的性能损失,比如需要计算校验值。与传统逻辑结构的RAID4阵列相比,本发明大大减少了校验块的计算次数和更新,因此能够将性能损失降到最低。
[0046]6、本发明在数据存储以及写操作时采用了冷热数据分离的方式,即将热数据写入热区,冷数据写入冷区,这样有利于在相近时间内将无效的数据集中在同一个段,便于提高垃圾回收效率。
【专利附图】

【附图说明】
[0047]图1为本发明中闪存阵列组成示意图;
[0048]图2为本发明中段的划分示意图;[0049]图3为本发明的坏页哈希表示意图。
【具体实施方式】
[0050]下面结合附图对本发明的【具体实施方式】作进一步说明。在此需要说明的是,对于这些实施方式的说明用于帮助理解本发明,但并不构成对本发明的限定。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0051]本发明提供了一种高性能高可靠性的固态盘实现方法,所述固态盘包括若干个闪存芯片、非易失性存储器(Nonvolatile RAM)、缓冲区和控制器。
[0052]所述高性能高可靠性的固态盘实现方法包括以下步骤:
[0053](I)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;在闪存阵列中取每个闪存芯片相同偏移位置的页组成一个条带;其中,N为大于2的正整数;
[0054]一个固态盘里面可能有很多块闪存芯片,例如一块型号为Samsung K9F1208U0B的闪存芯片大小为64MB,如果固态盘总容量为256GB,则固态盘内部总共有芯片数量为256GB / 64MB=256*16个;这么多的闪存芯片组成一个庞大的RAID4阵列弊端是非常明显的,首先是大大降低了安全性,因为RAID4阵列只能容忍同一时间只有一个盘发生故障,组成阵列的盘越多,两个或两个以上的盘同时发生故障的概率也就越高,阵列安全性也就越低;第二,大大增加了组成了满条带写的难度,对于一个16个芯片组成的RAID4而言,只需要凑成15个闪存页的大小,就可以满条带写回闪存阵列了 ;对于256个芯片组成的RAID4而言,要凑成255个闪存页的大小才可以作为满条带写回阵列。这无疑需要更大的缓冲区。对于256*16个芯片组成的阵列,缓冲区大小难以满足。
[0055]因此本发明将所有的闪存芯片分成若干个RAID4级别的闪存阵列。以上面提到的256*16个芯片的固态盘为例,可以32个芯片为一组组成一个RAID4级别的闪存阵列,那么整个固态盘内部就有256*16 / 32=128个RAID4闪存阵列;所有的RAID4闪存阵列都是同构的。实际上,组成一个RAID4的芯片个数取决于缓冲区大小和固态盘内部芯片的总数。为了便于说明,本发明中下面的描述均以一个RAID4级别的闪存阵列为例。
[0056]如图1所示,本发明中一个RAID4级别的闪存阵列100由N个连续的闪存芯片
(chipO, chipl......chipN-2, chipN-1)组成。其中 chipO, chipl......chipN-2这N-1 个闪
存芯片用于存放数据,闪存芯片上的每个页均为数据页;chipN-l用于存放校验(parity),闪存芯片上的每个页均作为校验页。
[0057]在闪存阵列中取每个闪存芯片相同偏移位置的页(page)组成一个条带(stripe);将条带作为闪存阵列写操作的最小单位。图1中,闪存阵列100划分为
stripelO0.1,100.2......100.1:(1:为正整数)。其中,stripelO0.1 由 chipO 的第一
个块的第一个页,chipl第一个块的第一个页......chipN-1的第一个块的第一个
页组成;stripelO0.2由chipO的第一个块的第二个页,chipl的第一个块的第二个
页......chipN-1的第一个块的第二个页组成;以此类推,stripelO0.t由chipO的最后一
个块的最后一个页,chipl的最后一个块的最后一个页......chipN-1的最后一个块的最
后一个页组成。
[0058]页和条带的对应关系在闪存芯片的使用过程中一直保持不变。为方便起见,假定固态盘内部所有闪存芯片组成一个RAID4级别的闪存阵列。假定闪存阵列包括N个闪存芯片,每个闪存芯片有M个块,每个块有K个页,则一个条带中的页成员的物理地址构成一个公差为K的等差数列。假定已知页面物理地址为PPN,则可推知其所在的条带号为PPN% (MK);假定已知条带号为S,则组成这个条带的物理页面地址序列为:NS,
NS+K......NS+(N-1) K ;其中 NS,NS+K......NS+(N_2) K 为数据页地址,NS+(N_l) K 为校验页地址。
[0059]同时在每一组RAID4级别的闪存阵列中,取每个闪存芯片相同偏移位置的块(block)组成一个段(segment)。如图2所示,本发明的逻辑存储空间200由segment200.1,
200.2......200.m(m 通常为 4096)组成。其中 segment200.1 由 chipO 的第一个块,chipl
的第一个块......chipN-1的第一个块组成;segment200.2由chipO的第二块,chipl的第
二个块......chipN-1的第二个块组成。以此类推,segment200.m由chipO的第m个块,
chipl的第m个块......chipN-1的第m个块组成。
[0060]本发明中的垃圾回收以段为单位,这是因为闪存芯片以块(block)为垃圾回收单位,而本发明组建的是物理结构的RAID4阵列,每次垃圾回收需要回收整个条带(stripe),而一个条带包括若干连续的页(page),这些页存在于不同的块中,因此一次垃圾回收必须要回收连续的多个块,这连续的多个块就是前文所都定义的段。因此以段为单位是闪存芯片本身的物理特性和本发明的设计特点所共同决定的。这一点不总是带来优点,有些情况下可能会增加垃圾回收的开销,因此本发明采用了冷热分离的方式来降低这些开销。
[0061]本发明将闪存阵列的逻辑空间划分为热区和冷区,所述热区由闪存阵列中从低地址到高地址的若干个连续的段组成,该闪存阵列中其余的段组成冷区;所述热区的空间占
闪存阵列整个逻辑空间的一半。图2中segment200.1,200.2......200.x(其中x=[m /
2],X为正整数)组成冷区,剩下部分作为热区。
[0062]另外,本发明在固态盘内部的非易失性存储器中维持有坏页哈希表。闪存的最小读写单位是页,在某个页中写入数据,若此数据没被更新的话,就是有效数据;若此数据被更新,则新数据被写在另外的页上(因为闪存的读写特性是异地改写,每次只能选择空白的页写新数据,不能直接在旧数据上覆盖),那么原来页上的数据就是无效数据;一个页上的数据是有效数据还是无效数据会在每个页的空余空间(spare space)记录。出错或者发生故障的页就叫坏页。坏页哈希表中的每个条目(哈希记录)与一个坏页对应,即包括坏页的物理地址和该坏页数据恢复后重定向的物理地址。
[0063]坏页哈希表包含创建,查询和更新这三种操作。
[0064]创建:因为该表的作用是记录闪存阵列中的坏页及其重定向的情况,因此该表在创建闪存阵列的时候创建,属于系统初始化过程的一部分。系统初始化时,会扫描整个闪存空间,此时将坏页物理地址记录在坏页哈希表中,对应的重定向物理地址为空。
[0065]查询:当某个条带中的某个页发生故障时,我们需要读出这个条带的其他页来进行恢复,若其他页中存在坏页,则我们需要读出这个坏页对应的重定向页。
[0066]更新:系统运行过程中,当某个页发生故障,则这个页就是坏页;当这个页的数据恢复后,恢复的数据会重定向到一个新页中。坏页地址和重定向页地址组成一条哈希记录,插入坏页哈希表。另外,当坏页所在的块进行垃圾回收时,若这个坏页有重定向数据,因为该页所在的条带不再需要这个页的重定向数据进行坏页恢复,因此将此坏页的重定向物理地址置为空。
[0067]如图3所示为本发明的坏页哈希表示意图,坏页哈希表300由条目300.1,300.2,
300.3......300.n组成,每个条目包含两个数据。例如条目300.3由300.31,300.32两个
数据组成,其中300.31表示出错的页面的物理地址Bad_PPN ;300.32表示坏页面恢复后重定向的物理地址New_PPN。
[0068](2)通过缓冲区接收并存储数据,由于所有数据需要经由缓冲区组成满条带写回闪存阵列,因此缓冲区的大小需要大于等于N-1个页的大小,其中N为组成一个闪存阵列的闪存芯片的个数。
[0069]为了便于垃圾回收,本发明在接收数据的同时还进行了冷热数据分离,具体包括:
[0070](2.1)在缓冲区中建立并维持一个冷数据链表和一个热数据链表;
[0071](2.2)判断缓冲区接收到的数据是否为新数据(new data),若是,则将该数据的热度的初始值记为0(热度是指数据的修改次数);若接收到的数据为修改数据(updatedata),则将该数据的热度加I ;
[0072]因为闪存是异地改写,不能直接在旧数据上覆盖的。因此每次修改数据需要将原来的逻辑地址重定向到新的物理地址。通过累积重定向的次数,计算其修改次数,即热度。这里的数据大小指的是一个闪存页的大小,一般为4KB。
[0073](2.3)判断接收到的数据的热度是否高于预先设定的热度阈值,若是,将该数据加入热数据链表;若否,将该数据加入冷数据链表。
[0074]所述热度阈值可以为缓冲区中所有缓存数据块的热度(修改次数)的平均值,当然也可以为其他任意值,根据实际系统需要设定。由此完成写缓存数据的冷热分离。
[0075](3)判断缓冲区是否已满,若是,则进入步骤⑷;若否,则返回步骤⑵;
[0076](4)从缓冲区中取N-1个数据块,通过N-1个数据块的异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;所述数据块的大小与闪存芯片上一个页的大小相同。所述满条带数据是指该数据与闪存阵列中一个完整条带的大小相同。写操作完成后,返回步骤(2),继续接收数据。
[0077]具体的讲,步骤⑷包括:
[0078](A)判断冷数据链表中的数据块的个数是否大于等于N-1个,若是,则从冷数据链表中按照热度从小到大的顺序选择N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的冷区,转入步骤⑶;若否,进入步骤⑶;
[0079](B)判断热数据链表中的数据块的个数是否大于等于N-1个,若是,则从热数据链表中按照热度从小到大的顺序选取N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的热区,转入步骤⑶;若否,进入步骤(C);
[0080](C)从冷数据链表中选取所有的NI个数据块,从热数据链表中选取N2个数据块,组成N-1个数据块;其中,N1+N2=N-1 ;
[0081]通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据;[0082]若上一次写操作在闪存阵列的冷区,则将此满条带数据写回闪存阵列的冷区;若上一次写操作在闪存阵列的热区,则将此满条带数据写回闪存阵列的热区;
[0083](D)完成本次写操作,返回步骤⑵。
[0084]其中,所述满条带数据写回闪存阵列的过程具体包括如下步骤:
[0085](4.1)在冷区或热区内分别自上而下按顺序以条带为单位为所述满条带数据分配条带空间;每次分配的条带空间都是满条带(full stripe)、空条带(free stripe)。
[0086](4.2)判断分配的条带空间中是否存在x个坏页,X为正整数;若是,则进入步骤
(4.3);若否,则将满条带数据写入该条带空间,转入步骤(4.7);
[0087](4.3)判断所述坏页的信息是否已经记录在坏页哈希表中,若没有记录,则把所述坏页的信息添加到坏页哈希表;若有记录,则不做操作;
[0088](4.4)判断X是否等于N-1,若是,则此条带仅有N-X=I个未损坏的页,无法构成阵列,故跳过这个条带,重新分配下一条带,返回步骤(4.1);若否,则进入步骤(4.5);
[0089](4.5)判断X是否等于N-2,若是,则此条带仅有N_x=2个未损坏的页,从所述满条带数据中选择热度最小的I个数据块,写入该条带空间中第一个未损坏页,并拷贝一份该数据块写入第二个未损坏页,这时两个页构成镜像;转入步骤(4.7);若否,则进入步骤(4.6);
[0090](4.6)此时0 < X < N-2,从所述满条带数据中按照热度从小到大的顺序选择N-1-x个数据块,通过异或运算计算出所述N-1-x个数据块的校验值;将所述N-1-x个数据块写在该条带空间的前N-1-x个未损坏页,所述校验值写在最后一个未损坏页;
[0091](4.7)完成本次写操作;若写回的条带中存在坏页的重定向数据,则更新坏页哈希表中的相应记录,即记录重定向页面物理地址。
[0092]在步骤(2)-(4)进行的同时,本发明还要进行垃圾回收,当固态盘的剩余空间小于预先设定的空间阈值,而且系统负载小于预先设定的负载阈值时,以段为最小单位进行垃圾回收。执行回收时,同时将被回收的段中的有效数据提交至缓冲区。
[0093]其中空间阈值可根据实际需要设定,比如为总可用空间的20%?30%。负载阈值也可以根据实际需求而定,比如系统实际吞吐量低于系统最大吞吐量的30%?40%时,可以认定此时负载较轻,可以进行垃圾回收。
[0094]在步骤(2)-(4)进行的同时,本发明还要进行坏页监测和恢复,即在读或擦除数据时,检测页是否损坏,具体包括:
[0095](5.1)判断当前的操作类型,若为读操作,执行步骤(5.2);若为擦除操作,执行步骤(5.3);
[0096](5.2)判断读操作的任一页是否为坏页,若不是坏页,则读出该页存储的数据;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,则读所述重定向物理地址对应的页,直到读出数据;
[0097]若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,将恢复后的数据提交至缓冲区,在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
[0098]按照上述方法遍历读操作的每一页,直至完成读操作;[0099](5.3)判断擦除操作的段中的任一页是否为坏页,若不是坏页,则不做处理;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,将重定向物理地址置为空,不作处理;
[0100]若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,并将恢复后的数据提交至缓冲区;并在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
[0101]按照上述方法遍历擦除操作的段中的每个页,之后逐块擦除整个段。
[0102]以上所述为本发明的较佳实施例而已,但本发明不应该局限于该实施例和附图所公开的内容。所以凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
【权利要求】
1.一种固态盘实现方法,其特征在于,包括以下步骤: (1)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;在闪存阵列中取每个闪存芯片相同偏移位置的页组成一个条带;其中,N为大于2的正整数; (2)通过缓冲区接收并存储数据,所述缓冲区的大小大于等于闪存芯片中N-1个页的大小; (3)判断缓冲区是否已满,若是,则进入步骤(4);若否,则返回步骤(2); (4)从缓冲区中取N-1个数据块,计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;返回步骤(2)。
2.根据权利要求1所述的固态盘实现方法,其特征在于,步骤(2)中所述缓冲区在接收数据时还进行冷热数据分离,具体包括: (2.1)在缓冲区中建立并维持一个冷数据链表和一个热数据链表; (2.2)判断接收到的数据是否为新数据,若是,则将该数据的热度的初始值记为O ;若否,则将该数据的热度加I ; (2.3)判断接收到的数据的热度是否高于预先设定的热度阈值,若是,将该数据加入热数据链表;若否,将该数据加入冷数据链表。
3.根据权利要求2所述的固态盘实现方法,其特征在于,步骤(4)具体包括如下步骤: (A)判断冷数据链表中的数.据块的个数是否大于等于N-1个,若是,则从冷数据链表中按照热度从小到大的顺序选择N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的冷区,转入步骤⑶;若否,进入步骤⑶; (B)判断热数据链表中的数据块的个数是否大于等于N-1个,若是,则从热数据链表中按照热度从小到大的顺序选取N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的热区,转入步骤⑶;若否,进入步骤(C); (C)从冷数据链表中选取所有的NI个数据块,从热数据链表中选取N2个数据块,组成N-1个数据块;其中,N1+N2=N-1 ; 通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据; 若上一次写操作在闪存阵列的冷区,则将所述满条带数据写回闪存阵列的冷区;若上一次写操作在闪存阵列的热区,则将所述满条带数据写回闪存阵列的热区; (D)完成本次写操作,返回步骤(2)。
4.根据权利要求3所述的固态盘实现方法,其特征在于,步骤(4)中所述满条带数据写回闪存阵列的过程具体包括如下步骤: (4.1)在冷区或热区内分别自上而下按顺序以条带为单位为所述满条带数据分配条带空间; (4.2)判断分配的条带空间中是否存在X个坏页,X为正整数;若是,则进入步骤(4.3);若否,则将满条带数据写入该条带空间,转入步骤(4.7); (4.3)判断所述坏页的信息是否已经记录在坏页哈希表中,若没有记录,则把所述坏页的信息添加到坏页哈希表;若有记录,则不做操作; (4.4)判断X是否等于N-1,若是,则跳过该条带空间,返回步骤(4.1);若否,则进入步骤(4.5); (4.5)判断X是否等于N-2,若是,则从所述满条带数据中选择热度最小的I个数据块,写入该条带空间中第一个未损坏页,并拷贝一份该数据块写入第二个未损坏页,转入步骤(4.7);若否,则进入步骤(4.6); (4.6)从所述满条带数据中按照热度从小到大的顺序选择N-1-x个数据块,通过异或运算计算出所述N-1-x个数据块的校验值;将所述N-1-x个数据块写在该条带空间的前N-1-x个未损坏页,所述校验值写在最后一个未损坏页; (4.7)完成本次写操作。
5.根据权利要求1-4任一所述的固态盘实现方法,其特征在于,步骤(2)-(4)进行的同时还包括: 当固态盘的剩余空间小于预先设定的空间阈值,系统负载小于预先设定的负载阈值时,以段为最小单位进行垃圾回收,并将回收的段中的有效数据提交至缓冲区;所述段由闪存阵列中每个闪存芯片相同偏移位置的块组成。
6.根据权利要求1-5任一所述的固态盘实现方法,其特征在于,步骤(2)-(4)进行的同时还包括: (5.1)判断当前的操作类型,若为读操作,执行步骤(5.2);若为擦除操作,执行步骤(5.3); (5.2)判断读操作的任一页是否`为坏页,若不是坏页,则读出该页存储的数据;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,则读所述重定向物理地址对应的页,直到读出数据; 若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,将恢复后的数据提交至缓冲区,在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址; 按照上述方法遍历读操作的每一页,直至完成读操作; (5.3)判断擦除操作的段中的任一页是否为坏页,若不是坏页,则不做处理;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,将重定向物理地址置为空,不作处理; 若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,并将恢复后的数据提交至缓冲区;并在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址; 按照上述方法遍历擦除操作的段中的每个页,之后逐块擦除整个段。
【文档编号】G06F12/02GK103488583SQ201310408367
【公开日】2014年1月1日 申请日期:2013年9月9日 优先权日:2013年9月9日
【发明者】冯丹, 侯斌兵, 刘文国, 童薇, 曾令仿, 陈俭喜 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1