调节并发写命令数量的方法与装置与流程

文档序号:13876281阅读:162来源:国知局
调节并发写命令数量的方法与装置与流程

本发明涉及固态存储设备,具体地,涉及在固态存储设备中调节并发写命令数量以满足可靠性与服务质量要求的的方法与装置。



背景技术:

参看图1,展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如sata(serialadvancedtechnologyattachment,串行高级技术附件)、scsi(smallcomputersysteminterface,小型计算机系统接口)、sas(serialattachedscsi,串行连接scsi)、ide(integrateddriveelectronics,集成驱动器电子)、usb(universalserialbus,通用串行总线)、pcie(peripheralcomponentinterconnectexpress,pcie,高速外围组件互联)、nvme(nvmexpress,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个nvm(非易失存储器,non-volatilememory)芯片105以及dram(dynamicrandomaccessmemory,动态随机访问存储器)110。nand闪存、相变存储器、feram、mram等是常见的nvm。接口103可适配于通过例如sata、ide、usb、pcie、nvme、sas、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、nvm芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是fpga(field-programmablegatearray,现场可编程门阵列)、asic(applicationspecificintegratedcircuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理io命令。控制部件104还耦合到dram110,并可访问dram110的数据。在dram可存储ftl表和/或缓存的io命令的数据。

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

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

固态存储设备使用错误校正引擎对数据进行编码或解码。物理页的尺寸与错误校正引擎所接受的数据大小可能不同。按错误校正引擎可接受的数据尺寸将数据分为数据单元,物理页包括一个或多个数据单元。

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

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

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



技术实现要素:

由于固态存储设备的写命令处理带宽受限于闪存通道数量与备用电池电量,需要以有限的带宽处理多种io命令,并获得好的性能、用户体验或服务质量。在掉电事件发生时,固态存储设备上存在已经发出的命令,需要确保这些已经发出的命令在掉电后由备用电池供电的时间内被写入nvm芯片,因而发出的io命令数量不能过多,进一步地,向nvm芯片写入的数据在页条带上形成冗余,需要确保完整的页条带被写入,因而发出的io命令数量不能过少。而且,电容电量或固态存储设备的带宽需求可能发生变化。需要统一、有效的手段解决上述问题。

根据本发明的第一方面,提供了根据本发明第一方面的第一处理io命令的方法,包括:获取第一逻辑单元组;基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联;以及向第一逻辑单元组写入数据以响应所述第一io命令。

根据本发明的第一方面的第一处理io命令的方法,提供了根据本发明第一方面的第二处理io命令的方法,还包括:获取第二逻辑单元组;基于第二逻辑单元组,获取具有第二标签的第二io命令,其中第二逻辑单元组与第二标签相关联;以及向第二逻辑单元组写入数据以响应所述第二io命令。

根据本发明的第一方面的第一或第二处理io命令的方法,提供了根据本发明第一方面的第三处理io命令的方法,还包括:基于第一逻辑单元组,若不存在待处理的具有第一标签的第一io命令,获取具有第二标签的第三io命令;以及向第一逻辑单元组写入数据以响应所述第三io命令。

根据本发明的第一方面的第二处理io命令的方法,提供了根据本发明第一方面的第四处理io命令的方法,还包括:基于第二逻辑单元组,若不存在待处理的具有第二标签的第二io命令,获取具有第三标签的第四io命令;以及向第二逻辑单元组写入数据以响应所述第四io命令。

根据本发明的第一方面的第一至第四处理io命令的方法之一,提供了根据本发明第一方面的第五处理io命令的方法,还包括:向逻辑单元组写入数据前,从逻辑单元组为io命令分配物理地址;以及用io命令的逻辑地址与物理地址更新ftl表。

根据本发明的第一方面的第一或第二处理io命令的方法,提供了根据本发明第一方面的第六处理io命令的方法,还包括:若第一逻辑单元组已经响应了第一数量的第一io命令,基于第一逻辑单元组,获取具有第二标签的第五io命令;以及向第一逻辑单元组写入数据以响应所述第五io命令。

根据本发明的第一方面的第二处理io命令的方法,提供了根据本发明第一方面的第七处理io命令的方法,还包括:若第二逻辑单元组已经响应了第二数量的第二io命令,基于第二逻辑单元组,获取具有第三标签的第六io命令;以及向第二逻辑单元组写入数据以响应所述第六io命令。

根据本发明的第一方面的第一至第七处理io命令的方法之一,提供了根据本发明第一方面的第八处理io命令的方法,其中向逻辑单元组写入数据,是向逻辑单元组的活动大块顺序写入数据。

根据本发明的第一方面的第一至第八处理io命令的方法之一,提供了根据本发明第一方面的第九处理io命令的方法,还包括:改变逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第一方面的第九处理io命令的方法,提供了根据本发明第一方面的第十处理io命令的方法,还包括:基于第一逻辑单元组,获取与第一逻辑单元相关联的具有第二标签的io命令;以及向第一逻辑单元组写入数据以响应io命令。

根据本发明的第一方面的第三处理io命令的方法,提供了根据本发明第一方面的第十一处理io命令的方法,还包括:改变逻辑单元组与标签的对应关系,使得第一逻辑单元组以第一优先级与第二标签相关联,以及第一逻辑单元组以第二优先级与第三标签相关联,其中第一优先级高于第二优先级。

根据本发明的第一方面的第十处理io命令的方法,提供了根据本发明第一方面的第十二处理io命令的方法,还包括:基于第一逻辑单元组,根据优先级获取与第一逻辑组单元相关联的具有第二标签的io命令或具有第三标签的io命令;以及向第一逻辑单元组写入数据以响应io命令。

根据本发明的第一方面的第九到第十二处理io命令的方法之一,提供了根据本发明第一方面的第十三处理io命令的方法,其中基于向第一逻辑单元组写入了指定量数据,改变第一逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第一方面的第九到第十二处理io命令的方法之一,提供了根据本发明第一方面的第十四处理io命令的方法,其中基于指定时间间隔的流逝,改变第一逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第一方面的第九到第十四处理io命令的方法之一,提供了根据本发明第一方面的第十五处理io命令的方法,还包括:改变逻辑单元组与标签的对应关系,使得第二逻辑单元组与第三标签相关联。

根据本发明的第一方面的第一到第十五处理io命令的方法之一,提供了根据本发明第一方面的第十六处理io命令的方法,其中第一标签指示顺序写流,第二标签指示随机写流,而第三标签指示来自垃圾回收操作的命令流。

根据本发明的第一方面的第一到第十六处理io命令的方法之一,提供了根据本发明第一方面的第十七处理io命令的方法,还包括:接收io命令。

根据本发明的第一方面的第十七处理io命令的方法,提供了根据本发明第一方面的第十八处理io命令的方法,还包括:为io命令设置标签。

根据本发明的第一方面的第十七或第十八处理io命令的方法,提供了根据本发明第一方面的第十九处理io命令的方法,还包括:根据空闲大块的数量调整具有不同标签的io命令的处理带宽。

根据本发明的第一方面的第十九处理io命令的方法,提供了根据本发明第一方面的第二十处理io命令的方法,其中若空闲大块的数量低于阈值,降低具有第一标签和/或第二标签的io命令的处理带宽,提高具有第三标签的io命令的处理带宽。

根据本发明的第一方面的第十九或第二十处理io命令的方法,提供了根据本发明第一方面的第二十一处理io命令的方法,其中若空闲大块的数量不低于阈值,提高具有第一标签和/或第二标签的io命令的处理带宽,降低具有第三标签的io命令的处理带宽。

根据本发明的第一方面的第十九到第二十一处理io命令的方法之一,提供了根据本发明第一方面的第二十二处理io命令的方法,其中io命令的处理带宽为单位时间内处理的具有指定标签的io命令的数量。

根据本发明的第二方面,提供了根据本发明第二方面的第一处理io命令的装置,包括:用于获取第一逻辑单元组的模块;用于基于第一逻辑单元组,获取具有第一标签的第一io命令的模块,其中第一逻辑单元组与第一标签相关联;以及用于向第一逻辑单元组写入数据以响应所述第一io命令的模块。

根据本发明的第二方面的第一处理io命令的装置,提供了根据本发明第二方面的第二处理io命令的装置,还包括:用于获取第二逻辑单元组的模块;用于基于第二逻辑单元组,获取具有第二标签的第二io命令的模块,其中第二逻辑单元组与第二标签相关联;以及用于向第二逻辑单元组写入数据以响应所述第二io命令的模块。

根据本发明的第二方面的第一或第二处理io命令的装置,提供了根据本发明第二方面的第三处理io命令的装置,还包括:用于基于第一逻辑单元组,若不存在待处理的具有第一标签的第一io命令,获取具有第二标签的第三io命令的模块;以及用于向第一逻辑单元组写入数据以响应所述第三io命令的模块。

根据本发明的第二方面的第二处理io命令的装置,提供了根据本发明第二方面的第四处理io命令的装置,还包括:用于基于第二逻辑单元组,若不存在待处理的具有第二标签的第二io命令,获取具有第三标签的第四io命令的模块;以及用于向第二逻辑单元组写入数据以响应所述第四io命令的模块。

根据本发明的第二方面的第一至第四处理io命令的装置之一,提供了根据本发明第二方面的第五处理io命令的装置,还包括:用于向逻辑单元组写入数据前,从逻辑单元组为io命令分配物理地址的模块;以及用于用io命令的逻辑地址与物理地址更新ftl表的模块。

根据本发明的第二方面的第一或第二处理io命令的装置,提供了根据本发明第二方面的第六处理io命令的装置,还包括:用于若第一逻辑单元组已经响应了第一数量的第一io命令,基于第一逻辑单元组,获取具有第二标签的第五io命令的模块;以及用于向第一逻辑单元组写入数据以响应所述第五io命令的模块。

根据本发明的第二方面的第二处理io命令的装置,提供了根据本发明第二方面的第七处理io命令的装置,还包括:用于若第二逻辑单元组已经响应了第二数量的第二io命令,基于第二逻辑单元组,获取具有第三标签的第六io命令的模块;以及用于向第二逻辑单元组写入数据以响应所述第六io命令的模块。

根据本发明的第二方面的第一至第七处理io命令的装置之一,提供了根据本发明第二方面的第八处理io命令的装置,其中向逻辑单元组写入数据,是向逻辑单元组的活动大块顺序写入数据。

根据本发明的第二方面的第一至第八处理io命令的装置之一,提供了根据本发明第二方面的第九处理io命令的装置,还包括:用于改变逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联的模块。

根据本发明的第二方面的第九处理io命令的装置,提供了根据本发明第二方面的第十处理io命令的装置,还包括:用于基于第一逻辑单元组,获取与第一逻辑单元相关联的具有第二标签的io命令的模块;以及用于向第一逻辑单元组写入数据以响应io命令的模块。

根据本发明的第二方面的第三处理io命令的装置,提供了根据本发明第二方面的第十一处理io命令的装置,还包括:用于改变逻辑单元组与标签的对应关系,使得第一逻辑单元组以第一优先级与第二标签相关联,以及第一逻辑单元组以第二优先级与第三标签相关联的模块,其中第一优先级高于第二优先级。

根据本发明的第二方面的第十处理io命令的装置,提供了根据本发明第二方面的第十二处理io命令的装置,还包括:用于基于第一逻辑单元组,根据优先级获取与第一逻辑组单元相关联的具有第二标签的io命令或具有第三标签的io命令的模块;以及用于向第一逻辑单元组写入数据以响应io命令的模块。

根据本发明的第二方面的第九至第十二处理io命令的装置之一,提供了根据本发明第二方面的第十三处理io命令的装置,其中基于向第一逻辑单元组写入了指定量数据,改变第一逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第二方面的第九至第十二处理io命令的装置之一,提供了根据本发明第二方面的第十四处理io命令的装置,其中基于指定时间间隔的流逝,改变第一逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第二方面的第九至第十四处理io命令的装置之一,提供了根据本发明第二方面的第十五处理io命令的装置,还包括:用于改变逻辑单元组与标签的对应关系,使得第二逻辑单元组与第三标签相关联的模块。

根据本发明的第二方面的第一至第十五处理io命令的装置之一,提供了根据本发明第二方面的第十六处理io命令的装置,其中第一标签指示顺序写流,第二标签指示随机写流,而第三标签指示来自垃圾回收操作的命令流。

根据本发明的第二方面的第一至第十六处理io命令的装置之一,提供了根据本发明第二方面的第十七处理io命令的装置,还包括:用于接收io命令的模块。

根据本发明的第二方面的第十七处理io命令的装置,提供了根据本发明第二方面的第十八处理io命令的装置,用于为io命令设置标签的模块。

根据本发明的第二方面的第十七或第十八处理io命令的装置,提供了根据本发明第二方面的第十九处理io命令的装置,还包括:用于根据空闲大块的数量调整具有不同标签的io命令的处理带宽的模块。

根据本发明的第二方面的第十九处理io命令的装置,提供了根据本发明第二方面的第二十处理io命令的装置,其中若空闲大块的数量低于阈值,降低具有第一标签和/或第二标签的io命令的处理带宽,提高具有第三标签的io命令的处理带宽的模块。

根据本发明的第二方面的第十九处理io命令的装置,提供了根据本发明第二方面的第二十一处理io命令的装置,其中若空闲大块的数量不低于阈值,提高具有第一标签和/或第二标签的io命令的处理带宽,降低具有第三标签的io命令的处理带宽。

根据本发明的第二方面的第十九至第二十一处理io命令的装置之一,提供了根据本发明第二方面的第二十二处理io命令的装置,其中io命令的处理带宽为单位时间内生成的具有标签的io命令的数量。

根据本发明的第三方面,提供了根据本发明第三方面的第一处理io命令的固态存储设备,包括,控制器与非易失存储器;非易失存储器包括多个存储单元组;控制器选择第一逻辑单元组,基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联,以及向第一逻辑单元组写入数据以响应所述第一io命令。

根据本发明的第三方面的第一处理io命令的固态存储设备,提供了根据本发明第三方面的第二处理io命令的固态存储设备,其中:所述控制器还选择第二逻辑单元组;基于第二逻辑单元组,获取具有第二标签的第二io命令,其中第二逻辑单元组与第二标签相关联;以及向第二逻辑单元组写入数据以响应所述第二io命令。

根据本发明的第三方面的第一或第二处理io命令的固态存储设备,提供了根据本发明第三方面的第三处理io命令的固态存储设备,所述控制器包括主机接口、前端处理部件与后端处理部件,主机接口接收io命令,并转发给前端处理部件;前端处理部件为io命令设置标签,并转发给后端处理部件;后端处理部件选择第一逻辑单元组,基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联,以及向第一逻辑单元组写入数据以响应所述第一io命令。

根据本发明的第三方面的第三处理io命令的固态存储设备,提供了根据本发明第三方面的第四处理io命令的固态存储设备,其中,所述后端处理部件还根据空闲大块的数量调整具有不同标签的io命令的处理带宽。

根据本发明的第三方面的第三或第四处理io命令的固态存储设备,提供了根据本发明第三方面的第五处理io命令的固态存储设备,其中,所述后端处理部件还调整逻辑单元组与标签的关联关系。

根据本发明的第四方面,提供了根据本发明第四方面的一种包括指令代码的程序,当被载入固态存储设备并在固态存储设备的控制器上执行时,所述程序代码使所述控制器执行根据本发明第一方面所述的方法。

根据本发明的第五方面,提供了根据本发明第五方面的一种固态存储设备,包括控制器与非易失存储器,非易失存储器包括多个存储单元组;控制器通过执行程序来执行根据根据本发明第一方面所述的方法。

根据本发明的第六方面,提供了根据本发明第六方面的第一固态存储设备,包括控制器与非易失存储器,非易失存储器包括多个存储单元组;控制器通过执行程序来:获取第一逻辑单元组;基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联;以及向第一逻辑单元组写入数据以响应所述第一io命令。

根据本发明的第六方面的第一固态存储设备,提供了根据本发明第六方面的第二固态存储设备,其中,所述控制器还选择第二逻辑单元组;基于第二逻辑单元组,获取具有第二标签的第二io命令,其中第二逻辑单元组与第二标签相关联;以及向第二逻辑单元组写入数据以响应所述第二io命令。

根据本发明的第六方面的第一或第二固态存储设备,提供了根据本发明第六方面的第三固态存储设备,其中所述控制器:接收io命令;为io命令设置标签;选择第一逻辑单元组,基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联;以及向第一逻辑单元组写入数据以响应所述第一io命令。

根据本发明的第六方面的第三固态存储设备,提供了根据本发明第六方面的第四固态存储设备,其中所述控制器还根据空闲大块的数量调整具有不同标签的io命令的处理带宽。

根据本发明的第六方面的第三或第四固态存储设备,提供了根据本发明第六方面的第五固态存储设备,其中所述控制器还调整逻辑单元组与标签的关联关系。

根据本发明的第七方面,提供了根据本发明第七方面的第一处理io命令的方法,包括:获取可用数据单元数量;若存在可用数据单元,向可用数据单元写入数据作为对写命令的响应;以及根据写命令的数据量,减少可用数据单元数量。

根据本发明第七方面的第一处理io命令的方法,提供了根据本发明第七方面的第二处理io命令的方法,还包括:若不存在可用数据单元,暂停对写命令的处理,直到可用数据单元数量被更新且大于0。

根据本发明第七方面的第一或第二处理io命令的方法,提供了根据本发明第七方面的第三处理io命令的方法,还包括:分配页条带,并根据页条带中可用的数据单元的数量,增加所述可用数据单元数量。

根据本发明第七方面的第三处理io命令的方法,提供了根据本发明第七方面的第四处理io命令的方法,还包括:分配的页条带被完整写入数据后,释放该页条带。

根据本发明第七方面的第三或第四处理io命令的方法,提供了根据本发明第七方面的第五处理io命令的方法,还包括:根据逻辑单元组数量、备用电源容量和/或用户指示设置任意时刻被分配的页条带的最大数量。

根据本发明的第八方面,提供了根据本发明第八方面的第一处理io命令的方法,包括:获取可用数据单元数量;若可用数据单元数量大于0,获取第一逻辑单元组;基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联;向第一逻辑单元组写入数据以响应所述第一io命令;以及根据第一逻辑单元组写入的数据量,减少可用数据单元数量。

根据本发明第八方面的第一处理io命令的方法,提供了根据本发明第八方面的第二处理io命令的方法,还包括:若可用数据单元数量不大于0,暂停对io命令的处理,直到可用数据单元数量被更新且大于0。

根据本发明第八方面的第一或第二处理io命令的方法,提供了根据本发明第八方面的第三处理io命令的方法,还包括:分配页条带,并根据页条带中可用的数据单元的数量,增加所述可用数据单元数量。

根据本发明第八方面的第三处理io命令的方法,提供了根据本发明第八方面的第四处理io命令的方法,还包括:根据逻辑单元组数量、备用电源容量和/或用户指示设置任意时刻被分配的页条带的最大数量。

根据本发明第八方面的第一至第四处理io命令的方法之一,提供了根据本发明第八方面的第五处理io命令的方法,还包括:若可用数据单元数量大于0,获取第二逻辑单元组;基于第二逻辑单元组,获取具有第二标签的第二io命令,其中第二逻辑单元组与第二标签相关联;以及向第二逻辑单元组写入数据以响应所述第二io命令。

根据本发明第八方面的第一至第五处理io命令的方法之一,提供了根据本发明第八方面的第六处理io命令的方法,还包括:基于第一逻辑单元组,若不存在待处理的具有第一标签的第一io命令,获取具有第二标签的第三io命令;以及向第一逻辑单元组写入数据以响应所述第三io命令。

根据本发明第八方面的第一至第六处理io命令的方法之一,提供了根据本发明第八方面的第七处理io命令的方法,还包括:向逻辑单元组写入数据前,从逻辑单元组为io命令分配物理地址;以及用io命令的逻辑地址与物理地址更新ftl表。

根据本发明第八方面的第一至第二处理io命令的方法之一,提供了根据本发明第八方面的第八处理io命令的方法,还包括:若第一逻辑单元组已经响应了第一数量的第一io命令,基于第一逻辑单元组,获取具有第二标签的第四io命令;以及

向第一逻辑单元组写入数据以响应所述第四io命令。

根据本发明第八方面的第一至第八处理io命令的方法之一,提供了根据本发明第八方面的第九处理io命令的方法,还包括:改变逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第九方面,提供了根据本发明第九方面的第一处理io命令的方法,包括:获取第一逻辑单元组;获取第一逻辑单元组可用数据单元数量;若第一逻辑单元组可用数据单元数量大于0,基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联;向第一逻辑单元组写入数据以响应所述第一io命令;以及根据第一逻辑单元组写入的数据量,减少第一逻辑单元组可用数据单元数量。

根据本发明第九方面的第一处理io命令的方法,提供了根据本发明第九方面的第二处理io命令的方法,还包括:若第一逻辑单元组可用数据单元数量不大于0,获取第二逻辑单元组可用数据单元数量;若第二逻辑单元组可用数据单元数量大于0,基于第二逻辑单元组,获取具有第二标签的第二io命令,其中第二逻辑单元组与第二标签相关联;向第二逻辑单元组写入数据以响应所述第二io命令;以及根据第二逻辑单元组写入的数据量,减少第二逻辑单元组可用数据单元数量。

根据本发明第九方面的第一或第二处理io命令的方法,提供了根据本发明第九方面的第三处理io命令的方法,还包括:从第一逻辑单元组分配页条带,并根据页条带中可用的数据单元的数量,增加所述第一逻辑单元组可用数据单元数量。

根据本发明第九方面的第二处理io命令的方法,提供了根据本发明第九方面的第四处理io命令的方法,还包括:从第二逻辑单元组分配页条带,并根据页条带中可用的数据单元的数量,增加所述第二逻辑单元组可用数据单元数量。

根据本发明第九方面的第一至第四处理io命令的方法之一,提供了根据本发明第九方面的第五处理io命令的方法,还包括:基于第一逻辑单元组,若不存在待处理的具有第一标签的第一io命令,获取具有第二标签的第三io命令;以及向第一逻辑单元组写入数据以响应所述第三io命令。

根据本发明第九方面的第一至第五处理io命令的方法之一,提供了根据本发明第九方面的第六处理io命令的方法,还包括:改变逻辑单元组与标签的对应关系,使得第一逻辑单元组与第二标签相关联。

根据本发明的第十方面,提供了根据本发明第十方面的第一处理io命令的装置,包括:用于获取可用数据单元数量的模块;用于若存在可用数据单元,向可用数据单元写入数据作为对写命令的响应的模块;以及用于根据写命令的数据量,减少可用数据单元数量的模块。

根据本发明的第十一方面,提供了根据本发明第十一方面的第一处理io命令的固态存储设备,包括控制器与非易失存储器;非易失存储器包括多个存储单元组;控制器获取可用数据单元数量;若可用数据单元数量大于0,获取第一逻辑单元组;基于第一逻辑单元组,获取具有第一标签的第一io命令,其中第一逻辑单元组与第一标签相关联;向第一逻辑单元组写入数据以响应所述第一io命令;以及根据第一逻辑单元组写入的数据量,减少可用数据单元数量。

根据本发明的第十二方面,提供了根据本发明第十二方面的第一处理io命令的固态存储设备,包括控制器与非易失存储器,非易失存储器包括多个存储单元组;控制器通过执行程序来执行根据本发明第七方面、第八方面或第九方面的处理io命令的方法之一。

附图说明

当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:

图1展示了固态存储设备的框图;

图2示出了根据本发明实施例的大块的示意图;

图3示出了根据本发明实施例的逻辑单元组的示意图;

图4a示出了根据本发明实施例的固态存储设备对io命令进行处理的示意图;

图4b示出了根据本发明另一实施例的固态存储设备对io命令进行处理的示意图;

图5a是根据本发明实施例的写命令流到逻辑单元组的映射的示意图;

图5b是根据本发明实施例的写命令流与逻辑单元组的映射表;

图5c是根据本发明另一实施例的写命令流与逻辑单元组的映射表;

图6a是根据本发明实施例的处理io命令的流程图;

图6b是根据本发明另一实施例的处理io命令的流程图;

图6c是根据本发明又一实施例的处理io命令的流程图;

图7是根据本发明又一实施例的写命令流到逻辑单元组的映射的示意图;

图8是根据本发明又一实施例的处理io命令的流程图;以及

图9是根据本发明依然又一实施例的处理io命令的流程图。

具体实施方式

参看图2,示出了根据本发明实施例的大块的示意图。固态存储设备中包括多个nvm芯片。每个nvm芯片包括一个或多个逻辑单元。大块包括来自多个逻辑单元的每个的物理块。优选的,每个逻辑单元为大块提供一个物理块。作为举例,在每16个逻辑单元(lun)上构造大块。每个大块包括16个物理块,来自16个逻辑单元(lun)的每一个。在图2的例子中,大块0包括来自16个逻辑单元(lun)的每个的物理块0,而大块1包括来自每个逻辑单元(lun)的物理块1。也可以有多种其他方式来构造大块。

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

大块中的一个或多个物理块可能是坏块。不应向坏块写入数据。因而页条带中可容纳的用户数据量,依赖于页条带所在的大块的坏块数量。物理页包括一个或多个数据单元。页条带的有效数据单元数量,由指页条带中可容纳用户数据的数据单元的数量。作为举例,将页条带中由坏块提供的物理页去除,以及去除用于存储校验数据的物理页,剩下的物理页的数据单元数量,为页条带的有效数据单元数量。

参看图3,示出了根据本发明实施例的逻辑单元组的示意图。在图3中,在每16个逻辑单元上构造大块,用于构造大块的16个逻辑单元构成逻辑单元组。如图3所示,逻辑单元0(lun0)到逻辑单元15(lun15)构成逻辑单元组1(lun组1),逻辑单元16(lun16)到逻辑单元31(lun31)构成逻辑单元组2(lun组2),逻辑单元32(lun32)到逻辑单元47(lun47)构成逻辑单元组3(lun组3),逻辑单元48(lun48)到逻辑单元63(lun63)构成逻辑单元组4(lun组4)。虽然图3中展示的每个逻辑单元组有16个逻辑单元,显然,可采用其他的配置,以在逻辑单元组中提供不同数量的逻辑单元。

固态存储设备中,lun组的数量体现了固态存储设备并行处理io命令的能力。每个逻辑单元组中同一时刻至多有1个大块在被写入数据。逻辑单元组中当前可被写入数据的大块称为活动大块。

固态存储设备用于处理io命令。图4a示出了根据本发明实施例的固态存储设备对io命令进行处理的示意图。固态存储设备的控制部件104包括主机接口410、前端处理模块420与后端处理模块440。主机接口410用于同主机交换命令与数据。在一个例子中,主机与存储设备通过nvme/pcie协议通信,主机接口410处理pcie协议数据包,提取出nvme协议命令,并向主机返回nvme协议命令的处理结果。前端处理模块420将主机发送的访问固态存储设备的多个io命令发送给后端处理模块440。后端处理模块440访问一个或多个nvm芯片。图4a中,多个nvm芯片构成逻辑单元组,包括逻辑单元组401、逻辑单元组403、逻辑单元组405与逻辑单元组407。后端处理模块440将写命令分配到逻辑单元组。

在根据本发明的实施例中,后端处理模块440依据可用数据单元的数量分配写命令。后端处理模块440维护可用数据单元数量。例如,后端处理模块440每次获得一个可向其写入数据的页条带,可用数据单元数量是页条带中的可用数据单元的数量。可选地,后端处理模块每次获得两个或更多页条带,可用数据单元数量是页条带中的可用数据单元的数量是这些页条带的可用数据单元的数量的和。

后端处理模块440仅在可用数据单元数量大于0的情况下,处理写命令。若可用数据单元数量不大于0,后端处理模块暂停对写命令的处理,直到可用数据单元的数量被更新为大于0(例如,响应于被分配了新的页条带)。在可用数据单元数量大于0的情况下,后端处理模块根据写命令访问nvm芯片,依照写命令要访问的数据的大小消耗可用数据单元,相应地,从可用数据单元数量中减去被写命令消耗的可用数据单元。

后端处理模块440的可用数据单元数量的增加依赖于被分配了页条带,可用数据单元数量的减少依赖于发出了写命令。以此方式,后端处理模块440发出的写命令不会超过其被分配的页条带所能承载的写命令。因而,通过限制向后端处理模块440分配的页条带数量,来限制后端处理模块440发出的写命令数量。而固态存储设备的备用电源供电的时间大体上依赖于执行写命令的数量,例如,备用电源能够支持向4个页条带写入数据。作为举例,在任意时刻,逻辑单元组401、逻辑单元组403、逻辑单元组405与逻辑单元组407的每个提供一个可承载写命令的页条带,在逻辑单元组的页条带被完整写入数据后,该逻辑单元组向后端处理模块440提供一个新的页条带来承载写命令。逻辑单元组的页条带被完整写入数据,也意味着对若干写命令的处理完成,从而通过限制向后端处理模块440分配的页条带数量,能够限制被发出但尚未处理完成的写命令数量。

页条带分配模块450向后端处理模块440分配页条带,并相应更新可用单元数量。页条带分配模块450确保在任意时刻,对于每个逻辑单元组,仅将指定数量的页条带分配给后端处理模块440。可选地,依据用户的指示或备用电源的工作状态,页条带分配模块450改变分配的页条带的数量。例如,在备用电源充电期间,页条带分配模块450降低分配给后端处理模块440的页条带的数量(例如,仅从少数而非全部的逻辑单元组向后端处理模块提供页条带,或者每个逻辑单元组提供较少数量的页条带)。在另一个例子中,用户指示要提升或降低带宽(可选地,忽略在意外断电时的数据安全性),页条带分配模块450增加分配给后端处理模块440的页条带的数量。

可选地,后端处理模块440为每个逻辑单元组维护可用数据单元数量。在图4a的例子中,后端处理模块440耦合到4个逻辑单元组,并为每个逻辑单元组维护可用数据单元数量。作为举例,页条带分配模块从逻辑单元组403向后端处理模块440分配页条带并更新可用数据单元数量时,更新的是与逻辑单元组403对应的可用逻辑单元数量。而后端处理模块440在处理写命令时,若逻辑单元组403对应的可用逻辑单元数量大于0,则访问逻辑单元组403来处理写命令;以及若逻辑单元组401对应的可用逻辑单元数量不大于0,则不向逻辑单元组403分配写命令。

可选地,后端处理模块440维护单一的可用数据单元数量。可用逻辑单元数量大于0时,后端处理模块440向当前提供了可用页条带的逻辑单元组写入数据,或者向逻辑单元组写入数据,在逻辑单元组没有可用页条带时,还需分配页条带以承载写入数据。

在根据本发明的另一实施例中,io命令包括多种属性。例如属性指示io命令是读命令还是写命令。属性还指示io命令的发生频率、顺序性、随机性、后续io命令、时间/空间亲和性等。在多种标准中,定义了io命令的属性。

在io命令处理的多个阶段为io命令设置属性。例如应用程序可基于应用特点、用户场景等在io命令中设置属性。操作系统/存储驱动程序或协议可为io命令设置属性,例如,标注io命令来自哪个虚拟机或操作系统,或将应用在io命令中标注的属性转换为协议定义的形式。存储设备也可为io命令设置属性。例如,发明名称为顺序流检测方法与装置的中国专利申请(申请号cn201610169011.1)中,存储设备基于io命令访问的逻辑地址来为io命令标注指示顺序性和/或随机性的属性,将其全文以引用方式合并于此。存储设备还可以基于历史信息、规则、或机器学习结果为io命令分类并设置属性。

io命令的属性可由在io命令中携带的标签指示。应用、驱动程序、操作系统、存储设备也可将io命令中的属性转换为标签。标签具有有限的或多样化的含义。例如,标签包括t1、t2、t3、t4与t5,而t1到t3分别代表三个顺序写流之一,而t4代表随机写流,t5代表gc(垃圾回收)写流。可以提供其他标签,来指示其他含义的io命令。

在处理io命令时,依据io命令中的标签,可对io命令的处理进行优化。

图4b示出了根据本发明实施例的固态存储设备对io命令进行处理的示意图。固态存储设备的控制部件104包括主机接口410、前端处理模块420与后端处理模块440。

主机接口410用于同主机交换命令与数据。在一个例子中,主机与存储设备通过nvme/pcie协议通信,主机接口410处理pcie协议数据包,提取出nvme协议命令,并向主机返回nvme协议命令的处理结果。主机接口410接收到访问固态存储设备的多个io命令(在图4b中示出为a1,b1,c2,b2,a3,b4,c1以及b1)。前端处理模块420对从主机接口410收到的io命令标注标签。在图4b中,携带标签t1的io命令,构成写命令流s1,携带标签t2的io命令构成写命令流s2,携带标签t3的io命令构成写命令流s3而携带标签t5的io命令构成写命令流s5。作为举例,写命令流s1为顺序流,其中的io命令大体上向连续的逻辑地址空间写入数据;写命令流s2为另一顺序流,其中的io命令大体上向连续的逻辑地址空间写入数据,写命令流s3为来自垃圾回收(gc)任务的命令流,写命令流s4为来自另一垃圾回收任务的命令流。前端模块420采用申请号为cn201610169011.1的中国专利申请(发明名称为“顺序流检测方法与装置”)中公开的方案生成写命令流s1和/或写命令流s2,可选地,前端模块420采用现有技术或将来可实现并为本领域技术人员所知悉的方式为io命令设置标签以将io命令归类为多个写命令流。前端模块所标注的命令流可以有不同的数量,并在io命令中设置标签来区分命令流。

后端处理模块440接收写命令流,并访问一个或多个nvm芯片。图4b中,多个nvm芯片构成逻辑单元组,包括逻辑单元组401、逻辑单元组403、逻辑单元组405与逻辑单元组407。后端处理模块440将写命令流分配到不同的逻辑单元组。优选地,将属于同一写命令流的写命令分配到同一逻辑单元组,以增强数据在nvm芯片105中的空间局部性。例如,将写命令流s1分配到逻辑单元组401,将写命令流s2分配到逻辑单元组403,将写命令流s3分配到逻辑单元组405以及将写命令流s4分配到逻辑单元407。

还在ftl表中记录写命令流的写命令的逻辑地址与写命令被写入的物理地址的对应关系。可由后端处理模块440更新ftl表,或由控制部件104的其他部件来更新ftl表。

可选地,图4b中展示的控制部件104还包括页条带分配模块450。页条带分配模块450向后端处理模块440分配页条带,并相应更新可用数据单元数量。例如,以分配的页条带的可用数据单元的数量来使后端处理模块440维护的可用数据单元数量增加。后端处理模块440维护单一可用数据单元数量。仅在可用数据单元数量大于0时,后端处理模块440才将写命令流分配到不同的逻辑单元组,并依照分配的写命令访问的数据大小,相应较少可用数据单元数量。

在另一个例子中,后端处理模块440为每个逻辑单元组维护可用数据单元数量。后端处理模块440将写命令流分配到逻辑单元组(例如,逻辑单元组405),若后端处理模块440维护的逻辑单元组405的可用数据单元数量不大于0,则暂停对分配给逻辑单元组405的写命令流的处理,直到逻辑单元组405的可用数据单元数量大于0。可选地,后端处理模块440分配写命令时,首先检查逻辑单元组的可用数据单元数量。例如,若逻辑单元组407的可用数据单元数量不大于0,后端处理模块440暂时略过逻辑单元407组的写命令流分配,而选择下一逻辑单元组(例如逻辑单元组401),并在下一逻辑单元组401的可用数据单元数量大于0时,向逻辑单元组401分配写命令流。

图5a是根据本发明实施例的写命令流到逻辑单元组的映射的示意图。在后端处理模块(参看图4b,后端处理模块440)中的逻辑单元组分配模块510,将写命令流分配到逻辑单元组。维护映射表,记录写命令流与逻辑单元的映射关系。

图5b是根据本发明实施例的写命令流与逻辑单元组的映射表。依据图5b,将写命令流s1映射到逻辑单元组1,将写命令流s2映射到逻辑单元组2,将写命令流s3映射到逻辑单元组3以及将写命令流s4映射到逻辑单元组4。

返回参看图5a,逻辑单元组分配模块510依据映射表,为写命令流分配逻辑单元组。在一个例子中,逻辑单元组分配模块510获取写命令,从写命令中的标签(例如,t1)识别写命令所属的写命令流(例如,s1),并依据标签(t1)从映射表中获得对应的逻辑单元组(例如,逻辑单元组1)。后端处理模块440(参看图4b)还为写命令分配属于逻辑单元组1的物理地址。为执行写命令,根据所分配的物理地址向逻辑单元组1写入写命令所对应的数据。以及还更新ftl表,在ftl表中记录写命令的逻辑地址与所分配的逻辑单元组1的物理地址的对应关系。

在另一个例子中,逻辑单元组分配模块510选择逻辑单元组,并为其分配写命令。例如,逻辑单元组分配模块510轮流为固态存储设备中的多个逻辑单元组的每个分配命令。作为举例,逻辑单元组选择逻辑单元组2,通过映射表(参看图5b)确定逻辑单元组2关联于由标签t2识别的写命令流s2。逻辑单元组分配模块510获取属于写命令流s2的写命令。逻辑单元组分配模块510或后端处理模块440(参看图4b)还为写命令分配属于逻辑单元组2的物理地址。为执行写命令,根据所分配的物理地址向逻辑单元组2写入写命令所对应的数据。

在依然另一个例子中,逻辑单元组分配模块510并行地为多个逻辑单元组分配写命令。

在根据本发明的实施例中,写命令流s1是顺序写流,写命令流s2是随机写流,写命令流s3是来自垃圾回收任务的命令流,写命令流s4是来自另一垃圾回收任务的命令流。通过将写命令流映射到特定的逻辑单元组,使得属于相同写命令流(例如写命令流s1)的数据被存储在相同的存储单元组(例如,逻辑单元组1)中,从而增强数据在固态存储设备中的空间局部性,并进而降低固态存储设备的写放大。通过在逻辑单元组中执行垃圾回收操作来为存储单元组释放空闲存储空间。选择适当的时机,将其他写命令流(写命令流s2、写命令流s3或写命令s4分配到逻辑单元组1(例如,逻辑单元组2),或者将写命令流s1分配到其他逻辑单元组(逻辑单元组2、逻辑单元组3或逻辑单元组4),以充分利用固态存储设备中的存储空间。

在一定条件下,调整逻辑单元组与写命令流的映射关系。例如,向一个逻辑单元组写入指定量的数据后,改变该逻辑单元组与写命令流的映射关系;和/或,在指定的时间间隔,改变逻辑单元组与写命令流的映射关系;和/或基于逻辑单元组的空闲存储空间数量,改变该逻辑单元组与写命令流的映射关系;和/或依据用户的指示,改变逻辑单元组与写命令流的映射关系。为改变逻辑单元组与写命令流的映射关系,修改如图5b所示的映射表。

图5c是根据本发明另一实施例的写命令流与逻辑单元组的映射表。依据图5c,为逻辑单元组1(lun组1)以高优先级分配写命令流s1的写命令,以低优先级分配写命令流s2的写命令;为逻辑单元组2(lun组2)以高优先级分配写命令流s2的写命令,以低优先级分配写命令流s3的写命令;为逻辑单元组3(lun组3)以高优先级分配写命令流s3的写命令,以低优先级分配写命令流s4的写命令;为逻辑单元组4(lun组4)以高优先级分配写命令流s4的写命令,以低优先级分配写命令流s1的写命令。

例如,逻辑单元组分配模块510轮流为固态存储设备中的多个逻辑单元组的每个分配命令。作为举例,逻辑单元组选择逻辑单元组1,通过映射表(参看图5c)确定逻辑单元组1以高优先级关联于由标签t1识别的写命令流s1。逻辑单元组分配模块510获取属于写命令流s1的写命令。逻辑单元组分配模块510或后端处理模块440(参看图4b)还为写命令分配属于逻辑单元组1的物理地址,并根据所分配的物理地址向逻辑单元组1写入写命令所对应的数据。在一些情况下,不存在属于写命令流s1的写命令,逻辑单元组分配模块510从图5c所示的映射表中确定逻辑单元组1以低优先级关联于由标签t2识别的写命令流s2,并获取属于写命令s2的写命令并进行处理。

在另一个例子中,逻辑单元组选择逻辑单元组2,通过映射表(参看图5c)确定逻辑单元组2以高优先级关联于由标签t1识别的写命令流s2。逻辑单元组分配模块510获取属于写命令流s2的写命令并处理。逻辑单元组分配模块510还维护向逻辑单元组2写入的属于命令流s2的数据或写命令的数量,若向逻辑单元组2写入的属于命令流s2的数据或写命令的数量超过阈值,则从映射表(参看图5c)中获取同逻辑单元组2相关联的另一优先级的写命令流(写命令流s3),并获取属于写命令流s3的写命令并处理。

图6a是根据本发明实施例的处理io命令的流程图。后端处理模块440(参看图4a)获取可用数据单元数量(610)。在可用数据单元数量大于0时,对io命令中的写命令进行处理,向可用数据单元写入数据(620)。相应地,依据写入数据占用的数据单元,更新可用数据单元数量(630),使可用数据单元数量递减。

进一步地,在步骤620,还比较可用数据单元数量与写命令要写入的数据量,仅在可用数据单元数量指示的可用数据单元能够承载写命令要写入的数据量时,才处理写命令并向可用数据单元写入数据。而当可用数据单元数量不大于0,或者可用数据单元数量指示的可用数据单元无法承载写命令要写入的数据量时,暂停对写命令的处理,直到可用数据单元的数量被更新,并转向步骤610继续处理。在后端处理模块440被分配了页条带时,可用数据单元数量将被更新,以分配的页条带的可用数据单元的数量使后端处理模块440维护的可用数据单元增加。

图6b是根据本发明另一实施例的处理io命令的流程图。后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5a)选择固态存储设备中的多个逻辑单元组之一(例如,逻辑单元组3)(640)。获取由标签t3所指示的写命令流s3的写命令(650)。作为举例,通过映射表(参看图5b或图5c)或其他方式获取与逻辑单元组3相关联的标签t3或写命令流s3。以及向逻辑单元组3写入来自写命令流s3的该写命令的数据(660)。

为向逻辑单元组(例如,逻辑单元组3)写入命令,在步骤650之后,还从逻辑单元组3为写命令分配物理地址。为增加数据在逻辑单元组中的局部性,从逻辑单元组3的活动大块中分配物理地址。特别地,用活动大块的当前写入位置作为分配的物理地址,并使活动大块的当前写入位置指向活动大块的下一空闲位置。

将分配的物理地址与写命令所指示的逻辑地址相关联地记录在ftl表中,从而可通过ftl表获取存储被写入数据的物理地址并访问被写入的数据。

在一个例子中,后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5a)轮流选择多个逻辑单元组之一,并通过执行图6b所示的方法来向逻辑单元组分配写命令。在另一个例子中,后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5)并行为多个逻辑单元组分配写命令。例如,后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5a)可包括多个处理部件(例如,处理器、线程或任务),每个处理部件为一个逻辑单元组分配写命令。

图6c是根据本发明又一实施例的处理io命令的流程图。后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5a)选择固态存储设备中的多个逻辑单元组之一(例如,逻辑单元组3)(670)。获取逻辑单元组3的可用数据单元数量(680)。若逻辑单元组3的可用逻辑单元数量大于0(690),则获取由标签t3所指示的写命令流s3的写命令(694)。以及向逻辑单元组3的页条带写入来自写命令流s3的该写命令的数据(698)。若在步骤690,发现逻辑单元组3的可用逻辑单元数量不大于0,暂时对逻辑单元组3分配写命令,直到逻辑单元组3的可用逻辑单元数量被更新并大于0。或者当发现逻辑单元组3的可用逻辑单元数量不大于0,选择另一逻辑单元组来承载写命令。以及当从逻辑单元组3向后端处理模块440(参看图4b)分配了页条带,相应地以所分配的页条带中的可用逻辑单元的数量更新逻辑单元组3的可用逻辑单元数量。

在另一个例子中,在处理写命令时,后端处理模块440(参看图4b)首先获取可用数据单元数量,若逻辑单元组3的可用逻辑单元数量大于0,后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5a)选择固态存储设备中的多个逻辑单元组之一(例如,逻辑单元组3)。接下来,获取由标签t3所指示的写命令流s3的写命令。作为举例,通过映射表(参看图5b或图5c)或其他方式获取与逻辑单元组3相关联的标签t3或写命令流s3。以及向逻辑单元组3写入来自写命令流s3的该写命令的数据(660)。若逻辑单元组3的可用逻辑单元数量不大于0,后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图5a)暂停对写命令流的处理,直到可用逻辑单元数量被更新并大于0。在该例子中,后端处理模块440维护的可用逻辑单元数量用于多个逻辑单元组。从任何逻辑单元组向后端处理模块440分配页条带,都伴随着对可用逻辑单元数量的更新。

图7是根据本发明又一实施例的写命令流到逻辑单元组的映射的示意图。后端处理模块(参看图4b,后端处理440)包括逻辑单元组分配模块510与写命令流调节模块710。逻辑单元组分配模块510将写命令流分配到逻辑单元组。写命令流调节模块710调节各写命令流的处理带宽。可利用单位时间内通过的属于一写命令流的写命令的数量来描述该写命令流的处理带宽。在图7中,写命令流调节模块710为写命令流s2提供最大的处理带宽,为写命令流s1提供次大的处理带宽,而为写命令流s3与写命令流s4提供较低或为0的处理带宽。

通过调节写命令流的处理带宽,能够为不同写命令流定制不同的服务质量等级,还能够调节处理来自用户的写命令与来自垃圾回收的写命令的数量的比例。

在固态存储设备中的空闲存储空间不足时,通过执行垃圾回收操作,释放存储空间。但垃圾回收操作会占用固态存储设备的处理带宽,并对用户io命令(读命令和/或写命令)的处理造成的影响。在根据本发明的实施例中,写命令流调节模块710基于固态存储设备中空闲存储空间的大小(或空闲大块的数量),调节各写命令流的处理带宽。例如,固态存储设备的空闲存储空闲充足(例如,大于阈值)时,优先处理来自用户的写命令形成的写命令流s1和/或写命令流s2,为写命令流s1和/或写命令流s2提供高处理带宽,而限制来自垃圾回收操作的写命令流s3和/或写命令流s4,为写命令流s3和/或写命令流s4设置低处理带宽或不允许写命令流s3和/或写命令流s4通过。而在存固态存储设备的存储空间不足(例如,不大于或小于阈值)时,优先处理来自垃圾回收操作的写命令流以释放存储空间,并限制来自用户的写命令流以减缓对空闲存储空间的消耗。例如,限制写命令流s1和/或写命令流s2,为写命令流s1和/或写命令流s2设置低处理带宽,而为来自垃圾回收操作的写命令流s3和/或写命令流s4设置高处理带宽。

图8是根据本发明又一实施例的处理io命令的流程图。后端处理模块440(参看图4b)或逻辑单元组分配模块710(参看图7)调节写命令流的处理带宽(810)。为具有不同标签的不同写命令流设置不同的处理带宽。例如,在空闲存储空间充足时,为来自用户的写命令流设置相对高的处理带宽,而为来自垃圾回收操作的写命令流设置相对低的处理带宽。而在空闲存储空间不足时,为来自用户的写命令流设置相对低的处理带宽,而为来自垃圾回收操作的写命令流设置相对高的处理带宽。

后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图7)选择固态存储设备中的多个逻辑单元组之一(例如,逻辑单元组4)(820)。获取由标签t4所指示的写命令流s4的写命令(830)。以及向逻辑单元组4写入来自写命令流s4的该写命令的数据(840)。

为向逻辑单元组(例如,逻辑单元组4)写入命令,在步骤830之后,还从逻辑单元组4为写命令分配物理地址。将分配的物理地址与写命令所指示的逻辑地址相关联地记录在ftl表中,从而可访问被写入的数据。

后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图7)还更新逻辑单元组与写命令流的关联关系(850)。例如,在向逻辑单元组4写入了指定数量的来自写命令流s4的数据后,将逻辑单元组4修改为优先与写命令流1相关联(例如,修改图5b或图5c提供的映射表),以将写命令流1更多的分布到逻辑单元组4,使逻辑单元组4来承载写命令流1的数据。在另一个例子中,基于指定时间段的流逝,修改逻辑单元组与写命令流的关联关系。作为另一个例子,为修改逻辑单元组与写命令流的关联关系,对映射表中的逻辑单元组进行轮转,以与一逻辑单元组编号上相邻的下一逻辑单元组替代该逻辑单元组。例如,逻辑单元组2是与逻辑单元组1编号上相邻的下一逻辑单元组,在修改图5b或图5c的映射表提供的关联关系时,以逻辑单元组2替换逻辑单元组1。类似地,以逻辑单元组3替换逻辑单元组2,以及以逻辑单元组1替换逻辑单元组4。

图9是根据本发明依然又一实施例的处理io命令的流程图。后端处理模块440(参看图4b)或逻辑单元组分配模块710(参看图7)调节写命令流的处理带宽(910)。为具有不同标签的不同写命令流设置不同的处理带宽。后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图7)检查可用数据单元的数量(915),在可用数据单元的数量大于0时,后端处理模块440(参看图4b)或逻辑单元组分配模块510(参看图7)选择固态存储设备中的多个逻辑单元组之一(例如,逻辑单元组4)(920)。获取由标签t4所指示的写命令流s4的写命令(930)。以及向逻辑单元组4写入来自写命令流s4的该写命令的数据,并依据写命令的数据量减少可用数据单元数量(940)。以及可选地,还向主机发送消息以指示对写命令的处理完成。若可用数据单元的数量不大于0,暂停对写命令的处理,直到可用数据单元的数量被更新并大于0。作为举例,在可用数据单元的数量不大于0时,仅暂停对写命令的处理,而可继续处理读命令。

页条带分配模块(参看图4b,页条带分配模块450)向后端处理模块440(参看图4b)分配页条带。后端处理模块440(参看图4b)仅向被分配的页条带写入数据。在页条带被完整写入数据后,后端处理模块440释放该页条带。页条带分配模块监视向后端处理模块440分配的页条带的数量,并确保任何时刻,分配给后端处理模块440且未被释放的页条带不超过指定值。在一个例子中,固态存储设备包括4个逻辑单元组,页条带分配模块450确保任何时刻从任意逻辑单元组分配给后端处理模块440的页条带数量不超过1个。在另一个例子中,在一个例子中,固态存储设备包括4个逻辑单元组,页条带分配模块450确保任何时刻从任意逻辑单元组分配给后端处理模块440的页条带数量不超过2个。在依然另一个例子中,基于固态存储设备的备用电源的状态和/或用户指示,调整分配给后端处理模块440的页条带数量。例如,在备用电源充电期间,或者检测到备用电源的储能下降,或者用户指示降低固态存储设备的供电即将停止,减少分配给后端处理模块440的页条带数量。

本发明实施例还提供一种包含程序代码的程序,当被载入主机cpu并在cpu中执行时,所述程序代码使所述cpu执行上面的由主机执行的方法。

本发明实施例还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序使所述存储设备的处理器执行上面由设备执行的方法之一。

应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。

这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。

因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。

虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。

这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。

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