触发用于减小多存储设备存储系统中的存储设备的声明容量的过程的制作方法

文档序号:11635248阅读:174来源:国知局
触发用于减小多存储设备存储系统中的存储设备的声明容量的过程的制造方法与工艺

所披露的实施例总体上涉及存储器系统,并且更具体地涉及触发用于减小多存储设备存储系统中(例如,包括一个或多个闪存设备)的存储设备的声明容量的过程。



背景技术:

半导体存储器设备(包括闪存)通常利用存储器单元来将数据存储为电性值,如电荷或电压。闪存单元例如包括具有用于存储表示数据值的电荷的浮栅的单个晶体管。闪存是可以被电擦除和重新编程的非易失性数据存储设备。更一般地,与需要电力来维持存储信息的易失性存储器相反,即使断电时,非易失性存储器(例如,闪存以及使用各种技术中的任何技术实现的其他类型的非易失性存储器)仍然保持所存储的信息。已经采用各种方式来促进存储密度的增加,包括:增加芯片上的通过制造发展而启动的存储器单元的密度,以及从单级闪存单元到多级闪存单元的转变,从而使得每个闪存单元可以存储两个或更多个比特。

闪存单元的反复擦除和重新编程引起电荷存储能力的降级(磨损)。最终,电荷存储能力降级到其变得不可能或无法恢复原始数据的点处(例如,不可恢复的码字从闪存设备中被读取、要求恢复码字的计算资源超过预定义的阈值、或者针对闪存设备的程序擦除(p/e)周期计数超过阈值)并且所述设备被认为已磨损。磨损均衡技术经常用于跨闪存设备的多个部分来使磨损分布开。在典型系统中,一旦达到闪存设备的一部分的磨损极限,整个闪存设备就被认为已经故障。



技术实现要素:

所附权利要求书的范围内的系统、方法和设备的各个实施例各自具有若干方面,其中这些方面中没有哪个单个方面单独地负责在此所描述的属性。不限制所附权利要求书的范围,在考虑本公开之后,并且具体地在考虑标题为“具体实施方式”的部分之后,将理解如何使用各个实施例的各个方面来使能够触发用于减小多存储设备存储系统中的存储设备的声明容量的过程。一方面,根据存储系统的多个存储设备中的一个或多个存储设备的一个或多个度量来检测触发条件,并且启用与检测到的触发条件相关联的改善过程,所述改善过程用于减小对应存储设备的非易失性存储器的声明容量。

附图说明

为了可以更详细地理解本公开,可参考各个实施例的特征以产生更具体的说明,所述实施例中的一些被展示在附图中。然而,附图仅展示了本公开的相关特征,并且因此不应被认为是限制性的,因为说明书可以允许其他有效的特征。

图1a是框图,展示了根据一些实施例的数据存储系统的实施方式。

图1b是框图,展示了根据一些实施例的数据存储系统的实施方式。

图1c是框图,展示了根据一些实施例的数据存储系统的实施方式。

图2a-1是框图,展示了根据一些实施例的管理模块的实施方式。

图2a-2是框图,展示了根据一些实施例的管理模块的实施方式。

图2b-1是框图,展示了根据一些实施例的系统管理模块的实施方式。

图2b-2是框图,展示了根据一些实施例的系统管理模块的实施方式。

图2c-1是框图,展示了根据一些实施例的集群管理模块的实施方式。

图2c-2是框图,展示了根据一些实施例的集群管理模块的实施方式。

图2d是框图,展示了根据一些实施例的包括在图2a-1和图2a-2中的改善模块的实施方式。

图3是根据一些实施例的逻辑地址空间并且更确切地逻辑块地址(lba)空间的框图。

图4是根据一些实施例的映射表和物理地址空间的框图。

图5a是根据一些实施例的可以在单级闪存单元(slc)中发现的电压分布随时间推移的预知图。

图5b是根据一些实施例的可以在多级闪存单元(mlc)中发现的电压分布随时间推移的预知图。

图6展示了根据一些实施例的管理存储系统的方法的流程图表示。

图7a-7d展示了根据一些实施例的管理存储系统的方法的流程图表示。

图8a-8d展示了根据一些实施例的管理存储系统的方法的流程图表示。

图9a-9d展示了根据一些实施例的管理存储系统的方法的流程图表示。

图10a-10c展示了根据一些实施例的管理存储系统的方法的流程图表示。

图11a-11c展示了根据一些实施例的管理存储系统的方法的流程图表示。

根据惯例,附图中展示的各种特征不必按比例绘制。因此,为了清晰起见,不同特征的尺寸可以被任意放大或减小。此外,一些附图可能没有描绘给定系统、方法或设备的所有部件。最后,贯穿说明书和附图,相同的参考数字可以用来表示相似的特征。

具体实施方式

当多级闪存单元已经达到其磨损极限时,它通常仍具有足以储存数量减少的电荷量的电荷保持能力。情况经常为,大多数擦除和重新编程周期可以在具有存储数据的完全恢复的磨损有限的多级闪存单元上执行,条件是减少数量的电荷量被使用和被期望。例如,以3比特每单元模式(tlc)操作的闪存设备在被认为磨损之前通常可以执行500至1500次擦除和重新编程周期。然而,在所述时间点,将通常仍具有足够的电荷存储能力来以单比特每单元模式(slc)进行操作,以在slc磨损极限达到之前用于附加的10,000至20,000次擦除和重新编程周期。因此,如果允许闪存设备存储较少的数据,则所述闪存设备的寿命可被延长。目前,存储系统难以利用这个扩展的能力,因为用于通过减小预留空间来管理其容量随使用而降低的存储设备并与所述存储设备一起工作的存储系统机制不能胜任。因此,期望用于管理并与这种存储设备一起工作的机制,包括用于通知周围系统其即将发生的(或迫近的)容量减小从而使得所述系统可以相应地调整其操作的机制。可能地,具有其他形式的非易失性存储器的存储器设备可以从本文献中所描述的那些机制相同或类似的机制中受益。

在此所描述的各实施例包括用于使能够触发用于减小存储设备的声明容量的过程的系统、方法和/或设备。一些实施例包括用于根据存储设备的一个或多个度量来检测触发条件并启用与检测到的触发条件相关联的改善过程的系统、方法和/或设备,所述改善过程用于减小所述存储设备的非易失性存储器的声明容量。

(a1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括,在所述存储系统的存储设备处:(1)生成所述存储设备的一个或多个度量,所述存储设备包括非易失性存储器;(2)根据所述存储设备的所述一个或多个度量来检测触发条件;以及(3)启用与所述检测到的触发条件相关联的改善过程,所述改善过程用于减小所述存储设备的所述非易失性存储器的声明容量。

(a1-1)在a1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述触发条件之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。

(a1-2)在a1-1所述的方法的一些实施例中,检测所述触发条件包括检测不同于所述第一磨损状况的第二磨损状况。

(a2)在a1或a1-1或a1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括向与所述存储设备操作性地耦合的主机通知所述触发条件。

(a3)在a1或a1-1或a1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括:(1)从与所述存储设备操作性地耦合的主机接收查询;以及(2)响应于接收所述查询,上报所述触发条件。

(a4)在a1或a1-1或a1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括:(1)从与所述存储设备操作性地耦合的主机接收命令;以及(2)响应于接收所述命令,发送对所述命令的响应以及所述触发条件的通知。

(a5)在a1或a1-1或a1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括:(1)从与所述存储设备操作性地耦合的主机接收命令;以及(2)响应于接收所述命令,发送对所述命令的响应以及提示所述主机获取关于所述触发条件的信息的通知。

(a6)在a2至a5中任一项所述的方法的一些实施例中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储系统中。

(a7)在a2至a5中任一项所述的方法的一些实施例中,所述主机包括所述存储系统的存储系统控制器。

(a8)在a2至a5中任一项所述的方法的一些实施例中,所述主机包括所述存储系统的集群控制器。

(a9)在a1至a8中任一项所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括调度在所述存储设备上执行的所述改善过程。

(a10)在a1至a9中任一项所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括确定所述改善过程的一个或多个参数。

(a11)在a10所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程进一步包括至少上报所述改善过程的所述一个或多个参数的子集。

(a12)在a1至a11中任一项所述的方法的一些实施例中,针对所述存储设备的多个存储器部分中的每个存储器部分,生成所述存储设备的一个或多个度量包括生成所述一个或多个度量中的至少一个度量。

(a13)在a1至a12中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括与所述存储设备保留数据的能力相对应的一个或多个状态度量。

(a14)在a1至a13中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括与所述存储设备的性能相对应的一个或多个性能度量。

(a15)在a1至a14中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括与所述对应存储设备上的磨损相对应的一个或多个磨损度量。

(a16)在a1至a15中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括一个或多个时间度量。

(a17)在a1至a16中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括所述一个或多个度量的来自多于一个时间的值。

(a18)在a1至a17中任一项所述的方法的一些实施例中,所述方法进一步包括,在启用所述改善过程之后:(1)根据所述存储设备的所述一个或多个度量来重新评估所述触发条件,并且(2)根据确定所述触发条件不再有效,中止用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程。

(a19)在a1至a18中任一项所述的方法的一些实施例中,用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程包括用于减少所述存储设备的所述非易失性存储器的利用的过程。

(a20)在a1至a19中任一项所述的方法的一些实施例中,所述存储设备包括一个或多个闪存设备。

(a21)另一方面,一种存储设备包括:(1)非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器(例如,所述控制器中或者耦合至所述控制器的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述存储设备执行或控制在此所描述的a1至a20方法中的任何方法的执行。

(a23)在又另一方面,以上所描述的a1至a20方法中的任何方法由存储设备执行,所述存储设备包括用于执行在此所描述的方法中的任何方法的装置。

(a25)在又另一方面,一种存储系统包括:(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的存储器(例如,所述存储系统中的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述存储系统执行或控制在此所描述的a1至a20方法中的任何方法的执行。

(a26)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储设备的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

在此所描述的各实施例包括用于使能够在主机处触发用于减小存储设备的声明容量的过程的系统、方法和/或设备。一些实施例包括用于根据存储设备的一个或多个度量来检测触发条件并启用与检测到的触发条件相关联的改善过程的系统、方法和/或设备,所述改善过程用于减小所述存储设备的非易失性存储器的声明容量。

(b1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括,在所述存储系统的与存储设备操作性地耦合的主机处:(1)获取所述存储设备的一个或多个度量,所述存储设备包括非易失性存储器;(2)根据所述存储设备的所述一个或多个度量来检测触发条件;以及(3)启用与所述检测到的触发条件相关联的改善过程,所述改善过程用于减小所述存储设备的所述非易失性存储器的声明容量。

(b1-1)在b1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述触发条件之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。

(b1-2)在b1-1所述的方法的一些实施例中,检测所述触发条件包括检测不同于所述第一磨损状况的第二磨损状况。

(b2)在b1或b1-1或b1-2所述的方法的一些实施例中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储系统中。

(b3)在b1或b1-1或b1-2所述的方法的一些实施例中,所述主机包括所述存储系统的存储系统控制器。

(b4)在b1或b1-1或b1-2所述的方法的一些实施例中,所述主机包括所述存储系统的集群控制器。

(b5)在b1至b4中任一项所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括调度在所述存储设备上执行的所述改善过程。

(b6)在b1至b5中任一项所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括确定所述改善过程的一个或多个参数。

(b7)在b6所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程进一步包括至少将所述改善过程的所述一个或多个参数的子集传达至所述存储设备。

(b8)在b1至b7中任一项所述的方法的一些实施例中,针对所述存储设备的多个存储器部分中的每个存储器部分,获取所述存储设备的一个或多个度量包括获取所述一个或多个度量中的至少一个度量。

(b9)在b1至b8中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括与所述存储设备保留数据的能力相对应的一个或多个状态度量。

(b10)在b1至b9中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括与所述存储设备的性能相对应的一个或多个性能度量。

(b11)在b1至b10中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括与所述对应存储设备上的磨损相对应的一个或多个磨损度量。

(b12)在b1至b11中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括一个或多个时间度量。

(b13)在b1至b12中任一项所述的方法的一些实施例中,所述存储设备的所述一个或多个度量包括所述一个或多个度量的来自多于一个时间的值。

(b14)在b1至b13中任一项所述的方法的一些实施例中,所述方法进一步包括,在启用所述改善过程之后:(1)根据所述存储设备的所述一个或多个度量来重新评估所述触发条件,并且(2)根据确定所述触发条件不再有效,中止用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程。

(b15)在b1至b14中任一项所述的方法的一些实施例中,用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程包括用于减少所述存储设备的所述非易失性存储器的利用的过程。

(b16)在b1至b15中任一项所述的方法的一些实施例中,所述存储设备包括一个或多个闪存设备。

(b17)另一方面,一种存储系统包括:(1)一个或多个存储设备(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)与所述一个或多个存储设备操作性地耦合的主机;(3)一个或多个处理器;以及(4)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述主机执行或控制在此所描述的b1至b16方法中的任何方法的执行。

(b19)在又另一方面,以上所描述的b1至b16方法中的任何方法由耦合至一个或多个存储设备的主机系统执行,所述主机系统包括用于执行在此所描述的方法中的任何方法的装置。

(b21)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储系统的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

(b22)在又另一方面,一种主机系统包括:(1)用于操作性地耦合至存储系统的接口;(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述主机系统执行或控制在此所描述的b1至b16方法中的任何方法的执行。

在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由主机系统的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

在此所描述的各实施例包括用于使能够触发用于减小多存储设备存储系统中的存储设备的声明容量的过程的系统、方法和/或设备。一些实施例包括用于根据存储系统的多个存储设备中的一个或多个存储设备的一个或多个度量来检测触发条件并启用与所述检测到的触发条件相关联的改善过程的系统、方法和/或设备,所述改善过程用于减小所述对应存储设备的非易失性存储器的声明容量。

(c1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:(1)针对所述存储系统的多个存储设备中的每个存储设备,获取所述存储设备的一个或多个度量,所述存储设备包括非易失性存储器;(2)检测用于减小所述存储系统的所述多个存储设备中的对应存储设备的所述非易失性存储器的声明容量的触发条件,根据所述多个存储设备中的一个或多个存储设备的所述一个或多个度量来检测所述触发条件;以及(3)启用与所述检测到的触发条件相关联的改善过程,所述改善过程用于减小所述对应存储设备的所述非易失性存储器的声明容量。

(c1-1)在c1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述触发条件之前,检测所述对应存储设备的所述非易失性存储器的第一磨损状况,其中,所述对应存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述对应存储设备的所述非易失性存储器的预留空间而不减小所述对应存储设备的所述非易失性存储器的声明容量。

(c1-2)在c1-1所述的方法的一些实施例中,检测所述触发条件包括检测不同于所述第一磨损状况的第二磨损状况。

(c2)在c1或c1-1或c1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括向与所述存储设备操作性地耦合的主机通知所述触发条件。

(c3)在c1或c1-1或c1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括:(1)从与所述对应存储设备操作性地耦合的主机接收查询;以及(2)响应于接收所述查询,上报所述触发条件。

(c4)在c1或c1-1或c1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括:(1)从与所述存储设备操作性地耦合的主机接收命令;以及(2)响应于接收所述命令,发送对所述命令的响应以及所述触发条件的通知。

(c5)在c1或c1-1或c1-2所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括:(1)从与所述存储设备操作性地耦合的主机接收命令;以及(2)响应于接收所述命令,发送对所述命令的响应以及提示所述主机获取关于所述触发条件的信息的通知。

(c6)在c2至c5中任一项所述的方法的一些实施例中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储系统中。

(c7)在c2至c5中任一项所述的方法的一些实施例中,所述主机包括所述存储系统的存储系统控制器。

(c8)在c2至c5中任一项所述的方法的一些实施例中,所述主机包括所述存储系统的集群控制器。

(c9)在c1至c8中任一项所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括调度所述改善过程在所述对应存储设备上执行。

(c10)在c1至c9中任一项所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程包括确定所述改善过程的一个或多个参数。

(c11)在c10所述的方法的一些实施例中,启用与所述检测到的触发条件相关联的所述改善过程进一步包括至少上报所述改善过程的所述一个或多个参数的子集。

(c12)在c1至c11中任一项所述的方法的一些实施例中,获取所述对应存储设备的一个或多个度量包括:针对所述对应存储设备的多个存储器部分中的每个存储器部分,获取所述一个或多个度量中的至少一个度量。

(c13)在c1至c12中任一项所述的方法的一些实施例中,所述对应存储设备的所述一个或多个度量包括与所述对应存储设备保留数据的能力相对应的一个或多个状态度量。

(c14)在c1至c13中任一项所述的方法的一些实施例中,所述对应存储设备的所述一个或多个度量包括与所述对应存储设备的性能相对应的一个或多个性能度量。

(c15)在c1至c14中任一项所述的方法的一些实施例中,所述对应存储设备的所述一个或多个度量包括与所述对应存储设备上的磨损相对应的一个或多个磨损度量。

(c16)在c1至c15中任一项所述的方法的一些实施例中,所述对应存储设备的所述一个或多个度量包括一个或多个时间度量。

(c17)在c1至c16中任一项所述的方法的一些实施例中,所述对应存储设备的所述一个或多个度量包括所述一个或多个度量的来自多于一个时间的值。

(c18)在c1至c17中任一项所述的方法的一些实施例中,所述方法进一步包括,在启用所述改善过程之后:(1)根据所述对应存储设备的所述一个或多个度量来重新评估所述触发条件,并且(2)根据确定所述触发条件不再有效,中止用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述改善过程。

(c19)在c1至c18中任一项所述的方法的一些实施例中,所述获取、所述启用、或所述获取和所述启用两者都由所述存储系统的不同于所述多个存储设备的一个或多个子系统执行。

(c20)在c1至c19中任一项所述的方法的一些实施例中,所述对应存储设备包括一个或多个闪存设备。

(c21)另一方面,一种存储系统包括:(1)非易失性存储器;(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述存储系统执行或控制在此所描述的c1至c20方法中的任何方法的执行。

(c23)在又另一方面,以上所描述的c1至c20方法中的任何方法由存储系统执行,所述存储系统包括用于执行在此所描述的方法中的任何方法的装置。

(c25)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储系统的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

(c26)在又另一方面,一种存储系统包括:(1)多个存储设备;(2)具有一个或多个处理器的一个或多个子系统;以及(3)存储一个或多个程序的存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述一个或多个子系统执行或控制在此所描述的c1至c20方法中的任何方法的执行。

在又另一方面,一种主机系统包括:(1)用于操作性地耦合至存储系统的接口;(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述主机系统执行或控制在此所描述的c1至c20方法中的任何方法的执行。

在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由主机系统的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

在此所描述的各实施例包括用于启用触发条件的通知以减小存储设备的声明容量的系统、方法和/或设备。一些实施例包括用于将用于减小存储设备的非易失性存储器的声明容量的触发条件通知给与所述存储设备操作性地耦合的主机的系统、方法和/或设备。

(d1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:在所述存储系统的存储设备处,包括非易失性存储器的所述存储设备:(1)检测用于减小所述存储设备的所述非易失性存储器的声明容量的触发条件;并且(2)将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件、用于启用执行用于减小所述存储设备的所述非易失性存储器的声明容量的改善过程的所述触发条件通知给与所述存储设备操作性地耦合的主机。在一些实施例中,所述改善过程至少部分地由除了所述存储设备之外的装置执行(例如,至少部分地由所述主机、或由存储系统控制器或由包括不同于所述存储设备的至少一个存储设备的数据存储系统的集群控制器执行)。

(d1-1)在d1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述触发条件之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;并且(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。

(d1-2)在d1-1所述的方法的一些实施例中,检测所述触发条件包括检测不同于所述第一磨损状况的第二磨损状况。

(d2)在d1或d1-1或d1-2所述的方法的一些实施例中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储系统中。

(d3)在d1或d1-1或d1-2所述的方法的一些实施例中,所述主机包括所述存储系统的存储系统控制器。

(d4)在d1或d1-1或d1-2所述的方法的一些实施例中,所述主机包括所述存储系统的集群控制器。

(d5)在d1至d4中任一项所述的方法的一些实施例中,将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括利用未经请求的通信来通知所述主机。

(d6)在d1至d4中任一项所述的方法的一些实施例中,将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括:(1)从所述主机接收查询;并且(2)响应于接收所述查询,上报所述触发条件。

(d7)在d1至d4中任一项所述的方法的一些实施例中,将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括:(1)从所述主机接收命令;并且(2)响应于接收所述命令,发送对所述命令的响应以及所述触发条件的通知。

(d8)在d1至d4中任一项所述的方法的一些实施例中,将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括:(1)从所述主机接收命令;并且(2)响应于接收所述命令,发送对所述命令的响应以及提示所述主机获取关于所述触发条件的信息的通知。

(d9)在d1至d8中任一项所述的方法的一些实施例中,将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机进一步包括通知所述主机所述存储设备处于只读模式。

(d10)在d1至d9中任一项所述的方法的一些实施例中,由所述存储设备根据所述存储设备的一个或多个度量来检测所述触发条件。

(d11)在d10所述的方法的一些实施例中,所述方法进一步包括,在将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机之后:(1)根据所述存储设备的所述一个或多个度量来重新评估所述触发条件,并且(2)根据确定所述触发条件不再有效,将用于减小所述存储设备的所述非易失性存储器的声明容量的所述触发条件的不存在通知给所述主机。

(d12)在d1至d11中任一项所述的方法的一些实施例中,用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程包括用于减少所述存储设备的所述非易失性存储器的利用的过程。

(d13)在d1至d12中任一项所述的方法的一些实施例中,所述存储设备包括一个或多个闪存设备。

(d14)另一方面,一种存储设备包括:(1)非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器(例如,所述控制器中或者耦合至所述控制器的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述存储设备执行或控制在此所描述的d1至d13方法中的任何方法的执行。

(d16)在又另一方面,以上所描述的d1至d13方法中的任何方法由存储设备执行,所述存储设备包括用于执行在此所描述的方法中的任何方法的装置。

(d18)在又另一方面,一种存储系统包括:(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的存储器(例如,所述存储系统中的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述存储系统执行或控制在此所描述的d1至d13方法中的任何方法的执行。

(d19)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储设备的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

在此所描述的各实施例包括用于使能够通知用于减小多存储设备存储系统中的存储设备的声明容量的触发条件的系统、方法和/或设备。一些实施例包括用于将用于减小所述对应存储设备的非易失性存储器的声明容量的触发条件通知给与存储系统的多个存储设备中的对应存储设备操作性地耦合的主机的系统、方法和/或设备。

(e1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:(1)针对所述存储系统的多个存储设备中的每个存储设备,获取所述存储设备的一个或多个度量,所述存储设备包括非易失性存储器;(2)检测用于减小所述存储系统的所述多个存储设备中的对应存储设备的所述非易失性存储器的声明容量的触发条件,根据所述存储系统中的所述多个存储设备中的两个或更多个存储设备的所述一个或多个度量来检测所述触发条件;并且(3)将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件、用于启用执行用于减小所述对应存储设备的所述非易失性存储器的声明容量的改善过程的所述触发条件通知给与所述对应存储设备操作性地耦合的主机。在一些实施例中,或在一些情况下,所述触发条件所述通知致使启用执行所述改善过程。

(e1-1)在e1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述触发条件之前,检测所述对应存储设备的所述非易失性存储器的第一磨损状况,其中,所述对应存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;并且(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述对应存储设备的所述非易失性存储器的预留空间而不减小所述对应存储设备的所述非易失性存储器的声明容量。

(e1-2)在e1-1所述的方法的一些实施例中,检测所述触发条件包括检测不同于所述第一磨损状况的第二磨损状况。

(e2)在e1或e1-1或e1-2所述的方法的一些实施例中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储系统中。

(e3)在e1或e1-1或e1-2所述的方法的一些实施例中,所述主机包括所述存储系统的存储系统控制器。

(e4)在e1或e1-1或e1-2所述的方法的一些实施例中,所述主机包括所述存储系统的集群控制器。

(e5)在e1至e4中任一项所述的方法的一些实施例中,将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括利用未经请求的通信来通知所述主机。

(e6)在e1至e4中任一项所述的方法的一些实施例中,将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括:(1)从所述主机接收查询;并且(2)响应于接收所述查询,上报所述触发条件。

(e7)在e1至e4中任一项所述的方法的一些实施例中,将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括:(1)从所述主机接收命令;并且(2)响应于接收所述命令,发送对所述命令的响应以及所述触发条件的通知。

(e8)在e1至e4中任一项所述的方法的一些实施例中,将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括:(1)从所述主机接收命令;并且(2)响应于接收所述命令,发送对所述命令的响应以及提示所述主机获取关于所述触发条件的信息的通知。

(e9)在e1至e4中任一项所述的方法的一些实施例中,将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机包括通知所述主机所述对应存储设备处于只读模式。

(e10)在e1至e9中任一项所述的方法的一些实施例中,所述方法进一步包括,在将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件通知给所述主机之后:(1)根据所述存储系统中的所述多个存储设备中的所述两个或更多个存储设备的所述一个或多个度量来重新评估所述触发条件,并且(2)根据确定所述触发条件不再有效,将用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述触发条件的不存在通知给所述主机。

(e11)在e1至e10中任一项所述的方法的一些实施例中,所述获取、所述通知、或所述获取和所述通知两者都由所述存储系统的不同于所述多个存储设备的一个或多个子系统执行。

(e12)在e1至e11中任一项所述的方法的一些实施例中,用于减小所述对应存储设备的所述非易失性存储器的声明容量的所述改善过程包括用于减少所述存储设备的所述非易失性存储器的利用的过程。

(e13)在e1至e12中任一项所述的方法的一些实施例中,所述对应存储设备包括一个或多个闪存设备。

(e14)另一方面,一种存储系统包括:(1)非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器(例如,所述存储系统的控制器中或者耦合至所述控制器的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述存储系统执行或控制在此所描述的e1至e13方法中的任何方法的执行。

(e16)在又另一方面,以上所描述的e1至e13方法中的任何方法由存储系统执行,所述存储系统包括用于执行在此所描述的方法中的任何方法的装置。

(e18)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储系统的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

(e19)在又另一方面,一种存储系统包括:(1)多个存储设备;(2)具有一个或多个处理器的一个或多个子系统;以及(3)存储一个或多个程序的存储器(例如,存储系统中的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述一个或多个子系统执行或控制在此所描述的e1至e13方法中的任何方法的执行。

在又另一方面,一种主机系统包括:(1)用于操作性地耦合至存储系统的接口;(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述主机系统执行或控制在此所描述的e1至e13方法中的任何方法的执行。

在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由主机系统的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。

为了提供对附图中展示的示例实施例的透彻理解,在此描述了大量细节。然而,可以在没有许多特定细节的情况下实践一些实施例,并且权利要求书的范围仅由在权利要求中具体记载的那些特征和方面限制。此外,并未对已知的方法、部件和电路进行详细描述,以免不必要模糊在此所描述的实施例的相关方面。

包括下述那些部件的数据存储系统使用各种技术来避免由各种故障机制引起的数据丢失,包括存储介质故障、通信故障以及系统和子系统级别故障。这些机制的共同特征是使用数据冗余来保护数据、来补偿实际的或可能的数据误差(例如,介质误差、丢失数据、传输误差、无法访问的数据等)。一类冗余机制已知为纠错码(ecc)。各种类型的纠错码是众所周知的(例如,bch、ldpc、罗门码等),同样用于将其与受保护的数据一起存储或结合所述数据一起存储的各种方案也是众所周知的。另一类冗余机制是擦除码(例如,金字塔码、喷泉码、部分mds、本地可修复码、简单再生码等)。

另一类型或级别的冗余机制通常被称为raid(独立磁盘冗余阵列),即使当存储介质在传统意义上不是“磁盘”时。存在多种形式的raid或raid方案,提供不同级别的数据保护(例如,raid-1、raid-5、raid-6、raid-10等)。通常,在使用raid的系统中,存储在多个不同存储位置中的数据“条”被处理成集合,并且存储由充足的冗余数据,从而使得条中本来已经丢失的任何数据在任何一个存储位置部分或完全故障时使用所述条中的其他数据(可能包括冗余数据)被恢复。

第三类冗余机制是将数据复制到通常在不同故障域中的多个存储位置。实现这种类型的冗余机制的系统通常存储每个数据集或数据项的三个或更多个副本。通常,要么每个副本都是在来自其他副本的不同的故障域中,要么至少一个副本是在来自其他副本的不同的故障域中。

下述实施例结合上述数据冗余机制一起工作(单独地或组合地使用)。下述某些数据存储系统具有被设计成用于实现具体冗余机制的架构或配置。此外,下述某些实施例可以单独地或者组合地利用上述多于一个的冗余机制。此外,某些实施例能够同时存储用不同冗余机制编码的数据。此外,即使在单机制内,参数的选择(即,相对于数据大小的码字大小)可以动态地变化。因此,更改冗余机制直接影响存储的数据量并进而影响利用。

图1a是框图,展示了根据一些实施例的数据存储系统100。尽管展示了一些示例特征,但是,为简洁起见并且以免不必要模糊在此所公开的示例实施例的相关方面,没有展示各种其他特征。为此,作为非限制性示例,数据存储系统100包括存储设备120,所述存储设备包括存储控制器124和存储介质130,并且用于结合计算系统110一起使用或包括计算系统110。在一些实施例中,存储介质130是单个闪存设备,而在其他实施例中,存储介质130包括多个闪存设备。在一些实施例中,存储介质130是nand类型闪存或nor类型闪存。在一些实施例中,如在此进一步定义的,存储介质130包括一个或多个三维(3d)存储器设备。进一步地,在一些实施例中,存储控制器124是固态驱动器(ssd)控制器。然而,根据各种各样的实施例的方面,可以包括其他类型的存储介质(例如,pcram、reram、stt-ram等)。在一些实施例中,闪存设备包括一个或多个闪存管芯、一个或多个闪存封装体、一个或多个闪存信道等。在一些实施例中,数据存储系统100可以包括一个或多个存储设备120。

计算机系统110通过数据连接101耦合至存储控制器124。然而,在一些实施例中,计算机系统110包括作为部件和/或子系统的存储控制器124或存储控制器124的一部分。例如,在一些实施例中,存储控制器124的部分或全部功能是由在计算机系统110上执行的软件实现的。计算机系统110可以是任何合适的计算机设备,如计算机、膝上型计算机、平板计算机、上网本、因特网信息站、个人数字助理、移动电话、智能电话、游戏设备、计算机服务器、或任何其他计算设备。计算机系统110有时被称为主机、主机系统、客户端或客户端系统。在一些实施例中,计算机系统110是服务器系统,如数据中心中的服务器系统。在一些实施例中,计算机系统110包括一个或多个处理器、一种或多种类型的存储器、显示器和/或其他用户接口部件,如键盘、触屏显示器、鼠标、轨迹板、数字相机和/或用于增加功能的任何数量的补充设备。在一些实施例中,计算机系统110不具有显示器和其他用户接口部件。

存储介质130通过连接103耦合至存储控制器124。连接103有时被称为数据连接,但是通常传达除数据外的命令,并且可选地传达元数据、纠错信息和/或除了将要存储在存储介质130中的数据值以及从存储介质130中读出的数据值之外的其他信息。在一些实施例中,然而,存储控制器124和存储介质130被包括在相同设备中(即,一体化设备)作为其部件。此外,在一些实施例中,存储控制器124和存储介质130嵌入在主机设备(例如,计算机系统110)中,如移动设备、平板计算机、其他计算机或计算机控制设备,并且在此所描述的方法至少部分地由嵌入的存储器控制器执行。存储介质130可以包括任意数量(即,一个或多个)的存储设备,包括但不限于,非易失性半导体存储设备,如(多个)闪存设备。例如,(多个)闪存设备可以被配置成用于适合于如云计算应用、数据库应用的企业存储设备、主存储设备和/或辅助存储设备,或者于缓存在辅助存储设备(如硬盘驱动器)中所存储(或将要存储)的数据。另外地或替代性地,(多个)闪存设备还可以被配置成用于个人计算机、膝上型计算机和平板计算机的相对更小型应用,如个人闪存驱动器或硬盘替代。在一些实施例中,如在此进一步定义的,存储介质130包括一个或多个三维(3d)存储器设备。

存储介质130被划分为多个可寻址且单独可选的块,如可选部分131。在一些实施例中,单独可选块是闪存设备中的最小尺寸可擦除单元。换言之,每个块包含可同时擦除的最少数量的存储器单元。每个块通常被进一步划分为多个页和/或字线,其中,每一页或字线典型地是块中的最小单独可寻址(可读)部分的实例。在一些实施例中(例如,使用某些类型的闪存),然而,数据集的最小单独可寻址单元是作为页的子集的扇区。也就是说,一个块包括多页,每一页包含多个扇区,并且每个扇区是用于从闪存设备读取数据的最小数据单元。

如以上指出的,当非易失性半导体存储设备的数据存储密度总体增加时,增加的存储密度的缺点为所存储的数据更倾向于被错误地存储和/或读取。在一些实施例中,误差控制编码可以用于限制由电气波动、存储介质缺陷、操作状况、设备历史、读写电路等或这些以及各种其他因素的组合引入的不可校正的误差数量。

在一些实施例中,存储控制器124包括管理模块121-1、主机接口129、存储介质i/o接口128以及(多个)附加模块125。存储控制器124可以包括各种附加特征,为简洁起见并且以免模糊在此公开的示例实施例的相关特征,没有展示所述附加特征,并且所述特征的不同安排是可能的。主机接口129通过数据连接101向计算机系统110提供接口。类似地,存储介质i/o128提供用于通过连接103到达存储介质130的接口。在一些实施例中,存储介质i/o128包括读写电路,所述读写电路包括能够将读信号提供至存储介质130的电路(例如,针对nand类型闪存的读阈值电压)。

在一些实施例中,管理模块121-1包括被配置成用于执行一个或多个程序中的指令(例如,在管理模块121-1中)的一个或多个处理单元(cpu,有时还被称为处理器)122-1。在一些实施例中,一个或多个cpu122-1由在存储控制器124的功能之内(以及某些情况下之外)的一个或多个部件共享。管理模块121-1耦合至主机接口129、(多个)附加模块125以及存储介质i/o128,以便协调这些部件的操作。在一些实施例中,管理模块121-1的一个或多个模块在计算机系统110的管理模块121-2中实现。在一些实施例中,计算机系统110(未示出)的一个或多个处理器被配置成用于执行一个或多个程序中的指令(例如,在管理模块121-2中)。管理模块121-2耦合至存储设备120,以便管理存储设备120的操作。

(多个)附加模块125耦合至存储介质i/o128、主机接口129以及管理模块121-1。举例来讲,(多个)附加模块125可以包括误差控制模块,用于限制在写入存储器或从存储器读取的过程中无意中引入数据中的不可校正的误差的数量。在一些实施例中,(多个)附加模块125由管理模块121-1的一个或多个cpu122-1在软件中执行,并且,在其他实施例中,(多个)附加模块125全部地或部分地使用特殊用途电路实现(例如,以执行编码和解码功能)。在一些实施例中,(多个)附加模块125全部地或部分地由在计算机系统110上执行的软件实现。

在一些实施例中,包括在(多个)附加模块125中的误差控制模块包括编码器和解码器。在一些实施例中,编码器通过应用误差控制码来对数据进行编码以产生码字,所述码字随后被存储在存储介质130中。当从存储介质130中读取编码数据(例如,一个或多个码字)时,解码器将解码过程应用于编码数据以恢复所述数据并且在误差控制码的误差校正能力范围内校正所述恢复数据中的误差。本领域技术人员将理解的是,各种误差控制码具有不同的误差检测和校正能力,并且由于超出本披露范围的原因,选择特定的码用于各种应用。由此,本文不提供各种类型的误差控制码的详尽回顾。此外,本领域技术人员将认识到,每一类或每一族误差控制码可以具有特定于所述一类或一族误差控制码的编码和解码算法。另一方面,一些算法可以至少在一定程度上用于对多个不同类或族的误差控制码进行解码。由此,为了简洁起见,在此不提供对本领域技术人员而言通常可用且已知的各种类型的编码和解码算法的详尽描述。

在一些实施例中,在写操作过程中,主机接口129从计算机系统110接收有待存储在存储介质130中的数据。由主机接口129接收的数据可用于编码器(例如,在(多个)附加模块125中),所述编码器对所述数据进行编码以产生一个或多个码字。所述一个或多个码字可用于存储介质i/o128,所述存储介质i/o128以与所利用的存储介质的类型无关的方式将所述一个或多个码字传送至存储介质130。

在一些实施例中,当计算机系统(主机)110(例如,经由数据连接101,或替代性地单独的控制线或总线)将一个或多个主机读命令发送至从存储介质130请求数据的存储控制器124时,发起读操作。存储控制器124经由存储介质i/o128将一个或多个读访问命令发送至存储介质130,以根据由所述一个或多个主机读命令指定的存储器位置(地址)获取原始读数据。存储介质i/o128将原始读数据(例如,包括一个或多个码字)提供给解码器(例如,在(多个)附加模块125中)。如果解码成功,则解码数据被提供给主机接口129,其中,解码数据可用于计算机系统110。在一些实施例中,如果解码不成功,则存储控制器124可以采取多个补救动作或提供不能解决误差状况的指示。

如以上所解释的,存储介质(例如,存储介质130)被划分为多个可寻址的且可单独选择的块并且每个块可选地(但典型地)被进一步划分为多个页和/或字线和/或扇区。当在块基础上执行存储介质的擦除时,在许多实施例中,存储介质的读取和编程是在块的更小子单元上执行的(例如,在页基础、字线基础或扇区基础上)。在一些实施例中,块的较小子单元由多个存储器单元(例如,单级单元或多级单元)组成。在一些实施例中,编程是在整页上执行的。在一些实施例中,多级单元(mlc)nand闪存通常每单元具有四个可能的状态,每单元产生两比特信息。进一步地,在一些实施例中,mlcnand具有两页类型:(1)下页(有时被称为快页),以及(2)上页(有时被称为慢页)。在一些实施例中,三级单元(tlc)nand闪存每单元具有八个可能的状态,每单元产生三比特信息。尽管本文的描述示例性地使用tlc、mlc和slc,本领域技术人员将理解的是,本文描述的实施例可以扩展至每单元具有多于八个可能状态的存储器单元,每单元产生多于三比特的信息。

存储介质(即,tlc、mlc或slc和/或所选的数据冗余机制)的编码格式是当数据实际被写入存储介质中时所做的选择。经常,在本说明书中,描述了据说用于设置编码格式、变更存储介质的编码格式等的事件、状况或过程。应认识的是,实际过程可以涉及多个步骤,例如,擦除存储介质之前的内容,接着使用新编码格式写入数据,并且这些操作时间上可以与所述初始化事件、状况或过程分开。

举例来讲,如果数据按页被写入存储介质,但所述存储介质以块为单位被擦除,则所述存储介质中的页可能包含无效数据(例如,过期数据),但那些页不可被重写,直到包含那些页的整个块被擦除。为了利用无效数据对页进行写操作,所述块中具有无效数据的页(若有的话)被读取并被重写成新的块,而旧的块被擦除(或被放入队列中以等待擦除)。这个过程被称作垃圾收集。在垃圾收集之后,新块包含具有无效数据的页并且可以具有空页,所述空页可用于新数据写入,并且旧块可被擦除以便可用于新数据写入。因为闪存仅可以被编程和擦除有限次数,所以用于挑选(多个)接下来的块来进行重写和擦除的算法的效率对基于闪存的存储系统的寿命和可靠性具有显著影响。

图1b是框图,展示了根据一些实施例的数据存储系统140。尽管展示了一些示例特征,但是,为简洁起见并且以免不必要模糊在此所公开的示例实施例的相关方面,没有展示各种其他特征。为此,作为非限制性示例,数据存储系统140(有时被称为扩大存储系统、单节点存储系统等)包括多个存储设备160(例如,存储设备160-1至160-m)和存储系统控制器150,并且结合计算机系统142一起使用。在一些实施例中,存储设备160包括管理模块161(例如,存储设备160-1包括管理模块161-1并且存储设备160-m包括管理模块161-m)。以上关于存储设备120(图1a)和管理模块121-1(图1a)所描述的特征中的一些特征分别可应用于存储设备160和管理模块161,并且为了简洁和简单起见,在此不重复所述细节。

计算机系统142通过连接141耦合至存储系统控制器150。然而,在一些实施例中,计算机系统142包括作为部件和/或子系统的存储系统控制器150的一部分或其整体。例如,在一些实施例中,存储系统控制器150的部分或全部功能是由在计算机系统142上执行的软件实现的。计算机系统142可以是任何合适的计算机设备,如计算机、膝上型计算机、平板计算机、上网本、因特网信息站、个人数字助理、移动电话、智能电话、游戏设备、计算机服务器、或任何其他计算设备。在一些实施例中,计算机系统142是服务器系统,如数据中心中的服务器系统。计算机系统142有时被称为主机、主机系统、客户端或客户端系统。在一些实施例中,计算机系统142包括一个或多个处理器、一种或多种类型的存储器、显示器和/或其他用户接口部件,如键盘、触屏显示器、鼠标、轨迹板、数字相机和/或用于增加功能的任何数量的补充设备。在一些实施例中,计算机系统142不具有显示器和其他用户接口部件。

在一些实施例中,存储系统控制器150包括系统管理模块151-1以及(多个)附加模块155。存储系统控制器150可以包括各种附加特征,为简洁起见并且以免模糊在此公开的示例实施例的相关特征,没有展示所述附加特征,并且所述特征的不同安排是可能的。例如,在一些实施例中,存储系统控制器150附加地包括由每个存储设备160耦合至存储系统控制器150的接口。存储设备160通过连接143耦合至存储系统控制器150(例如,存储设备160-1通过连接143-1耦合至存储系统控制器150,并且存储设备160-m通过连接143-m耦合至存储系统控制器150)。在一些实施例中,连接143-1至143-m被实现为通信介质,在所述通信介质上,使用如scsi、sata、无限带宽技术、以太网、令牌环等协议传达命令和数据。

在一些实施例中,系统管理模块151-1包括被配置成用于执行一个或多个程序中的指令(例如,在系统管理模块151-1中)的一个或多个处理单元(cpu,有时也被称为处理器)152-1。在一些实施例中,所述一个或多个cpu152-1由在存储系统控制器150的功能之内(以及某些情况下之外)的一个或多个部件共享。系统管理模块151-1耦合至(多个)附加模块155,以便协调这些部件的操作。在一些实施例中,系统管理模块151-1的一个或多个模块在计算机系统142(有时被称为主机、主机系统、客户端或客户端系统)的系统管理模块151-2中实现。在一些实施例中,计算机系统142(未示出)的一个或多个处理器(有时被称为cpu或处理单元)被配置成用于执行一个或多个程序中的指令(例如,在系统管理模块151-2中)。系统管理模块151-2耦合至存储系统控制器150,以便管理存储系统控制器150的操作。

(多个)附加模块155耦合至系统管理模块151-1。在一些实施例中,(多个)附加模块155由系统管理模块151-1的一个或多个cpu152-1在软件中执行,并且,在其他实施例中,(多个)附加模块155全部地或部分地使用特殊用途电路实现。在一些实施例中,(多个)附加模块155全部地或部分地由在计算机系统142上执行的软件实现。

在写操作期间,存储系统控制器150从计算机系统142(有时被称为主机、主机系统、客户端或客户端系统)接收有待存储在存储设备160中的数据。在一些实施例中,存储系统控制器150将虚拟逻辑地址从计算机系统142映射到一个地址,所述地址确定或标识对其写入数据的一个或多个存储设备160。

当计算机系统142将一个或多个主机读命令发送至从存储介质160请求数据的存储系统控制器150时,发起读操作。在一些实施例中,存储系统控制器150将虚拟逻辑地址从计算机系统142映射到一个地址,所述地址确定或标识从其读取所请求的数据的一个或多个存储设备160。

图1c是框图,展示了根据一些实施例的数据存储系统170的实现方式。尽管展示了一些示例特征,但是,为简洁起见并且以免不必要模糊在此所公开的示例实施例的相关方面,没有展示各种其他特征。为此,作为非限制性示例,数据存储系统170(有时被称为扩大存储系统、多节点存储系统或存储集群系统)包括多个存储子系统192(例如,存储设备192-1至192-s)和集群控制器180,并且结合计算机系统172一起使用。在一些实施例中,存储子系统192包括存储系统控制器190和存储设备194(例如,存储子系统192-1包括存储系统控制器190-1以及存储设备194-1至194-n)。以上关于数据存储系统140(图1b)所描述的特征中的一些特征可应用于存储子系统192,并且出于简洁起见,在此不重复所述细节。在一些实施例中,可以存在多个集群控制器180,所述集群控制器可以彼此进行通信以协调其活动。

计算机系统172通过连接171耦合至集群控制器180。然而,在一些实施例中,计算机系统172包括作为部件和/或子系统的集群控制器180。例如,在一些实施例中,集群控制器180的部分或全部功能是由在计算机系统172上执行的软件实现的。计算机系统172可以是任何合适的计算机设备,如计算机、膝上型计算机、平板计算机、上网本、因特网信息站、个人数字助理、移动电话、智能电话、游戏设备、计算机服务器、或任何其他计算设备。在一些实施例中,计算机系统172是服务器系统,如数据中心中的服务器系统。计算机系统172有时被称为主机、主机系统、客户端或客户端系统。在一些实施例中,计算机系统172包括一个或多个处理器、一种或多种类型的存储器、显示器和/或其他用户接口部件,如键盘、触屏显示器、鼠标、轨迹板、数字相机和/或用于增加功能的任何数量的补充设备。在一些实施例中,计算机系统172不具有显示器和其他用户接口部件。

在一些实施例中,集群控制器180包括集群管理模块181-1以及(多个)附加模块185。集群控制器180可以包括各种附加特征,为简洁起见并且以免模糊在此公开的示例实施例的相关特征,没有展示所述附加特征,并且所述特征的不同安排是可能的。例如,在一些实施例中,集群控制器180附加地包括由每个存储子系统192耦合至集群控制器180的接口。存储子系统192通过连接173耦合至集群控制器180(例如,存储子系统192-1通过连接173-1耦合至集群控制器180,并且存储子系统192-s通过连接173-s耦合至集群控制器180)。在一些实施例中,连接173可以被实现为共享通信网络,例如,令牌环、以太网、无限带宽技术等。

在一些实施例中,集群管理模块181-1包括被配置成用于执行一个或多个程序中的指令(例如,在集群管理模块181-1中)的一个或多个处理单元(cpu,有时也被称为处理器)182-1。在一些实施例中,一个或多个cpu182-1由在集群控制器180的功能之内(以及某些情况下之外)的一个或多个部件共享。集群管理模块181-1耦合至(多个)附加模块185,以便协调这些部件的操作。在一些实施例中,集群管理模块181-1的一个或多个模块在计算机系统172(有时被称为主机、主机系统、客户端或客户端系统)的集群管理模块181-2中实现。在一些实施例中,计算机系统172(未示出)的一个或多个处理器(有时被称为cpu或处理单元)被配置成用于执行一个或多个程序中的指令(例如,在集群管理模块181-2中)。集群管理模块181-2耦合至集群控制器180,以便管理集群控制器180的操作。

(多个)附加模块185耦合至集群管理模块181-1。在一些实施例中,(多个)附加模块185由集群管理模块181-1的一个或多个cpu182-1在软件中执行,并且,在其他实施例中,(多个)附加模块185全部地或部分地使用特殊用途电路实现。在一些实施例中,(多个)附加模块185全部地或部分地由在计算机系统172上执行的软件实现。

在一些实施例中,在写操作期间,集群控制器180从计算机系统172(有时被称为主机、主机系统、客户端或客户端系统)接收有待存储在存储子系统192中的数据。在一些实施例中,集群控制器180将虚拟逻辑地址从计算机系统172映射到一个地址格式,所述地址格式可由存储子系统192理解并且用于标识存储子系统192的对其写入数据的存储子系统。在一些实施例中,集群控制器180可以转换有待存储到多个数据集中的数据,每个数据集被存储在存储系统192的一个存储子系统上。在一个实施例中,所述转换过程可以与划分有待存储的数据一样简单。在另一个实施例中,所述转换过程可以对有待存储的数据进行冗余编码,以便在面对存储子系统192的一个或多个存储子系统或到其的通信故障时提供增强的数据完整性和访问。

在一些实施例中,当计算机系统172将一个或多个主机读命令发送至从存储子系统192请求数据的集群控制器180时,发起读操作。在一些实施例中,集群控制器180将虚拟逻辑地址从计算机系统172映射到一个地址格式,所述地址格式可由存储子系统192理解,以用于确定或标识存储子系统192的从其读取所请求的数据的存储子系统。在一些实施例中,存储子系统192的多于一个的存储子系统可以使数据被读取,以便满足读操作,例如,用于数据重构。

如在此使用的,术语“主机”或“主机系统”根据上下文可以被解释为意味着(1)计算机系统(例如,图1a的计算机系统110、图1b的计算机系统142、或图1c的计算机系统172),代表所述计算机系统将数据存储在存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的数据存储系统170)中;(2)存储系统(例如,图1b的数据存储系统140)的存储系统控制器(例如,图1b的存储系统控制器150);(3)存储系统(例如,图1c的数据存储系统170)的集群控制器(例如,图1c的集群控制器180);和/或(4)操作性地要么直接地要么间接地耦合至存储系统的任何计算实体(例如,计算机、在计算机上运行的过程、移动电话、互联网信息站、平板计算机、膝上型计算机、台式计算机、服务器计算机等)。例如,在一些情况下,相对于数据存储系统140(图1b),术语“主机”根据上下文可以指计算机系统142或存储系统控制器150。作为另一个示例,在一些情况下,相对于数据存储系统170(图1c),术语“主机”根据上下文可以指计算机系统172或集群控制器180。进一步地,在一些上下文中,主机是或者包括客户端或客户端系统,代表所述客户端而或客户端系统将数据存储在存储系统中。

图2a-1是框图,展示了根据一些实施例的管理模块121-1,如图1a中所示。管理模块121-1通常包括用于执行存储在存储器206-1中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)122-1、存储器206-1(有时被称为控制器存储器)、以及使这些部件互连的一根或多根通信总线208-1。所述一根或多根通信总线208-1可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。管理模块121-1通过所述一根或多根通信总线208-1耦合至主机接口129、(多个)附加模块125以及存储介质i/o128。存储器206-1包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器206-1可选地包括与(多个)cpu122-1远离地定位的一个或多个存储设备。存储器206-1或者替代性地在存储器206-1内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器206-1或存储器206-1的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

·转换表212-1,所述转换表用于将逻辑地址映射到物理地址(例如,在一些实施例中,转换表212-1包括图4的映射表402);

·数据读取模块214-1,所述数据读取模块用于从存储介质(例如,图1a的存储介质130)中的一个或多个码字、页或块读取数据;

·数据写入模块216-1,所述数据写入模块用于将数据写入存储介质(例如,图1a的存储介质130)中的一个或多个码字、页或块;

·数据擦除模块218-1,所述数据擦除模块用于从存储介质(例如,图1a的存储介质130)中的一个或多个块中擦除数据;

·垃圾收集模块220-1,所述垃圾收集模块用于针对存储介质(例如,图1a的存储介质130)中的一个或多个块进行垃圾收集;

·度量模块222-1,所述度量模块用于生成和/或获取存储设备(例如,图1a的存储设备120)的一个或多个度量;

·触发检测模块224-1,所述触发检测模块用于检测触发条件(例如,根据存储设备的一个或多个度量);

·启用模块226-1,所述启用模块用于启用与(例如,由触发检测模块224-1检测到的)触发条件相关联的改善过程;

·通知模块228-1,所述通知模块用于将(例如,由触发检测模块224-1检测到的)触发条件和/或所述触发条件的不存在通知给存储设备操作性地耦合的主机;

·改善模块230-1,所述改善模块用于执行用于减小存储设备(例如,图1a的存储设备120)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

ο检测模块231-1,所述检测模块用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发;

ο利用模块232-1,所述利用模块用于减少存储设备的非易失性存储器的利用;以及

ο容量模块234-1,所述容量模块用于减小存储设备的非易失性存储器的声明容量。

上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器206-1可保存以上定义的模块和数据结构的子集。此外,存储器206-1可存储以上没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器206-1中的程序、模块和数据结构或者存储器206-1的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。

尽管图2a-1示出了根据一些实施例的管理模块121-1,但是图2a-1与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在管理模块121-1中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。

图2a-2是框图,展示了根据一些实施例的计算机系统110的管理模块121-2(图1a)。管理模块121-2通常包括用于执行存储在存储器206-2中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)122-2、存储器206-2、以及使这些部件互连的一根或多根通信总线208-2。所述一根或多根通信总线208-2可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。管理模块121-2通过所述一根或多根通信总线208-2耦合至存储设备120。存储器206-2(有时被称为主机存储器)包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器206-2可选地包括与(多个)cpu122-2远离地定位的一个或多个存储设备。存储器206-2或者替代性地在存储器206-2内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器206-2或存储器206-2的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

·转换表212-2,所述转换表用于将逻辑地址映射到物理地址(例如,在一些实施例中,转换表212-2包括图4的映射表402);

·数据读取模块214-2,所述数据读取模块用于从存储介质(例如,图1a的存储介质130)中的一个或多个码字、页或块读取数据;

·数据写入模块216-2,所述数据写入模块用于将数据写入存储介质(例如,图1a的存储介质130)中的一个或多个码字、页或块;

·数据擦除模块218-2,所述数据擦除模块用于从存储介质(例如,图1a的存储介质130)中的一个或多个块中擦除数据;

·垃圾收集模块220-2,所述垃圾收集模块用于针对存储介质(例如,图1a的存储介质130)中的一个或多个块进行垃圾收集;

·度量模块222-2,所述度量模块用于生成和/或获取存储设备(例如,图1a的存储设备120)的一个或多个度量;

·触发检测模块224-2,所述触发检测模块用于检测触发条件(例如,根据存储设备的一个或多个度量);

·启用模块226-2,所述启用模块用于启用与(例如,由触发检测模块224-2检测到的)触发条件相关联的改善过程;

·通知模块228-2,所述通知模块用于将(例如,由触发检测模块224-2检测到的)触发条件和/或所述触发条件的不存在通知给主机(例如,图1a的计算机系统110)的应用、模块和过程;

·改善模块230-2,所述改善模块用于执行用于减小存储设备(例如,图1a的存储设备120)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

ο检测模块231-2,所述检测模块用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发;

ο利用模块232-2,所述利用模块用于减少存储设备的非易失性存储器的利用;以及

ο容量模块234-2,所述容量模块用于减小存储设备的非易失性存储器的声明容量。

上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器206-2可保存以上定义的模块和数据结构的子集。此外,存储器206-2可存储以上没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器206-2中的程序、模块和数据结构或者存储器206-2的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。

尽管图2a-2示出了根据一些实施例的管理模块121-2,但是图2a-2与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在管理模块121-2中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。

图2b-1是框图,展示了根据一些实施例的系统管理模块151-1,例如,系统管理模块在存储系统控制器中的实施例,如图1b中所示。系统管理模块151-1通常包括用于执行存储在存储器246-1中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)152-1、存储器246-1(有时被称为存储系统控制器存储器或控制器存储器)、以及使这些部件互连的一根或多根通信总线248-1。所述一根或多根通信总线248-1可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。系统管理模块151-1通过所述一根或多根通信总线248-1耦合至(多个)附加模块155。存储器246-1包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器246-1可选地包括与(多个)cpu152-1远离地定位的一个或多个存储设备。存储器246-1或者替代性地在存储器246-1内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器246-1或存储器246-1的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

·系统映射模块250-1,所述系统映射模块用于将虚拟地址(例如,图1b中由计算机系统142使用的)映射到中间地址(例如,图1b中由存储设备160将所述中间地址映射到物理地址);

·度量模块252-1,所述度量模块用于生成和/或获取存储设备(例如,图1b的存储设备160-1至160-m中任何一个)的一个或多个度量;

·触发检测模块254-1,所述触发检测模块用于检测触发条件(例如,根据存储设备的一个或多个度量);

·启用模块256-1,所述启用模块用于启用与(例如,由触发检测模块254-1检测到的)触发条件相关联的改善过程;

·通知模块258-1,所述通知模块用于将(例如,由触发检测模块254-1检测到的)触发条件和/或所述触发条件的不存在通知给存储设备操作性地耦合的主机;

·改善模块260-1,所述改善模块用于执行用于减小存储设备(例如,图1b的存储设备160)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

ο检测模块261-1,所述检测模块用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发;

ο利用模块262-1,所述利用模块用于减少存储设备的非易失性存储器的利用;以及

ο容量模块264-1,所述容量模块用于减小存储设备的非易失性存储器的声明容量;以及

·可选地,数据冗余模块266-1,所述数据冗余模块用于对数据进行冗余编码(例如,以实现特定的raid(独立磁盘冗余阵列)级别);以及

·可选地,通信模块268-1,所述通信模块用于例如经由存储区域网络(san)促进与其他设备的通信。

上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器246-1可保存以上定义的模块和数据结构的子集。此外,存储器246-1可存储以上没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器246-1中的程序、模块和数据结构或者存储器246-1的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。

尽管图2b-1示出了根据一些实施例的系统管理模块151-1,但是图2b-1与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在系统管理模块151-1中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。

图2b-2是框图,展示了根据一些实施例的系统管理模块151-2,例如,系统管理模块位于主机中的实施例,如图1b所示;在一些这种实施例中,存储系统被称为主机管理的存储系统。系统管理模块151-2通常包括用于执行存储在存储器246-2中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)152-2、存储器246-2(有时被称为主机存储器)、以及使这些部件互连的一根或多根通信总线248-2。所述一根或多根通信总线248-2可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。系统管理模块151-2通过所述一根或多根通信总线248-2耦合至存储系统控制器150。存储器246-2包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器246-2可选地包括与(多个)cpu152-2远离地定位的一个或多个存储设备。存储器246-2或者替代性地在存储器246-2内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器246-2或存储器246-2的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

·系统映射模块250-2,所述系统映射模块用于将虚拟地址(例如,图1b中由计算机系统142使用的)映射到中间地址(例如,图1b中由存储设备160将所述中间地址映射到物理地址);

·度量模块252-2,所述度量模块用于生成和/或获取存储设备(例如,图1b的存储设备160-1至160-m中任何一个)的一个或多个度量;

·触发检测模块254-2,所述触发检测模块用于检测触发条件(例如,根据存储设备的一个或多个度量);

·启用模块256-2,所述启用模块用于启用与(例如,由触发检测模块254-2检测到的)触发条件相关联的改善过程;

·通知模块258-2,所述通知模块用于将(例如,由触发检测模块254-2检测到的)触发条件和/或所述触发条件的不存在通知给存储设备操作性地耦合的主机;

·改善模块260-2,所述改善模块用于执行用于减小存储设备(例如,图1b的存储设备160)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

ο检测模块261-2,所述检测模块用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发;

ο利用模块262-2,所述利用模块用于减少存储设备的非易失性存储器的利用;以及

ο容量模块264-2,所述容量模块用于减小存储设备的非易失性存储器的声明容量;

·可选地,数据冗余模块266-2,所述数据冗余模块用于对数据进行冗余编码(例如,以实现特定的raid(独立磁盘冗余阵列)级别);以及

·可选地,通信模块268-2,所述通信模块用于例如经由存储区域网络(san)促进与其他设备的通信。

上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器246-2可保存以上定义的模块和数据结构的子集。此外,存储器246-2可存储以上没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器246-2中的程序、模块和数据结构或者存储器246-2的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。

尽管图2b-2示出了根据一些实施例的系统管理模块151-2,但是图2b-2与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在系统管理模块151-2中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。

图2c-1是框图,展示了根据一些实施例的集群管理模块181-1,如图1c中所示。集群管理模块181-1通常包括用于执行存储在存储器276-1中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)182-1、存储器276-1、以及使这些部件互连的一根或多根通信总线278-1。所述一根或多根通信总线278-1可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。集群管理模块181-1通过所述一根或多根通信总线278-1耦合至(多个)附加模块185。存储器276-1包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器276-1可选地包括与(多个)cpu182-1远离地定位的一个或多个存储设备。存储器276-1或者替代性地在存储器276-1内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器276-1或存储器276-1的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

·集群映射模块280-1,所述集群映射模块用于将虚拟地址(例如,图1c中由计算机系统172使用的)映射到中间地址(例如,图1c中由存储子系统192将所述中间地址映射到物理地址);

·度量模块282-1,所述度量模块用于生成和/或获取存储设备(例如,图1c的存储设备194-1至194-n或194-j至194-k中任何一个)的一个或多个度量;

·触发检测模块284-1,所述触发检测模块用于检测触发条件(例如,根据存储设备的一个或多个度量);

·启用模块286-1,所述启用模块用于启用与(例如,由触发检测模块284-1检测到的)触发条件相关联的改善过程;

·通知模块288-1,所述通知模块用于将(例如,由触发检测模块284-1检测到的)触发条件和/或所述触发条件的不存在通知给存储设备操作性地耦合的主机;

·改善模块290-1,所述改善模块用于执行用于减小存储设备(例如,图1c的存储设备194)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

ο检测模块291-1,所述检测模块用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发;

ο利用模块292-1,所述利用模块用于减少存储设备的非易失性存储器的利用;以及

ο容量模块294-1,所述容量模块用于减小存储设备的非易失性存储器的声明容量;

·可选地,数据冗余模块296-1,所述数据冗余模块用于对数据进行冗余编码;以及

·可选地,通信模块298-1,所述通信模块用于例如经由存储区域网络(san)促进与其他设备的通信。

上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器276-1可保存以上定义的模块和数据结构的子集。此外,存储器276-1可存储以上没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器276-1中的程序、模块和数据结构或者存储器276-1的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。

尽管图2c-1示出了根据一些实施例的集群管理模块181-1,但是图2c-1与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在集群管理模块181-2中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。

图2c-2是框图,展示了根据一些实施例的集群管理模块181-2,例如,集群管理模块至少部分地位于主机中的实施例,如图1c所示;在一些这种实施例中,存储系统使用基于主机的集群管理。集群管理模块181-2通常包括用于执行存储在存储器276-2中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)182-2、存储器276-2(有时被称为主机存储器)、以及使这些部件互连的一根或多根通信总线278-2。所述一根或多根通信总线278-2可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。集群管理模块181-2通过所述一根或多根通信总线278-2耦合至集群控制器180。存储器276-2包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器276-2可选地包括与(多个)cpu182-2远离地定位的一个或多个存储设备。存储器276-2或者替代性地在存储器276-2内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器276-2或存储器276-2的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:

·集群映射模块280-2,所述集群映射模块用于将虚拟地址(例如,图1c中由计算机系统172使用的)映射到中间地址(例如,图1c中由存储子系统192将所述中间地址映射到物理地址);

·度量模块282-2,所述度量模块用于生成和/或获取存储设备(例如,图1c的存储设备194-1至194-n或194-j至194-k中任何一个)的一个或多个度量;

·触发检测模块284-2,所述触发检测模块用于检测触发条件(例如,根据存储设备的一个或多个度量);

·启用模块286-2,所述启用模块用于启用与(例如,由触发检测模块284-2检测到的)触发条件相关联的改善过程;

·通知模块288-2,所述通知模块用于将(例如,由触发检测模块284-2检测到的)触发条件和/或所述触发条件的不存在通知给存储设备操作性地耦合的主机;

·改善模块290-2,所述改善模块用于执行用于减小存储设备(例如,图1c的存储设备194)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

ο检测模块291-2,所述检测模块用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发;

ο利用模块292-2,所述利用模块用于减少存储设备的非易失性存储器的利用;以及

ο容量模块294-2,所述容量模块用于减小存储设备的非易失性存储器的声明容量;

·可选地,数据冗余模块296-2,所述数据冗余模块用于对数据进行冗余编码;以及

·可选地,通信模块298-2,所述通信模块用于例如经由存储区域网络(san)促进与其他设备的通信。

上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器276-2可保存以上定义的模块和数据结构的子集。此外,存储器276-2可存储以上没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器276-2中的程序、模块和数据结构或者存储器276-2的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。

尽管图2c-2示出了根据一些实施例的集群管理模块181-2,但是图2c-2与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在集群管理模块181-2中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。

图2d是框图,展示了根据一些实施例的包括在图2a-1的管理模块121-1和/或图2a-2的管理模块121-2中的改善模块230。如以上关于图2a-1和图2a-2所述,在一些实施例中,改善模块230包括利用模块232和容量模块234。在一些实施例中,利用模块232包括以下程序和/或模块,或者其子集或超集:

·修整模块235,所述修整模块用于从存储设备修整之前写入的不再由主机使用的数据(例如,图3的非实时数据332)的至少一部分;

·删除模块236,所述删除模块用于从存储设备删除主机使用的可丢弃数据;以及

·移动模块237,所述移动模块用于将主机使用的数据的一部分从一个存储设备移动到另一个存储设备。

在一些实施例中,容量模块234包括以下程序和/或模块,或者其子集或超集:

·lba减小模块238(有时被称为逻辑地址减小模块),所述lba减小模块用于缩小逻辑地址的范围、减小逻辑地址计数和/或使特定的逻辑地址对于主机不可用;以及

·通告模块239,所述通告模块用于通告存储设备或存储子系统的非易失性存储器的声明容量。

在一些实施例中,改善过程包括(例如,由利用模块232执行的)利用减少过程以及(例如,由容量模块234执行的)声明容量减少过程。在一些实施例中,改善过程具有将由改善过程实现的目标减少的声明容量,并利用所述目标减少的声明容量来确定有待由改善过程实现的目标利用减少量。在一些情况中,如当改善过程具有将由改善过程实现的目标减少的声明容量,并且所利用的存储设备的量小于所述目标减少的声明容量时,所述目标利用减少量为零。在这种情况下,执行利用减少过程或者利用减少过程的一个或多个部分是不需要的并因此被跳过或放弃。此外,在一些实施例中,因为许多参数的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、不规律地、初始地和/或最终地)重新计算或重新评估那些参数(比如,目标减小的声明容量和/或目标利用减少量)。在一些情况下,根据重新计算或重新评估的参数,利用减少重新进行优先级排序、重新安排或中止。尽管图2d使用包括在图2a-1和图2a-2中的改善模块230的示例,图2d的描述类似地应用于其他改善模块(例如,图2b-1的改善模块260-1、图2b-2的改善模块260-2、图2c-1的改善模块290-1和/或图2c-2的改善模块290-2),并且为了简洁起见,在此不重复所述细节。

修整操作指示lba空间(图3的320)的特定部分被转换成未分配的lba空间(340),由此减小利用。修整操作通常包括使用于将逻辑地址空间中的逻辑地址转化为存储设备的物理地址空间中的物理地址的映射表(例如,图4的映射表402)的一个或多个条目无效。由于所述修整操作,使用lba空间的特定部分预先存储的任何数据不再可用于主机(例如,被丢弃)。用于预先存储这个数据的物理页出于其他目的可以被重新使用。所述重新使用可以与修整操作时间上重合地或者在未来时间处(例如,在垃圾收集期间)完成。如别处所讨论的,所述重新使用的物理页可以用于在所述重新使用之前由那些相同的物理页使用的编码格式或不同冗余机制不同的编码格式或不同的冗余机制而被使用。修整操作有时也被称为去映射操作。如在此使用的,修整操作不必完全等同于sata协议的修整操作。如在此使用的,去映射操作不必完全等同于scsi协议的去映射操作。

图3是根据一些实施例的逻辑地址(lba)空间320(有时被称为(la)空间)的框图。在一些实施例中,逻辑地址是从主机(例如,图1a的计算机系统110、图1b的计算机系统142和/或图1c的计算机系统172)的角度来看,项(例如,文件或其他数据)所驻留的地址。在一些实施例中,逻辑地址(例如,在lba空间320中)由于映射函数或地址转换器(例如,图2a-1中包括转换表212-1的函数或模块,或者图4中的映射表402)的操作而不同于物理地址(例如,在物理空间318中)。在一些实施例中,逻辑块地址(lba)被映射到物理闪存地址(例如,物理页编号(ppn),包括组、块和页),如进一步关于图4所述。

在一些实施例中,逻辑地址空间包括已分配的逻辑地址空间(例如,已分配的lba空间342)以及未分配的逻辑地址空间(例如,未分配的lba空间340)。在一些实施例中,未分配的逻辑地址空间是在其处不存储数据的逻辑地址空间。在一些实施例中,未分配的逻辑地址空间包括从未被写入和/或已经被丢弃的逻辑地址空间(预先写入的数据可以通过修整或去映射操作被丢弃,并且有时被称为修整逻辑地址空间)。例如,在图3中,未分配的lba空间340包括修整的lba空间330。在一些实施例中,已分配的逻辑地址空间是由主机预先写入包括不再由主机使用的数据(例如,非实时数据332)以及仍由主机使用的数据(例如,实时数据334)的预先写入数据的逻辑地址空间。在一些实施例中,非实时数据是在逻辑地址空间的在文件系统的元数据中被标记为空闲、可用或未使用的一部分中的数据。可选地,文件系统可以通过修整或去映射操作选择将非实时地址空间转换为未分配的地址空间。

在图3中,已分配的lba空间342表示分配空间的量,而未分配的lba空间340表示未分配空间的量。然而,已分配的lba空间342和未分配的lba空间340都不必是lba空间320的单个连续区域。类似地,图3中的实时数据334和非实时数据332分别表示实时数据和非实时数据的量(例如,lba计数)。然而,实时数据334和非实时数据332都不必是lba空间320或已分配的lba空间342的单个连续区域,图3中所展示的实时数据334和非实时数据332的位置也不与实时数据和非实时数据的逻辑或物理地址值具有任何关联。通常,实时数据334和/或非实时数据332将存在于lba空间320的多个区域中,并因此不是连续的。可选地,然而,可以执行重映射或聚结过程(其也可被称为垃圾重组),以将部分或全部实时数据334合并为lba空间320的连续区域。

已分配的逻辑地址空间(342)是被利用的空间。在此讨论的利用减少模块和过程是其目的用于减小已分配的逻辑地址空间的大小并因此减少存储设备或数据存储系统中的非易失性存储器的利用的模块、应用和过程。典型地,减小已分配的逻辑地址空间的大小要求减小由存储设备或存储系统存储的实时数据334和/或非实时数据332的量,由此将已分配的逻辑地址空间的一部分转换为未分配的逻辑地址空间。在一些实施例中,非实时数据332的一部分被修整,并由此通过使用修整或去映射操作被转换为未分配的逻辑地址空间。

在一些实施例中,逻辑地址可能在lba空间(320)之外并因此不可用。之前可用的逻辑地址可以通过减小lba空间(320)的大小而不可用,从而使得所述地址不再位于lba空间(320)内并因此变得不可用(例如,对在lba空间(320)之外的逻辑地址请求正常的存储操作是未定义的操作或不正确的操作)。如以上指出的,lba空间(320)可以通过至存储设备的命令被缩小,或者主机可以将其对逻辑地址的使用限制到逻辑地址的缩小范围,因此有效地缩小lba空间(320)。

在一些实施例中,已分配的逻辑地址(342)的总数被限制。在这种实施例中,特定的逻辑地址被认为不可用,如果使用它们将致使系统超出限制的总数。例如,如果已分配的逻辑地址的总数被限制为五并且当前已分配的地址为1、3、19、45和273838,则除了这五个之外的任何具体的逻辑地址(例如,6、15、137等)将被认为是不可用的。

图4是根据一些实施例的映射表402和物理地址空间410的框图。在一些实施例中,映射表402用于将逻辑块地址(lba)从主机(例如,图1a的计算机系统110)的角度转换为存储设备(例如,图1a的存储设备120)中的非易失性存储器的在物理地址空间(例如,物理地址空间410)中的物理地址。在一些实施例中,lba是可由主机访问的最小单元存储数据的地址(例如,512b或4096b)。在一些实施例中,lba是在逻辑地址空间中按数值顺序组织的整数序列。在一些实施例中,lba是从逻辑地址空间选择的但不必连续的整数。例如,在利用稀疏逻辑地址空间的实现方式中,可寻址空间的量由可以被已分配的逻辑地址数量极限控制,但是那些逻辑地址分布在比可以被分配(例如,至主机或者主机或客户端的集合)的逻辑地址的最大数量更大的地址空间之上。

在一些实施例中,映射表402存储在与存储设备相关联的存储器中(例如,在图2a-1的存储器206-1中,作为转换表212-1的一部分)。在一些实施例中,物理地址是物理页编号(ppn),包括组编号、块编号和页编号。在图4中所示的示例中,lba0被映射至物理地址空间410的组1(例如,组420-1)、块3(例如,块421-3)、页37(页未在图4中示出)。图4示出物理地址空间410包括多个非易失性存储器块421、422、423、424。如上所述,并且如在块424-p的表示中所示,存储设备的物理地址空间中的每个非易失性存储器块通常包括多个页426,其中,每一页是块的最小单独可访问(例如,可读或可写)部分的实例。尽管图4展示了逻辑地址至物理地址映射的一个示例,在其他实施例中,可以使用不同的映射。例如,在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,八个)逻辑地址相对应(例如,每逻辑地址条目8个lba)。在一些实施例中,映射表402不需要包含连续的lba地址并且可以以任何方式被组织以促进查找操作,例如,哈希表、二叉树、内容可寻址存储器等。

如以下关于图5a所讨论的,单级闪存单元(slc)存储一比特(“0”或“1”)。因此,slc存储器设备的存储密度为每存储器单元一比特信息。然而,多级闪存单元(mlc)通过使用在存储器单元的总电压范围内的不同范围可以每单元存储两比特或更多比特的信息,以表示多比特比特元组。进而,mlc存储器设备的存储密度为每单元多比特(例如,每存储器单元两比特)。

闪存设备利用存储器单元来将数据存储为电性值,如电荷或电压。每个闪存单元通常包括单晶体管,所述单晶体管具有用于存储电荷的浮栅,所述浮栅修改晶体管的阈值电压(即,导通晶体管所需的电压)。电荷大小以及相应的阈值电压用于表示一个或多个数据值。在一些实施例中,在读操作期间,读阈值电压施加于晶体管的控制栅极并且所产生的感测电流或电压被映射为数据值。

在闪存单元的背景下,术语“单元电压”和“存储器单元电压”通常指存储单元的阈值电压,所述阈值电压是需要施加于存储器单元的晶体管的栅极以便由晶体管传导电流的最小电压。类似地,施加于闪存单元的读阈值电压(有时也被称为读信号、读电压和/或读阈值)是施加于闪存单元的栅极以判定存储器单元是否在所述栅极电压处传导电流的栅极电压。在一些实施例中,当闪存单元的晶体管在给定读阈值电压处传导电流时,指示所述单元电压小于读阈值电压,针对所述读操作的原始数据值为“1”并且另外地所述原始数据值为“0”。

图5a是根据一些实施例的在单级闪存单元(slc)中找到的电压分布300a随时间推移的简化预知图。图5a中示出的电压分布300a出于说明目的已经被简化。在这个示例中,slc的电压范围约从nmos晶体管的源极端子处的电压vss延伸为nmos晶体管的漏极端子处的电压vdd。这样,电压分布300a在vss与vdd之间延伸。

源极电压vss与漏极电压vdd之间的顺序电压范围301和302用于分别表示相应的比特值“1”和“0”。每个电压范围301、302具有对应的中心电压v1301b、v0302b。如以下所讨论的,在许多情况下,响应于施加的读阈值电压而感测到的存储单元电流指示不同于与写入存储器单元中的对应比特值相对应的对应中心电压v1301b或v0302b的存储器单元电压。单元电压和/或当对存储器单元进行读操作时感测到的单元电压的误差可以在写操作、读操作期间或者由于将数据写入存储器单元时与执行读操作以读取存储在存储器单元中的数据时之间的单元电压的“漂移”而发生。为了便于讨论,这些影响统一描述为“单元电压漂移”。每个电压范围301、302还可以具有对应的电压分布301a、302a,所述电压分布可以由于以上定义的误差诱导因素示例的任意数量的组合而发生。

在一些实现方式中,读阈值电压vr被施加在相邻的中心电压之间(例如,被施加在相邻的中心电压v1301b与v0302b之间的中间区域附近)。可选地,在一些实现方式中,读阈值电压位于电压范围301与302之间。在一些实现方式中,读阈值电压vr被施加在电压分布301a与302a重叠位置附近的区域中,所述区域不必邻近相邻中心电压v1301b与v0302b之间的中间区域。

为了增加闪存的存储密度,闪存已经从单级(slc)单元闪存发展为多级单元(mlc)闪存,从而使得可以由每个存储器单元存储两比特或更多比特。如以下参照图5b所讨论的,mlc闪存设备用于通过使用在存储器单元的总电压范围内的电压范围来存储多比特,以表示不同的比特元组。mlc闪存设备相比使用相同制造工艺产生的slc闪存设备通常更易出错,因为mlc闪存设备的用于存储不同数据值的电压之间的有效电压差更小。此外,由于任意数量的因素组合(如,电气波动、存储介质缺陷、操作状态、设备历史和/或读写电路),典型的误差包括与将以其他方式代表特定比特元组的正确存储的电压范围相邻的电压范围内的特定mlc中存储的电压电平。如以下参照图5b更详细讨论的,这种误差的影响可以通过对数据进行灰度编码而减小,从而使得相邻电压范围表示比特元组之间的单比特变化。

图5b是根据一些实施例的在多级闪存单元(mlc)中找到的电压分布300b随时间推移的简化预知图。图5b中示出的电压分布300b出于说明性目的已经被简化。mlc的单元电压约从nmos晶体管的源极端子处的电压vss延伸为漏极端子处的电压vdd。这样,电压分布300b在vss与vdd之间延伸。

源极电压vss与漏极电压vdd之间的顺序电压范围311、312、313、314用于分别表示相应的比特元组“11”“01”、“00”、“10”。每个电压范围311、312、313、314具有对应的中心电压311b、312b、313b、314b。每个电压范围311、312、313、314还具有对应的电压分布311a、312a、313a、314a,所述电压分布可以由于任意数量的因素组合(如,电气波动、存储介质缺陷、操作状态、设备历史(例如,编程-擦除(p/e)循环数量)和/或读写电路的不完美性能或设计)而发生。

理想上,在写操作期间,mlc的浮栅上的电荷将被设置成使得所产生的单元电压在范围311、312、313、314之一的中心处,以便将相应的比特元组写入mlc中。确切地,所产生的单元电压将被设置为v11311b、v01312b、v00313b和v10314b之一,以便写入比特元组“11”“01”、“00”和“10”中的一个相应元组。实际上,由于以上提及的因素,初始单元电压可以不同于写入mlc中的数据的中心电压。

读阈值电压vra、vrb与vrc被置于相邻中心电压之间(例如,被置于相邻中心电压之间的中间点处或附近),并且因此,将阈值电压定义在电压范围311、312、313、314之间。在读操作期间,施加读阈值电压vra、vrb与vrc之一,以使用比较过程来确定单元电压。然而,由于以上所讨论的各因素,实际单元电压和/或当对mlc进行读操作时接收的单元电压可以不同于与写入单元中的数据值相对应的对应中心电压v11311b、v01312b、v00313b和v10314b。例如,实际单元电压可以整体不同于电压范围,强烈地指示mlc正存储与写入mlc中不同的比特元组。更一般地,实际单元电压可以接近读比较电压之一,使得难以肯定地确定哪两个相邻的比特元组被mlc存储。

单元电压和/或当对mlc进行读操作时接收到的单元电压的误差可以在写操作、读操作期间或者由于将数据写入mlc时与执行读操作以读取存储在mlc中的数据时之间的单元电压的“漂移”而发生。为了便于讨论,单元电压和/或当对mlc进行读操作时接收到的单元电压的误差有时统一被称为“单元电压漂移”。

一种用于减小从一个电压范围到相邻电压范围的单元电压漂移影响的方式是对比特元组进行灰度编码。对比特元组进行灰度编码包括约束比特元组的分配,从而使得特定电压范围的对应比特元组与相邻电压范围的对应比特元组相差仅一比特。例如,如图5b中所示,相邻范围301和302的相应比特元组分别为“11”和“01”,相邻范围302和303的相应比特元组分别为“01”和“00”,并且相邻范围303和304的相应比特元组分别为“00”和“10”。使用灰度编码,如果单元电压偏移接近读比较电压电平,则误差通常被限制为2比特比特元组内的单比特。

尽管图5b的描述使用q=2(即,在mlc闪存中每单元2比特)的示例,本领域技术人员将理解的是,本文描述的实施例可以扩展至每单元具有多于四个可能状态的存储器单元,每单元产生多于两比特的信息。例如,在一些实施例中,三级存储器单元(tlc)每单元具有八个可能的状态,每单元产生三比特信息。作为另一个示例,在一些实施例中,四级存储器单元(qlc)每单元具有16个可能的状态,每单元产生四比特信息。作为另一个示例,在一些实施例中,一个单元仅可以存储6个状态,每单元产生约2.5比特的信息,意味着两个在一起的单元将提供36个可能的状态,每单元对存储5比特的信息绰绰有余。

图6展示了根据一些实施例的管理存储系统的方法600的流程图表示。至少在一些实施例中,方法600由存储设备(例如,图1a中的存储设备120)或存储设备的一个或多个部件(例如,图1a中的存储控制器124和/或存储介质130)执行,其中,存储设备与主机系统(例如,图1a中的计算机系统110)操作性地耦合。在一些实施例中,方法600由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1a和图2a-1中所示出的管理模块121-1的一个或多个处理单元(cpu)122-1)执行的指令进行控制。在一些实施例中,方法600由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、和/或图1c的存储系统170)或存储系统的一个或多个部件(例如,图1a的计算机系统110和/或存储设备120、图1b的存储系统控制器150、和/或图1c的集群控制器180)执行。在一些实施例中,在主机(例如,图1a的计算机系统110、图1b的从计算机系统142、和/或图1c的计算机系统172)处执行方法600的操作中的一些操作,并且向存储设备(例如,图1a的存储设备120)和/或存储系统(例如,图1b的存储系统控制器150、和/或图1c的集群控制器180)的一个或多个子系统传输信息。在一些实施例中,方法600至少部分地由存储在非瞬态计算机可读存储介质中并由存储系统的子系统的一个或多个处理器(如图1b和图2b-1中所示出的系统管理模块151-1的一个或多个处理单元(cpu)152-1或者图1c和图2c-1中所示出的集群管理模块181-1的一个或多个处理单元(cpu)182-1)执行的指令进行控制。在一些实施例中,方法600至少部分地由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(图1a、图1b和图1c中未示出的主机的处理器)执行的指令控制。为便于解释,以下描述了由存储设备(例如,图1a的存储设备120)执行的方法600。然而,本领域的技术人员将理解的是,在其他实施例中,在方法600中所描述的操作中的一项或多项操作由主机(例如,图1a的计算机系统110、图1b的从计算机系统142、和/或图1c的计算机系统172)和/或存储系统的不同于存储设备的一个或多个子系统(例如,图1b的存储系统控制器150和/或图1c的集群控制器180)执行。

存储设备(例如,图1a的存储设备120)根据存储设备的一个或多个度量(例如,包括与存储设备保留数据的能力相对应的一个或多个状态度量、与存储设备的性能相对应的一个或多个性能度量、与存储设备上的磨损相对应的一个或多个磨损度量、和/或一个或多个时间度量)来触发(602)用于减小存储设备的非易失性存储器的声明容量的条件。存储设备的度量包括存储设备的非易失性存储介质(例如,图1a的存储介质130)的度量(例如,磨损度量,如p/e循环计数、写操作计数等),但不必受限于这些度量。例如,存储设备的一些度量(例如,一些性能度量,如延迟度量、测量完成写操作或擦除操作需要多久或需要多少次操作的度量等)反映存储介质性能以及控制器和/或其他存储设备部件性能两者。

在一些实施例中,存储设备用于确定触发条件的度量包括存储设备的写放大度量。在一些实施例中,存储设备的用于确定触发条件的另一个度量是预留空间度量(例如,超过存储设备的声明容量的总存储容量的数量或百分比、和/或在多个存储器块(或存储设备的其他部分)从当前编码格式(例如,tlc、mlc和/或数据冗余机制)投射转换为较低存储密度编码格式(例如,mlc、slc和/或数据冗余机制)之后超过存储设备的声明容量的总存储容量的数量或百分比)。例如,在一些实施例中,如果与由于磨损或由于块(或其他部分)故障而从服务中去除(例如,已经或将从服务中去除)以满足服务度量的预定义质量的存储设备的多个块(或其他部分)相对应的投射的预留空间度量下降到预定义阈值(例如,非零阈值,2%或5%等)以下,或者下降到根据存储设备的测量的或投射的写放大而确定的阈值以下,则触发条件被确定。

写放大是一种现象,其中,写入存储介质(例如,存储设备120中的存储介质130)的实际物理数据量是由主机(例如,计算机系统110,有时被称为主机)写入介质的逻辑数据量的倍数。如以上所讨论的,当存储介质的块在其可以被重写之前必须被擦除时,用于执行这些操作的垃圾收集过程一次或多次产生重写数据。这个倍乘效应增加了在存储介质的寿命之上所要求的写次数,其缩短了可以可靠操作的时间。用于计算存储系统的写放大的公式由以下等式给出:

任何基于闪存的数据存储系统架构的目标之一是尽可能地减少写放大,从而使得可用的持久性用于满足存储介质可靠性和保修规格。更高的系统持久性还导致更低的成本,因为存储系统可能需要更少的预留空间。通过减少写放大,存储介质的持久性增加并且存储系统的整体成本降低。通常,垃圾收集是在具有最少数量的有效页的擦除块上执行的,以获得最佳的性能和最佳的写放大。

在一些实施例中,根据所述一个或多个度量的非线性和/或线性组合来检测触发条件。例如,在一些实施例中,通过将磨损度量(如,p/e循环计数)与之前确定的值(例如,阈值)进行比较来检测触发条件。在一些实施例中,触发条件还可以通过其他手段(例如,通过人类操作员)来断言或者通过人类操作员来调度。例如,由于资源的预期可用性或不可用性,可能期望发起改善过程。例如,由于存储设备的性能特性(包括可靠性)改变,可能期望发起改善过程。

在一些实施例中,根据对所述一个或多个度量的历史知识来检测触发条件。例如,历史知识可以是一个或多个度量的运行平均值。在另一个示例中,历史知识可以用于确定(例如,计算)一个或多个度量在未来特定时间(例如,未来的小时、天、周、或月)的一个或多个预计值,并且触发条件可以根据一个或多个投射值而被检测到。后面的方法可以具体地有助于避免(例如,由于磨损)导致数据丢失的事件,或者更具体地用于避免显著地影响由存储系统提供的服务质量的事件,并且用于使存储系统能够在紧急需要这样做之前进行改善测量。例如,在一些实施例中,通过将历史磨损度量(如,p/e循环计数)与之前确定的值进行比较来检测触发条件,从而预测存储介质的一部分的磨损。类似地,在一些实施例中,通过将历史度量(如,误码率(ber)、或度量变化率、(存储介质或存储介质的一部分的)ber、或投射值(例如,在未来具体时间处的投射ber率,如基于当前的或历史的ber以及ber的变化率确定的))与之前确定的值进行比较来检测触发条件,从而预测由于误差校正的增加的计算要求引起的性能降级。

在具有多个存储设备的存储系统中,触发条件可以取决于从多个存储设备获得的度量。改善过程在或者按顺序或者并行地在每次在多于一个的存储设备上操作。例如,存储系统可以具有与当前正由改善过程并行操作的存储设备数量无关的固定最大容量减小速率(例如,当减少利用时,存储设备之间的最大数据移动速率)。触发条件应该包括单独地以及组合地考虑:当确定目标容量减少时多个存储设备的度量;以及由于所述固定最大速率对改善过程的调度。

存储设备将用于减小存储设备的非易失性存储器的声明容量的触发条件通知(604)给与存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)。在一些实施例中,当接收触发条件通知时,主机发送改善触发以发起改善过程(606)。

存储设备或主机检测改善触发并且根据检测到的改善触发来执行改善过程(606),以减小存储设备的非易失性存储器的声明容量。在一些实施例中,改善过程包括用于减少利用的过程(608)、用于减小声明容量的过程(610)、和/或用于通告(612)所减小的声明容量的过程。如以上关于图2d所讨论的,在一些实施例中,改善过程(606)包括利用减少过程(608)(例如,由图2a-1和图2a-2的利用模块232、图2b-1和图2b-2的利用模块262、或图2c-1和图2c-2的利用模块292执行)和/或声明容量减小过程(610)(例如,由图2a-1和图2a-2的容量模块234、图2b-1和图2b-2的容量模块264、或图2c-1和图2c-2的容量模块294执行)。在一些情况下,如当由主机利用的存储设备的量小于减小的声明容量时,跳过或放弃执行用于减少利用的过程(608)或者用于减少利用的过程的一个或多个部分。在一些实施例中,尽管图6示出操作608、610和612为改善过程(606)的顺序过程,但是这些过程可以是重叠的、不按顺序的和/或以不同顺序执行的。

在一些实施例中,在图6中上述操作(例如,操作602、604和/或606)之前,方法600包括减小(601)存储设备的非易失性存储器的预留空间。如以上所描述的,预留空间指超过存储设备的声明容量的总存储容量的数量或百分比。在一些实施例中,预留空间指用于存储用户数据(例如,存储在代表主机或主机系统的存储系统中的数据)的存储设备的物理容量(例如,比留出用于管理数据结构和元数据的容量少的物理容量)与被呈现为可用于主机或用户的逻辑容量之差。例如,在一些实施例中,如果存储设备的非易失性存储器具有总共12gb存储容量(例如,用于存储用户数据的总存储容量)和10gb声明容量,那么存储设备的非易失性存储器具有2gb预留空间。不像作为可用于主机的存储容量的声明容量,预留空间的额外容量不可见于主机作为可用存储。相反,预留空间用于增加存储设备的持久性(例如,通过随时间推移跨较大数量的块和/或页分布全部数量的写入和擦除)、提高性能(例如,通过提供附加的缓冲空间来管理p/e循环并提高写操作将具有对预先擦除的块的中间访问的可能性)、以及减小写放大。

在一些实施例中,减小(601)预留空间包括:(1)检测存储系统的存储设备的非易失性存储器的第一磨损状况,其中,存储设备的非易失性存储器的总存储容量包括声明容量和预留空间;并且(2)响应于检测第一磨损状况而执行补救动作,所述补救动作减小存储设备的非易失性存储器的预留空间而不减小存储设备的非易失性存储器的声明容量。在一些实施例中,执行减小预留空间的补救动作包括将非易失性存储器的一个或多个块标志为不可用。在一些实施例中,执行减小预留空间的补救动作包括将一个或多个mlc块转换为slc,或者更具体地,改变非易失性存储器的一个或多个块的物理编码格式。在一些实施例中,减小预留空间是由(例如,分别在图2a-1和图2a-2的存储器206中、在图2b-1和图2b-2的存储器246中、或在图2c-1和图2c-1的存储器276中,但未明确示出)管理模块121、系统管理模块151或集群管理模块181的预留空间模块执行的。此外,在一些情况或在一些实施例中,在执行第一时间操作602之前,多次执行预留空间减小操作601。例如,预留空间减小操作601可以在检测预定义的磨损状况的多次中的每一次中重复,直到预留空间下降或低于预定义的最小水平。

在一些实施例中,如以上关于操作602所描述的,根据存储设备的一个或多个度量(例如,包括与存储设备保留数据的能力相对应的一个或多个状态度量、与存储设备的性能相对应的一个或多个性能度量、与存储设备的磨损相对应的一个或多个磨损度量、和/或一个或多个时间度量)来检测第一磨损状况。在一些实施例中,根据确定存储设备的一个或多个度量满足第一标准并且存储设备的非易失性存储器的预留空间大于预定义的阈值(例如,声明容量的2%、至少100个块或40个块+n%声明容量等)来检测第一磨损状况。

在一些实施例中,检测触发条件(如以上关于操作602所描述的)包括检测不同于第一磨损状况的第二磨损状况。例如,在一些实施例中,根据确定存储设备的一个或多个度量满足第二标准(例如,针对第一磨损状况的第一标准或另一个标准)并且存储设备的非易失性存储器的预留空间小于或等于(例如,不大于)预定义的阈值(例如,声明容量的2%、至少100个块或40个块+n%声明容量等)来检测触发条件(或第二磨损状况)。

图7a至图7d展示了根据一些实施例的管理存储系统的方法700的流程图表示。至少在一些实施例中,方法700由存储设备(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)或存储设备的一个或多个部件(例如,图1a的存储控制器124)执行,其中,存储设备与主机系统(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、或图1c的集群控制器180)操作性地耦合。在一些实施例中,方法700由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1a和图2a-1中所示出的管理模块121-1的一个或多个处理单元(cpu)122-1)执行的指令进行控制。在一些实施例中,方法700由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、和/或图1c的存储系统170)或存储系统的一个或多个部件(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)执行。在一些实施例中,在存储设备(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)处执行方法700的操作中的一些操作,并且向主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、或图1c的集群控制器180)传输信息。为了便于解释,以下描述了如由存储设备(例如,图1a的数据存储系统100)的存储设备(例如,图1a的存储设备120)执行的方法700。然而,本领域的技术人员将理解的是,在一些实施例中,在方法700中所描述的操作中的一项或多项操作由另一个存储系统(例如,图1b的数据存储系统140的存储设备160、或图1c的数据存储系统170的存储设备194)的存储设备执行。

在存储系统的存储设备处(702),存储设备(例如,图1a的存储设备120)生成(704)存储设备的一个或多个度量,所述存储设备包括非易失性存储器。在一些实施例中,如以上关于图2a-1所描述的,度量模块(例如,图2a-1的度量模块222-1)用于生成存储设备的一个或多个度量,所述存储设备包括非易失性存储器。

在一些实施例中,存储设备包括(712)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1a的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1a的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1a的存储介质130)包括nand类型闪存或nor类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。

在一些实施例中,针对所述存储设备的多个存储器部分中的每个存储器部分,生成(714)所述存储设备的一个或多个度量包括生成所述一个或多个度量中的至少一个度量。在一些实施例中,针对存储设备的多个块中的每个块生成至少一个度量。在一些实施例中,针对存储设备的多页中的每一页生成至少一个度量。在一些实施例中,针对存储设备的多个区域中的每个区域生成至少一个度量。在一些实施例中,一些度量是在块基础上生成的,一些度量是在页基础上生成的,一些度量是在区域基础上生成的,和/或一些度量是在存储设备基础上生成的。

在一些实施例中,存储设备的所述一个或多个度量包括(716)与存储设备保留数据的能力(例如,存储设备的一个或多个存储介质的能力)相对应的一个或多个状态度量。在一些实施例中,存储控制器124(图1a)或其部件(例如,图2a-1的度量模块222-1)生成和/或维持针对存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个状态度量。在一些实施例中,所述一个或多个状态度量指示对应存储器部分保留数据的能力。在一些实施例中,与存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个状态度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个状态度量包括以下各项的子集或超集:(a)指示写入对应存储器部分中的页的数据的字节数的字节写入字段,(b)指示在对应存储器部分上执行的p/e循环数量的当前计数的编程-擦除(p/e)循环字段,(c)指示在从对应存储器部分的页读取的码字中检测到的误差数的比特误码率(ber)字段,以及(d)指示对应存储器部分的健全、性能和/或持久性的其他使用信息,如其涉及对应存储器部分保留数据的能力。在一些实施例中,整体地,所述一个或多个状态度量指示所述存储设备保留数据的能力。例如,随着存储设备老化,所述一个或多个状态度量反映存储设备保留数据的能力减弱(例如,从存储设备读取的数据随着存储设备老化通常具有更多的误差)。

在一些实施例中,所述存储设备的所述一个或多个度量包括(718)与所述存储设备的性能相对应的一个或多个性能度量。在一些实施例中,存储控制器124(图1a)或其部件(例如,图2a-1的度量模块222-1)生成和/或维持针对存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个性能度量。在一些实施例中,所述一个或多个性能度量对应于所述多个存储器部分中的对应存储器部分的性能。在一些实施例中,与存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个性能度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个性能度量包括以下各项的子集或超集:(a)延迟测量结果,以及(b)交易时间。在一些实施例中,所述一个或多个性能度量对应于所述存储设备的整体性能。例如,在一些实施例中,所述一个或多个性能度量包括针对存储设备的延迟测量结果和/或针对存储设备的交易时间。

在一些实施例中,所述存储设备的所述一个或多个度量包括(720)包括与所述存储设备上的磨损相对应的一个或多个磨损度量。在一些实施例中,存储控制器124(图1a)或其部件(例如,图2a-1的度量模块222-1)生成和/或维持针对存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个磨损度量。在一些实施例中,所述一个或多个磨损度量对应于所述多个存储器部分中的对应存储器部分上的磨损。在一些实施例中,与存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个磨损度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个磨损度量包括以下各项的子集或超集:(a)针对所述对应存储器部分的累积写入计数,(b)从所述对应存储器部分的累积读取计数,(c)在所述对应存储器部分上执行的p/e循环计数,以及(d)所述对应存储器部分的ber。在一些实施例中,所述一个或多个磨损度量对应于所述存储设备的整体磨损。例如,在一些实施例中,所述一个或多个磨损度量包括针对存储设备(例如,针对存储设备的一个或多个存储介质)的累积写入计数、从存储设备(例如,从存储设备的一个或多个存储介质)的累积读取计数、在存储设备上执行的p/e循环计数和/或存储设备的ber。

在一些实施例中,所述存储设备的所述一个或多个度量包括(722)包括一个或多个时间度量。在一些实施例中,存储控制器124(图1a)或其部件(例如,图2a-1的度量模块222-1)生成和/或维持一个或多个时间度量。在一些实施例中,所述一个或多个时间度量包括壁钟时间。

在一些实施例中,所述存储设备的所述一个或多个度量包括(724)所述一个或多个度量的来自多于一个时间的值。例如,在一些实施例中,所述存储设备的所述一个或多个度量包括在第一时间处针对所述存储设备(例如,针对存储设备的一个或多个存储介质)的累积写入计数以及在第二时间处针对所述存储设备(例如,针对存储设备的一个或多个存储介质)的累积写入计数。在一些实施例中,所述一个或多个度量的来自多于一个时间的值包括对所述一个或多个度量的历史知识。例如,在一些实施例中,来自多于一个时间的所述一个或多个度量包括所述一个或多个度量的滑动平均值。在另一个示例中,历史知识可以用于确定(例如,计算)一个或多个度量在未来特定时间(例如,未来的小时、天、周、或月)的一个或多个预计值。在一些实施例中,如以下关于操作706所描述的,所述存储设备的所述一个或多个度量的历史知识用于检测触发条件。

在存储系统的存储设备处(702),存储设备(例如,图1a的存储设备120)根据存储设备的一个或多个度量检测(706)触发条件。在一些实施例中,根据所述一个或多个度量的非线性和/或线性组合来检测触发条件。在一些实施例中,如以上关于图6的操作602而描述的,根据对所述一个或多个度量的历史知识来检测触发条件。在一些实施例中,如以上关于图2a-1所描述的,触发检测模块(例如,图2a-1的触发检测模块224-1)用于根据所述存储设备的所述一个或多个度量来检测触发条件。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测触发条件(706)之前,存储设备检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。

在存储系统的存储设备处(702),存储设备(例如,图1a的存储设备120)启用(708)与检测到的触发条件相关联的改善过程,所述改善过程用于减小对应存储设备的非易失性存储器的声明容量。在一些实施例中,改善过程包括用于减少主机进行的利用的过程、用于减小存储设备的非易失性存储器的声明容量的过程、和/或用于通告所减小的声明容量的过程。在一些实施例中,改善过程包括变更存储设备的非易失性存储器的至少一部分的编码格式(例如,从tlc到slc和/或改变冗余机制)。在一些实施例中,变更存储设备的非易失性存储器的至少一部分的编码格式包括将存储设备的整个非易失性存储器的编码格式设置成低密度物理编码格式(例如,slc)。例如,在改善过程之前,存储设备包括被编码为tlc的一些块(例如,98%)和被编码为slc的其他块(例如,2%),并且在改善过程之后,使用低密度物理编码格式(slc)来对所有块进行编码。后一个示例可能与初始地使用tlc来存储所有客户端数据并使用slc来存储所有存储设备元数据的存储设备。改善过程在不改变存储设备元数据的编码格式(slc)的情况下将客户端数据中的所有客户端数据从tlc转换成slc。在一些实施例中,如以上关于图2a-1所描述的,启用模块(例如,图2a-1的启用模块226-1)用于启用与检测到的触发条件相关联的改善过程,所述改善过程用于减小存储设备的非易失性存储器的声明容量。

在一些实施例中,用于减小存储设备的非易失性存储器的声明容量的改善过程包括例如如以上关于图6的操作608而描述的用于减少对存储设备的非易失性存储设备的利用的过程。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(726)将触发条件通知给与存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)。在一些实施例中,将触发条件通知给主机包括使用未经请求的通信来通知主机。例如,在一些实施例中,未经请求的通信包括中断通信。作为另一个示例,在一些实施例中,未经请求的通信包括远程直接存储器访问(rdma)。作为又另一个示例,在一些实施例中,未经请求的通信包括tcp连接请求或tcp数据传输。在一些实施例中,未经请求的通信包括任何其他形式的未经请求的通信。

在一些实施例中,主机包括(728)客户端,代表所述客户端而将数据存储在存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、图1c的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。例如,在一些实施例中,主机是(1)计算机系统110(图1a)或者计算机系统110执行的客户端过程、模块或应用;(2)计算机系统142(图1b)或者计算机系统142执行的客户端过程、模块或应用;和/或(3)计算机系统172(图1c)或者计算机系统172执行的客户端过程、模块或应用。

在一些实施例中,主机包括(730)存储系统(例如,图1b的数据存储系统140)的存储系统控制器。在一些实施例中,存储系统控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储系统控制器150(图1b)。在这些实施例中的一些实施例中,数据存储系统(例如,图1b的数据存储系统140)被称为纵向扩展系统。

在一些实施例中,主机包括(732)存储系统(例如,图1c的数据存储系统170)的集群控制器。在一些实施例中,如例如在图1c中(在所述图中,数据存储子系统中的每个数据存储子系统可以被实施为具有一个或多个存储设备的数据存储系统(例如,图1b的数据存储系统140))所示出的,集群控制器在一个或多个数据存储子系统当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1c)。在这些实施例中的一些实施例中,数据存储系统(例如,图1c的数据存储系统170)被称为向外扩展系统,有时被称为集群式存储系统。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(734):(1)接收来自与存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的查询,以及(2)响应于接收所述查询,上报触发条件。例如,在一些实施例中,主机对触发条件进行轮询,并且存储设备接收来自主机的查询并且响应于接收查询而上报触发条件。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(736):(1)接收来自与存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收所述命令,发送对命令的响应和触发条件通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从存储设备中进行读取的请求和/或对存储设备进行写入的请求。在一些实施例中,命令包括对存储设备的温度的请求。在一些实施例中,命令包括对存储设备的其他某些状态的请求。在一些实施例中,触发状态通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自存储设备的数据的读取请求,并且存储设备(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储设备发送与读取请求相对应的数据和触发条件通知。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(738):(1)接收来自与存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收所述命令,发送对命令的响应和提示主机获取关于触发条件的信息的通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从存储设备中进行读取的请求和/或对存储设备进行写入的请求。在一些实施例中,命令包括对存储设备的温度的请求。在一些实施例中,命令包括对存储设备的其他某些状态的请求。在一些实施例中,提示主机获取关于触发条件的通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自存储设备的数据的读取请求,并且存储设备(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储设备发送与读取请求相对应的数据和提示主机获取关于触发条件的信息的通知(例如,通过设置通知比特)。在一些实施例中,用于在对来自主机的命令进行响应时返回这种通知的机制是scsi延迟错误或延迟错误响应码。

尽管在此描述了通知的一些示例,但是本领域的技术人员将理解的是,本文中所描述的实施例可以扩展至其他通知方法(例如,如以下关于图10c的操作1028所描述的只读模式通知)。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(740)将改善过程安排成在存储设备上执行。例如,在一些实施例中,触发条件反馈给存储设备,并且存储设备通过调度改善过程在存储设备上执行而启用改善过程。在一些实施例中,然而,所述改善过程至少部分地由除了所述存储设备之外的装置执行(例如,至少部分地由所述主机、或由存储系统控制器或由包括不同于所述存储设备的至少一个存储设备的数据存储系统的集群控制器执行)。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(742)确定改善过程的一个或多个参数。在一些实施例中,改善过程的所述一个或多个参数包括改善过程的紧急程度、目标减小的存储设备的非易失性存储器的声明容量、和/或对存储设备的非易失性存储器的利用的目标减少量、或其任何组合或子集。例如,在一些实施例中,或在一些情况下,改善过程的一个或多个参数包括指示紧急程度很高(例如,需要在下一小时内开始改善过程)的参数以及指示需要在存储设备中减小至少1gb的存储容量的参数。

在一些实施例中,启用与检测到的触发条件相关联的改善过程进一步包括(744)至少上报改善过程的一个或多个参数的子集。例如,在一些实施例中,启用与检测到的触发条件相关联的改善过程进一步包括上报存储设备中非易失性存储器的目标存储容量减小。

在一些实施例中,在启用改善过程之后(710):存储设备(1)根据所述存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效,中止用于减小存储设备的非易失性存储器的声明容量的改善过程。例如,在一些情况下,存储设备的所述一个或多个度量可能改变从而使得触发条件不再有效(例如,不再需要改善过程)。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。在一些实施例中,因为所述一个或多个度量的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以根据存储设备的所述一个或多个度量来重新计算或重新评估(例如,周期性地、半连续地、不规律地、初始地、最终地等)触发条件。在一些实施例中,触发检测模块(例如,图2a-1的触发检测模块224-1)和/或启用模块(例如,图2a-1的启用模块226-1)用于在启用改善过程之后:(1)根据存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效,中止用于减小存储设备的非易失性存储器的声明容量的改善过程,如以上关于图2a-1所描述的。

在一些实施例中,以上所描述的方法700的任何操作由存储设备执行,所述存储设备包括:(1)非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器(例如,控制器中或者耦合至控制器的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使存储设备执行本文中所描述的方法中的任何方法或控制其执行。

在一些实施例中,以上所描述的方法700的任何操作由存储设备执行,所述存储设备包括用于执行本文中所描述的方法中的任何方法的装置。

在一些实施例中,以上所描述的方法700的任何操作由存储系统执行,所述存储系统包括:(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的存储器(例如,存储设备中的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使存储设备执行本文中所描述的方法中的任何方法或控制对其的执行。

图8a至图8d展示了根据一些实施例的管理存储系统的方法800的流程图表示。在一些实施例中,方法800由主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)或主机的一个或多个部件(例如,图1a的管理模块121-2、图1b的系统管理模块151、或图1c的集群模块181)执行。在一些实施例中,方法800由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(如图1b和图2b-1中所示出的系统管理模块151-1的一个或多个处理单元(cpu)152-1或者图1c和图2c-1中所示出的集群管理模块181-1的一个或多个处理单元(cpu)182-1)执行的指令进行控制。在一些实施例中,方法800由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的存储系统170)或存储系统的一个或多个部件(例如,图1a的从计算机系统110、图1b的存储系统控制器150、或图1c的集群控制器180)执行。在一些实施例中,在主机(例如,图1a的计算机系统110、图1b的从计算机系统142、或图1c的计算机系统172)处执行方法800的操作中的一些操作,并且向存储设备(例如,图1a的存储设备120)和/或存储系统(例如,图1b的存储系统控制器150、或图1c的集群控制器180)的一个或多个子系统传输信息。在一些实施例中,方法800至少部分地由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(图1a、图1b和图1c中未示出的主机的处理器)执行的指令控制。

在一些实施例中,主机包括(812)客户端,代表所述客户端而将数据存储在存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、图1c的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。例如,在一些实施例中,主机是计算机系统110(图1a)或者计算机系统110执行的客户端过程或应用;或者是计算机系统142(图1b)或计算机系统142执行的客户端过程或应用;或计算机系统172(图1c)或者计算机系统172执行的客户端过程或应用。

在一些实施例中,主机包括(814)存储系统(例如,图1b的数据存储系统140)的存储系统控制器。在一些实施例中,存储系统控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储系统控制器150(图1b)。在这些实施例中的一些实施例中,数据存储系统(例如,图1b的数据存储系统140)被称为纵向扩展系统。

在一些实施例中,主机包括(816)存储系统(例如,图1c的数据存储系统170)的集群控制器。在一些实施例中,如例如在图1c中(在所述图中,数据存储子系统中的每个数据存储子系统可以被实施为具有一个或多个存储设备的数据存储系统(例如,图1b的数据存储系统140))所示出的,集群控制器在一个或多个数据存储子系统当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1c)。在这些实施例中的一些实施例中,数据存储系统(例如,图1c的数据存储系统170)被称为横向扩展系统或集群式存储系统。

在与存储系统的存储设备操作性地耦合的主机处(802):主机获取(804)存储设备(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)的一个或多个度量,所述存储设备包括非易失性存储器。在一些实施例中,存储设备生成和/或维持存储设备的所述一个或多个度量,并且主机从存储设备处获取所述一个或多个度量。在一些实施例中,存储系统的不同于存储设备的一个或多个子系统(例如,图1b的存储系统控制器150、或图1c的集群控制器180)生成和/或维持存储设备的所述一个或多个度量,并且主机从所述一个或多个子系统处获取所述一个或多个度量。在一些实施例中,主机生成和/或维持存储设备的一个或多个度量。在一些实施例中,如以上关于图2a-2所描述的,度量模块(例如,图2a-2的度量模块222-2)用于获取存储设备的一个或多个度量,所述存储设备包括非易失性存储器。

在一些实施例中,存储设备包括(818)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1a的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1a的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1a的存储介质130)包括nand类型闪存或nor类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。

在一些实施例中,针对所述存储设备的多个存储器部分中的每个存储器部分(例如,块、页、区域等),获取(804)所述存储设备的一个或多个度量包括获取(820)所述一个或多个度量中的至少一个度量。在一些实施例中,针对存储设备的多个块中的每个块生成至少一个度量。在一些实施例中,针对存储设备的多页中的每一页生成至少一个度量。在一些实施例中,针对存储设备的多个区域中的每个区域生成至少一个度量。在一些实施例中,一些度量是在块基础上生成的,一些度量是在页基础上生成的,一些度量是在区域基础上生成的,和/或一些度量是在存储设备基础上生成的。

在一些实施例中,所述存储设备的所述一个或多个度量包括(822)与所述存储设备保留数据的能力相对应的一个或多个状态度量。在一些实施例中,主机或其部件(例如,图2a-2的度量模块222-2)生成和/或维持针对存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个状态度量。在一些实施例中,所述一个或多个状态度量指示对应存储器部分保留数据的能力。在一些实施例中,与存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个状态度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个状态度量包括以下各项的子集或超集:(a)指示写入对应存储器部分中的页的数据的字节数的字节写入字段,(b)指示在对应存储器部分上执行的p/e循环数量的当前计数的编程-擦除(p/e)循环字段,(c)指示在从对应存储器部分的页读取的码字中包括的误差数的比特误码率(ber)字段,以及(d)指示对应存储器部分的健全、执行和/或持久性的其他使用信息,如其涉及对应存储器部分保留数据的能力。在一些实施例中,整体地,所述一个或多个状态度量指示所述存储设备保留数据的能力。例如,随着存储设备老化,所述一个或多个状态度量反映存储设备保留数据的能力减弱(例如,从存储设备读取的数据随着存储设备老化包括更多的误差)。

在一些实施例中,所述存储设备的所述一个或多个度量包括(824)与所述存储设备的性能相对应的一个或多个性能度量。在一些实施例中,主机或其部件(例如,图2a-2的度量模块222-2)生成和/或维持针对存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个性能度量。在一些实施例中,所述一个或多个性能度量对应于所述多个存储器部分中的对应存储器部分的性能。在一些实施例中,与存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个性能度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个性能度量包括以下各项的子集或超集:(a)延迟测量结果,以及(b)交易时间。在一些实施例中,所述一个或多个性能度量对应于所述存储设备的整体性能。例如,在一些实施例中,所述一个或多个性能度量包括针对存储设备的延迟测量结果和/或针对存储设备的交易时间。

在一些实施例中,所述存储设备的所述一个或多个度量包括(826)包括与所述存储设备上的磨损相对应的一个或多个磨损度量。在一些实施例中,主机或其部件(例如,图2a-2的度量模块222-2)生成和/或维持针对存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个磨损度量。在一些实施例中,所述一个或多个磨损度量对应于所述多个存储器部分中的对应存储器部分上的磨损。在一些实施例中,与存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个磨损度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个磨损度量包括以下各项的子集或超集:(a)针对所述对应存储器部分的累积写入计数,(b)从所述对应存储器部分的累积读取计数,(c)在所述对应存储器部分上执行的p/e循环计数,以及(d)所述对应存储器部分的ber。在一些实施例中,所述一个或多个磨损度量对应于所述存储设备的整体磨损。例如,在一些实施例中,所述一个或多个磨损度量包括针对存储设备的累积写入计数、从存储设备的累积读取计数、在存储设备上执行的p/e循环计数和/或存储设备的ber。

在一些实施例中,所述存储设备的所述一个或多个度量包括(828)包括一个或多个时间度量。在一些实施例中,主机或其部件(例如,图2a-2的度量模块222-2)生成和/或维持一个或多个时间度量。在一些实施例中,所述一个或多个时间度量包括壁钟时间。

在一些实施例中,所述存储设备的所述一个或多个度量包括(830)所述一个或多个度量的来自多于一个时间的值。例如,在一些实施例中,所述存储设备的所述一个或多个度量包括在第一时间对所述存储设备的累计写入计数以及在第二时间对所述存储设备的累计写入计数。在一些实施例中,所述一个或多个度量的来自多于一个时间的值包括对所述一个或多个度量的历史知识。例如,在一些实施例中,来自多于一个时间的所述一个或多个度量包括所述一个或多个度量的滑动平均值。在另一个示例中,历史知识可以用于确定(例如,计算)一个或多个度量在未来特定时间(例如,未来的小时、天、周、或月)的一个或多个预计值。在一些实施例中,如以下关于操作806所描述的,所述存储设备的所述一个或多个度量的历史知识用于检测触发条件。

在与存储系统的存储设备操作性地耦合的主机处(802),主机根据存储设备的所述一个或多个度量检测(806)触发条件。在一些实施例中,根据所述一个或多个度量的非线性和/或线性组合来检测触发条件。在一些实施例中,根据对所述一个或多个度量的历史知识来检测触发条件。在一些实施例中,如以上关于图2a-2所描述的,触发检测模块(例如,图2a-2的触发检测模块224-2)用于根据所述存储设备的所述一个或多个度量来检测触发条件。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测触发条件(806)之前,主机检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。

在与存储系统的存储设备操作性地耦合的主机处(802),主机启用(808)与检测到的触发条件相关联的改善过程,所述改善过程用于减小存储设备的非易失性存储器的声明容量。在一些实施例中,改善过程包括用于减少主机进行的利用的过程、用于减小存储设备的非易失性存储器的声明容量的过程、和/或用于通告所减小的声明容量的过程。在一些实施例中,改善过程包括变更存储设备的非易失性存储器的至少一部分的编码格式(例如,从tlc到slc和/或改变冗余机制)。在一些实施例中,变更存储设备的非易失性存储器的至少一部分的编码格式包括将存储设备的整个非易失性存储器的编码格式设置成低密度物理编码格式(例如,slc)。例如,在改善过程之前,存储设备包括被编码为tlc的一些块(例如,98%)和被编码为slc的其他块(例如,2%),并且在改善过程之后,使用低密度物理编码格式(slc)来对所有块进行编码。后一个示例可能与初始地使用tlc来存储所有客户端数据并使用slc来存储所有存储设备元数据的存储设备。改善过程在不改变存储设备元数据的编码格式(slc)的情况下将客户端数据中的所有客户端数据从tlc转换成slc。在一些实施例中,启用模块(例如,图2a-2的启用模块226-2)用于启用与检测到的触发条件相关联的改善过程,所述改善过程用于减小存储设备的非易失性存储器的声明容量,如以上关于图2a-2所描述的。

在一些实施例中,用于减小存储设备的非易失性存储器的声明容量的改善过程包括例如如以上关于图6的操作608而描述的用于减少对存储设备的非易失性存储设备的利用的过程。

在一些实施例中,启用(808)与检测到的触发条件相关联的改善过程包括调度(832)改善过程在存储设备上执行。例如,在一些实施例中,触发条件反馈给主机,并且主机通过调度改善过程在存储设备上执行而启用改善过程。

在一些实施例中,启用(808)与检测到的触发条件相关联的改善过程包括确定(834)改善过程的一个或多个参数。在一些实施例中,改善过程的所述一个或多个参数包括改善过程的紧急程度、目标减小的存储设备的非易失性存储器的声明容量、和/或对存储设备的非易失性存储器的利用的目标减少量、或其任何组合或子集。例如,在一些实施例中,改善过程的一个或多个参数包括指示紧急程度很高(例如,需要在下一小时内开始改善过程)的参数以及指示需要在存储设备中减小至少1gb的存储容量的参数。

在一些实施例中,启用(808)与检测到的触发条件相关联的改善过程进一步包括至少将上报改善过程的一个或多个参数的子集传达(836)至存储设备。例如,在一些实施例中,启用与检测到的触发条件相关联的改善过程进一步包括将需要在存储设备中减小的非易失性存储器的存储容量的目标量传达至存储设备。作为另一个示例,在一些实施例中,启用与检测到的触发条件相关联的改善过程进一步包括传达至存储设备,通过更改编码格式来重定作为所述存储设备的一部分的存储介质(例如,图1a中的存储介质130)的格式。

在一些实施例中,在启用改善过程之后(810):主机根据所述存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效,中止用于减小存储设备的非易失性存储器的声明容量的改善过程。例如,在一些情况下,存储设备的所述一个或多个度量可能改变从而使得触发条件不再有效(例如,不再需要改善过程)。例如,在改善过程的操作(例如,图6的操作606)期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。在一些实施例中,因为所述一个或多个度量的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以根据存储设备的所述一个或多个度量来重新计算或重新评估(例如,周期性地、半连续地、不规律地、初始地、最终地等)触发条件。在一些实施例中,触发检测模块(例如,图2a-2的触发检测模块224-2)和/或启用模块(例如,图2a-2的启用模块226-2)用于在启用改善过程之后:(1)根据存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效,中止用于减小存储设备的非易失性存储器的声明容量的改善过程,如以上关于图2a-2所描述的。

在一些实施例中,上述方法中的任何方法由存储系统执行,所述存储系统包括:(1)一个或多个存储设备(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)与所述一个或多个存储设备操作性地耦合的主机;(3)一个或多个处理器;以及(4)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述主机执行或控制在此所描述的方法中的任何方法的执行。

在一些实施例中,上述方法中的任何方法由耦合至一个或多个存储设备的主机系统执行,所述主机系统包括用于执行在此所描述的方法中的任何方法的装置。

在一些实施例中,上述方法800的任何操作由主机系统执行,所述主机系统包括:(1)用于操作性地耦合至存储系统的接口;(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述主机系统执行或控制在此所描述的方法中的任何方法的执行。

图9a至图9d展示了根据一些实施例的管理存储系统的方法900的流程图表示。至少在一些实施例中,方法900由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的数据存储系统170)或存储系统的一个或多个部件(例如,图1a的计算机系统110、图1b的存储系统控制器150、或图1c的集群控制器180)执行。在一些实施例中,方法900由存储在非瞬态计算机可读存储介质中并由存储系统的一个或多个处理器(比如,图1b和图2b-1中所示出的系统管理模块151-1的所述一个或多个处理单元(cpu)152-1、图1c和图2c-1中所示出集群管理模块181-1的所述一个或多个处理单元(cpu)182-1、或图2a-2中所示出的所包括的主机(例如,图1a的计算机系统110)的一个或多个处理器)执行的指令进行控制。为了便于解释,以下描述了如由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的数据存储系统170)执行的方法900。然而,本领域的技术人员将理解的是,在一些实施例中,在方法900中所描述的操作中的一项或多项操作由存储系统的不同于存储设备的一个或多个子系统(例如,图1b的存储系统控制器150、或图1c的集群控制器180)执行。

存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的存储系统170)针对存储系统的多个存储设备中的每个存储设备(例如,图1a的存储设备120、或图1b的存储设备160-1至160-m中的任何存储设备、或图1c的存储设备194-1至194-n或194-j至194-k中的任何存储设备)而获取(902)存储设备的一个或多个度量,存储设备包括非易失性存储器。尽管图1a仅示出了一个存储设备120,但是在一些实施例中,图1a的数据存储系统100包括多个存储设备,所述多个存储设备中的存储设备120是一个示例。在一些实施例中,存储设备生成和/或维持存储设备的所述一个或多个度量,并且存储系统从存储设备处获取所述一个或多个度量。在一些实施例中,存储系统的不同于存储设备的一个或多个子系统(例如,图1b的存储系统控制器150、或图1c的集群控制器180)生成和/或维持存储设备的所述一个或多个度量,并且存储系统从所述一个或多个子系统处获取所述一个或多个度量。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1而描述的,度量模块(例如,图2a-1和图2a-2的度量模块222、图2b-1的度量模块252-1、或图2c-1的度量模块282-1)用于针对存储系统的多个存储设备中的每个存储设备而获取存储设备的一个或多个度量,存储设备包括非易失性存储器。

在一些实施例中,获取(902)存储系统的多个存储设备中的对应存储设备(例如,图1a的存储设备120、图1b中的对应存储设备160、或图1c中的对应存储设备194)的一个或多个度量包括:针对对应存储设备的多个存储部分中的每个存储部分,获取(912)所述一个或多个度量中的至少一个度量。在一些实施例中,针对所述对应存储设备的多个块中的每个块生成至少一个度量。在一些实施例中,针对所述对应存储设备的多页中的每一页生成至少一个度量。在一些实施例中,针对所述对应存储设备的多个区域中的每个区域生成至少一个度量。在一些实施例中,一些度量是在块基础上生成的,一些度量是在页基础上生成的,一些度量是在区域基础上生成的,和/或一些度量是在存储设备基础上生成的。

在一些实施例中,所述对应存储设备的所述一个或多个度量包括(914)与所述对应存储设备保留数据的能力相对应的一个或多个状态度量。在一些实施例中,存储系统或其部件(例如,图2a-1中对应存储设备的度量模块222-1;图2b-1中存储系统控制器150的度量模块252-1;或图2c-1中集群控制器180的度量模块282-1)生成和/或维持所述对应存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个状态度量。在一些实施例中,所述一个或多个状态度量指示对应存储器部分保留数据的能力。在一些实施例中,与对应存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个状态度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个状态度量包括以下各项的子集或超集:(a)指示写入对应存储器部分中的页的数据的字节数的字节写入字段,(b)指示在对应存储器部分上执行的p/e循环数量的当前计数的编程-擦除(p/e)循环字段,(c)指示在从对应存储器部分的页读取的码字中包括的误差数的比特误码率(ber)字段,以及(d)指示对应存储器部分的健全、执行和/或持久性的其他使用信息,如其涉及对应存储器部分保留数据的能力。在一些实施例中,整体地,所述一个或多个状态度量指示所述对应存储设备保留数据的能力。例如,随着对应存储设备老化,所述一个或多个状态度量反映对应存储设备保留数据的能力减弱(例如,从对应存储设备读取的数据随着对应存储设备老化而包括更多的误差)。

在一些实施例中,所述对应存储设备的所述一个或多个度量包括(916)包括与所述对应存储设备的性能相对应的一个或多个性能度量。在一些实施例中,存储系统或其部件(例如,图2a-1中对应存储设备的度量模块222-1;图2b-1中存储系统控制器150的度量模块252-1;或图2c-1中集群控制器180的度量模块282-1)生成和/或维持所述对应存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个性能度量。在一些实施例中,所述一个或多个性能度量对应于所述多个存储器部分中的对应存储器部分的性能。在一些实施例中,与对应存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个性能度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个性能度量包括以下各项的子集或超集:(a)延迟测量结果,以及(b)交易时间。在一些实施例中,所述一个或多个性能度量对应于所述对应存储设备的整体性能。例如,在一些实施例中,所述一个或多个性能度量包括针对所述对应存储设备的延迟测量结果和/或针对所述对应存储设备的交易时间。

在一些实施例中,所述对应存储设备的所述一个或多个度量包括(918)包括与所述对应存储设备上的磨损相对应的一个或多个磨损度量。在一些实施例中,存储系统或其部件(例如,图2a-1中对应存储设备的度量模块222-1;图2b-1中存储系统控制器150的度量模块252-1;或图2c-1中集群控制器180的度量模块282-1)生成和/或维持所述对应存储设备的多个存储器部分(例如,在图1a的存储介质130中)的每个存储器部分的一个或多个磨损度量。在一些实施例中,所述一个或多个磨损度量对应于所述多个存储器部分中的对应存储器部分上的磨损。在一些实施例中,与对应存储设备的多个存储器部分中的对应存储器部分相关联的所述一个或多个磨损度量以与所述对应存储器部分相对应的特征向量的形式被存储。在一些实施例中,针对所述对应存储器部分以特征向量形式存储的所述一个或多个磨损度量包括以下各项的子集或超集:(a)针对所述对应存储器部分的累积写入计数,(b)从所述对应存储器部分的累积读取计数,(c)在所述对应存储器部分上执行的p/e循环计数,以及(d)所述对应存储器部分的ber。在一些实施例中,所述一个或多个磨损度量对应于所述对应存储设备的整体磨损。例如,在一些实施例中,所述一个或多个磨损度量包括针对所述对应存储设备的累积写入计数、从所述对应存储设备的累积读取计数、在所述对应存储设备上执行的p/e循环计数和/或所述对应存储设备的ber。

在一些实施例中,所述对应存储设备的所述一个或多个度量包括(920)包括一个或多个时间度量。在一些实施例中,存储系统或其部件(例如,图2a-1中对应存储设备的度量模块222-1;图2b-1中存储系统控制器150的度量模块252-1;或图2c-1中集群控制器180的度量模块282-1)生成和/或维持一个或多个时间度量。在一些实施例中,所述一个或多个时间度量包括壁钟时间。

在一些实施例中,对应存储设备的所述一个或多个度量包括(922)所述一个或多个度量的来自多于一个时间的值。例如,在一些实施例中,对应存储设备的所述一个或多个度量包括在第一时间对对应存储设备的累计写入的计数以及在第二时间对对应存储设备的累计写入的计数。在一些实施例中,所述一个或多个度量的来自多于一个时间的值包括对所述一个或多个度量的历史知识。例如,在一些实施例中,来自多于一个时间的所述一个或多个度量包括所述一个或多个度量的滑动平均值。在另一个示例中,历史知识可以用于确定(例如,计算)一个或多个度量在未来特定时间(例如,未来的小时、天、周、或月)的一个或多个预计值。在一些实施例中,如以下关于操作904而描述的,对应存储设备的所述一个或多个度量的历史知识用于检测触发条件。

存储系统检测(904)用于减小存储系统的所述多个存储设备中的对应存储设备的非易失性存储器的声明容量的触发条件,根据所述多个存储设备中的一个或多个存储设备的所述一个或多个度量来检测触发条件。替代性地,在一些实施例中,根据所述多个存储设备中的一个或多个存储设备的所述一个或多个度量来检测的触发条件是用于减小所述一个或多个存储设备的子集(例如,一个或多个,包括所有)的非易失性存储器的声明容量的触发条件,以下关于操作908而描述的相关联改善过程是用于减小所述一个或多个存储设备的子集(例如,一个或多个,包括所有)的非易失性存储器的声明容量的改善过程。在一些实施例中,根据所述一个或多个度量的非线性和/或线性组合来检测触发条件。在一些实施例中,根据对所述一个或多个度量的历史知识来检测触发条件。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1而描述的,触发检测模块(例如,图2a-1和图2a-2的触发检测模块224、图2b-1的触发检测模块254-1、或图2c-1的触发检测模块284-1)用于检测用于减小存储系统的所述多个存储设备中的对应存储设备的非易失性存储器的声明容量的触发条件,根据所述多个存储设备中的一个或多个存储设备的所述一个或多个度量来检测触发条件。以上参照图6而描述了触发条件的示例。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测触发条件(904)之前,存储系统检测磨损状况并在不减小对应存储设备的非易失性存储器的声明容量的情况下减小相应存储设备的非易失性存储器的预留空间。

在一些实施例中,对来自存储系统的所述多个存储设备的一个或多个度量进行组合以便检测触发条件。例如,可能有利的是,在所述多个存储设备中检查历史磨损度量(比如,p/e循环计数)的变化速率,以便在任何一个设备达到磨损极限之前留出足够时间来完成改善过程。

在一些实施例中,对应存储设备包括(906)一个或多个闪存设备。在一些实施例中,对应存储设备包括存储介质(例如,图1a的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1a的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1a的存储介质130)包括nand类型闪存或nor类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。

存储系统启用(908)与检测到的触发条件相关联的改善过程,所述改善过程用于减小对应存储设备的非易失性存储器的声明容量。在一些实施例中,改善过程包括变更对应存储设备的非易失性存储器的至少一部分的编码格式(例如,从tlc到slc和/或改变冗余机制)。在一些实施例中,变更存储设备的非易失性存储器的至少一部分的编码格式包括将存储设备的整个非易失性存储器的编码格式设置成低密度物理编码格式(例如,slc)。例如,在改善过程之前,存储设备包括被编码为tlc的一些块(例如,98%)和被编码为slc的其他块(例如,2%),并且在改善过程之后,使用低密度物理编码格式(slc)来对所有块进行编码。后一个示例可能与初始地使用tlc来存储所有客户端数据并使用slc来存储所有存储设备元数据的存储设备。改善过程在不改变存储设备元数据的编码格式(slc)的情况下将客户端数据中的所有客户端数据从tlc转换成slc。

在一些实施例中,改善过程包括用于减少主机进行的利用的过程、用于减小对应存储设备的非易失性存储器的声明容量的过程、和/或用于通告所减小的声明容量的过程。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1所描述的,启用模块(例如,图2a-1和图2a-2的启用模块226、图2b-1的启用模块256-1、或图2c-1的启用模块286-1)用于启用与检测到的触发条件相关联的改善过程,所述改善过程用于减小对应存储设备的非易失性存储器的声明容量。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(924)将触发条件通知给与对应存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)。在一些实施例中,将触发条件通知给主机包括使用未经请求的通信来通知主机。例如,在一些实施例中,未经请求的通信包括中断通信。

在一些实施例中,主机包括(926)客户端,代表所述客户端而将数据存储在存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、图1c的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。例如,在一些实施例中,主机是(1)计算机系统110(图1a)或者计算机系统110执行的客户端过程、模块或应用;(2)计算机系统142(图1b)或者计算机系统142执行的客户端过程或应用;和/或(3)计算机系统172(图1c)或者(4)计算机系统172执行的客户端过程、模块或应用。

在一些实施例中,主机包括(928)存储系统(例如,图1b的数据存储系统140)的存储系统控制器。在一些实施例中,存储系统控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储系统控制器150(图1b)。在这些实施例中的一些实施例中,数据存储系统(例如,图1b的数据存储系统140)被称为纵向扩展系统。

在一些实施例中,主机包括(930)存储系统(例如,图1c的数据存储系统170)的集群控制器。在一些实施例中,如例如在图1c中(在所述图中,数据存储子系统中的每个数据存储子系统可以被实施为具有一个或多个存储设备的数据存储系统(例如,图1b的数据存储系统140))所示出的,集群控制器在一个或多个数据存储子系统当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1c)。在这些实施例中的一些实施例中,数据存储系统(例如,图1c的数据存储系统170)被称为横向扩展系统。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(932):(1)接收来自与对应存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的查询,以及(2)响应于接收查询而上报触发条件。例如,在一些实施例中,计算机系统142(图1b)对触发条件进行轮询,并且存储系统控制器150(图1b)接收来自计算机系统142的查询并且响应于接收查询而上报触发条件。作为另一个示例,在一些实施例中,计算机系统172(图1c)对触发条件进行轮询,并且集群控制器150(图1c)接收来自计算机系统172的查询并且响应于接收查询而上报触发条件。作为又另一个示例,在一些实施例中,主机对触发条件进行轮询,并且对应存储设备接收来自主机的查询并且响应于接收查询而上报触发条件。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(934):(1)接收来自与对应存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收命令而发送对命令的响应和触发条件通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从对应存储设备中进行读取的请求和/或对对应存储设备进行写入的请求。在一些实施例中,命令包括对对应存储设备的温度的请求。在一些实施例中,命令包括对对应存储设备的其他某些状态的请求。在一些实施例中,触发状态通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自对应存储设备的数据的读取请求,并且对应存储设备(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,对应存储设备发送与读取请求相对应的数据和触发条件通知。作为另一个示例,在一些实施例中,主机(例如,图1b的计算机系统142、或者图1c的计算机系统172)下发对数据的读取请求,并且存储系统或存储系统的一个或多个部件(例如,图1b的存储系统控制器150、或者图1c的集群控制器180)(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储系统或存储系统的一个或多个部件发送与读取请求相对应的数据和触发条件通知。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(936):(1)接收来自与对应存储设备操作性地耦合的主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收命令而发送对命令的响应和提示主机获取关于触发条件的信息的通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从对应存储设备中进行读取的请求和/或对对应存储设备进行写入的请求。在一些实施例中,命令包括对对应存储设备的温度的请求。在一些实施例中,命令包括对对应存储设备的其他某些状态的请求。在一些实施例中,提示主机获取关于触发条件的通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自对应存储设备的数据的读取请求,并且对应存储设备(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,对应存储设备发送与读取请求相对应的数据和提示主机获取关于触发条件的信息的通知(例如,通过设置通知比特)。作为另一个示例,在一些实施例中,主机(例如,图1b的计算机系统142、或者图1c的计算机系统172)下发对数据的读取请求,并且存储系统或存储系统的一个或多个部件(例如,图1b的存储系统控制器150、或者图1c的集群控制器180)(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,对应存储设备发送与读取请求相对应的数据和提示主机获取关于触发条件的信息的通知(例如,通过设置通知比特)。在一些实施例中,用于在对来自主机的命令进行响应时返回这种通知的机制是scsi延迟错误或延迟错误响应码。

尽管在此描述了通知的一些示例,但是本领域的技术人员将理解的是,本文中所描述的实施例可以扩展至其他通知方法,比如,本文中参照方法1000而描述的通知方法。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(938)将改善过程安排成在对应存储设备上执行。例如,在一些实施例中,触发条件反馈给存储系统控制器150(图1b),并且存储系统控制器150通过将改善过程安排成在对应存储设备上执行而启用改善过程。作为另一个示例,在一些实施例中,触发条件反馈给集群控制器180(图1c),并且集群控制器180通过将改善过程安排成在对应存储设备上执行而启用改善过程。

在一些实施例中,启用与检测到的触发条件相关联的改善过程包括(940)确定改善过程的一个或多个参数。在一些实施例中,改善过程的一个或多个参数包括改善过程的紧急程度以及需要在对应存储设备中减小的非易失性存储器的存储容量的目标量。例如,在一些实施例中,改善过程的一个或多个参数包括指示紧急程度很高(例如,需要在下一小时内开始改善过程)的参数以及指示需要在对应存储设备中减小1gb的存储容量的参数。

在一些实施例中,启用与检测到的触发条件相关联的改善过程进一步包括(942)至少上报改善过程的一个或多个参数的子集。例如,在一些实施例中,启用与检测到的触发条件相关联的改善过程进一步包括上报需要在对应存储设备中减小的非易失性存储器的存储容量的目标量。

在一些实施例中,获取、启用、或获取和启用两者由存储系统的不同于所述多个存储设备的一个或多个子系统执行(944)。例如,在这些实施例中的一些实施例中,获取、启用、或获取和启用两者由存储系统(例如,图1b的数据存储系统140)的存储系统控制器(例如,图1b的存储系统控制器150)执行。作为另一个示例,在这些实施例中的一些实施例中,获取、启用、或获取和启用两者由存储系统(例如,图1c的数据存储系统170)的集群控制器(例如,图1c的集群控制器180)执行。在一些实施例中,方法900(或者至少方法900的执行操作902和/或启用操作908)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1b和图2b-1中所示出的系统管理模块151-1的所述一个或多个处理单元(cpu)152-1,或者图1c和图2c-1中所示出的集群管理模块181-1的所述一个或多个处理单元(cpu)182-1)执行的指令进行控制。

在一些实施例中,在启用改善过程之后(910):存储系统根据所述多个存储设备的所述一个或多个存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效而中止用于减小对应存储设备的非易失性存储器的声明容量的改善过程。例如,在一些实施例中,所述一个或多个度量可能改变从而使得不再呈现触发条件(例如,不再需要改善过程)。例如,在时间上与改善过程同时执行的正常存储操作(例如,读取、写入、修整等)可以使度量变化从而使得不再呈现触发条件。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1而描述的,触发检测模块(例如,图2a-1和图2a-2的触发检测模块224、图2b-1的触发检测模块254-1、或者图2c-1的触发检测模块284-1)和/或启用模块(例如,图2a-1和图2a-2的启用模块226、图2b-1的启用模块256-1、或者图2c-1的启用模块286-1)用于在启用改善过程之后(1)根据所述多个存储设备的所述一个或多个存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效而中止用于减小对应存储设备的非易失性存储器的声明容量的改善过程。

在一些实施例中,以上所描述的方法中的任何方法由存储系统执行,存储系统包括(1)非易失性存储器;(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器,所述一个或多个程序当由所述一个或多个处理器执行时使存储系统执行本文中所描述的方法中的任何方法或控制对其的执行。

在一些实施例中,以上所描述的方法中的任何方法由存储系统执行,存储系统包括用于执行本文中所描述的方法中的任何方法的装置。

在一些实施例中,以上所描述的方法中的任何方法由存储系统执行,存储系统包括:(1)多个存储设备;(2)具有一个或多个处理器的一个或多个子系统;以及(3)存储一个或多个程序的存储器,所述一个或多个程序当由所述一个或多个处理器执行时使所述一个或多个子系统执行本文中所描述的方法中的任何方法或控制对其的执行。

图10a至10c展示了根据一些实施例的管理存储系统的方法1000的流程图表示。至少在一些实施例中,方法1000由存储设备(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)或存储设备的一个或多个部件(例如,图1a的存储控制器124)执行,其中,存储设备与主机系统(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、或图1c的集群控制器180)操作性地耦合。在一些实施例中,方法1000由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1a和图2a-1中所示出的管理模块121-1的一个或多个处理单元(cpu)122-1)执行的指令进行控制。在一些实施例中,方法1000由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、和/或图1c的数据存储系统170)或存储系统的一个或多个部件(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)执行。在一些实施例中,在存储设备(例如,图1a的存储设备120、图1b的存储设备160、或图1c的存储设备194)处执行方法1000的操作中的一些操作,并且向主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、或图1c的集群控制器180)传输信息。为了便于解释,以下描述了如由存储设备(例如,图1a的数据存储系统100)的存储设备(例如,图1a的存储设备120)执行的方法1000。然而,本领域的技术人员将理解的是,在一些实施例中,在方法1000中所描述的操作中的一项或多项操作由另一个存储系统(例如,图1b的数据存储系统140的存储设备160、或图1c的数据存储系统170的存储设备194)的存储设备执行。

在存储系统的存储设备处,包括非易失性存储器的存储设备(1002),存储设备(例如,图1a的存储设备120)检测(1004)用于减小存储设备的非易失性存储器的声明容量的触发条件。在一些实施例中,根据存储设备的一个或多个度量的非线性和/或线性组合来检测触发条件。在一些实施例中,如以上关于图6的操作602而描述的,根据对所述一个或多个度量的历史知识来检测触发条件。在一些实施例中,当存储设备从正常操作过渡到只读模式时检测触发条件。在一些实施例中,如以上关于图2a-1而描述的,触发检测模块(例如,图2a-1的触发检测模块224-1)用于检测用于减小存储设备的非易失性存储器的声明容量的触发条件。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测触发条件(1004)之前,存储设备检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。

在一些实施例中,用于减小存储设备的非易失性存储器的声明容量的改善过程包括例如如以上关于图6的操作608而描述的用于减少对存储设备的非易失性存储设备的利用的过程。

在一些实施例中,存储设备包括(1006)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1a的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1a的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1a的存储介质130)包括nand类型闪存或nor类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。

在一些实施例中,由存储设备根据存储设备的一个或多个度量来检测(1008)触发条件。在一些实施例中,如以上关于图6的操作602而描述的,存储设备的所述一个或多个度量包括与存储设备保留数据的能力相对应的一个或多个状态度量、与存储设备的性能相对应的一个或多个性能度量、与存储设备的磨损相对应的一个或多个磨损度量、和/或一个或多个时间度量。本文中关于方法900而描述了存储设备的度量的附加示例。以上参照图6而描述了触发条件的示例。

在存储系统的存储设备处,包括非易失性存储器的存储设备(1002),存储设备(例如,图1a的存储设备120)将用于减小存储设备的非易失性存储器的声明容量的触发条件、用于启用对用于减小存储设备的非易失性存储器的声明容量的改善过程的执行的触发条件通知(1010)给与存储设备操作性地耦合的主机。在一些实施例中,如以上关于图2a-1而描述的,通知模块(例如,图2a-1的通知模块228-1)用于将用于减小存储设备的非易失性存储器的声明容量的触发条件通知给与存储设备操作性地耦合的主机。

在一些实施例中,主机包括(1014)客户端,代表所述客户端而将数据存储在存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、图1c的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。例如,在一些实施例中,主机是(1)计算机系统110(图1a)或者计算机系统110执行的客户端过程、模块或应用;(2)计算机系统142(图1b)或者计算机系统142执行的客户端过程、模块或应用;和/或(3)计算机系统172(图1c)或者计算机系统172执行的客户端过程、模块或应用。

在一些实施例中,主机包括(1016)存储系统(例如,图1b的数据存储系统140)的存储系统控制器。在一些实施例中,存储系统控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储系统控制器150(图1b)。在这些实施例中的一些实施例中,数据存储系统(例如,图1b的数据存储系统140)被称为纵向扩展系统。

在一些实施例中,主机包括(1018)存储系统(例如,图1c的数据存储系统170)的集群控制器。在一些实施例中,如例如在图1c中(在所述图中,数据存储子系统中的每个数据存储子系统可以被实施为具有一个或多个存储设备的数据存储系统(例如,图1b的数据存储系统140))所示出的,集群控制器在一个或多个数据存储子系统当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1c)。在这些实施例中的一些实施例中,数据存储系统(例如,图1c的数据存储系统170)被称为横向扩展系统,有时候被称为集群式存储系统。

在一些实施例中,将用于减小存储设备的非易失性存储器的声明容量的触发条件通知(1010)给主机包括使用未经请求的通信来通知(1020)主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)。例如,在一些实施例中,未经请求的通信包括中断通信。作为另一个示例,在一些实施例中,未经请求的通信包括远程直接存储器访问(rdma)。作为又另一个示例,在一些实施例中,未经请求的通信包括tcp连接请求。在一些实施例中,未经请求的通信包括任何其他形式的未经请求的通信。

在一些实施例中,将用于减小存储设备的非易失性存储器的声明容量的触发条件通知(1010)给主机包括(1022):(1)接收来自主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的查询,以及(2)响应于接收查询而上报触发条件。例如,在一些实施例中,主机对触发条件进行轮询,并且存储设备接收来自主机的查询并且响应于接收查询而上报触发条件。

在一些实施例中,将用于减小存储设备的非易失性存储器的声明容量的触发条件通知(1010)给主机包括(1024):(1)接收来自主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收命令而发送对命令的响应和触发条件通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从存储设备中进行读取的请求和/或对存储设备进行写入的请求。在一些实施例中,命令包括对存储设备的温度的请求。在一些实施例中,命令包括对存储设备的其他某些状态的请求。在一些实施例中,触发状态通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自存储设备的数据的读取请求,并且存储设备(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储设备发送与读取请求相对应的数据和触发条件通知。

在一些实施例中,将用于减小存储设备的非易失性存储器的声明容量的触发条件通知(1010)给主机包括(1026):(1)接收来自主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收命令而发送对命令的响应和提示主机获取关于触发条件的信息的通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从存储设备中进行读取的请求和/或对存储设备进行写入的请求。在一些实施例中,命令包括对存储设备的温度的请求。在一些实施例中,命令包括对存储设备的其他某些状态的请求。在一些实施例中,提示主机获取关于触发条件的通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自存储设备的数据的读取请求,并且存储设备(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储设备发送与读取请求相对应的数据和提示主机获取关于触发条件的信息的通知(例如,通过设置通知比特)。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是scsi延迟错误或延迟错误响应码。

在一些实施例中,将用于减小存储设备的非易失性存储器的声明容量的触发条件通知(1010)给主机进一步包括使用未经请求的通信来通知(1028)主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)存储设备处于只读模式下。在一些实施例中,通知主机存储设备处于只读模式下包括通知主机存储设备未接受任何更多的写入命令。在一些实施例中,通知主机存储设备处于只读模式下包括发送对写入命令的一个或多个拒绝。

在一些实施例中,在将用于减小存储设备的非易失性存储器的声明容量的触发条件通知给主机(1012)之后,存储设备(1)根据存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效而将用于减小存储设备的非易失性存储器的声明容量的触发条件的不存在通知给主机。例如,在一些情况下,存储设备的所述一个或多个度量可能改变从而使得触发条件不再有效(例如,不再需要改善过程)。例如,在改善过程的操作(例如,图6的操作606)期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。

在一些实施例中,因为所述一个或多个度量的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以根据存储设备的所述一个或多个度量来重新计算或重新评估(例如,周期性地、半连续地、初始地、最终地、偶尔、或不定期地)触发条件。在一些实施例中,如以上关于图2a-1而描述的,触发检测模块(例如,图2a-1的触发检测模块224-1)和/或通知模块(例如,图2a-1的通知模块228-1)用于在将用于减小存储设备的非易失性存储设备的声明容量的触发条件通知给主机之后:(1)根据存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效而将用于减小存储设备的非易失性存储器的声明容量的触发条件的不存在通知给主机。

在一些实施例中,以上所描述的方法1000的任何操作由存储设备执行,所述存储设备包括:(1)非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器(例如,控制器中或者耦合至控制器的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使存储设备执行本文中所描述的方法中的任何方法或控制对其的执行。

在一些实施例中,以上所描述的方法1000的任何操作由存储设备执行,所述存储设备包括用于执行本文中所描述的方法中的任何方法的装置。

在一些实施例中,以上所描述的方法1000的任何操作由存储系统执行,所述存储系统包括:(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的存储器(例如,存储设备中的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使存储设备执行本文中所描述的方法中的任何方法或控制对其的执行。

图11a至11c展示了根据一些实施例的管理存储系统的方法1100的流程图表示。至少在一些实施例中,方法1100由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的数据存储系统170)或存储系统的一个或多个部件(例如,图1a的计算机系统110、图1b的存储系统控制器150、或图1c的集群控制器180)执行。在一些实施例中,方法1100由存储在非瞬态计算机可读存储介质中并由存储系统的一个或多个处理器(比如,图1b和图2b-1中所示出的系统管理模块151-1的所述一个或多个处理单元(cpu)152-1、图1c和图2c-1中所示出集群管理模块181-1的所述一个或多个处理单元(cpu)182-1、或图2a-2中所示出的所包括的主机(例如,图1a的计算机系统110)的一个或多个处理器)执行的指令进行控制。为了便于解释,以下描述了如由存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的数据存储系统170)执行的方法1100。然而,本领域的技术人员将理解的是,在一些实施例中,在方法1100中所描述的操作中的一项或多项操作由存储系统的不同于存储设备的一个或多个子系统(例如,图1b的存储系统控制器150、或图1c的集群控制器180)执行。

存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、或图1c的数据存储系统170)针对存储系统的多个存储设备中的每个存储设备(例如,图1a的存储设备120、或图1b的存储设备160-1至160-m中的任何存储设备、或图1c的存储设备194-1至194-n或194-j至194-k中的任何存储设备)而获取(1102)存储设备的一个或多个度量,存储设备包括非易失性存储器。尽管图1a仅示出了一个存储设备120,但是在一些实施例中,图1a的数据存储系统100包括多个存储设备,所述多个存储设备中的存储设备120是一个示例。在一些实施例中,存储设备生成和/或维持存储设备的所述一个或多个度量,并且存储系统从存储设备处获取所述一个或多个度量。在一些实施例中,存储系统的不同于存储设备的一个或多个子系统(例如,图1b的存储系统控制器150、或图1c的集群控制器180)生成和/或维持存储设备的所述一个或多个度量,并且存储系统从所述一个或多个子系统处获取所述一个或多个度量。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1而描述的,度量模块(例如,图2a-1和图2a-2的度量模块222、图2b-1的度量模块252-1、或图2c-1的度量模块282-1)用于针对存储系统的多个存储设备中的每个存储设备而获取存储设备的一个或多个度量,存储设备包括非易失性存储器。

存储系统检测(1104)用于减小存储系统的所述多个存储设备中的对应存储设备的非易失性存储器的声明容量的触发条件,根据存储系统中的所述多个存储设备中的存储设备中的两个或更多个存储设备的所述一个或多个度量来检测触发条件。在一些实施例中,如以上关于图6的操作602而描述的,对应存储设备的所述一个或多个度量包括与对应存储设备保留数据的能力相对应的一个或多个状态度量、与对应存储设备的性能相对应的一个或多个性能度量、与对应存储设备的磨损相对应的一个或多个磨损度量、和/或一个或多个时间度量。在一些实施例中,根据对应存储设备的一个或多个度量的非线性和/或线性组合来检测触发条件。在一些实施例中,如以上关于图6的操作602而描述的,根据对对应存储设备的所述一个或多个度量的历史知识来检测触发条件。在一些实施例中,当对应存储设备从正常操作过渡到只读模式时检测触发条件。在一些实施例中,对来自存储系统的所述多个存储设备的一个或多个度量进行组合以便检测触发条件。例如,可能有利的是,在所述多个存储设备中检查历史磨损度量(比如,p/e循环计数)的变化速率,以便在任何一个设备达到磨损极限之前留出足够时间来完成改善过程。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1而描述的,触发检测模块(例如,图2a-1和图2a-2的触发检测模块224、图2b-1的触发检测模块254-1、或图2c-1的触发检测模块284-1)用于检测用于减小存储系统的所述多个存储设备中的对应存储设备的非易失性存储器的声明容量的触发条件,根据对应存储设备的所述一个或多个度量来检测触发条件。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测触发条件(1104)之前,存储系统检测磨损状况并在不减小对应存储设备的非易失性存储器的声明容量的情况下减小相应存储设备的非易失性存储器的预留空间。

在一些实施例中,对应存储设备包括(1106)一个或多个闪存设备。在一些实施例中,对应存储设备包括存储介质(例如,图1a的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1a的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1a的存储介质130)包括nand类型闪存或nor类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。

存储系统将用于减小对应存储设备的非易失性存储器的声明容量的触发条件、用于启用对用于减小对应存储设备的非易失性存储器的声明容量的改善过程的执行的触发条件通知(1108)给与对应存储设备操作性地耦合的主机。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1所描述的,通知模块(例如,图2a-1和图2a-2的通知模块228、图2b-1的通知模块258-1、或图2c-1的通知模块288-1)用于将用于减小对应存储设备的非易失性存储器的声明容量的触发条件、与用于减小对应存储设备的非易失性存储器的声明容量的改善过程相关联的触发条件通知给与对应存储设备操作性地耦合的主机。在一些实施例中,或在一些情况下,所述触发条件所述通知致使启用执行所述改善过程。此外,在一些实施例中,或在一些情况下,改善过程减小存储系统中的存储设备中的两个或更多个存储设备的声明容量。

在一些实施例中,主机包括(1112)客户端,代表所述客户端而将数据存储在存储系统(例如,图1a的数据存储系统100、图1b的数据存储系统140、图1c的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。例如,在一些实施例中,主机是(1)计算机系统110(图1a)或者计算机系统110执行的客户端过程、模块或应用;(2)计算机系统142(图1b)或者计算机系统142执行的客户端过程、模块或应用;和/或(3)计算机系统172(图1c)或者计算机系统172执行的客户端过程、模块或应用。

在一些实施例中,主机包括(1114)存储系统(例如,图1b的数据存储系统140)的存储系统控制器。在一些实施例中,存储系统控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储系统控制器150(图1b)。在这些实施例中的一些实施例中,数据存储系统(例如,图1b的数据存储系统140)被称为纵向扩展系统。

在一些实施例中,主机包括(1116)存储系统(例如,图1c的数据存储系统170)的集群控制器。在一些实施例中,如例如在图1c中(在所述图中,数据存储子系统中的每个数据存储子系统可以被实施为具有一个或多个存储设备的数据存储系统(例如,图1b的数据存储系统140))所示出的,集群控制器在一个或多个数据存储子系统当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1c)。在这些实施例中的一些实施例中,数据存储系统(例如,图1c的数据存储系统170)被称为横向扩展系统或集群式存储系统。

在一些实施例中,将用于减小对应存储设备的非易失性存储器的声明容量的触发条件通知(1108)给主机包括使用未经请求的通信来通知(1118)主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)。例如,在一些实施例中,未经请求的通信包括中断通信。作为另一个示例,在一些实施例中,未经请求的通信包括远程直接存储器访问(rdma)。作为又另一个示例,在一些实施例中,未经请求的通信包括tcp连接请求。在一些实施例中,未经请求的通信包括任何其他形式的未经请求的通信。

在一些实施例中,将用于减小对应存储设备的非易失性存储器的声明容量的触发条件通知(1108)给主机包括(1120):(1)接收来自主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的查询,以及(2)响应于接收查询而上报触发条件。例如,在一些实施例中,主机对触发条件进行轮询,并且存储系统接收来自主机的查询并且响应于接收查询而上报触发条件。

在一些实施例中,将用于减小对应存储设备的非易失性存储器的声明容量的触发条件通知(1108)给主机包括(1122):(1)接收来自主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收命令而发送对命令的响应和触发条件通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从对应存储设备中进行读取的请求和/或对对应存储设备进行写入的请求。在一些实施例中,命令包括对对应存储设备的温度的请求。在一些实施例中,命令包括对对应存储设备的其他某些状态的请求。在一些实施例中,触发状态通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自对应存储设备的数据的读取请求,并且存储系统(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储系统发送与读取请求相对应的数据和触发条件通知。

在一些实施例中,将用于减小对应存储设备的非易失性存储器的声明容量的触发条件通知(1108)给主机包括(1124):(1)接收来自主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)的命令,以及(2)响应于接收命令而发送对命令的响应和提示主机获取关于触发条件的信息的通知。在一些实施例中,命令包括i/o(输入/输出)请求。在一些实施例中,i/o请求包括从对应存储设备中进行读取的请求和/或对对应存储设备进行写入的请求。在一些实施例中,命令包括对对应存储设备的温度的请求。在一些实施例中,命令包括对对应存储设备的其他某些状态的请求。在一些实施例中,提示主机获取关于触发条件的通知背负在对来自主机的命令的响应上。例如,在一些实施例中,主机下发对来自对应存储设备的数据的读取请求,并且存储系统(1)接收来自主机的读取请求,并且(2)响应于接收读取请求,存储系统发送与读取请求相对应的数据和提示主机获取关于触发条件的信息的通知(例如,通过设置通知比特)。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是scsi延迟错误或延迟错误响应码。

在一些实施例中,将用于减小对应存储设备的非易失性存储器的声明容量的触发条件通知(1108)给主机包括使用未经请求的通信来通知(1126)主机(例如,图1a的计算机系统110、图1b的计算机系统142、图1c的计算机系统172、图1b的存储系统控制器150、和/或图1c的集群控制器180)对应存储设备处于只读模式下。在一些实施例中,通知主机对应存储设备处于只读模式下包括通知主机对应存储设备未接受任何更多的写入命令。在一些实施例中,通知主机对应存储设备处于只读模式下包括发送对写入命令的一个或多个拒绝。

在一些实施例中,获取、通知、或获取和通知两者由存储系统的不同于所述多个存储设备的一个或多个子系统执行(1128)。例如,在这些实施例中的一些实施例中,获取、通知、或获取和通知两者由存储系统(例如,图1b的数据存储系统140)的存储系统控制器(例如,图1b的存储系统控制器150)执行。作为另一个示例,在这些实施例中的一些实施例中,获取、通知、或获取和通知两者由存储系统(例如,图1c的数据存储系统170)的集群控制器(例如,图1c的集群控制器180)执行。在一些实施例中,方法1100(或者至少方法1100的获取操作1102和/或通知操作1108)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1b和图2b-1中所示出的系统管理模块151-1的所述一个或多个处理单元(cpu)152-1,或者图1c和图2c-1中所示出的集群管理模块181-1的所述一个或多个处理单元(cpu)182-1)执行的指令进行控制。

在一些实施例中,用于减小对应存储设备的非易失性存储器的声明容量的改善过程包括(1130)例如如以上关于图6的操作608而描述的用于减少对对应存储设备的非易失性存储设备的利用的过程。

在一些实施例中,在将用于减小对应存储设备的非易失性存储器的声明容量的触发条件通知给主机(1110)之后,存储系统(1)根据存储设备中的所述多个存储设备中的两个或更多个存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效而将用于减小对应存储设备的非易失性存储器的声明容量的触发条件的不存在通知给主机。例如,在一些情况下,对应存储设备的所述一个或多个度量可能改变从而使得触发条件不再有效(例如,不再需要改善过程)。例如,在改善过程的操作(例如,图6的操作606)期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少对应存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。

在一些实施例中,因为所述一个或多个度量的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以根据对应存储设备的所述一个或多个度量来重新计算或重新评估(例如,周期性地、半连续地、初始地、最终地、偶尔、或不定期地)触发条件。在一些实施例中,如以上关于图2a-1、图2a-2、图2b-1、和图2c-1而描述的,触发检测模块(例如,图2a-1和图2a-2的触发检测模块224、图2b-1的触发检测模块254-1、或者图2c-1的触发检测模块284-1)和/或通知模块(例如,图2a-1和图2a-2的通知模块228、图2b-1的通知模块258-1、或者图2c-1的通知模块288-1)用于在将用于减小对应存储设备的非易失性存储设备的声明容量的触发条件通知给主机之后:(1)根据对应存储设备的所述一个或多个度量来重新评估触发条件,并且(2)根据确定触发条件不再有效而将用于减小对应存储设备的非易失性存储器的声明容量的触发条件的不存在通知给主机。

在一些实施例中,以上所描述的方法1100的任何操作由存储系统执行,所述存储系统包括:(1)非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的控制器存储器(例如,存储系统的控制器中或者耦合至控制器的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使存储系统执行本文中所描述的方法中的任何方法或控制对其的执行。

在一些实施例中,上述方法1100的任何操作由存储系统执行,所述存储系统包括用于执行本文所述的任何方法的装置。

在一些实施例中,上述方法1100的任何操作由存储系统执行,所述存储系统包括:(1)多个存储设备;(2)具有一个或多个处理器的一个或多个子系统;以及(3)存储一个或多个程序的存储器(例如,存储系统中的非易失性存储器或易失性存储器),所述程序当由所述一个或多个处理器执行时使所述一个或多个子系统执行在此所描述的方法中的任何方法或控制对其的执行。

半导体存储器设备包括易失性存储器设备(如动态随机存取存储器(“dram”)或静态随机存取存储器(“sram”))、非易失性存储器设备(如电阻式随机存取存储器(“reram”)、电可擦除可编程只读存储器(“eeprom”)、闪存(其还可以被考虑为eeprom的子集)、铁电随机存取存储器(“fram”)、和磁阻随机存取存储器(“mram”))、以及能够存储信息的其他半导体元件。每种类型的存储器设备可以具有不同的配置。例如,闪存设备可以被配置成nand或nor配置。

位于基板内和/或上方的半导体存储器元件可以被安排在两个或三个维度(如二维存储器结构或三维存储器结构)中。

术语“三维存储器设备”(或3d存储器设备)在此被定义为指具有多个存储器层或多个存储器元件级(例如,有时被称为多个存储器设备级)的存储器设备,包括以下各项中的任一项:具有单片式或非单片式3d存储器阵列的存储器设备;或两个或更多个2d和/或3d存储器设备(其被封装在一起,以便形成堆叠芯片存储器设备)。

本领域的技术人员将意识到,本发明不限于所描述的二维和三维结构,但涵盖了如此处描述的本发明的精神和范围内的和如本领域的技术人员理解的所有相关存储器结构。

将理解的是,尽管此处可以使用术语“第一”、“第二”等来描述各个元件,但是这些元件不应被这些术语限制。这些术语仅用于将一个元件与另一个元件相区分。例如,在不改变描述的含义的情况下,第一存储设备可以被称为第二存储设备,并且类似地,第二存储设备可以被称为第一存储设备,只要一致地重新命名“第一存储设备”的所有出现并且一致地重新命名“第二存储设备”的所有出现即可。第一存储设备和第二存储设备都是存储设备,但是它们不是相同的存储设备。

此处所使用的术语仅出于描述特定实施例的目的,而不旨在于限制权利要求书。如在对实施例和所附权利要求书的描述中所使用的,除非上下文另有明示,否则单数形式“一个(a)”、“一个(an)”和“所述(the)”旨在同样包括复数形式。还将理解的是,如本文使用的术语“和/或”指代并且包括相关联的列举项的一个或多个项的任何和所有可能组合。将进一步理解的是,当在本说明书中使用术语“包括(comprises)”和/或“包括(comprising)”时,其指定陈述的特征、整数、步骤、操作、元件和/或部件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、部件和/或它们的组的存在或添加。

如在此所使用的,根据上下文,术语“如果”可以被解释为指“当…时”或者“在…时”或者“响应于确定”或者“根据确定“或者“响应于检测到”所述先决条件为真。类似地,根据上下文,短语“如果确定”或“如果”或“当时”可以被解释为指“在确定时”或“响应于确定”或“根据确定”或“在检测到时”或“响应于检测到”所述先决条件为真。

出于解释的目的,已经参考特定实施例描述了前述描述。然而,以上的说明性讨论并不旨在是详尽的或旨在将权利要求书限制成所公开的精确形式。鉴于以上教导,许多修改和变化都是可能的。选择并描述了实施例,以便最好地解释操作原理和实际应用,由此使能本领域的技术人员。

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