基于校验复用的固态硬盘FTL方法、系统、设备及介质
未命名
07-28
阅读:58
评论:0

技术领域:
:1.本发明涉及计算机系统结构
技术领域:
:,具体地,涉及一种基于校验复用的固态硬盘ftl方法、系统、设备及介质。
背景技术:
::2.20世纪80年代,东芝公司发明了闪存(flashmemory)。随后,英特尔公司推出了世界上第一款商用闪存芯片,旨在应用于计算机数据存储。在20世纪80年代末,多家闪存厂商推出了基于闪存介质的固态硬盘.进入21世纪后,闪存固态硬盘(flashmemorybasedsolidstatedrives,ssds)进入了发展的快车道,其在性能、存储容量等方面全面超越机械硬盘。闪存固态硬盘正逐步取代机械硬盘,作为外部存储设备已被广泛应用于各类嵌入式设备、个人电脑和数据中心等。3.当前用来生产固态硬盘的nand闪存有四种,分别是单层式存储(slc)、多层式存储(mlc,通常是双层式存储)、三层式存储(tlc,亦称为3-bitmlc)以及四层式存储(qlc)。slc、mlc、tlc、qlc的读写速度依序从快至慢,使用寿命依序从长至短,成本依序从高至低,需要纠错比特数(ecc)则是相反地从低至高。就目前来说,采用slc的nand闪存,写入寿命只有10,000次循环,若采用mlc则仅有3,000次,采用tlc仅有1,000次,而采用qlc甚至仅有300次。目前企业级固态硬盘存储系统基本上都是采用mlc或tlc技术的固态硬盘,而个人消费级用户则一般采用基于tlc的闪存产品。qlc的闪存产品因为他较低的寿命还在研发。4.闪存介质面临的主要可靠性挑战主要来自于其独有的物理特性。不同于机械式磁盘,固态硬盘使用了nand闪存单元作为存储介质。nand闪存会因为外在环境因素或者工作负载变化时而出现错误。具体而言,不同类型nand闪存单元具有不同的电压位,如果存在某些外在因素就会改变nand闪存的电压位大小,最终可能导致错误的产生。5.图5为不同类型nand电压测量位。当闪存单元受到错误源干扰,其表现的电压值将发生改变,从而导致闪存单元所代表的数据内容出错。目前,闪存单元受到出错影响主要包括:保存时间、编程干扰、读干扰和物理干扰等。具体导致的闪存单元出错情况如图6所示。因此,为避免错误源导致的数据错误,提高数据可靠性,固态硬盘采用纠错码实现数据出错之后的纠正恢复。6.当前,固态硬盘纠错码主要2种类型:bch(bose-chaudhuri-hocquenghem)和ldpc(low-densityparity-check)。纠错码的效率决定于其是否能够有效恢复错误数据并降低数据错误率至jedec标准。由于bch纠错能力较低,其主要应用于制程精度较低,闪存单元密度较小的固态硬盘或者嵌入式闪存设备。针对ldpc,其已被广泛应用于制程精度更高、密度更大、可靠性要求更高的固态硬盘,例如tlc,qlc固态硬盘。7.ldpc采用2种方式进行数据纠错,包括硬判决和软判决,其实现过程是:首先,固态硬盘控制器利用ldpc进行解码纠错,若解码成功则返回数据内容.该过程称之为硬判决。若硬判决失败,则进入ldpc软判决过程。软判决通过不同探测电压的读操作获得闪存单元数据的软信息。软信息表示闪存单元存储数据是“0”或“1”的概率。根据软信息数据,ldpc再次进行数据解码纠错,若解码成功则返回数据内容,否则调整读操作探测电压,从而获得更多软信息.因此,ldpc的时间开销与纠错过程的读操作次数成正比。目前,已有大量相关工作提出对ldpc纠错开销进行优化。技术实现要素:8.针对现有技术中的缺陷,本发明提供一种基于校验复用的固态硬盘ftl方法、系统、设备及介质。9.根据本发明提供的一种基于校验复用的固态硬盘ftl方法、系统、设备及介质,所述方案如下:10.第一方面,提供了一种基于校验复用的固态硬盘ftl方法,所述方法包括:数据写入和数据读取;11.其中,数据写入包括:12.步骤a1:计算数据的crc16校验码,进行预去重;若发现相同的crc16值,进行步骤a2;若未发现相同的crc16值,进行步骤a4;13.步骤a2:计算数据的sha1-256校验码,进行去重;若发现相同的sha1-256值,进行步骤a3;若未发现相同的sha1-256值,进行步骤a4;14.步骤a3:直接返回写入成功;15.步骤a4:对数据进行ldpc编码;16.步骤a5:将数据和其他信息一并写入ssd的nand闪存中;17.数据读取包括:18.步骤b1:以闪存读取精度,从ssd的nand闪存中读取数据以及其他信息;19.步骤b2:对数据进行解码,并使用crc16校验码辅助解码;20.步骤b3:若解码成功,返回数据给主机,读取成功;若解码失败,提高闪存读取精度,进行步骤b1;在解码次数超过设定次数后,返回读取失败。21.优选地,所述数据写入中,步骤a1包括:22.步骤a1.1:根据数据即将要写入的页面类型,将数据分成大小相同的数据块,将数据分成n块,得到data[0],data[1],…,data[n-1];[0023]步骤a1.2:分别计算n块数据的crc16值;[0024]步骤a1.3:在指纹存储中寻找是否有相同的crc16值的指纹;如果相同,进行步骤a2;如果不同,生成新指纹插入指纹存储中,进行步骤a4。[0025]优选地,所述步骤a2包括:计算数据的sha1-256校验码,进行去重;如果发现相同的sha1-256值,进行步骤a3;如果未发现相同的sha1-256值,将该指纹中的sha1-256校验码替换成当前写入数据页的sha1-256值,进行步骤a4。[0026]优选地,所述步骤a5包括:将编码后的数据写入到ssdnand闪存相应的物理地址上,并将该页的n个crc16值,1个sha1-256校验码的值,以及该页的逻辑地址在内的相关元数据信息存储到nand闪存相应的oob区域上。[0027]优选地,所述数据读取中,步骤b1包括:[0028]步骤b1.1:根据给定的闪存读取精度读取出ssdnand闪存上相应位置的电压值;[0029]步骤b1.2:将电压值映射为0,1的数据值,得到数据页以及其他信息。[0030]优选地,所述数据读取中,步骤b2包括:[0031]步骤b2.1:将数据分块并计算各块数据的crc16值;[0032]步骤b2.2:对比从ssd中读出的crc16值和计算得到的crc16值,并对数据的llr值进行修正更新;[0033]步骤b2.3:将修正后的数据llr值输入到ldpc解码器中解码。[0034]优选地,所述数据读取中,步骤b3包括:[0035]步骤b3.1:判断解码是否成功;[0036]步骤b3.2:根据解码是否成功进行不同的方案;[0037]如果解码成功,将数据返回,读取成功;[0038]如果解码失败,判断当前解码次数是否超过最大解码次数;若超过最大解码次数,就返回读取失败的nvme指令;若未超过最大解码次数,设定一个更高的nand闪存读取的精度,返回步骤b1,重新读取数据殿电压值,并进行解码。[0039]第二方面,提供了一种基于校验复用的固态硬盘ftl系统,所述系统包括:数据写入模块和数据读取模块;[0040]其中,数据写入模块包括:[0041]模块a1:计算数据的crc16校验码,进行数据预去重;[0042]模块a2:计算数据的sha1-256校验码,进行数据去重;[0043]模块a3:对数据进行ldpc编码;[0044]模块a4:将数据和其他信息一并写入ssd的nand闪存中;[0045]数据读取模块包括:[0046]模块b1:以闪存读取的精度,从ssd的nand闪存中读取数据以及其他信息;[0047]模块b2:使用crc16校验码对数据的llr值进行修正;[0048]模块b3:对数据进行ldpc解码;[0049]模块b4:检测解码是否成功,如果解码成功,返回数据给主机,读取成功;如果解码失败,提高闪存读取精度,进行模块b1;在解码次数超过设定次数后,返回读取失败的nvme指令。[0050]第三方面,提供了一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现所述基于校验复用的固态硬盘ftl方法中的步骤。[0051]第四方面,提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被处理器执行时实现所述基于校验复用的固态硬盘ftl方法中的步骤。[0052]与现有技术相比,本发明具有如下的有益效果:[0053]1、本发明针对使用新型的闪存颗粒的固态硬盘,能够很好的降低数据读写延迟,增大全盘的读写带宽;[0054]2、本发明同时能够适配现有的固态硬盘ftl方法,降低固态硬盘的擦写次数,延长固态硬盘的寿命,有效缓解新型的闪存颗粒的固态硬盘最高擦写次数少,寿命短的问题,具有良好的市场前景和应用价值。[0055]本发明的其他有益效果,将在具体实施方式中通过具体技术特征和技术方案的介绍来阐述,本领域技术人员通过这些技术特征和技术方案的介绍,应能理解所述技术特征和技术方案带来的有益技术效果。附图说明[0056]通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:[0057]图1是本发明实施例中装置总模块示意图;[0058]图2是本发明实施例的数据写入流程的示意图;[0059]图3是本发明实施例中指纹存储的数据结构示意图;[0060]图4是本发明实施例中数据读取流程的示意图;[0061]图5是本发明不同类型nand电压测量位示意图;[0062]图6是闪存单元出错情况示意图。具体实施方式[0063]下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。[0064]本发明实施例提供了一种基于校验复用的固态硬盘ftl方法,参照图1所示,该方法具体内容如下:[0065]数据写入和数据读取;[0066]其中,数据写入包括:[0067]步骤a1:计算数据的crc16校验码,进行预去重;若发现相同的crc16值,进行步骤a2;若未发现相同的crc16值,进行步骤a4;[0068]在数据写入中,该步骤a1包括:[0069]步骤a1.1:根据数据即将要写入的页面类型,将数据分成大小相同的数据块,假设将数据分得的块数为n,得到data[0],data[1],…,data[n-1];[0070]具体地,对于误码率较高的页面,如三层式存储(tlc)ssd中的upperpage,四层式存储(qlc)中ssd的centerupperpage和upperpage,数据分的块数n可以设置的大些;对于误码率较低的页面,如三层式存储(tlc)ssd中的lowerpage,四层式存储(qlc)中ssd的lowerpage和centerlowerpage,数据分的块数n可以设置的小些。[0071]步骤a1.2:分别计算n块数据的crc16值。[0072]对于第一块数据,计算crc16值使用的初始值为0,对于第2到第n块数据,计算crc16值使用的初始值为他们前一块数据的crc16的结果,即hash(data[0])=crc16(0,data[0]),hash(data[i])=crc16(0,data[i-1])(i=1,…,n-1)。[0073]步骤a1.3:在指纹存储中寻找是否有相同的crc16值的指纹;如果相同,进行步骤a2;如果不同,生成新指纹插入指纹存储中,进行步骤a4。[0074]具体地,使用n个crc16值的最后一个,也就是hash(data[n-1])来代表整个数据页的crc16值,来进行预去重工作,具体的,在指纹存储中寻找是否有相同的crc16值的指纹,如果找到相同的crc16值的指纹,记录下该指纹中的内容,(在具体实施方式中会介绍指纹的数据结构和每个指纹的内容),进行步骤a2;如果未找到相同的crc16值的指纹,生成一个新指纹,记录下该数据页的crc16值,插入到指纹存储中,进行步骤a4。[0075]步骤a2:计算数据的sha1-256校验码,进行去重;如果发现相同的sha1-256值,进行步骤a3;如果未发现相同的sha1-256值,将该指纹中的sha1-256校验码替换成当前写入数据页的sha1-256值,进行步骤a4。[0076]具体地,在计算好整个数据页的sha1-256校验码后,和步骤1中找到的指纹中的sha1-256校验码进行对比,如果两个校验码相同,说明在ssd的nand闪存中存有和该数据页内容一样的数据页,进行步骤a3;如果两个校验码不同,说明在ssd的nand闪存中不一定存有和该数据页内容一样的数据页,将该指纹中的sha1-256校验码替换成当前写入数据页的sha1-256值,进行步骤a4。[0077]步骤a3:直接返回写入成功;[0078]步骤a4:对数据进行ldpc编码;[0079]步骤a5:将数据和元数据信息(如当前物理页对应的逻辑页个数,多个逻辑页的地址),数据页的ecc校验码一并写入ssd的nand闪存中;[0080]该步骤a5具体包括:将编码后的数据写入到ssdnand闪存相应的物理地址上,并将该页的n个crc16值,1个sha1-256校验码的值,以及该页的逻辑地址在内的相关元数据信息存储到nand闪存相应的oob区域上。[0081]数据读取包括:[0082]步骤b1:以给定的闪存读取精度,从ssd的nand闪存中读取数据以及其他信息;[0083]在数据读取中,该步骤b1包括:[0084]步骤b1.1:如果该页面在该次读过程中第一次进行读操作,就根据读取页面所处的物理页面的类型,设定一个初始的读取精度,使用该精度从ssd的nand闪存的相应位置上读取出电压值;如果该页面在该次读过程中已经不是第一次进行读操作,就根据给定的精度进行电压值读取;[0085]步骤b1.2:将电压值映射为0,1的数据值,得到数据页和元数据信息(如当前物理页对应的逻辑页个数,多个逻辑页的地址),以及数据页的ecc校验码。[0086]该步骤b1.2包括:[0087]根据llr_table把电压值映射成相应的llr值,再根据llr值的正负,将正llr值的位置为0,将负llr值的位置为1,得到数据页以及oob中的crc16校验码,sha1-256校验码,以及一些元数据信息。[0088]步骤b2:对数据进行解码,并使用crc16校验码辅助解码;[0089]数据读取中,步骤b2包括:[0090]步骤b2.1:将数据分块并计算各块数据的crc16值;[0091]根据数据所存放的页面类型,确定crc16值的个数为n,将数据页分成大小相同的n块,按照如数据写入中步骤1.2的方法进行计算,得到n个crc16值。[0092]步骤b2.2:对比从ssd中读出的crc16值和计算得到的crc16值,并对数据的llr值进行修正更新。[0093]对比从nand闪存的oob区域读出来的n个crc16值和步骤b2.1中得到的n个crc16值。如果第i个crc16的值相同,就把对应的数据块的llr值设置为llr_max或者-llr_max,数据块中对应为1的位设置为-llr_max,对应为0的位设置为llr_max。[0094]步骤b2.3:将修正后的数据llr值输入到ldpc解码器中解码。[0095]步骤b3:若解码成功,返回数据给主机,读取成功;若解码失败,提高闪存读取精度,进行步骤b1;在解码次数超过设定次数后,返回读取失败。[0096]步骤b3包括:[0097]步骤b3.1:判断解码是否成功;将解码得到的数据和ldpc的校验矩阵相乘,来检测解码是否成功。[0098]步骤b3.2:根据解码是否成功进行不同的方案;如果解码成功,将数据返回,读取成功;如果解码失败,判断当前解码次数是否超过最大解码次数;若超过最大解码次数,就返回读取失败的nvme指令;若未超过最大解码次数,设定一个更高的nand闪存读取的精度,返回步骤b1,重新读取数据殿电压值,并进行解码。[0099]本发明还提供一种基于校验复用的固态硬盘ftl系统,所述基于校验复用的固态硬盘ftl系统可以通过执行所述基于校验复用的固态硬盘ftl方法的流程步骤予以实现,即本领域技术人员可以将所述基于校验复用的固态硬盘ftl方法理解为所述基于校验复用的固态硬盘ftl系统的优选实施方式。该系统具体包括:数据写入模块和数据读取模块;[0100]其中,数据写入模块包括:[0101]模块a1:计算数据的crc16校验码,进行数据预去重;[0102]模块a2:计算数据的sha1-256校验码,进行数据去重;[0103]模块a3:对数据进行ldpc编码;[0104]模块a4:将数据和其他信息一并写入ssd的nand闪存中;[0105]数据读取模块包括:[0106]模块b1:以闪存读取的精度,从ssd的nand闪存中读取数据以及其他信息;[0107]模块b2:使用crc16校验码对数据的llr值进行修正;[0108]模块b3:对数据进行ldpc解码;[0109]模块b4:检测解码是否成功,如果解码成功,返回数据给主机,读取成功;如果解码失败,提高闪存读取精度,进行模块b1;在解码次数超过设定次数后,返回读取失败的nvme指令。[0110]接下来,对本发明进行更为具体的说明。[0111]本发明提供的一种基于校验复用的固态硬盘ftl方法,如图1所示,数据写入路径包括三个模块:[0112]预去重模块,计算出数据的crc16的值后,在指纹存储中查找是否有相同的crc16值的页,如果有,说明有可能在闪存中已经存储了相同的副本。[0113]去重模块,进一步计算数据的sha1-256值,和刚从预去重模块中找到的指纹中的sha1-256值进行对比,如果相同,说明在闪存中已经存储了相同的副本,直接返回即可。[0114]ldpc编码器,对数据进行ldpc编码。[0115]如图2所示,为数据写入的流程。[0116]ssd端收到一个写入请求后,通过dma将数据从主机拷贝到ssd内部的dram缓存中,并如数据写入步骤a1.1,步骤a1.2中所述的方法将数据分块计算crc16值,使用最后一个crc16的值,并在指纹存储中查找是否有相同的crc16值。[0117]如图3所示,为指纹存储的具体的数据存储方式,首先在逻辑上将crc16哈希值分为1024个段,对于一个给定的数据页的crc16哈希值f,我们将它映射到段fmod1024上,因为哈希函数的随机性,所以可以保证crc16值在1024个段上是均匀分布的。每个段是由桶组成的链表,每一个桶是固定数量的槽,每个槽位也就是一个指纹,存储的信息有:crc16哈希值(16位),sha1-256哈希值(256位),物理地址(64位),引用数即该物理页对应的逻辑页数量(8位)。当一个物理页对应的逻辑页数量多于255时,都用255替代,即不进一步区分它们在热度上的区别。一个桶中的指纹是按照crc16的值进行排序的,以便在查找时进行快速的二分搜索。桶的数量可由ssd制造商根据片上缓存空间的大小自行决定。[0118]指纹存储在ssd的片上缓存中维护最高引用率的指纹。在ssd启动过程中,在映射表建立后,指纹存储也将通过扫描映射表和闪存中的元数据来重构,以加载crc16哈希值,sha1-256哈希值,物理地址,引用数放入内存。最初没有桶,在指纹存储区中分配。在插入一个槽位时,分配一个空桶并将其连接到对应段的链表上。这个桶不停的插入有相同余数的crc16值,并修改相应的sha1-256哈希值,物理地址和引用数,直到桶被填满,然后进行分配另一个桶,直至没有多余的桶为止。这时,新插入的crc16值将桶中具有最小引用数的指纹(即冷的一个)替换掉,除非它的引用数比该桶中任何其他的槽位中的引用数都小。我们以循环的方式选择插入的桶以确保热/冷指纹在一段内的桶中相对均匀地分布。通过这种方式,我们可以包括引用数高的指纹。尽管我们可能会错过一些,因为如果没有机会识别其指纹不在内存中的副本,但是我们认为这种概率是较低的,不会影响整体的去重效果。[0119]如图2所示,计算出当前页的crc16值对应的段号后,就可以在指纹存储中查找是否存在相同的crc16值的指纹,扫描相应的桶的链表逐个进行查找,同时我们也提供了三种加速查找的办法:[0120](1)范围查找:在一个桶中执行二分搜索之前,我们首先比较该crc16值与该桶来的最小crc16值和最大crc16值,如果不在该范围内,就可以跳过这个桶。[0121](2)基于热度的重组:在桶的链表中可以根据他们的引用中将槽位进行降序排列,这个方法可以使更热的指纹更接近链表头部,进而可能减少扫描桶数。[0122](3)桶级二分搜索:跨桶的指纹可以使用归并排序,按crc16值的升序重新组织。对于每一段我们都维护一个桶链表中各个桶的指针的数组,我们可以在桶级执行二分搜索,递归选择中间的桶来检查要找的crc16值是否在该桶的最小最大的范围中。通过这种方式,我们可以快速找到目标桶并跳过大多数桶。[0123]如果没有找到相同的crc16值的指纹,就将该指纹插入到相应的桶中,准备进行ldpc编码和数据写入。如果找到了具有相同crc16值的指纹,则进一步计算数据页的sha1-256值,再进行比较:如果相同,说明ssd闪存中已经存有内容相同的副本,修改指纹中的引用数量的信息后,更新两个映射表就可以返回写入成功的nvme指令;如果不同,则修改该指纹中的sha1-256值,引用计数值,物理地址,并将该指纹重新插入到相应的桶中,并准备进行ldpc编码和数据写入。[0124]将编码后的数据写入到nand闪存中同时将相应的n个crc16哈希值,1个sha1-256哈希值,以及该页的逻辑地址等元数据信息写入到nand闪存相应的oob区域上。[0125]如图1所示,数据读取路径包括三个模块:[0126]llr值修正模块:根据n对crc16哈希值的对比结果,修正每一个数据位的llr值。[0127]ldpc解码器:将每一个数据位的llr值作为输入,进行ldpc解码。[0128]校验模块:检验解码后的数据是否符合校验方程,如果符合,解码成功,将数据返回,如果不符合,且当前数据的读取精度未超过最高的读取精度,就重新以更高的精度读取电压值,并重新进入llr值修正模块,否则,返回读取失败的nvme指令。[0129]如图4所示,为数据读取的流程:[0130]ssd端收到一个读取请求后,通过要读取的逻辑地址在映射表中找到对应的物理地址,根据读取该物理地址可以分析得知存储该页数据的页面类型,根据页面类型选定一个初始的读取精度,比如对于tlcssd中lowerpage选取低的读取精度,对于centerpage和upperpage选取更高的一些读取精度。从ssd的闪存中读取了相应的物理页的电压值后,也要将该物理页的对应的oob部分的电压值读取出来。[0131]根据llr转换表,将电压值转换为llr值,llr值的数学表示形式是llr(x)=log(p(x=0)/p(x=1)),表示的是该数据位为0或者为1的概率:如果llr(x)》0,该数据位为0,llr值的绝对值越大,表示为0的概率越大;如果llr(x)《0,该数据位为1,llr值的绝对值越大,表示为1的概率越大。llr转换表是将电压值转换为llr值的表格,一般ssd的生产厂商都会备份该转换表。[0132]在得到了数据页n个crc16值后,我们将他们根据上述方式转换为0,1数据值。再将数据页分成n块,按照如写入步骤a1.2所述的方法计算出n个crc16值,再和刚读取出来的n个crc16值进行对比,对于crc16哈希值相同的数据块,将他们数据位的llr值设置为llr_max或者-llr_max,以表示这些位的正确性。[0133]接下来就可以将数据修正过后的llr值送入到ldpc解码器中进行解码,得到解码后的数据。将解码后的数据和校验方程相乘,如果结果为0,说明校验成功,将数据返回主机,并返回读取成功的nvme指令;如果结果不为0,说明校验失败,提高数据的读取精度,以更高的精度重新读取电压值,重新进行llr值的修正,ldpc的解码和校验。直至数据的读取精度超过了预先设定的最高精度,返回读取失败的nvme指令。[0134]使用crc16值,一方面,可以进行预去重。因为crc16哈希值的计算量要远小于sha1-256的计算量,而且据统计写入ssd闪存的大部分数据都是不重复的,只有少部分的数据页是重复的,所以使用crc16进行预去重,避免了对每个写入的数据页都计算sha1-256指纹的问题,从而解决了直接使用sha1-256去重带来的写入的高延迟问题,同时在去重效果上也没有大多损失,降低了ssd的总数据写入量,降低了写入的延迟,增加了ssd的寿命。[0135]使用crc16值,另一方面,可以辅助修正数据的llr值,帮助ldpc解码器定位发生翻转的位的位置范围,增加解码成功概率,增加ldpc码的解码强度,使得ssd可以以较低的精度读取数据后解码成功,大大降低了读延迟。尤其对于tlc,qlcssd中的误码率较高的页,使用crc16哈希值可以有效降低对于该页反复读取时的读延迟。[0136]因为crc16哈希值的存储使得一个数据页要在oob区域中存储相对更多的信息,空间开销增大,但是对于空间更大但是误码率更高的tlc,qlcssd,使用crc16哈希值的上述两方面优势完全大于增大了一些空间开销的劣势。[0137]本发明实施例提供了一种基于校验复用的固态硬盘ftl方法、系统、设备及介质,针对使用新型的闪存颗粒的固态硬盘,能够很好的降低数据读写延迟,增大全盘的读写带宽;本发明同时能够适配现有的固态硬盘ftl方法,降低固态硬盘的擦写次数,延长固态硬盘的寿命,有效缓解新型的闪存颗粒的固态硬盘最高擦写次数少,寿命短的问题,具有良好的市场前景和应用价值。[0138]本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。[0139]以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本技术的实施例和实施例中的特征可以任意相互组合。当前第1页12当前第1页12
技术特征:
1.一种基于校验复用的固态硬盘ftl方法,其特征在于,包括:数据写入和数据读取;其中,数据写入包括:步骤a1:计算数据的crc16校验码,进行预去重;若发现相同的crc16值,进行步骤a2;若未发现相同的crc16值,进行步骤a4;步骤a2:计算数据的sha1-256校验码,进行去重;若发现相同的sha1-256值,进行步骤a3;若未发现相同的sha1-256值,进行步骤a4;步骤a3:直接返回写入成功;步骤a4:对数据进行ldpc编码;步骤a5:将数据和其他信息一并写入ssd的nand闪存中;数据读取包括:步骤b1:根据给定的闪存读取精度,从ssd的nand闪存中读取数据以及其他信息;步骤b2:对数据进行解码,并使用crc16校验码辅助解码;步骤b3:若解码成功,返回数据给主机,读取成功;若解码失败,提高闪存读取精度,进行步骤b1;在解码次数超过设定次数后,返回读取失败。2.根据权利要求1所述的基于校验复用的固态硬盘ftl方法,其特征在于,所述数据写入中,步骤a1包括:步骤a1.1:根据数据即将要写入的页面类型,将数据分成大小相同的数据块,将数据分成n块,得到data[0],data[1],
…
,data[n-1];步骤a1.2:分别计算n块数据的crc16值;步骤a1.3:在指纹存储中寻找是否有相同的crc16值的指纹;如果相同,进行步骤a2;如果不同,生成新指纹插入指纹存储中,进行步骤a4。3.根据权利要求1所述的基于校验复用的固态硬盘ftl方法,其特征在于,所述步骤a2包括:计算数据的sha1-256校验码,进行去重;如果发现相同的sha1-256值,进行步骤a3;如果未发现相同的sha1-256值,将该指纹中的sha1-256校验码替换成当前写入数据页的sha1-256值,进行步骤a4。4.根据权利要求1所述的基于校验复用的固态硬盘ftl方法,其特征在于,所述步骤a5包括:将编码后的数据写入到ssd nand闪存相应的物理地址上,并将该页的n个crc16值,1个sha1-256校验码的值,以及该页的逻辑地址在内的相关元数据信息存储到nand闪存相应的oob区域上。5.根据权利要求1所述的基于校验复用的固态硬盘ftl方法,其特征在于,所述数据读取中,步骤b1包括:步骤b1.1:根据给定的闪存读取精度读取出ssd nand闪存上相应位置的电压值;步骤b1.2:将电压值映射为0,1的数据值,得到数据页以及其他信息。6.根据权利要求1所述的基于校验复用的固态硬盘ftl方法,其特征在于,所述数据读取中,步骤b2包括:步骤b2.1:将数据分块并计算各块数据的crc16值;步骤b2.2:对比从ssd中读出的crc16值和计算得到的crc16值,并对数据的llr值进行修正更新;步骤b2.3:将修正后的数据llr值输入到ldpc解码器中解码。
7.根据权利要求1所述的基于校验复用的固态硬盘ftl方法,其特征在于,所述数据读取中,步骤b3包括:步骤b3.1:判断解码是否成功;步骤b3.2:根据解码是否成功进行不同的方案;如果解码成功,将数据返回,读取成功;如果解码失败,判断当前解码次数是否超过最大解码次数;若超过最大解码次数,就返回读取失败的nvme指令;若未超过最大解码次数,设定一个更高的nand闪存读取的精度,返回步骤b1,重新读取数据殿电压值,并进行解码。8.一种基于校验复用的固态硬盘ftl系统,其特征在于,包括:数据写入模块和数据读取模块;其中,数据写入模块包括:模块a1:计算数据的crc16校验码,进行数据预去重;模块a2:计算数据的sha1-256校验码,进行数据去重;模块a3:对数据进行ldpc编码;模块a4:将数据和其他信息一并写入ssd的nand闪存中;数据读取模块包括:模块b1:根据给定的闪存读取的精度,从ssd的nand闪存中读取数据以及其他信息;模块b2:使用crc16校验码对数据的llr值进行修正;模块b3:对数据进行ldpc解码;模块b4:检测解码是否成功,如果解码成功,返回数据给主机,读取成功;如果解码失败,提高闪存读取精度,进行模块b1;在解码次数超过设定次数后,返回读取失败的nvme指令。9.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的基于校验复用的固态硬盘ftl方法的步骤。10.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的基于校验复用的固态硬盘ftl方法的步骤。
技术总结
本发明提供一种基于校验复用的固态硬盘FTL方法、系统、设备及介质,包括:数据写入:步骤A1:计算数据的CRC16校验码,进行预去重;步骤A2:计算数据的SHA1-256校验码,进行去重;步骤A3:如果发现重复,直接返回写入成功;否则进行步骤A4;步骤A4:对数据进行编码;步骤A5:将数据和其他信息一并写入SSD的NAND闪存中。数据读取:步骤B1:以一定闪存读取精度,从SSD的NAND闪存中读取数据以及其他信息。步骤B2:对数据进行解码,并使用CRC16校验码辅助解码。步骤B3:如果解码成功,返回数据给主机,读取成功;如果解码失败,提高闪存读取的精度,进行步骤B1;在解码次数超过一定次数后,返回读取失败。本发明能够降低数据读写延迟,增大全盘的读写带宽。读写带宽。读写带宽。
技术研发人员:郑圣安 张婉茹 黄林鹏 孙鹏昊 惠一锋
受保护的技术使用者:上海交通大学
技术研发日:2023.04.28
技术公布日:2023/7/27
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种用于抽拉式换电的夹具机构的制作方法 下一篇:一种完井用节流开关的制作方法