垃圾数据回收方法及固态存储设备与流程

文档序号:17288038发布日期:2019-04-03 03:43阅读:294来源:国知局
垃圾数据回收方法及固态存储设备与流程

本申请涉及存储设备,尤其涉及固态存储设备的垃圾回收。



背景技术:

图1展示了存储设备的框图。固态存储设备100同主机相耦合,用于为主机提供存储能力。主机同固态存储设备100之间可通过多种方式相耦合,耦合方式包括但不限于通过例如sata(serialadvancedtechnologyattachment,串行高级技术附件)、scsi(smallcomputersysteminterface,小型计算机系统接口)、sas(serialattachedscsi,串行连接scsi)、ide(integrateddriveelectronics,集成驱动器电子)、usb(universalserialbus,通用串行总线)、pcie(peripheralcomponentinterconnectexpress,pcie,高速外围组件互联)、nvme(nvmexpress,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备100。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备100包括接口110、控制部件120、一个或多个nvm芯片130以及dram(dynamicrandomaccessmemory,动态随机访问存储器)140。

nand闪存、相变存储器、feram(ferroelectricram,铁电存储器)、mram(magneticrandomaccessmemory,磁阻存储器)、rram(resistiverandomaccessmemory,阻变存储器)等是常见的nvm。

接口110可适配于通过例如sata、ide、usb、pcie、nvme、sas、以太网、光纤通道等方式与主机交换数据。

控制部件120用于控制在接口110、nvm芯片130以及dram140之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件120可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件120可以是fpga(field-programmablegatearray,现场可编程门阵列)、asic(applicationspecificintegratedcircuit,应用专用集成电路)或者其组合的形式。控制部件120也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件120的硬件来处理io(input/output)命令。控制部件120还可以耦合到dram140,并可访问dram140的数据。在dram可存储ftl表和/或缓存的io命令的数据。

控制部件120包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到nvm芯片130,并以遵循nvm芯片130的接口协议的方式向nvm芯片130发出命令,以操作nvm芯片130,并接收从nvm芯片130输出的命令执行结果。已知的nvm芯片接口协议包括“toggle”、“onfi”等。

存储器目标(target)是nand闪存封装内的共享芯片使能(ce,chipenable)信号的一个或多个逻辑单元(lun,logicunit)。nand闪存封装内包括一个或多个管芯(die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(plane)。逻辑单元内的多个平面可以并行存取,而nand闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在可从http://www.micron.com/~/media/documents/products/other%20documents/onfi3_0gold.ashx获得的“opennandflashinterfacespecification(revision3.0)”中,提供了关于目标(target)、逻辑单元(lun)、平面(plane)的含义,其为现有技术的一部分。

存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。

在固态存储设备中,利用ftl(flashtranslationlayer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。

存储了从逻辑地址到物理地址的映射信息的表结构被称为ftl表。ftl表是固态存储设备中的重要元数据。通常ftl表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。

ftl表包括多个ftl表条目(或称表项)。在一个实施例中,每个ftl表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一个例子中,每个ftl表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一个实施例中,每个ftl表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个实施例中,ftl表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。

固态存储设备中包括多个nvm芯片。每个nvm芯片包括一个或多个管芯(die)或逻辑单元(lun,logicunit)。多个管芯或逻辑单元可以并行响应读写操作。在同一管芯或逻辑单元上的多个读、写或擦除操作顺序执行。

图2示出了大块的示意图。大块包括来自多个逻辑单元(称为逻辑单元组)的每个的物理块。优选的,每个逻辑单元为大块提供一个物理块。作为举例,在每16个逻辑单元(lun)上构造大块。每个大块包括16个物理块,来自16个逻辑单元(lun)的每一个。在图2的例子中,大块0包括来自16个逻辑单元(lun)的每个的物理块0,大块1包括来自每个逻辑单元(lun)的物理块1。也可以有多种其他方式来构造大块。

作为一种可选的方式,在大块中构造页条带,每个逻辑单元(lun)内相同物理地址的物理页构成了“页条带”。图2中,物理页p0-0、物理页p0-1……与物理页p0-x构成了页条带0,其中物理页p0-0、物理页p0-1……物理页p0-14用于存储用户数据,而物理页p0-15用于存储根据条带内的所有用户数据计算得到的校验数据。类似地,图2中,物理页p2-0、物理页p2-1……与物理页p2-x构成了页条带2。可选地,用于存储校验数据的物理页可以位于页条带中的任意位置。

当逻辑页被重复写入数据,ftl表条目中记录逻辑页地址与最新的物理页地址的对应关系,而曾经被写入数据但不再被引用(例如,ftl表中没有记录)的物理页地址中记录的数据成为“垃圾”(数据)。将已经被写入数据,且被引用(例如,在ftl表中有记录)的数据称为有效数据,而将“垃圾”称为脏数据。将含有脏数据的物理块称为“脏物理块”,将未被写入数据的物理块称为“空闲物理块”。

固态存储设备执行垃圾回收(gc)过程以回收无效数据。图3展示了垃圾回收过程的示意图。物理块0与物理块1被写入了数据。物理块0的物理页310、312、314和316等由网格框所指示的物理页在ftl表中没有记录,其上的数据是脏数据。物理块0的物理页330、332、334与336等由空白方框指示的物理页在ftl表中有记录,其上的数据是有效数据。物理块1的物理页320、322、324与326等由网格框所指示的物理页上的数据是脏数据。物理块1的物理页344、342、346与348等由空白框所指示的物理页上的数据是有效数据。图5中,用网格指示的物理页所容纳的数据是脏数据,而用空白方框指示的物理页所容纳的数据是有效数据。

为进行垃圾回收,扫描脏物理块(例如,物理块0与物理块1),将其中的有效数据读出并写入空闲物理块2,以及在ftl表中记录有效数据的物理页地址的变化。在所有的有效数据都搬移到物理块2后,擦除被扫描的物理块0与物理块1,从而使物理块0与物理块1变为空闲大块。

固态存储设备还实施磨损均衡过程,以使固态存储设备的多个nvm芯片的多个物理块经历大体上相同的擦除次数。

图4展示了垃圾回收方法的示意图。

脏物理块集合记录了固态存储设备的部分或所有nvm芯片的脏物理块。空闲物理块集合记录了固态存储设备的部分或所有nvm芯片的空闲物理块。

为实施垃圾回收,“垃圾回收”模块(例如,实现于控制部件120或其中的cpu或控制器)从脏物理块集合中获取脏物理块之一,从空闲物理块集合中获取空闲物理块之一。扫描脏物理块,将其中的有效数据写入空闲物理块。将获取的脏物理块擦除,并在空闲物理块集合中记录擦除后的物理块。

脏物理块集合和空闲物理块集合可以是链表、线性表或其他用于表示集合的数据结构。在集合中记录物理块的地址,以访问物理块。

可选地,以大块为单位实施垃圾回收。



技术实现要素:

由于实施了垃圾回收与磨损均衡过程,数据被反复写入nvm芯片,增加了数据写入量,降低了固态存储设备的寿命。以及向nvm写入数据的过程占用了固态存储设备的读写带宽,并会影响用户体验到的性能。

本申请的目的在于提供垃圾数据回收方法及固态存储设备,有利于垃圾回收和磨损均衡。

为达到上述目的,根据本申请的第一方面,提供了根据本申请第一方面的第一垃圾数据回收方法,其中,包括:获取用户写入的数据和/或从脏大块回收的数据;生成写入请求,指示将数据写入空闲大块;根据所述写入请求,将数据写入空闲大块。

根据本申请的第一方面的第一垃圾数据回收方法,提供了根据本申请第一方面的第二垃圾数据回收方法,其中,还包括:擦除所述脏大块;释放所述脏大块,并将所述脏大块记录在空闲大块集合中。

根据本申请的第一方面的第一或第二垃圾数据回收方法,提供了根据本申请第一方面的第三垃圾数据回收方法,其中,从所述空闲大块集合获取所述空闲大块。

根据本申请的第一方面的第一至第三垃圾数据回收方法,提供了根据本申请第一方面的第四垃圾数据回收方法,其中,所述空闲大块是所述空闲大块集合中擦除次数最低的空闲大块。

根据本申请的第一方面的第一至第三垃圾数据回收方法,提供了根据本申请第一方面的第五垃圾数据回收方法,其中,所述空闲大块是所述空闲大块集合中最早被添加到所述空闲块集合的空闲大块。

根据本申请的第一方面的第一至第五垃圾数据回收方法,提供了根据本申请第一方面的第六垃圾数据回收方法,其中,所述用户写入的数据来自至少一个流,每个流包括访问同一个命名空间的用户的写入数据。

根据本申请的第一方面的第一至第五垃圾数据回收方法,提供了根据本申请第一方面的第七垃圾数据回收方法,其中,所述用户写入的数据来自多个流,每个流包括具有相同的流标签的用户的写入数据。

根据本申请的第一方面的第一至第五垃圾数据回收方法,提供了根据本申请第一方面的第八垃圾数据回收方法,其中,所述用户写入的数据来自多个流,每个流包括来自相同的应用和/或虚拟机的用户的写入数据。

根据本申请的第一方面的第一至第八垃圾数据回收方法,提供了根据本申请第一方面的第九垃圾数据回收方法,其中,所述从脏大块回收的数据构成垃圾回收数据流。

根据本申请的第一方面的第一至第九垃圾数据回收方法,提供了根据本申请第一方面的第十垃圾数据回收方法,其中,从脏大块集合获取所述脏大块。

根据本申请的第一方面的第十垃圾数据回收方法,提供了根据本申请第一方面的第十一垃圾数据回收方法,其中,选择多种策略之一用来从所述脏大块集合中获取脏大块。

根据本申请的第一方面的第十一垃圾数据回收方法,提供了根据本申请第一方面的第十二垃圾数据回收方法,其中,所述多种策略的第一策略是从所述脏大块集合选择具有最小擦除次数的脏大块。

根据本申请的第一方面的第十二垃圾数据回收方法,提供了根据本申请第一方面的第十三垃圾数据回收方法,其中,所述脏大块包括多个脏物理块,所述擦除次数为组成所述脏大块的所有脏物理块的平均擦除次数或总擦除次数。

根据本申请的第一方面的第十二或十三垃圾数据回收方法,提供了根据本申请第一方面的第十四垃圾数据回收方法,其中,所述多种策略的第二策略是从所述脏大块集合中选择具有最大年龄的脏大块。

根据本申请的第一方面的第十四垃圾数据回收方法,提供了根据本申请第一方面的第十五垃圾数据回收方法,其中,所述年龄是所述脏大块被写入数据的开始时间或结束时间与当前时间的间隔,或者是所述脏大块上记录的每份数据被写入的时间与当前时间的间隔的平均值。

根据本申请的第一方面的第十二至十五垃圾数据回收方法,提供了根据本申请第一方面的第十六垃圾数据回收方法,其中,所述多种策略的第三策略是从所述脏大块集合中选择具有最高优先级的脏大块。

根据本申请的第一方面的第十六垃圾数据回收方法,提供了根据本申请第一方面的第十七垃圾数据回收方法,其中,所述优先级是所述脏大块的有效数据量和所述脏大块的擦除次数的函数,或者所述优先级是所述脏大块的有效数据量和所述脏大块的擦除次数与平均擦除次数的差的函数。

根据本申请的第一方面的第十六或十七垃圾数据回收方法,提供了根据本申请第一方面的第十八垃圾数据回收方法,其中,轮流选择所述第一选择策略、所述第二选择策略与所述第三选择策以从所述脏大块集合中选出脏大块。

根据本申请的第一方面的第十六至十八垃圾数据回收方法,提供了根据本申请第一方面的第十九垃圾数据回收方法,其中,按照加权轮转的方式从第一选择策略、第二选择策略与第三选择策略中选择一种选择策略以从所述脏大块集合中选出脏大块。

根据本申请的第一方面的第十六垃圾数据回收方法,提供了根据本申请第一方面的第二十垃圾数据回收方法,其中,根据指定条件,选择所述第一策略、所述第二策略与所述第三策略之一从所述脏大块集合中选出脏大块。

根据本申请的第一方面的第一至第二十垃圾数据回收方法,提供了根据本申请第一方面的第二十一垃圾数据回收方法,其中,将用户写入的数据写入第一空闲大块,将从脏大块回收的数据写入第二空闲大块。

根据本申请的第一方面的第二十一垃圾数据回收方法,提供了根据本申请第一方面的第二十二垃圾数据回收方法,其中,响应于所述第一空闲大块被写满数据,则从所述空闲大块集合获取新的第一空闲大块。

根据本申请的第一方面的第二十一至二十二垃圾数据回收方法,提供了根据本申请第一方面的第二十三垃圾数据回收方法,其中,响应于发起垃圾回收操作,从所述空闲大块集合获取第二空闲大块。

根据本申请的第一方面的第二十一至二十三垃圾数据回收方法,提供了根据本申请第一方面的第二十四垃圾数据回收方法,其中,响应于所述空闲大块集合中的空闲大块的数量低于第一阈值,发起垃圾回收操作。

根据本申请的第一方面的第二十一至二十四垃圾数据回收方法,提供了根据本申请第一方面的第二十五垃圾数据回收方法,其中,从所述空闲大块集合中获取擦除次数最低的空闲大块作为第一空闲大块;和/或从所述空闲大块集合中获取擦除次数最大或擦除次数大于第二阈值的空闲大块作为第二空闲大块。

根据本申请的第一方面的第二十五垃圾数据回收方法,提供了根据本申请第一方面的第二十六垃圾数据回收方法,其中,若所述空闲大块集合中不存在擦除次数大于所述第二阈值的空闲大块,则选择擦除次数最大的空闲大块作为所述第二空闲大块,或选择其擦除次数与所述空闲大块集合的平均擦除次数的差小于第三阈值的空闲大块作为所述第二空闲大块。

根据本申请的第一方面的第二十一至二十六垃圾数据回收方法,提供了根据本申请第一方面的第二十七垃圾数据回收方法,其中,响应于所述第二空闲大块的擦除次数大于第三阈值,从所述脏大块集合中选取具有最小擦除次数和/或具有最大年龄的脏大块作为所述脏大块。

根据本申请的第一方面的第二十一至二十七垃圾数据回收方法,提供了根据本申请第一方面的第二十八垃圾数据回收方法,其中,响应于所述第二空闲大块的擦除次数大于第三阈值,若所述从脏大块回收的数据是冷数据,则将所述从脏大块回收的数据写入第二空闲大块。

根据本申请的第一方面的第二十八垃圾数据回收方法,提供了根据本申请第一方面的第二十九垃圾数据回收方法,其中,响应于所述第二空闲大块的擦除次数大于第三阈值,若所述从脏大块回收的数据不是冷数据,则将所述从脏大块回收的数据写入所述第一空闲大块。

根据本申请的第一方面的第十八至二十六垃圾数据回收方法,提供了根据本申请第一方面的第三十垃圾数据回收方法,其中,响应于所述脏大块集合中具有最大年龄的脏大块的年龄超过第四阈值,则优先使用所述第二策略从所述脏大块集合中选出脏大块。

根据本申请的第一方面的第十八至第二十六以及第三十垃圾数据回收方法,提供了根据本申请第三十一方面的第二垃圾数据回收方法,其中,周期性地或响应于用户的指示,优先使用所述第一策略或所述第二策略从所述脏大块集合中选出脏大块。

根据本申请的第一方面的第二十一至三十一垃圾数据回收方法,提供了根据本申请第一方面的第三十二垃圾数据回收方法,其中,采用不同的方式将用户写入的数据和从脏大块回收的数据写入所述第一空闲大块和所述第二空闲大块。

根据本申请的第一方面的第三十二垃圾数据回收方法,提供了根据本申请第一方面的第三十三垃圾数据回收方法,其中,若所述第二空闲大块的擦除次数小于第五阈值或所述第二空闲大块的擦除次数小于所述空闲大块集合的平均擦除次数与预定次数之间的差,则将从脏大块回收的数据写入所述第二空闲大块。

根据本申请的第一方面的第三十二或三十三垃圾数据回收方法,提供了根据本申请第一方面的第三十四垃圾数据回收方法,其中,若所述第二空闲大块的擦除次数大于第六阈值或所述第二空闲大块的擦除次数大于所述空闲大块集合的平均擦除次数与预定次数之间的差,则判断从脏大块回收的数据是否为冷数据;若是,则将从脏大块回收的数据写入所述第二空闲大块;否则,将从脏大块回收的数据写入第一空闲大块。

根据本申请的第一方面的第三十二垃圾数据回收方法,提供了根据本申请第一方面的第三十五垃圾数据回收方法,其中,判断从脏大块回收的数据是否为冷数据;若是,则判断所述第二空闲大块的擦除次数是否大于第五阈值或所述第二空闲大块的擦除次数是否大于所述空闲大块集合的平均擦除次数与预定次数之间的差;若是,则将从脏大块回收的数据写入所述第二空闲大块;若所述垃圾回收接口的写入数据不是冷数据,则将从脏大块回收的数据写入所述第一空闲大块。

根据本申请的第一方面的第三十四或三十五垃圾数据回收方法,提供了根据本申请第一方面的第三十六垃圾数据回收方法,其中,将年龄大于第七阈值的数据识别为冷数据。

根据本申请的第一方面的第三十四或三十五垃圾数据回收方法,提供了根据本申请第一方面的第三十七垃圾数据回收方法,其中,将从脏大块回收的数据均识别为冷数据。

根据本申请的第一方面的第三十四或三十五垃圾数据回收方法,提供了根据本申请第一方面的第三十八垃圾数据回收方法,其中,依据同所述从脏大块回收的数据相关联的存储标识识别该数据是否为冷数据。

根据本申请的第一方面的第一至第三十八垃圾数据回收方法,提供了根据本申请第一方面的第三十九垃圾数据回收方法,其中,控制获取用户写入的数据和获取从脏大块回收的数据的带宽。

根据本申请的第一方面的第三十九垃圾数据回收方法,提供了根据本申请第一方面的第四十垃圾数据回收方法,其中,按照指定比例为获取用户写入的数据和获取从脏大块回收的数据分配带宽。

根据本申请的第一方面的第三十九垃圾数据回收方法,提供了根据本申请第一方面的第四十一垃圾数据回收方法,其中,若不存在从脏大块回收的数据,为获取用户写入的数据分配全部带宽;若存在从脏大块回收的数据,为获取从脏大块回收的数据分配预定范围的带宽。

根据本申请的第一方面的第三十九垃圾数据回收方法,提供了根据本申请第一方面的第四十二垃圾数据回收方法,其中,获取的用户写入的数据的量和获取的从脏大块回收的数据的量成指定比例。

根据本申请的第一方面的第三十九至第四十二垃圾数据回收方法,提供了根据本申请第一方面的第四十三垃圾数据回收方法,其中,若所述空闲大块集合中空闲大块的数量小于第八阈值,则提高为获取从脏大块回收的数据所分配的带宽。

根据本申请的第一方面的第三十九至第四十三垃圾数据回收方法,提供了根据本申请第一方面的第四十四垃圾数据回收方法,其中,提高为获取具有优先级的用户写入的数据分配的带宽,同时保持为获取从脏大块回收的数据分配的带宽。

根据本申请的第一方面的第一至四十四垃圾数据回收方法,提供了根据本申请第一方面的第四十五垃圾数据回收方法,其中,控制将用户写入的数据写入空闲大块和将从脏大块回收的数据写入空闲大块的带宽。

根据本申请的第一方面的第四十五垃圾数据回收方法,提供了根据本申请第一方面的第四十六垃圾数据回收方法,其中,按照指定比例为将用户写入的数据写入空闲大块和将从脏大块回收的数据写入空闲大块分配带宽。

根据本申请的第一方面的第四十五垃圾数据回收方法,提供了根据本申请第一方面的第四十七垃圾数据回收方法,其中,若不存在从脏大块回收的数据,为将用户写入的数据写入空闲大块分配全部带宽;若存在从脏大块回收的数据,为将从脏大块回收的数据写入空闲大块分配预定范围的带宽。

根据本申请的第一方面的第四十五垃圾数据回收方法,提供了根据本申请第一方面的第四十八垃圾数据回收方法,其中,写入空闲大块的用户写入数据的数据量和写入空闲大块的从脏大块回收的数据量成指定比例。

根据本申请的第一方面的第四十五至四十八垃圾数据回收方法,提供了根据本申请第一方面的第四十九垃圾数据回收方法,其中,若所述空闲大块集合中空闲大块的数量小于第九阈值,则提高为将从脏大块回收的数据写入空闲大块分配的带宽。

根据本申请的第一方面的第四十五至四十九垃圾数据回收方法,提供了根据本申请第一方面的第五十垃圾数据回收方法,其中,提高为将具有优先级的用户写入的数据写入空闲大块分配的带宽,同时保持将从脏大块回收的数据写入空闲大块分配的带宽。

根据本申请的第二方面,提供了根据本申请第二方面的第一固态存储设备,其中,包括控制部件与非易失性存储器芯片,所述控制部件用于执行上述的垃圾数据回收方法。

根据本申请的第三方面,提供了根据本申请第三方面的第一存储了程序的存储介质,其中,响应于所述程序被载入处理器运行,所述程序使所述处理器执行根据权利要求1-50所述的垃圾数据回收方法。

本申请实现的有益效果包括但不限于下列内容:

(1)本申请实施例降低了垃圾回收过程引入的写放大;

(2)本申请实施例降低了垃圾回收过程对用户io性能的影响;

(3)本申请实施例根据垃圾回收操作写入的数据的擦除次数及数据的性质确定垃圾回收的数据是否被存入用于存储垃圾回收的空闲大块,便于垃圾回收与磨损均衡。

(4)本申请实施例采用带宽控制器控制获取用户写入的数据和获取垃圾回收的数据的带宽,和/或控制将用户写入的数据写入空闲大块和将垃圾回收的数据写入空闲大块的带宽,有利于垃圾回收与磨损均衡。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域技术人员来讲,还可以根据这些附图获得其他的附图。

图1为存储设备的框图。

图2为大块的示意图。

图3为现有技术的垃圾回收过程的示意图。

图4为现有技术的垃圾回收方法的示意图。

图5是根据本申请实施例一的垃圾数据回收方法的示意图。

图6是根据本申请实施例二的垃圾数据回收方法的示意图。

图7是根据本申请实施例三的垃圾数据回收方法的示意图。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

实施例一

图5是根据本申请实施例一的垃圾数据回收方法的示意图。

本实施例中,空闲大块510是将要或者正在被写入数据的大块。被写入空闲大块510的数据,是用户io请求所要写入的数据或者垃圾回收操作中从脏大块回收的数据(530)。从脏大块回收的数据是从脏大块获取的要回收的数据。

介质写入控制单元560将用户写入的数据或者从脏大块回收的数据写入空闲大块,例如,通过向介质接口控制器580发送写请求,以将数据写入诸如nand闪存的nvm芯片。

完成了有效数据回收的脏大块被擦除,并作为空闲大块被释放(515)。经释放的空闲大块被记录在空闲大块集合520中。

从空闲大块集合520中获取空闲大块(510),用于承载用户或垃圾回收操作中要写入的数据。作为举例,空闲大块集合520中的空闲大块按擦除次数排序,从空闲大块集合520中获取空闲大块510时,选择擦除次数最低的空闲大块。作为另一个例子,按照空闲大块集合520中的空闲大块按添加到空闲大块集合520的先后排序,从空闲大块集合520中获取空闲大块510时,选择最早被添加到空闲大块集合520的空闲大块。

可选地,用户写入的数据来自至少一个流,例如,访问每个命名空间的用户写请求的数据构成一个流;或者依据用户写请求的流标签,具有相同流标签的用户写请求的数据构成一个流;或者,依据发出用户写请求的应用或虚拟机,来自相同应用和/或虚拟机的用户写请求的数据构成一个流。图5中,附图标记534指示属于流s1的用户io要写入的数据。可选地,附图标记532指示属于流s2的用户io要写入的数据。

将垃圾回收操作中要写入的数据也视为流(sg),图5中用附图标记536指示。

脏大块集合中有多个脏大块。根据本申请的实施例中,以多种策略选择垃圾回收过程要回收的脏大块,例如,策略542指示选择具有最小擦除次数的脏大块,策略544指示选择具有最大年龄的脏大块,而策略546指示选择具有最高优先级的脏大块。

可选地,对于脏大块,其擦除次数是组成脏大块的所有脏物理块的平均擦除次数或总擦除次数。依然可选地,脏大块的年龄指其被写入数据的开始时间或结束时间与当前时间的间隔,或者指其上记录的每份数据被写入的时间与当前时间的间隔的平均值。依然可选地,拥有擦除次数低且有效数据量低(或有效数据量占比低)的脏大块具有高的优先级。例如,优先级是脏大块的有效数据量和脏大块的擦除次数的函数。根据脏大块的擦除次数(或擦除次数与平均擦除次数的差)和有效数据量,得到优先级p。可选地,脏大块的优先级(p)是脏大块的擦除次数或脏大块的擦除次数与脏大块集合中所有脏大块的平均擦除次数的差(记为δpe)与脏大块有效数据量(记为v)的函数,即p=f(δpe,v)。在另一个例子中,p=f(pe,v)+r,其中r为随机数。

选择策略之一以选择待回收的脏大块(540)。例如,从策略542、策略544与策略546中轮流选择,作为选择待回收块的策略。作为另一个例子,每种策略具有不同的权重,以加权轮转方式,选择策略542、策略544与策略546之一。作为又一个例子,策略的选择同指定条件的发生相关。例如,响应于空闲大块510的擦除次数过大,而选择通过策略542选取脏大块。又例如,响应于年龄最大的脏大块的年龄超过阈值,而临时提升策略544的优先级。

实施例二

图6是根据本申请实施例二的垃圾数据回收方法的示意图。

图6的实施例中,提供至少两个空闲大块610,空闲大块是将要或者正在被写入数据的大块。空闲大块(u)用于承载用户写入的数据,而空闲大块(g)用于承载垃圾回收操作中从脏大块回收的数据。被写入空闲大块610的数据,是用户io请求所要写入的数据或者垃圾回收操作中所要写入的数据(630)。介质写入控制单元660将用户io请求所要写入的数据或者垃圾回收操作中所要写入的数据写入空闲大块。

完成了有效数据回收的脏大块被擦除,并作为空闲大块被释放(615)。经释放的空闲大块被记录在空闲大块集合620中。以及从空闲大块集合620中获取用于承载用户io写入的数据的空闲大块(u),和/或用于承载垃圾回收操作中写入的数据的空闲大块(g)(625)。

在根据本申请的实施例中,空闲大块(u)长期保持存在(627)。固态存储设备工作过程中,保持存在空闲大块(u),以接收随时可能出现的用户io写入的数据。例如,当空闲大块(u)被写满数据,立即从空闲大块集合620获取空闲大块作为空闲大块(u)。在进行垃圾回收操作时,提供空闲大块(g),用于承载垃圾回收操作中写入的数据。因而可响应于垃圾回收操作要发生或已发生,而从空闲大块集合620获取空闲大块(g)。例如,当空闲大块集合620的空闲大块数量过低(例如,低于阈值)时,准备启动垃圾回收操作,并获取空闲大块(g)(626)。

采用多种策略从空闲大块集合620获取空闲大块(628)。作为举例,空闲大块集合620中的空闲大块按擦除次数排序,从空闲大块集合620中获取空闲大块610时,选择擦除次数最低的空闲大块。作为另一个例子,空闲大块集合620中的空闲大块按添加到空闲大块集合620的先后排序,从空闲大块集合620中获取空闲大块610时,选择最早被添加到空闲大块集合620的空闲大块。作为又一个例子,选择空闲大块(u)时,从空闲大块集合620中选择擦除次数最低的空闲大块,而选择空闲大块(g)时,从空闲大块集合620中选择擦除次数大于指定阈值的空闲大块;可选地,若空闲大块集合620中不存在擦除次数大于指定阈值的空闲大块,则选择擦除次数最大的空闲大块或擦除次数同空闲大块集合620的所有空闲大块的擦除次数的平均值的差小于阈值的空闲大块。

图6中,附图标记634指示属于流s1的用户io要写入的数据,附图标记632指示属于流s2的用户io要写入的数据。同时,可选地,附图标记632指示属于流sg的垃圾回收操作中要写入的数据。

图6的实施例中,以多种策略选择垃圾回收过程要被回收的脏大块(640)。例如,策略642指示选择具有最小擦除次数的脏大块,策略644指示选择具有最大年龄的脏大块,而策略646指示选择具有最高优先级的脏大块。策略642与策略644被用于静态磨损均衡,而策略646被用于动态磨损均衡。

作为举例,每种策略具有不同的权重,以加权轮转方式,选择策略之一。作为又一个例子,策略的选择同指定条件的发生相关。例如,响应于空闲大块610的擦除次数过大或者空闲大块(u)的擦除次数过大,而选择通过策略642和/或策略644选取脏大块。又例如,响应于年龄最大的脏大块的年龄超过阈值,而临时提升策略644的优先级。在另一个例子中,周期地或者响应于用户的指示而选择策略642和/或策略644,或者提升策略642和/或策略644的优先级。

根据图6的实施例,介质写入控制单元660对用户io写入的数据与垃圾回收操作中写入的数据采用不同的处理方式(665)。对于用户io写入的数据,介质写入控制单元660将这些数据写入为用户io准备的空闲大块(u)(667)。对于垃圾回收操作中写入的数据,介质写入控制单元660进一步识别为垃圾回收操作中准备的空闲大块(g)与垃圾回收操作中写入的数据的特征。例如,识别空闲大块(g)的擦除次数(或者空闲大块集合中的空闲大块的平均擦除次数与预定次数的差)是否过大(例如,大于阈值,其中阈值是指定值)(670),若空闲大块(g)的擦除次数并非过大,将垃圾回收操作中写入的数据写入空闲大块(g)(678)。若空闲大块(g)的擦除次数过大,进一步判断垃圾回收操作中写入的数据是否是冷数据(672)。若垃圾回收操作中写入的数据是冷数据,将这些数据写入空闲大块(g)(674),而若垃圾回收操作中写入的数据不是冷数据,将这些数据写入空闲大块(u)(676)。

可选地,步骤670与步骤672的顺序可以颠倒或同时发生。

作为举例,依据数据的年龄识别数据是否是冷数据,将年龄大于阈值的数据识别为冷数据。作为又一个例子,将垃圾回收操作中写入的数据都识别为冷数据。在另一个例子中,依据同垃圾回收操作中写入的数据相关联地存储的标识识别数据是否为冷数据。现有技术中的冷数据识别方案也适用于根据本申请的实施例。

实施例三

图7是根据本申请实施例三的垃圾数据回收方法的示意图。

该实施例中,提供至少两个空闲大块610。空闲大块(u)用于承载用户io写入的数据,而空闲大块(g)用于承载垃圾回收操作中写入的数据。被写入空闲大块610的数据,是用户io请求所要写入的数据或者垃圾回收操作中从脏大块回收的数据(630)。介质写入控制单元660将用户io请求所要写入的数据或者垃圾回收操作中所要写入的数据写入空闲大块。

完成了有效数据回收的脏大块被擦除,并作为空闲大块被释放(615)。经释放的空闲大块被记录在空闲大块集合620中。从空闲大块集合620中获取用于承载用户io写入的数据的空闲大块(u),和/或用于承载垃圾回收操作中写入的数据的空闲大块(g)(625)。

该实施例中,带宽控制单元770控制获取用户写入的数据和获取从脏大块回收的数据的带宽(例如,控制为获取流s1、流s2和/或流sg提供的带宽)。固态存储设备的写入存储介质的总体带宽是有限的。带宽控制单元770将有限的带宽分配给流s1、流s2和/或流sg,从而平衡垃圾回收过程对处理用户io的性能的影响。例如,带宽控制单元770将总体带宽的80%提供给获取用户io写入的数据(流s1和/或流s2),将总体带宽的20%提供给获取垃圾回收操作中要写入的数据。又例如,在未处理垃圾回收流程时,将全部带宽提供给获取用户io写入的数据,在处理垃圾回收流程时,使获取垃圾回收操作中要写入的数据占用的带宽不超过总体带宽的20%。

可选地,带宽控制单元770通过控制处理获取用户io写入的数据与垃圾回收操作写入的数据的比例来实现带宽控制。例如,带宽控制单元770每处理4个获取用户io写入的数据,才处理一个垃圾回收操作写入的数据,来实现带宽控制单元将总体带宽的80%提供给用户io(流s1和/或流s2),将总体带宽的20%提供给垃圾回收操作。在又一个例子中,带宽控制单元770每处理64kb的获取用户io数据,才处理16kb的获取垃圾回收操作写入的数据。依然可选地,在空闲大块集合620的空闲大块数量过少时,需要加快垃圾回收流程的处理,为此目的,带宽控制单元770将带宽更多地分配给垃圾回收操作中。仍然可选地,一些情况下,部分用户io需要优先处理,并保证服务质量。例如,构成流s2的用户io需要被以最佳服务质量处理,为此目的,在流s2出现的情况下,带宽控制单元770将带宽更多地分配给流s2,并且,还要保证为垃圾回收操作中提供足够的带宽以避免空闲大块集合620中的空闲大块被耗尽。

图7的实施例中,以多种策略选择要被垃圾回收过程回收的脏大块(640)。作为举例,每种策略具有不同的权重,以加权轮转方式,选择策略之一。

根据图7的实施例,介质写入控制单元660对用户io写入的数据与垃圾回收操作中写入的数据采用不同的处理方式(665)。对于用户io写入的数据,介质写入控制单元660将这些数据写入为用户io准备的空闲大块(u)(667)。对于垃圾回收操作中写入的数据,介质写入控制单元660进一步识别为垃圾回收操作中准备的空闲大块(g)与垃圾回收操作中写入的数据的特征。例如,识别空闲大块(g)的擦除次数是否过大(670),若空闲大块(g)的擦除次数并非过大,将垃圾回收操作中写入的数据写入空闲大块(g)(678)。若空闲大块(g)的擦除次数过大,进一步判断垃圾回收操作中写入的数据是否是冷数据(672)。若垃圾回收操作中写入的数据是冷数据,将这些数据写入空闲大块(g)(674),而若垃圾回收操作中写入的数据不是冷数据,将这些数据写入空闲大块(u)(676)。

可选地,提供带宽控制单元790来协调将用户io写入的数据/垃圾回收操作中写入的数据写入空闲大块(u)/空闲大块(g)的带宽。固态存储设备的写入存储介质的总体带宽是有限的。带宽控制单元790将有限的带宽分配给将用户io的写入数据写入空闲大块和将垃圾回收操作中写入的数据写入空闲大块,从而平衡垃圾回收过程对处理用户io的性能的影响。例如,带宽控制单元790将总体带宽的80%提供给将用户io的数据写入空闲大块(667),将总体带宽的20%提供给将垃圾回收操作中写入的数据写入空闲大块(674、676与678)。又例如,在未处理垃圾回收流程时,将全部带宽提供给将用户io的数据写入空闲大块,在处理垃圾回收流程时,使将垃圾回收操作中写入的数据写入空闲大块占用的带宽不超过总体带宽的20%。

可选地,带宽控制单元790通过控制将用户io写入的数据写入空闲大块和将垃圾回收操作中写入的数据写入空闲大块的比例来实现带宽控制。依然可选地,在空闲大块集合620的空闲大块数量过少时,需要加快垃圾回收流程的处理,为此目的,带宽控制单元770将带宽更多地分配给将从脏大块回收的数据写入空闲大块。仍然可选地,一些情况下,用户io需要优先处理,并保证服务质量。为此目的,带宽控制单元770将带宽更多地分配给将用户写入的数据写入空闲大块,并且,还要保证为将从脏大块回收的数据写入空闲大块提供足够的带宽以避免空闲大块集合620中的空闲大块被耗尽。

根据本申请的实施例中,带宽控制单元770与带宽控制单元790可以同时存在。可选地,使用带宽控制单元770与带宽控制单元790之一实施对用户io与垃圾回收操作中的带宽控制。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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