一种SSD的数据储存方法、装置、计算机设备及存储介质与流程

文档序号:16133660发布日期:2018-12-01 00:38阅读:219来源:国知局

本发明涉及固态硬盘,更具体地说是一种ssd的数据储存方法、装置、计算机设备及存储介质。

背景技术

固态硬盘(ssd)中主机发起的数据先缓存在datacache(dram)中,datacache的管理策略需要保证数据的一致性,即1.如果后续主机又下发了相同逻辑区块地址(lba)的数据到datacache,最终写到闪存(nandflash)的数据必须为最后一次主机下发的数据;2.如果主机下发多次相同lba的数据至datacache后下发读该lba的命令,那么ssd返回给主机的数据也必须是最后一次写入的数据。

现有的缓存技术为用一数组按照主机下发的lba(以及数据)顺序暂存在数组中,如果发生缓存命中,则在原地替换掉旧数据,当缓存满了后直接下刷到闪存。具体的方式是:

ssd内部用一数组缓存主机下发的lba信息和对应的用户数据,

ssd接收主机下发的某个lba_x以及对应的data_x,

ssd遍历缓存数组,如果缓存中没有lba_x则将lba_x值以及data_x信息按序写入到缓存中空闲位置,如果缓存中已经存在lba_x,则将lba_x的旧数据直接覆盖掉,且新数据依然存放数组中原来位置,图1展示了缓存的lba,图2展示了lba2命中了图1所示缓存后的数据更新。

当缓存数组满了,ssd固件将该缓存数组中数据写到nand闪存中,然后腾出缓存空间接受后续的主机数据。

该技术能有效解决数据一致性问题,但是对于数据中心场景下的活跃lba如果也采用这种方法,这些活跃lba会被频繁写到闪存,再频繁被复写,缺点为闪存块(block)中部分物理页被无效掉,导致频繁启动垃圾回收机制,增加写放大且缩短了闪存的寿命。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种ssd的数据储存方法、装置、计算机设备及存储介质。

为实现上述目的,本发明采用以下技术方案:一种ssd的数据储存方法,所述方法包括以下步骤:

获取待写入的逻辑区块地址以及对应的数据信息;

判断ssd是否存在空闲的缓存空间;

若是,则根据逻辑区块地址在缓存空间内的存储情况,对所有待写入逻辑区块地址以及对应的数据信息进行处理;

若否,则对原有的逻辑区块地址以及对应的数据信息进行处理;

其中,所述逻辑区块地址在缓存空间中以链表式排布。

其进一步技术方案为:所述的根据逻辑区块地址在缓存空间内的存储情况,对所有待写入的逻辑区块地址以及对应的数据信息进行处理的步骤,具体包括以下步骤:

遍历缓存空间;

判断缓存空间中是否已存在待写入的逻辑区块地址;

若已存在,则用待写入逻辑区块地址中的数据信息将已存在逻辑区块地址中的数据信息覆盖;

将覆盖后的逻辑区块地址移至所有逻辑区块地址的最前端;

判断所有待写入逻辑区块地址的数据信息是否处理完毕;

若是,则进入结束步骤;

若否,则获取下一待写入逻辑区块地址,并返回遍历缓存空间的步骤。

其进一步技术方案为:所述判断缓存空间中是否已存在待写入的逻辑区块地址的步骤之后,还包括以下步骤:

若未存在,则将待写入逻辑区块地址挂在已存在逻辑区块地址的最前端。

其进一步技术方案为:所述对原有的逻辑区块地址以及对应的数据信息进行处理的步骤,具体包括以下步骤:

将位于链表前端的逻辑区块地址以及对应的数据信息保留在缓存中;

将位于链表后端的逻辑区块地址以及对应的数据信息写入闪存中,以腾出空闲的缓存空间。

一种ssd的数据储存装置,包括获取单元、判断单元、待写入数据处理单元、已写入数据处理单元以及链表排布单元;

所述获取单元,用于获取待写入的逻辑区块地址以及对应的数据信息;

所述判断单元,用于判断ssd是否存在空闲的缓存空间;

所述待写入数据处理单元,用于根据逻辑区块地址在缓存空间内的存储情况,对所有待写入逻辑区块地址以及对应的数据信息进行处理;

所述已写入数据处理单元,用于对原有的逻辑区块地址以及对应的数据信息进行处理;

所述链表排布单元,用于对缓存空间中的逻辑区块地址进行链表式排布。

其进一步技术方案为:所述待写入数据处理单元包括遍历模块、判断模块、覆盖模块、迁移模块以及检查模块;

所述遍历模块,用于遍历缓存空间;

所述判断模块,用于判断缓存空间中是否已存在待写入的逻辑区块地址;

所述覆盖模块,用于待写入逻辑区块地址中的数据信息将已存在逻辑区块地址中的数据信息覆盖;

迁移模块,用于将覆盖后的逻辑区块地址移至所有逻辑区块地址的最前端;

检查模块,用于判断所有待写入逻辑区块地址的数据信息是否处理完毕。

其进一步技术方案为:所述已写入数据处理单元包括保留模块和转存模块;

所述保留模块,用于将位于链表前端的逻辑区块地址以及对应的数据信息保留在缓存中;

所述转存模块,用于将位于链表后端的逻辑区块地址以及对应的数据信息写入闪存中,以腾出空闲的缓存空间。

一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的ssd的数据储存方法。

一种存储介质,所述存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述的ssd的数据储存方法。

本发明与现有技术相比的有益效果是:本发明一种ssd的数据储存方法,通过将逻辑区块地址在缓存空间中以链表式排布,采用待写入逻辑区块地址中的数据信息将已存在逻辑区块地址中的数据信息覆盖,并且将覆盖后的逻辑区块地址移至所有逻辑区块地址的最前端,因此,链表前端的逻辑区块地址最有可能是活跃的逻辑区块地址,被复写的概率也是最大的,所以,当缓存空间已满时,将位于链表前端的逻辑区块地址以及对应的数据信息保留在缓存中;将位于链表后端的逻辑区块地址以及对应的数据信息写入闪存中,已经写入到闪存中的数据是最近最少被写入的,后续被复写的概率也是最低的,进而有效降低了活跃逻辑区块地址被写到闪存的频率,间接的有效减少垃圾回收操作,降低了写放大,提高了ssd的使用寿命。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明技术手段,可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征及优点能够更明显易懂,以下特举较佳实施例,详细说明如下。

附图说明

图1为现有技术中线性缓存的示意图;

图2为现有技术中lba2命中了图1中所示缓存后的示意图;

图3为本发明链表缓存的示意图;

图4为本发明lba5、lba2、lba6未命中的示意图;

图5为本发明lba0、lba7命中的示意图;

图6为本发明lba9未命中的示意图;

图7为本发明刷缓存后的示意图;

图8为本发明一种ssd的数据储存方法具体实施例的流程图;

图9为本发明一种ssd的数据储存方法具体实施例中对所有待写入的逻辑区块地址以及对应的数据信息进行处理的流程图;

图10为本发明一种ssd的数据储存方法具体实施例中对原有的逻辑区块地址以及对应的数据信息进行处理的流程图;

图11为本发明一种ssd的数据储存装置具体实施例的示意框图;

图12为本发明一种ssd的数据储存装置具体实施例中待写入数据处理单元的示意框图;

图13为本发明一种ssd的数据储存装置具体实施例中已写入数据处理单元的示意框图;

图14为本发明一种计算机设备具体实施例的示意性框图。

附图标记

1、获取单元;2、判断单元;3、待写入数据处理单元;31、遍历模块;32、判断模块;33、覆盖模块;34、迁移模块;35、检查模块;4、已写入数据处理单元;41、保留模块;42、转存模块;5、链表排布单元。

具体实施方式

为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。

应当理解,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实际的关系或者顺序。

还应当理解,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

如图8-10所示,本发明提高了一种ssd的数据储存方法,该方法包括以下步骤:

s10、获取待写入的逻辑区块地址以及对应的数据信息;

s20、判断ssd是否存在空闲的缓存空间;

s30、若是,则根据逻辑区块地址在缓存空间内的存储情况,对所有待写入逻辑区块地址以及对应的数据信息进行处理;

s40、若否,则对原有的逻辑区块地址以及对应的数据信息进行处理;

其中,逻辑区块地址在缓存空间中以链表式排布。

ssd(固态硬盘)主机发起的逻辑区块地址(lba)以及对应的数据信息一般是先缓存在datacache(dram)中,其中,主机是指服务器,如果后续主机又下发了相同逻辑区块地址以及对应的数据信息到datacache,最终写到闪存(nandflash)的数据必须为最后一次主机下发的逻辑区块地址以及对应的数据信息;如果主机下发多次相同逻辑区块地址以及对应的数据信息至datacache后,主机下发读该逻辑区块地址的命令,那么ssd返回给主机的也必须是最后一次写入的数据。本实施例中,每个逻辑区块地址对应的数据大小的512b,即是每个逻辑区块地址可容纳512b的对应数据信息。

另外,写入缓存空间的逻辑区块地址是按照链表式排布的,所以下发至缓存空间的逻辑区块地址是按照下发的先后顺序排列的,这有利于更改逻辑区块地址在缓存空间中的位置。

对于步骤s30,具体包括以下步骤:

s301、遍历缓存空间;

s302、判断缓存空间中是否已存在待写入的逻辑区块地址;

s303、若已存在,则用待写入逻辑区块地址中的数据信息将已存在逻辑区块地址中的数据信息覆盖;

s304、将覆盖后的逻辑区块地址移至所有逻辑区块地址的最前端;

s305、判断所有待写入逻辑区块地址的数据信息是否处理完毕;

s306、若是,则进入结束步骤;

s307、若否,则获取下一待写入逻辑区块地址,并返回遍历缓存空间的步骤。

主机在下发逻辑区块地址以及对应的数据信息的时候可以一个一个下发,也可以同时下发多个。在遍历缓存空间中的逻辑区块地址是从链表的后端到前端一个一个搜索的。

进一步的,在步骤s302之后,还包括以下步骤:

s3025、若未存在,则将待写入逻辑区块地址挂在已存在逻辑区块地址的最前端。

对于步骤s40具体包括以下步骤:

s401、将位于链表前端的逻辑区块地址以及对应的数据信息保留在缓存中;

s402、将位于链表后端的逻辑区块地址以及对应的数据信息写入闪存中,以腾出空闲的缓存空间。

由于采用步骤30的具体处理方法,在整个链表中,处于链表头部的逻辑区块地址是较为活跃的逻辑区块地址,即是位于头部的逻辑区块地址中的数据信息被覆盖掉的可能性较高,而在处于链表尾部的逻辑区块地址的活跃度相对较低,因此,当缓存空间已满时,将把处于链表头部的逻辑区块地址以及对应的数据信息仍然保留在缓存中,将处于链表尾部的逻辑区块地址以及对应的数据信息写入闪存(写入闪存也可以叫做刷闪存)中。具体的,保留的逻辑区块地址可根据实际场景灵活设置,优选的,将链表中30%作为保留的逻辑区块地址。

如图3-7所示,具体的处理流程如下:

假设缓存容量为10个lba,主机先发起了6个lba,顺序为lba8、lba4、lba3、lba7、lba0、lba1,ssd固件处理每个lba时会遍历链表中已缓存的lba,如果发生命中(命中可理解为待下发的逻辑地址在缓存中已存在)则进行数据覆盖并且将对应lba迁移至链表头部,否则直接将lba挂在链表头部。这6个lba都没有发生命中情况,最终在链表中位置如图3所示。假设lba0和lba7是主机端的活跃lba。

然后主机接着发起6个lba,顺序为lba5、lba2、lba6、lba0、lba7、lba9,其中,lba5、lba2和lba6没有命中缓存,而且是最新数据,直接将它们挂在链表头部,如图4所示;lba0和lba7命中缓存,则覆盖数据信息且将它们从原来位置迁移到链表头部,如图5所示;lba9没有命中缓存,将它挂在链表头部,如图6所示。

由于缓存容量为10个lba,所以图6中缓存已满,触发了刷缓存机制,本实施例中,保留了链表的30%,即3个lba,那么链表尾部的7个lba和对应数据信息需要写到闪存中,之后缓存状态如图7。可以看到图7中留在缓存中的lba是最近最多写入的数据,即活跃lba,它们被复写的概率也是最大的,而已经写入到闪存中的数据是最近最少被写入的,后续被复写的概率也是最低的,所以触发垃圾回收的几率也低,减低了写方法,延长了ssd的使用寿命。

如图11-13,本发明还提供了一种ssd的数据储存装置,包括获取单元1、判断单元2、待写入数据处理单元3、已写入数据处理单元4以及链表排布单元5;

获取单元1,用于获取待写入的逻辑区块地址以及对应的数据信息;

判断单元2,用于判断ssd是否存在空闲的缓存空间;

待写入数据处理单元3,用于根据逻辑区块地址在缓存空间内的存储情况,对所有待写入逻辑区块地址以及对应的数据信息进行处理;

已写入数据处理单元4,用于对原有的逻辑区块地址以及对应的数据信息进行处理;

链表排布单元5,用于对缓存空间中的逻辑区块地址进行链表式排布。

ssd(固态硬盘)主机发起的逻辑区块地址(lba)以及对应的数据信息一般是先缓存在datacache(dram)中,其中,主机是指服务器,如果后续主机又下发了相同逻辑区块地址以及对应的数据信息到datacache,最终写到闪存(nandflash)的数据必须为最后一次主机下发的逻辑区块地址以及对应的数据信息;如果主机下发多次相同逻辑区块地址以及对应的数据信息至datacache后,主机下发读该逻辑区块地址的命令,那么ssd返回给主机的也必须是最后一次写入的数据。本实施例中,每个逻辑区块地址对应的数据大小的512b,即是每个逻辑区块地址可容纳512b的对应数据信息。

另外,写入缓存空间的逻辑区块地址是按照链表式排布的,所以下发至缓存空间的逻辑区块地址是按照下发的先后顺序排列的,这有利于更改逻辑区块地址在缓存空间中的位置。

在某些实施例中,待写入数据处理单元3包括遍历模块31、判断模块32、覆盖模块33、迁移模块34以及检查模块35;

遍历模块31,用于遍历缓存空间;

判断模块32,用于判断缓存空间中是否已存在待写入的逻辑区块地址;

覆盖模块33,用于待写入逻辑区块地址中的数据信息将已存在逻辑区块地址中的数据信息覆盖;

迁移模块34,用于将覆盖后的逻辑区块地址移至所有逻辑区块地址的最前端;

检查模块35,用于判断所有待写入逻辑区块地址的数据信息是否处理完毕。

主机在下发逻辑区块地址以及对应的数据信息的时候可以一个一个下发,也可以同时下发多个。在遍历缓存空间中的逻辑区块地址是从链表的后端到前端一个一个搜索的。

在某些实施例中,已写入数据处理单元4包括保留模块41和转存模块42;

保留模块41,用于将位于链表前端的逻辑区块地址以及对应的数据信息保留在缓存中;

转存模块42,用于将位于链表后端的逻辑区块地址以及对应的数据信息写入闪存中,以腾出空闲的缓存空间。

由于采用步骤30的具体处理方法,在整个链表中,处于链表头部的逻辑区块地址是较为活跃的逻辑区块地址,即是位于头部的逻辑区块地址中的数据信息被覆盖掉的可能性较高,而在处于链表尾部的逻辑区块地址的活跃度相对较低,因此,当缓存空间已满时,将把处于链表头部的逻辑区块地址以及对应的数据信息仍然保留在缓存中,将处于链表尾部的逻辑区块地址以及对应的数据信息写入闪存(写入闪存也可以叫做刷闪存)中。具体的,保留的逻辑区块地址可根据实际场景灵活设置,优选的,将链表中30%作为保留的逻辑区块地址。

如图14所示,本申请实施例提供的一种计算机设备的示意性框图。该计算机设备700可以是终端或服务器。该计算机设备700包括通过系统总线710连接的处理器720、存储器和网络接口750,其中,存储器可以包括非易失性存储介质730和内存储器740。

该非易失性存储介质730可存储操作系统731和计算机程序732。该计算机程序732被执行时,可使得处理器720执行任意一种ssd的数据储存方法。

该处理器720用于提供计算和控制能力,支撑整个计算机设备700的运行。

该内存储器740为非易失性存储介质730中的计算机程序732的运行提供环境,该计算机程序732被处理器720执行时,可使得处理器720执行任意一种ssd的数据储存方法。

该网络接口750用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图14中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备700的限定,具体的计算机设备700可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。其中,所述处理器720用于运行存储在存储器中的程序代码,以实现以下步骤:

获取待写入的逻辑区块地址以及对应的数据信息;

判断ssd是否存在空闲的缓存空间;

若是,则根据逻辑区块地址在缓存空间内的存储情况,对所有待写入逻辑区块地址以及对应的数据信息进行处理;

若否,则对原有的逻辑区块地址以及对应的数据信息进行处理;

其中,所述逻辑区块地址在缓存空间中以链表式排布。

在某些实施例中,所述的根据逻辑区块地址在缓存空间内的存储情况,对所有待写入的逻辑区块地址以及对应的数据信息进行处理的步骤,具体包括以下步骤:

遍历缓存空间;

判断缓存空间中是否已存在待写入的逻辑区块地址;

若已存在,则用待写入逻辑区块地址中的数据信息将已存在逻辑区块地址中的数据信息覆盖;

将覆盖后的逻辑区块地址移至所有逻辑区块地址的最前端;

判断所有待写入逻辑区块地址的数据信息是否处理完毕;

若是,则进入结束步骤;

若否,则获取下一待写入逻辑区块地址,并返回遍历缓存空间的步骤。

在某些实施例中,所述判断缓存空间中是否已存在待写入的逻辑区块地址的步骤之后,还包括以下步骤:

若未存在,则将待写入逻辑区块地址挂在已存在逻辑区块地址的最前端。

在某些实施例中,所述对原有的逻辑区块地址以及对应的数据信息进行处理的步骤,具体包括以下步骤:

将位于链表前端的逻辑区块地址以及对应的数据信息保留在缓存中;

将位于链表后端的逻辑区块地址以及对应的数据信息写入闪存中,以腾出空闲的缓存空间。

应当理解,在本申请实施例中,处理器720可以是中央处理单元(centralprocessingunit,cpu),该处理器720还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

本领域技术人员可以理解,图14中示出的计算机设备700结构并不构成对计算机设备700的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本领域普通技术人员可以理解的是实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。如本发明实施例中,该计算机程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述一种ssd的数据储存方法的实施例的流程步骤。

该计算机可读存储介质可以是磁碟、光盘、u盘、移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的一种ssd的数据储存方法,可以通过其它的方式实现。例如,以上所描述的一种ssd的数据储存的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本申请实施例装置中的单元可以根据实际需要进行合并、划分和删减。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。

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