CN103488583A - 一种高性能高可靠的固态盘实现方法 - Google Patents
一种高性能高可靠的固态盘实现方法 Download PDFInfo
- Publication number
- CN103488583A CN103488583A CN201310408367.2A CN201310408367A CN103488583A CN 103488583 A CN103488583 A CN 103488583A CN 201310408367 A CN201310408367 A CN 201310408367A CN 103488583 A CN103488583 A CN 103488583A
- Authority
- CN
- China
- Prior art keywords
- data
- page
- physical address
- data block
- bad page
- 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
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供了一种高性能高可靠的固态盘实现方法,包括:(1)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;(2)通过缓冲区接收并存储数据,(3)判断缓冲区是否已满,若是,则进入步骤(4);若否,则返回步骤(2);(4)从缓冲区中取N-1个数据块,计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;返回步骤(2)。本发明通过将固态盘内的闪存芯片构建成RAID4级别的物理阵列来保证数据可靠性,可以处理不同层次的故障,包括页级、块级、甚至是芯片级;并通过满条带写和顺序写来提高写性能,将数据出错带来的空间损失和性能损失降到最低。
Description
技术领域
本发明属于固态盘(Solid State Drive,SSD)数据可靠性技术领域,具体涉及一种高性能高可靠的固态盘实现方法。
背景技术
随着计算机技术和网络通信技术的发展,信息化程度越来越高,人们对数据存储的性能要求也越来越高。固态盘(Solid State Drive,SSD)作为一种新兴的存储设备,以其体积小、质量轻、抗震动、读写性能高等特性而备受青睐。固态盘内部一般存在多个通道(channel),每个通道连接一定数量的闪存芯片(flash chip),每个芯片由五个层次组成:芯片(chip)一晶圆(die)一分组(plane)一块(block)一页(page)。其中页是读、写的最小单位,块是擦除(erase)的最小单位。
和机械磁盘一样,固态盘也存在数据丢失的风险,在大容量固态盘中尤其突出。原始的数据保护方法是在页内部采用ECC校验方法,但随着闪存颗粒越来越小、控制器复杂度越来越高、存储容量越来越大,闪存的出错率也越来越高,当在页、块甚至分组层次发生数据故障时,传统的ECC校验方法显然无能为力。在固态盘内部采用RAID技术,利用一定的数据冗余,将出错数据迅速恢复,成为固态盘可靠性研究方面的一个热点。但是,传统的固态盘实现方法中仍然存在可靠性和随机写性能不佳的问题。
发明内容
本发明的目的在于提供一种高性能高可靠的固态盘实现方法;该高性能高可靠的固态盘实现方法针对传统固态盘可靠性和随机写性能不佳的问题,在固态盘内部构建RAID4级别的物理阵列来保证数据可靠性,并通过满条带写和顺序写来提高写性能,将数据出错带来的空间损失和性能损失降到最低。
本发明所采用的技术方案如下:
一种高性能高可靠的固态盘实现方法,包括以下步骤:
(1)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;在闪存阵列中取每个闪存芯片相同偏移位置的页组成一个条带;其中,N为大于2的正整数;
(2)通过缓冲区接收并存储数据,所述缓冲区的大小大于等于闪存芯片中N-1个页的大小;
(3)判断缓冲区是否已满,若是,则进入步骤(4);若否,则返回步骤(2);
(4)从缓冲区中取N-1个数据块,计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;返回步骤(2)。
进一步的,步骤(2)中所述缓冲区在接收数据时还进行冷热数据分离,具体包括:
(2.1)在缓冲区中建立并维持一个冷数据链表和一个热数据链表;
(2.2)判断接收到的数据是否为新数据,若是,则将该数据的热度的初始值记为0;若否,则将该数据的热度加1;
(2.3)判断接收到的数据的热度是否高于预先设定的热度阈值,若是,将该数据加入热数据链表;若否,将该数据加入冷数据链表。
进一步的,步骤(4)具体包括如下步骤:
(A)判断冷数据链表中的数据块的个数是否大于等于N-1个,若是,则从冷数据链表中按照热度从小到大的顺序选择N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的冷区,转入步骤(D);若否,进入步骤(B);
(B)判断热数据链表中的数据块的个数是否大于等于N-1个,若是,则从热数据链表中按照热度从小到大的顺序选取N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的热区,转入步骤(D);若否,进入步骤(C);
(C)从冷数据链表中选取所有的N1个数据块,从热数据链表中选取N2个数据块,组成N-1个数据块;其中,N1+N2=N-1;
通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据;
若上一次写操作在闪存阵列的冷区,则将所述满条带数据写回闪存阵列的冷区;若上一次写操作在闪存阵列的热区,则将所述满条带数据写回闪存阵列的热区;
(D)完成本次写操作,返回步骤(2)。
进一步的,步骤(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,若是,则从所述满条带数据中选择热度最小的1个数据块,写入该条带空间中第一个未损坏页,并拷贝一份该数据块写入第二个未损坏页,转入步骤(4.7);若否,则进入步骤(4.6);
(4.6)从所述满条带数据中按照热度从小到大的顺序选择N-1-x个数据块,通过异或运算计算出所述N-1-x个数据块的校验值;将所述N-1-x个数据块写在该条带空间的前N-1-x个未损坏页,所述校验值写在最后一个未损坏页;
(4.7)完成本次写操作。
进一步的,步骤(2)-(4)进行的同时还包括:
当固态盘的剩余空间小于预先设定的空间阈值,系统负载小于预先设定的负载阈值时,以段为最小单位进行垃圾回收,并将回收的段中的有效数据提交至缓冲区;所述段由闪存阵列中每个闪存芯片相同偏移位置的块组成。
进一步的,步骤(2)-(4)进行的同时还包括:
(5.1)判断当前的操作类型,若为读操作,执行步骤(5.2);若为擦除操作,执行步骤(5.3);
(5.2)判断读操作的任一页是否为坏页,若不是坏页,则读出该页存储的数据;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,则读所述重定向物理地址对应的页,直到读出数据;
若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,将恢复后的数据提交至缓冲区,在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
按照上述方法遍历读操作的每一页,直至完成读操作;
(5.3)判断擦除操作的段中的任一页是否为坏页,若不是坏页,则不做处理;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,将重定向物理地址置为空,不作处理;
若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,并将恢复后的数据提交至缓冲区;并在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
按照上述方法遍历擦除操作的段中的每个页,之后逐块擦除整个段。
本发明所述的高性能高可靠性的固态盘实现方法,具有如下有益效果:
1、本发明通过将固态盘内的闪存芯片构建成RAID4级别的物理阵列来保证数据可靠性,可以处理不同层次的故障,包括页级、块级、甚至是芯片级。
2、本发明把所有随机写合并成满条带写和顺序写,由于固态盘的顺序写速度远高于随机写速度,因此可减少写次数,提高写速度,进而提高闪存芯片的写性能。
3、传统逻辑结构的RAID4阵列构建,需要比较大的重定向表,存在小写问题,也即每次更新都需要读出旧数据计算校验值并更新校验值;而本发明采用满条带写,实现了延迟更新,省去了读出旧数据的过程,同时把多次计算和更新校验值简化为一次,大大减少了校验块的计算次数和更新次数,减少了闪存芯片的擦写次数,进一步提高了写性能。
4、本发明中损坏一个页就只丢弃这个页(页是闪存芯片读写的最小单位),而不用丢弃整个块,因此能够将空间损失降到最低。
5、在固态盘内部组建RAID阵列,会带来一定的性能损失,比如需要计算校验值。与传统逻辑结构的RAID4阵列相比,本发明大大减少了校验块的计算次数和更新,因此能够将性能损失降到最低。
6、本发明在数据存储以及写操作时采用了冷热数据分离的方式,即将热数据写入热区,冷数据写入冷区,这样有利于在相近时间内将无效的数据集中在同一个段,便于提高垃圾回收效率。
附图说明
图1为本发明中闪存阵列组成示意图;
图2为本发明中段的划分示意图;
图3为本发明的坏页哈希表示意图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步说明。在此需要说明的是,对于这些实施方式的说明用于帮助理解本发明,但并不构成对本发明的限定。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明提供了一种高性能高可靠性的固态盘实现方法,所述固态盘包括若干个闪存芯片、非易失性存储器(Nonvolatile RAM)、缓冲区和控制器。
所述高性能高可靠性的固态盘实现方法包括以下步骤:
(1)将固态盘内部的所有闪存芯片分成若干组,每组由N个连续的闪存芯片组成一个RAID4级别的闪存阵列;在闪存阵列中取每个闪存芯片相同偏移位置的页组成一个条带;其中,N为大于2的正整数;
一个固态盘里面可能有很多块闪存芯片,例如一块型号为SamsungK9F1208U0B的闪存芯片大小为64MB,如果固态盘总容量为256GB,则固态盘内部总共有芯片数量为256GB/64MB=256*16个;这么多的闪存芯片组成一个庞大的RAID4阵列弊端是非常明显的,首先是大大降低了安全性,因为RAID4阵列只能容忍同一时间只有一个盘发生故障,组成阵列的盘越多,两个或两个以上的盘同时发生故障的概率也就越高,阵列安全性也就越低;第二,大大增加了组成了满条带写的难度,对于一个16个芯片组成的RAID4而言,只需要凑成15个闪存页的大小,就可以满条带写回闪存阵列了;对于256个芯片组成的RAID4而言,要凑成255个闪存页的大小才可以作为满条带写回阵列。这无疑需要更大的缓冲区。对于256*16个芯片组成的阵列,缓冲区大小难以满足。
因此本发明将所有的闪存芯片分成若干个RAID4级别的闪存阵列。以上面提到的256*16个芯片的固态盘为例,可以32个芯片为一组组成一个RAID4级别的闪存阵列,那么整个固态盘内部就有256*16/32=128个RAID4闪存阵列;所有的RAID4闪存阵列都是同构的。实际上,组成一个RAID4的芯片个数取决于缓冲区大小和固态盘内部芯片的总数。为了便于说明,本发明中下面的描述均以一个RAID4级别的闪存阵列为例。
如图1所示,本发明中一个RAID4级别的闪存阵列100由N个连续的闪存芯片(chip0,chip1......chipN-2,chipN-1)组成。其中chip0,chip1......chipN-2这N-1个闪存芯片用于存放数据,闪存芯片上的每个页均为数据页;chipN-1用于存放校验(parity),闪存芯片上的每个页均作为校验页。
在闪存阵列中取每个闪存芯片相同偏移位置的页(page)组成一个条带(stripe);将条带作为闪存阵列写操作的最小单位。图1中,闪存阵列100划分为stripe100.1,100.2......100.t(t为正整数)。其中,stripe100.1由chip0的第一个块的第一个页,chip1第一个块的第一个页......chipN-1的第一个块的第一个页组成;stripe100.2由chip0的第一个块的第二个页,chip1的第一个块的第二个页......chipN-1的第一个块的第二个页组成;以此类推,stripe100.t由chip0的最后一个块的最后一个页,chip1的最后一个块的最后一个页......chipN-1的最后一个块的最后一个页组成。
页和条带的对应关系在闪存芯片的使用过程中一直保持不变。为方便起见,假定固态盘内部所有闪存芯片组成一个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-1)K为校验页地址。
同时在每一组RAID4级别的闪存阵列中,取每个闪存芯片相同偏移位置的块(block)组成一个段(segment)。如图2所示,本发明的逻辑存储空间200由segment200.1,200.2......200.m(m通常为4096)组成。其中segment200.1由chip0的第一个块,chip1的第一个块......chipN-1的第一个块组成;segment200.2由chip0的第二块,chip1的第二个块......chipN-1的第二个块组成。以此类推,segment200.m由chip0的第m个块,chip1的第m个块......chipN-1的第m个块组成。
本发明中的垃圾回收以段为单位,这是因为闪存芯片以块(block)为垃圾回收单位,而本发明组建的是物理结构的RAID4阵列,每次垃圾回收需要回收整个条带(stripe),而一个条带包括若干连续的页(page),这些页存在于不同的块中,因此一次垃圾回收必须要回收连续的多个块,这连续的多个块就是前文所都定义的段。因此以段为单位是闪存芯片本身的物理特性和本发明的设计特点所共同决定的。这一点不总是带来优点,有些情况下可能会增加垃圾回收的开销,因此本发明采用了冷热分离的方式来降低这些开销。
本发明将闪存阵列的逻辑空间划分为热区和冷区,所述热区由闪存阵列中从低地址到高地址的若干个连续的段组成,该闪存阵列中其余的段组成冷区;所述热区的空间占闪存阵列整个逻辑空间的一半。图2中segment200.1,200.2......200.x(其中x=[m/2],x为正整数)组成冷区,剩下部分作为热区。
另外,本发明在固态盘内部的非易失性存储器中维持有坏页哈希表。闪存的最小读写单位是页,在某个页中写入数据,若此数据没被更新的话,就是有效数据;若此数据被更新,则新数据被写在另外的页上(因为闪存的读写特性是异地改写,每次只能选择空白的页写新数据,不能直接在旧数据上覆盖),那么原来页上的数据就是无效数据;一个页上的数据是有效数据还是无效数据会在每个页的空余空间(spare space)记录。出错或者发生故障的页就叫坏页。坏页哈希表中的每个条目(哈希记录)与一个坏页对应,即包括坏页的物理地址和该坏页数据恢复后重定向的物理地址。
坏页哈希表包含创建,查询和更新这三种操作。
创建:因为该表的作用是记录闪存阵列中的坏页及其重定向的情况,因此该表在创建闪存阵列的时候创建,属于系统初始化过程的一部分。系统初始化时,会扫描整个闪存空间,此时将坏页物理地址记录在坏页哈希表中,对应的重定向物理地址为空。
查询:当某个条带中的某个页发生故障时,我们需要读出这个条带的其他页来进行恢复,若其他页中存在坏页,则我们需要读出这个坏页对应的重定向页。
更新:系统运行过程中,当某个页发生故障,则这个页就是坏页;当这个页的数据恢复后,恢复的数据会重定向到一个新页中。坏页地址和重定向页地址组成一条哈希记录,插入坏页哈希表。另外,当坏页所在的块进行垃圾回收时,若这个坏页有重定向数据,因为该页所在的条带不再需要这个页的重定向数据进行坏页恢复,因此将此坏页的重定向物理地址置为空。
如图3所示为本发明的坏页哈希表示意图,坏页哈希表300由条目300.1,300.2,300.3......300.n组成,每个条目包含两个数据。例如条目300.3由300.31、300.32两个数据组成,其中300.31表示出错的页面的物理地址Bad_PPN;300.32表示坏页面恢复后重定向的物理地址New_PPN。
(2)通过缓冲区接收并存储数据,由于所有数据需要经由缓冲区组成满条带写回闪存阵列,因此缓冲区的大小需要大于等于N-1个页的大小,其中N为组成一个闪存阵列的闪存芯片的个数。
为了便于垃圾回收,本发明在接收数据的同时还进行了冷热数据分离,具体包括:
(2.1)在缓冲区中建立并维持一个冷数据链表和一个热数据链表;
(2.2)判断缓冲区接收到的数据是否为新数据(new data),若是,则将该数据的热度的初始值记为0(热度是指数据的修改次数);若接收到的数据为修改数据(update data),则将该数据的热度加1;
因为闪存是异地改写,不能直接在旧数据上覆盖的。因此每次修改数据需要将原来的逻辑地址重定向到新的物理地址。通过累积重定向的次数,计算其修改次数,即热度。这里的数据大小指的是一个闪存页的大小,一般为4KB。
(2.3)判断接收到的数据的热度是否高于预先设定的热度阈值,若是,将该数据加入热数据链表;若否,将该数据加入冷数据链表。
所述热度阈值可以为缓冲区中所有缓存数据块的热度(修改次数)的平均值,当然也可以为其他任意值,根据实际系统需要设定。由此完成写缓存数据的冷热分离。
(3)判断缓冲区是否已满,若是,则进入步骤(4);若否,则返回步骤(2);
(4)从缓冲区中取N-1个数据块,通过N-1个数据块的异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据,写回闪存阵列;所述数据块的大小与闪存芯片上一个页的大小相同。所述满条带数据是指该数据与闪存阵列中一个完整条带的大小相同。写操作完成后,返回步骤(2),继续接收数据。
具体的讲,步骤(4)包括:
(A)判断冷数据链表中的数据块的个数是否大于等于N-1个,若是,则从冷数据链表中按照热度从小到大的顺序选择N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的冷区,转入步骤(D);若否,进入步骤(B);
(B)判断热数据链表中的数据块的个数是否大于等于N-1个,若是,则从热数据链表中按照热度从小到大的顺序选取N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的热区,转入步骤(D);若否,进入步骤(C);
(C)从冷数据链表中选取所有的N1个数据块,从热数据链表中选取N2个数据块,组成N-1个数据块;其中,N1+N2=N-1;
通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据;
若上一次写操作在闪存阵列的冷区,则将此满条带数据写回闪存阵列的冷区;若上一次写操作在闪存阵列的热区,则将此满条带数据写回闪存阵列的热区;
(D)完成本次写操作,返回步骤(2)。
其中,所述满条带数据写回闪存阵列的过程具体包括如下步骤:
(4.1)在冷区或热区内分别自上而下按顺序以条带为单位为所述满条带数据分配条带空间;每次分配的条带空间都是满条带(full stripe)、空条带(free stripe)。
(4.2)判断分配的条带空间中是否存在x个坏页,x为正整数;若是,则进入步骤(4.3);若否,则将满条带数据写入该条带空间,转入步骤(4.7);
(4.3)判断所述坏页的信息是否已经记录在坏页哈希表中,若没有记录,则把所述坏页的信息添加到坏页哈希表;若有记录,则不做操作;
(4.4)判断x是否等于N-1,若是,则此条带仅有N-x=1个未损坏的页,无法构成阵列,故跳过这个条带,重新分配下一条带,返回步骤(4.1);若否,则进入步骤(4.5);
(4.5)判断x是否等于N-2,若是,则此条带仅有N-x=2个未损坏的页,从所述满条带数据中选择热度最小的1个数据块,写入该条带空间中第一个未损坏页,并拷贝一份该数据块写入第二个未损坏页,这时两个页构成镜像;转入步骤(4.7);若否,则进入步骤(4.6);
(4.6)此时0<x<N-2,从所述满条带数据中按照热度从小到大的顺序选择N-1-x个数据块,通过异或运算计算出所述N-1-x个数据块的校验值;将所述N-1-x个数据块写在该条带空间的前N-1-x个未损坏页,所述校验值写在最后一个未损坏页;
(4.7)完成本次写操作;若写回的条带中存在坏页的重定向数据,则更新坏页哈希表中的相应记录,即记录重定向页面物理地址。
在步骤(2)-(4)进行的同时,本发明还要进行垃圾回收,当固态盘的剩余空间小于预先设定的空间阈值,而且系统负载小于预先设定的负载阈值时,以段为最小单位进行垃圾回收。执行回收时,同时将被回收的段中的有效数据提交至缓冲区。
其中空间阈值可根据实际需要设定,比如为总可用空间的20%~30%。负载阈值也可以根据实际需求而定,比如系统实际吞吐量低于系统最大吞吐量的30%~40%时,可以认定此时负载较轻,可以进行垃圾回收。
在步骤(2)-(4)进行的同时,本发明还要进行坏页监测和恢复,即在读或擦除数据时,检测页是否损坏,具体包括:
(5.1)判断当前的操作类型,若为读操作,执行步骤(5.2);若为擦除操作,执行步骤(5.3);
(5.2)判断读操作的任一页是否为坏页,若不是坏页,则读出该页存储的数据;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,则读所述重定向物理地址对应的页,直到读出数据;
若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,将恢复后的数据提交至缓冲区,在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
按照上述方法遍历读操作的每一页,直至完成读操作;
(5.3)判断擦除操作的段中的任一页是否为坏页,若不是坏页,则不做处理;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,将重定向物理地址置为空,不作处理;
若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,并将恢复后的数据提交至缓冲区;并在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
按照上述方法遍历擦除操作的段中的每个页,之后逐块擦除整个段。
以上所述为本发明的较佳实施例而已,但本发明不应该局限于该实施例和附图所公开的内容。所以凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
Claims (6)
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)判断接收到的数据是否为新数据,若是,则将该数据的热度的初始值记为0;若否,则将该数据的热度加1;
(2.3)判断接收到的数据的热度是否高于预先设定的热度阈值,若是,将该数据加入热数据链表;若否,将该数据加入冷数据链表。
3.根据权利要求2所述的固态盘实现方法,其特征在于,步骤(4)具体包括如下步骤:
(A)判断冷数据链表中的数据块的个数是否大于等于N-1个,若是,则从冷数据链表中按照热度从小到大的顺序选择N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的冷区,转入步骤(D);若否,进入步骤(B);
(B)判断热数据链表中的数据块的个数是否大于等于N-1个,若是,则从热数据链表中按照热度从小到大的顺序选取N-1个数据块,通过异或运算计算出所述N-1个数据块的校验值;将所述N-1个数据块和所述校验值拼凑成满条带数据写回闪存阵列的热区,转入步骤(D);若否,进入步骤(C);
(C)从冷数据链表中选取所有的N1个数据块,从热数据链表中选取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,若是,则从所述满条带数据中选择热度最小的1个数据块,写入该条带空间中第一个未损坏页,并拷贝一份该数据块写入第二个未损坏页,转入步骤(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)判断擦除操作的段中的任一页是否为坏页,若不是坏页,则不做处理;若是坏页,则在坏页哈希表中查找该页的物理地址,若命中,则查看该物理地址对应的重定向物理地址是否为空,若为空,不作处理;若不为空,将重定向物理地址置为空,不作处理;
若不命中,则由所述坏页的物理地址计算出坏页所在的条带,以及该条带中其它页的物理地址;通过该条带中其它页的数据恢复出坏页的数据,并将恢复后的数据提交至缓冲区;并在坏页哈希表中记录坏页的物理地址和该坏页数据恢复后重定向的物理地址;
按照上述方法遍历擦除操作的段中的每个页,之后逐块擦除整个段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310408367.2A CN103488583B (zh) | 2013-09-09 | 2013-09-09 | 一种高性能高可靠的固态盘实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310408367.2A CN103488583B (zh) | 2013-09-09 | 2013-09-09 | 一种高性能高可靠的固态盘实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103488583A true CN103488583A (zh) | 2014-01-01 |
CN103488583B CN103488583B (zh) | 2016-08-10 |
Family
ID=49828831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310408367.2A Active CN103488583B (zh) | 2013-09-09 | 2013-09-09 | 一种高性能高可靠的固态盘实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103488583B (zh) |
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035886A (zh) * | 2014-06-23 | 2014-09-10 | 华为技术有限公司 | 磁盘重映射方法、装置及电子设备 |
CN104156174A (zh) * | 2014-07-31 | 2014-11-19 | 记忆科技(深圳)有限公司 | 基于条带的固态硬盘raid实现方法及装置 |
CN104461926A (zh) * | 2014-11-27 | 2015-03-25 | 记忆科技(深圳)有限公司 | 一种基于二维raid的固态硬盘数据保护方法 |
CN105045540A (zh) * | 2015-08-28 | 2015-11-11 | 厦门大学 | 一种固态盘阵列的数据布局方法 |
CN105630623A (zh) * | 2015-12-31 | 2016-06-01 | 深圳市金胜电子科技有限公司 | 一种闪存颗粒检测装置 |
CN106383664A (zh) * | 2016-08-31 | 2017-02-08 | 北京小米移动软件有限公司 | 数据存储方法及装置 |
CN106502586A (zh) * | 2016-10-17 | 2017-03-15 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘顺序读性能的方法 |
CN103823766B (zh) * | 2014-03-03 | 2017-03-22 | 山西科泰航天防务技术股份有限公司 | Flash存储器的高效率存储方法 |
CN106569728A (zh) * | 2015-10-09 | 2017-04-19 | 中兴通讯股份有限公司 | 多磁盘阵列raid共享写缓存的处理方法及装置 |
CN106681934A (zh) * | 2014-03-19 | 2017-05-17 | 华为技术有限公司 | 一种固态硬盘垃圾回收的方法、系统和固态硬盘控制器 |
WO2017092015A1 (zh) * | 2015-12-03 | 2017-06-08 | 华为技术有限公司 | 一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法 |
CN107220004A (zh) * | 2017-05-27 | 2017-09-29 | 郑州云海信息技术有限公司 | 一种固态硬盘中写buffer的方法及装置 |
CN107402890A (zh) * | 2017-07-24 | 2017-11-28 | 华中科技大学 | 一种基于固态盘阵列和缓存的数据处理方法及系统 |
CN107807788A (zh) * | 2016-09-09 | 2018-03-16 | 北京忆恒创源科技有限公司 | 多平面闪存的数据组织方法与装置 |
CN107832018A (zh) * | 2017-11-22 | 2018-03-23 | 深圳忆联信息系统有限公司 | 一种raid的实施方法及ssd |
TWI622882B (zh) * | 2017-03-30 | 2018-05-01 | 旺宏電子股份有限公司 | 記憶體系統、及其讀取方法與寫入方法 |
CN108132891A (zh) * | 2017-12-29 | 2018-06-08 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
CN108228103A (zh) * | 2017-12-29 | 2018-06-29 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
CN108958961A (zh) * | 2017-05-22 | 2018-12-07 | 上海宝存信息科技有限公司 | 数据储存装置以及数据错误管理方法 |
CN109213430A (zh) * | 2017-06-30 | 2019-01-15 | 伊姆西Ip控股有限责任公司 | 存储管理方法和系统 |
CN109324921A (zh) * | 2017-07-31 | 2019-02-12 | 大心电子(英属维京群岛)股份有限公司 | 数据备份方法、数据恢复方法以及存储控制器 |
CN110347613A (zh) * | 2019-06-26 | 2019-10-18 | 华中科技大学 | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 |
WO2019205446A1 (zh) * | 2018-04-27 | 2019-10-31 | 江苏华存电子科技有限公司 | 一种纠正闪存写入错误处理方法 |
WO2020007030A1 (zh) * | 2018-07-06 | 2020-01-09 | 华为技术有限公司 | 一种系统控制器和系统垃圾回收方法 |
US10545805B2 (en) | 2017-03-29 | 2020-01-28 | Macronix International Co., Ltd. | Memory system, reading method thereof and writing method thereof |
CN111104056A (zh) * | 2018-10-25 | 2020-05-05 | 华为技术有限公司 | 存储系统中数据恢复方法、系统及装置 |
CN111580752A (zh) * | 2020-04-28 | 2020-08-25 | 中国人民大学 | 一种数据存储方法、设备、计算机程序及存储介质 |
CN111880745A (zh) * | 2020-07-29 | 2020-11-03 | 北京浪潮数据技术有限公司 | 基于固态盘阵列的数据处理方法、装置、设备及存储介质 |
CN112513804A (zh) * | 2018-07-26 | 2021-03-16 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN113297003A (zh) * | 2020-02-24 | 2021-08-24 | 伊姆西Ip控股有限责任公司 | 管理备份数据的方法、电子设备和计算机程序产品 |
CN114281251A (zh) * | 2021-12-10 | 2022-04-05 | 重庆邮电大学 | 面向3d tlc闪存存储器的数据分配与重编程优化方法 |
CN114840448A (zh) * | 2022-05-13 | 2022-08-02 | 厦门大学 | 利用通道间并行加速3d闪存垃圾回收的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101101570A (zh) * | 2007-06-28 | 2008-01-09 | 忆正存储技术(深圳)有限公司 | 基于多通道闪存设备逻辑条带的控制方法 |
US20090287956A1 (en) * | 2008-05-16 | 2009-11-19 | David Flynn | Apparatus, system, and method for detecting and replacing failed data storage |
CN102163175A (zh) * | 2011-04-26 | 2011-08-24 | 西安交通大学 | 一种基于局部性分析的混合地址映射方法 |
CN103049222A (zh) * | 2012-12-28 | 2013-04-17 | 中国船舶重工集团公司第七0九研究所 | 一种raid5的写io优化处理方法 |
-
2013
- 2013-09-09 CN CN201310408367.2A patent/CN103488583B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101101570A (zh) * | 2007-06-28 | 2008-01-09 | 忆正存储技术(深圳)有限公司 | 基于多通道闪存设备逻辑条带的控制方法 |
US20090287956A1 (en) * | 2008-05-16 | 2009-11-19 | David Flynn | Apparatus, system, and method for detecting and replacing failed data storage |
CN102163175A (zh) * | 2011-04-26 | 2011-08-24 | 西安交通大学 | 一种基于局部性分析的混合地址映射方法 |
CN103049222A (zh) * | 2012-12-28 | 2013-04-17 | 中国船舶重工集团公司第七0九研究所 | 一种raid5的写io优化处理方法 |
Cited By (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823766B (zh) * | 2014-03-03 | 2017-03-22 | 山西科泰航天防务技术股份有限公司 | Flash存储器的高效率存储方法 |
CN106681934A (zh) * | 2014-03-19 | 2017-05-17 | 华为技术有限公司 | 一种固态硬盘垃圾回收的方法、系统和固态硬盘控制器 |
CN106681934B (zh) * | 2014-03-19 | 2020-09-11 | 华为技术有限公司 | 一种存储设备垃圾回收的方法及设备 |
CN104035886A (zh) * | 2014-06-23 | 2014-09-10 | 华为技术有限公司 | 磁盘重映射方法、装置及电子设备 |
CN104035886B (zh) * | 2014-06-23 | 2019-01-08 | 华为技术有限公司 | 磁盘重映射方法、装置及电子设备 |
CN104156174A (zh) * | 2014-07-31 | 2014-11-19 | 记忆科技(深圳)有限公司 | 基于条带的固态硬盘raid实现方法及装置 |
CN104461926A (zh) * | 2014-11-27 | 2015-03-25 | 记忆科技(深圳)有限公司 | 一种基于二维raid的固态硬盘数据保护方法 |
CN105045540A (zh) * | 2015-08-28 | 2015-11-11 | 厦门大学 | 一种固态盘阵列的数据布局方法 |
CN105045540B (zh) * | 2015-08-28 | 2017-10-17 | 厦门大学 | 一种固态盘阵列的数据布局方法 |
CN106569728A (zh) * | 2015-10-09 | 2017-04-19 | 中兴通讯股份有限公司 | 多磁盘阵列raid共享写缓存的处理方法及装置 |
CN106569728B (zh) * | 2015-10-09 | 2021-02-23 | 中兴通讯股份有限公司 | 多磁盘阵列raid共享写缓存的处理方法及装置 |
WO2017092015A1 (zh) * | 2015-12-03 | 2017-06-08 | 华为技术有限公司 | 一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法 |
US10761731B2 (en) | 2015-12-03 | 2020-09-01 | Huawei Technologies Co., Ltd. | Array controller, solid state disk, and method for controlling solid state disk to write data |
CN105630623A (zh) * | 2015-12-31 | 2016-06-01 | 深圳市金胜电子科技有限公司 | 一种闪存颗粒检测装置 |
CN106383664B (zh) * | 2016-08-31 | 2019-12-03 | 北京小米移动软件有限公司 | 数据存储方法及装置 |
CN106383664A (zh) * | 2016-08-31 | 2017-02-08 | 北京小米移动软件有限公司 | 数据存储方法及装置 |
CN107807788A (zh) * | 2016-09-09 | 2018-03-16 | 北京忆恒创源科技有限公司 | 多平面闪存的数据组织方法与装置 |
CN107807788B (zh) * | 2016-09-09 | 2021-06-15 | 北京忆恒创源科技有限公司 | 块条带构造方法、构造装置及固态存储设备 |
CN106502586A (zh) * | 2016-10-17 | 2017-03-15 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘顺序读性能的方法 |
US10545805B2 (en) | 2017-03-29 | 2020-01-28 | Macronix International Co., Ltd. | Memory system, reading method thereof and writing method thereof |
TWI622882B (zh) * | 2017-03-30 | 2018-05-01 | 旺宏電子股份有限公司 | 記憶體系統、及其讀取方法與寫入方法 |
CN108958961B (zh) * | 2017-05-22 | 2021-11-30 | 上海宝存信息科技有限公司 | 数据储存装置以及数据错误管理方法 |
CN108958961A (zh) * | 2017-05-22 | 2018-12-07 | 上海宝存信息科技有限公司 | 数据储存装置以及数据错误管理方法 |
CN107220004B (zh) * | 2017-05-27 | 2020-03-24 | 郑州云海信息技术有限公司 | 一种固态硬盘中写buffer的方法及装置 |
CN107220004A (zh) * | 2017-05-27 | 2017-09-29 | 郑州云海信息技术有限公司 | 一种固态硬盘中写buffer的方法及装置 |
CN109213430B (zh) * | 2017-06-30 | 2021-09-10 | 伊姆西Ip控股有限责任公司 | 存储管理方法和系统 |
CN109213430A (zh) * | 2017-06-30 | 2019-01-15 | 伊姆西Ip控股有限责任公司 | 存储管理方法和系统 |
CN107402890A (zh) * | 2017-07-24 | 2017-11-28 | 华中科技大学 | 一种基于固态盘阵列和缓存的数据处理方法及系统 |
CN107402890B (zh) * | 2017-07-24 | 2020-10-02 | 华中科技大学 | 一种基于固态盘阵列和缓存的数据处理方法及系统 |
CN109324921A (zh) * | 2017-07-31 | 2019-02-12 | 大心电子(英属维京群岛)股份有限公司 | 数据备份方法、数据恢复方法以及存储控制器 |
CN107832018A (zh) * | 2017-11-22 | 2018-03-23 | 深圳忆联信息系统有限公司 | 一种raid的实施方法及ssd |
CN108132891A (zh) * | 2017-12-29 | 2018-06-08 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
CN108228103A (zh) * | 2017-12-29 | 2018-06-29 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
WO2019205446A1 (zh) * | 2018-04-27 | 2019-10-31 | 江苏华存电子科技有限公司 | 一种纠正闪存写入错误处理方法 |
WO2020007030A1 (zh) * | 2018-07-06 | 2020-01-09 | 华为技术有限公司 | 一种系统控制器和系统垃圾回收方法 |
US11321229B2 (en) | 2018-07-06 | 2022-05-03 | Huawei Technologies Co., Ltd. | System controller and system garbage collection method |
US11593000B2 (en) | 2018-07-26 | 2023-02-28 | Huawei Technologies Co., Ltd. | Data processing method and apparatus |
CN112513804A (zh) * | 2018-07-26 | 2021-03-16 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN112513804B (zh) * | 2018-07-26 | 2022-08-19 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN111104056A (zh) * | 2018-10-25 | 2020-05-05 | 华为技术有限公司 | 存储系统中数据恢复方法、系统及装置 |
CN111104056B (zh) * | 2018-10-25 | 2021-12-31 | 华为技术有限公司 | 存储系统中数据恢复方法、系统及装置 |
CN110347613A (zh) * | 2019-06-26 | 2019-10-18 | 华中科技大学 | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 |
CN110347613B (zh) * | 2019-06-26 | 2021-06-11 | 华中科技大学 | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 |
CN113297003A (zh) * | 2020-02-24 | 2021-08-24 | 伊姆西Ip控股有限责任公司 | 管理备份数据的方法、电子设备和计算机程序产品 |
CN111580752A (zh) * | 2020-04-28 | 2020-08-25 | 中国人民大学 | 一种数据存储方法、设备、计算机程序及存储介质 |
CN111580752B (zh) * | 2020-04-28 | 2023-09-26 | 中国人民大学 | 一种数据存储方法、设备、计算机程序及存储介质 |
CN111880745A (zh) * | 2020-07-29 | 2020-11-03 | 北京浪潮数据技术有限公司 | 基于固态盘阵列的数据处理方法、装置、设备及存储介质 |
CN114281251A (zh) * | 2021-12-10 | 2022-04-05 | 重庆邮电大学 | 面向3d tlc闪存存储器的数据分配与重编程优化方法 |
CN114281251B (zh) * | 2021-12-10 | 2023-08-11 | 重庆邮电大学 | 面向3d tlc闪存存储器的数据分配与重编程优化方法 |
CN114840448A (zh) * | 2022-05-13 | 2022-08-02 | 厦门大学 | 利用通道间并行加速3d闪存垃圾回收的方法 |
CN114840448B (zh) * | 2022-05-13 | 2024-06-04 | 厦门大学 | 利用通道间并行加速3d闪存垃圾回收的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103488583B (zh) | 2016-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103488583A (zh) | 一种高性能高可靠的固态盘实现方法 | |
CN103902403B (zh) | 经由冗余阵列的非易失性存储器编程故障恢复 | |
KR101459861B1 (ko) | 스트라이프 기반 메모리 작동 | |
CN103049222B (zh) | 一种raid5的写io优化处理方法 | |
US10127166B2 (en) | Data storage controller with multiple pipelines | |
CN105573681B (zh) | 一种ssd盘片内部raid组建方法及系统 | |
CN103718162A (zh) | 用于ssd中灵活的raid的方法和设备 | |
CN103631536B (zh) | 一种利用ssd的无效数据优化raid5/6写性能的方法 | |
CN104156174A (zh) | 基于条带的固态硬盘raid实现方法及装置 | |
CN107221351B (zh) | 一种固态盘系统中纠错码的优化处理方法及其应用 | |
CN103136121A (zh) | 一种固态盘的缓存管理方法 | |
KR20130088173A (ko) | 트랜잭션 로그 복구 | |
CN106227471A (zh) | 固态硬盘和应用于固态硬盘的数据存取方法 | |
CN103455435A (zh) | 数据写入方法及装置 | |
CN109213693B (zh) | 存储管理方法、存储系统和计算机程序产品 | |
CN106445740A (zh) | 固态硬盘中nand闪存数据的控制方法及控制系统 | |
CN105468298A (zh) | 一种基于日志结构合并树的键值存储方法 | |
KR20110093035A (ko) | 플래시 주소 변환 장치 및 그 방법 | |
CN104050057B (zh) | 一种历史感知的数据去重碎片消除方法与系统 | |
CN107273046A (zh) | 一种基于固态盘阵列的数据处理方法及系统 | |
US11941258B2 (en) | Zoned memory device recovery after a key-value store failure | |
CN102096558A (zh) | 一种数据的存储方法和装置 | |
CN105204783A (zh) | 一种基于数据生存期的固态盘垃圾回收方法 | |
CN107885620B (zh) | 一种提高固态盘阵列性能和可靠性的方法及系统 | |
US20150347224A1 (en) | Storage control apparatus and method therefor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |