用于通过变更编码格式来减小存储设备的声明容量的过程和装置的制作方法

文档序号:11935141阅读:438来源:国知局
用于通过变更编码格式来减小存储设备的声明容量的过程和装置的制作方法

所公开的实施例总体上涉及存储器系统,并且具体地涉及减小存储设备(例如,包括一个或多个闪存设备)的声明容量。



背景技术:

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

闪存单元的反复擦除和重新编程引起电荷存储能力的降级(磨损)。最终,电荷存储能力降级到其变得不可能或无法恢复原始数据的点处(例如,不可恢复的码字从闪存设备中被读取、要求恢复码字的计算资源超过预定义的阈值、或者针对闪存设备的程序擦除(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至图8C展示了根据一些实施例的管理存储系统的方法的流程图表示。

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

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

具体实施方式

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

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

(I1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:(1)检测用于减小所述存储系统的存储设备的非易失性存储器的声明容量的改善触发;以及(2)根据所述检测到的改善触发来执行用于减小所述存储设备的所述非易失性存储器的声明容量的改善过程,所述执行包括:变更所述存储设备的所述非易失性存储器的至少一部分的编码格式,以及减小所述存储设备的所述非易失性存储器的声明容量。

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

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

(I2)在如I1或I1-1或I1-2所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述存储设备执行。

(I3)在如I1或I1-1或I1-2所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述存储系统的不同于所述存储设备的一个或多个子系统执行。

(I4)在如I1或I1-1或I1-2所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由主机执行。

(I5)在如I4所述的方法的一些实施例中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储系统中。

(I6)在如I4所述的方法的一些实施例中,所述主机包括所述存储系统的存储系统控制器。

(I7)在如I4所述的方法的一些实施例中,所述主机包括所述存储系统的集群控制器。

(I8)在如I1至I7中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括根据所述改善过程的一个或多个参数来变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式。

(I9)在如I1至I8中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括将所述编码格式从更高密度物理编码格式变更成更低密度物理编码格式。

(I10)在如I1至I9中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括将每存储器单元状态数从更高状态数变更成更低状态数。

(I11)在如I1至I10中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括将所述编码格式从三层单元(TLC)格式变更成多层单元(MLC)格式。

(I12)在如I1至I11中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括将所述编码格式从三层单元(TLC)格式变更成单层单元(SLC)格式。

(I13)在如I1至I12中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括将所述编码格式从多层单元(MLC)格式变更成单层单元(SLC)格式。

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

(I15)在如I1至I14中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括变更所述存储设备的所述非易失性存储器的多个存储器部分中的存储器部分的所述编码格式。

(I16)在如I1至I15中任一项所述的方法的一些实施例中,变更所述存储设备的所述非易失性存储器的至少一部分的所述编码格式包括变更所述存储设备的所述非易失性存储器的所有客户端数据的所述编码格式。

(I17)在如I1至I16中任一项所述的方法的一些实施例中,执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程进一步包括通告所述存储设备的所述非易失性存储器的减小的声明容量。

(I18)在如I1至I17中任一项所述的方法的一些实施例中,所述方法进一步包括(1)在开始执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程之后,检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的指示;以及(2)响应于检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的所述指示而中止执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程。

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

(I20)在另一方面,一种存储设备包括:(1)非易失性存储器;(2)一个或多个处理器;以及(3)控制器存储器,所述控制器存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使所述存储设备执行本文中所描述的方法I1至I19中的任何方法或控制对其的执行。

(I22)在又另一方面,以上所描述的方法I1至I19中的任何方法由存储设备执行,所述存储设备包括用于执行本文中所描述的方法中的任何方法的装置。

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

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

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

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

(K1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:(1)检测用于减小所述存储系统的存储设备的非易失性存储器的声明容量的改善触发;以及(2)根据所述检测到的改善触发来执行用于减小所述存储设备的所述非易失性存储器的声明容量的改善过程,所述执行包括:从所述存储设备中删除主机使用的可丢弃数据,以及减小所述存储设备的所述非易失性存储器的声明容量。

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

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

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

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

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

(K5)在如K1至K4中任一项所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述存储设备执行。

(K6)在如K1至K4中任一项所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述存储系统的不同于所述存储设备的一个或多个子系统执行。

(K7)在如K1至K4中任一项所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述主机执行。

(K8)在如K1至K7中任一项所述的方法的一些实施例中,删除所述主机使用的可丢弃数据包括根据所述改善过程的一个或多个参数来删除所述主机使用的可丢弃数据。

(K9)在如K1至K8中任一项所述的方法的一些实施例中,删除所述主机使用的可丢弃数据包括删除临时数据。

(K10)在如K1至K9中任一项所述的方法的一些实施例中,删除所述主机使用的可丢弃数据包括删除在需要时可以重建的数据。

(K11)在如K1至K10中任一项所述的方法的一些实施例中,删除所述主机使用的可丢弃数据包括删除数据快照。

(K12)在如K1至K11中任一项所述的方法的一些实施例中,删除所述主机使用的可丢弃数据包括删除所述主机预标记为可丢弃数据的数据。

(K13)在如K1至K12中任一项所述的方法的一些实施例中,删除所述主机使用的可丢弃数据包括:使映射表的与所述可丢弃数据相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间中的逻辑地址转换成所述存储设备的物理地址空间中的物理地址。

(K14)在如K13所述的方法的一些实施例中,减小所述存储设备的所述非易失性存储器的声明容量包括使一定数量的逻辑地址对所述主机不可用,所述数量小于或等于与所述无效逻辑地址条目相对应的逻辑地址的数量。

(K15)在如K1至K14中任一项所述的方法的一些实施例中,执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程进一步包括通告所述存储设备的所述非易失性存储器的减小的声明容量。

(K16)在如K1至K15中任一项所述的方法的一些实施例中,所述方法进一步包括(1)在开始执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程之后,检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的指示;以及(2)响应于检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的所述指示而中止执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程。

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

(K18)在另一方面,一种存储设备包括:(1)非易失性存储器;(2)一个或多个处理器;以及(3)控制器存储器,所述控制器存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使所述存储设备执行本文中所描述的方法K1至K17中的任何方法或控制对其的执行。

(K20)在又另一方面,以上所描述的方法K1至K17中的任何方法由存储设备执行,所述存储设备包括用于执行本文中所描述的方法中的任何方法的装置。

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

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

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

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

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

(L1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:(1)检测用于减小所述存储系统的第一存储设备的非易失性存储器的声明容量的改善触发;以及(2)根据所述检测到的改善触发来执行用于减小所述第一存储设备的所述非易失性存储器的声明容量的改善过程,所述执行包括:将主机使用的数据的一部分从所述存储系统的所述第一存储设备移动到另一个存储设备中,以及减小所述第一存储设备的所述非易失性存储器的声明容量。

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

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

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

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

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

(L5)在如L1至L4中任一项所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述主机执行。

(L6)在如L1至L4中任一项所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由所述存储系统的不同于所述存储设备的一个或多个子系统执行。

(L7)在如L1至L6中任一项所述的方法的一些实施例中,移动所述主机使用的数据的所述部分包括根据所述改善过程的一个或多个参数来移动所述主机使用的数据的所述部分。

(L8)在如L1至L7中任一项所述的方法的一些实施例中,移动所述主机使用的数据的所述部分包括移动与一个或多个虚拟逻辑地址相关联的数据,包括更新虚拟地址映射模块。

(L9)在如L1至L8中任一项所述的方法的一些实施例中,移动所述数据的所述部分包括选择该数据的一个或多个逻辑地址以便使性能退化最小化。

(L10)在如L1至L8中任一项所述的方法的一些实施例中,移动所述数据的所述部分包括选择该数据的一个或多个逻辑地址以便使垃圾收集开销最小化。

(L11)在如L8至L10中任一项所述的方法的一些实施例中,执行用于减小所述第一存储设备的所述非易失性存储器的声明容量的所述改善过程进一步包括:使映射表的与所述数据的所述部分相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间中的逻辑地址转换成所述第一存储设备的物理地址空间中的物理地址。

(L12)在如L11所述的方法的一些实施例中,减小所述第一存储设备的所述非易失性存储器的声明容量包括对与从所述第一存储设备处移动的数据的所述部分相关联的逻辑地址进行修整。

(L13)在如L1至L12中任一项所述的方法的一些实施例中,执行用于减小所述第一存储设备的所述非易失性存储器的声明容量的所述改善过程进一步包括通告所述第一存储设备的所述非易失性存储器的减小的声明容量。

(L14)在如L1至L13中任一项所述的方法的一些实施例中,所述方法进一步包括:(1)在开始执行用于减小所述第一存储设备的所述非易失性存储器的声明容量的所述改善过程之后,检测用于中止对所述第一存储设备的所述非易失性存储器的声明容量的所述减小的指示;以及(2)响应于检测用于中止对所述第一存储设备的所述非易失性存储器的声明容量的所述减小的所述指示而中止执行用于减小所述第一存储设备的所述非易失性存储器的声明容量的所述改善过程。

(L15)在如L1至L14中任一项所述的方法的一些实施例中,所述第一存储设备包括一个或多个闪存设备。

(L16)在另一方面,一种主机系统包括:(1)接口,所述接口用于可操作地耦合至存储系统;(2)一个或多个处理器;以及(3)控制器存储器,所述控制器存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使所述第一存储设备执行本文中所描述的方法L1至L15中的任何方法或控制对其的执行。

(L18)在又另一方面,以上所描述的方法L1至L15中的任何方法由系统执行,所述系统包括用于执行本文中所描述的方法中的任何方法的装置。

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

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

包括下述那些部件的数据存储系统使用各种技术来避免由各种故障机制引起的数据丢失,包括存储介质故障、通信故障以及系统和子系统级别故障。这些机制的共同特征是使用数据冗余来保护数据、来补偿实际的或可能的数据误差(例如,介质误差、丢失数据、传输误差、无法访问的数据等)。一类冗余机制已知为纠错码(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/O 128提供用于通过连接103到达存储介质130的接口。在一些实施例中,存储介质I/O 128包括读写电路,所述读写电路包括能够将读信号提供至存储介质130的电路(例如,针对NAND类型闪存的读阈值电压)。

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

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

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

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

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

如以上所解释的,存储介质(例如,存储介质130)被划分为多个可寻址的且可单独选择的块并且每个块可选地(但典型地)被进一步划分为多个页和/或字线和/或扇区。当在块基础上执行存储介质的擦除时,在许多实施例中,存储介质的读取和编程是在块的更小子单元上执行的(例如,在页基础、字线基础或扇区基础上)。在一些实施例中,块的较小子单元由多个存储器单元(例如,单级单元或多级单元)组成。在一些实施例中,编程是在整页上执行的。在一些实施例中,多级单元(MLC)NAND闪存通常每单元具有四个可能的状态,每单元产生两比特信息。进一步地,在一些实施例中,MLC NAND具有两页类型:(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。在一些实施例中,所述一个或多个CPU 152-1由在存储系统控制器150的功能之内(以及某些情况下之外)的一个或多个部件共享。系统管理模块151-1耦合至(多个)附加模块155,以便协调这些部件的操作。在一些实施例中,系统管理模块151-1的一个或多个模块在计算机系统142(有时被称为主机、主机系统、客户端或客户端系统)的系统管理模块151-2中实现。在一些实施例中,计算机系统142(未示出)的一个或多个处理器(有时被称为CPU或处理单元)被配置成用于执行一个或多个程序中的指令(例如,在系统管理模块151-2中)。系统管理模块151-2耦合至存储系统控制器150,以便管理存储系统控制器150的操作。

(多个)附加模块155耦合至系统管理模块151-1。在一些实施例中,(多个)附加模块155由系统管理模块151-1的一个或多个CPU 152-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的一个或多个CPU 182-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/O 128。存储器206-1包括高速随机存取存储器,如DRAM、SRAM、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器206-1可选地包括与(多个)CPU 122-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、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器206-2可选地包括与(多个)CPU 122-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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

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

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

o容量模块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、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

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

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

o容量模块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、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器246-2可选地包括与(多个)CPU 152-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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

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

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

o容量模块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、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器276-1可选地包括与(多个)CPU 182-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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

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

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

o容量模块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、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器276-2可选地包括与(多个)CPU 182-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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:

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

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

o容量模块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中所示的示例中,LBA 0被映射至物理地址空间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具有对应的中心电压V1 301b、V0 302b。如以下所讨论的,在许多情况下,响应于施加的读阈值电压而感测到的存储单元电流指示不同于与写入存储器单元中的对应比特值相对应的对应中心电压V1 301b或V0 302b的存储器单元电压。单元电压和/或当对存储器单元进行读操作时感测到的单元电压的误差可以在写操作、读操作期间或者由于将数据写入存储器单元时与执行读操作以读取存储在存储器单元中的数据时之间的单元电压的“漂移”而发生。为了便于讨论,这些影响统一描述为“单元电压漂移”。每个电压范围301、302还可以具有对应的电压分布301a、302a,所述电压分布可以由于以上定义的误差诱导因素示例的任意数量的组合而发生。

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

为了增加闪存的存储密度,闪存已经从单级(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中。确切地,所产生的单元电压将被设置为V11 311b、V01 312b、V00 313b和V10 314b之一,以便写入比特元组“11”“01”、“00”和“10”中的一个相应元组。实际上,由于以上提及的因素,初始单元电压可以不同于写入MLC中的数据的中心电压。

读阈值电压VRA、VRB与VRC被置于相邻中心电压之间(例如,被置于相邻中心电压之间的中间点处或附近),并且因此,将阈值电压定义在电压范围311、312、313、314之间。在读操作期间,施加读阈值电压VRA、VRB与VRC之一,以使用比较过程来确定单元电压。然而,由于以上所讨论的各因素,实际单元电压和/或当对MLC进行读操作时接收的单元电压可以不同于与写入单元中的数据值相对应的对应中心电压V11 311b、V01 312b、V00 313b和V10 314b。例如,实际单元电压可以整体不同于电压范围,强烈地指示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包括:检测(702)用于减小存储系统(例如,图1A的数据存储系统100、图1B的数据存储系统140、或图1C的数据存储系统170)的存储设备(例如,图1A的存储设备120、或图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)的非易失性存储器的声明容量的改善触发;以及根据检测到的改善触发,执行(704)用于减小存储设备的非易失性存储器的声明容量的改善过程,所述执行包括:变更存储设备的非易失性存储器的至少一部分的编码格式;以及减小存储设备的非易失性存储器的声明容量。数据的编码格式包括与使用如以上所描述的冗余机制中的一个或多个冗余机制来对数据进行的逻辑编码相组合的对存储介质中的数据的物理编码。非易失性存储器的一部分的物理编码格式是包括非易失性存储器的所述部分的存储器单元的物理编码格式,并且指示每存储器单元可存储的信息的比特数。如以上关于图5A和图5B而描述的,物理编码格式的示例包括每存储器单元分别能够存储高达一个、二个、三个、和四个比特的单层闪存单元(SLC)、多层闪存单元(MLC)、三层闪存单元(TLC)、和四层存储器单元(QLC)。物理编码格式可以进一步包括用于每存储器单元信息的非整数数量的比特的其他物理编码格式。对编码格式的变更可以涉及变更物理编码格式或(多个)冗余机制或者物理编码格式和(多个)冗余机制两者。在一些实施例中,对编码格式的变更是多步骤顺序。在此顺序的第一步骤中,做出或者记录对新编码格式的指示。此指示将通知随后操作使用所指示的(例如,更低密度)编码格式。在随后步骤(例如,垃圾收集)中,将使用新编码格式来记录数据。在一些实施例中,减小存储设备的非易失性存储器的声明容量包括减小存储设备的非易失性存储器的对主机可用的存储容量。存储设备的非易失性存储器的声明容量有时被称为通告容量,并且通常被主机的操作系统和/或文件系统用作主机的操作系统或文件系统将试图分配的最大容量。

在一些实施例中,由改善模块(例如,图2A-1、图2A-2或图2D的改善模块230、图2B-1或图2B-2的260、或图2C-1或图2C-2的290)或其部件(例如,图2A-1、图2A-2或图2D的检测模块231、图2B-1或图2B-2的261、或图2C-1或2C-2的291)检测(702)改善触发。在一些实施例中,检测改善触发包括接收或生成改善触发。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测改善触发(702)之前,方法700包括检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。

在一些实施例中,改善模块(例如,图2A-1和图2A-2的改善模块230、图2B-1和图2B-2的改善模块260、和/或图2C-1和图2C-2的改善模块290)用于根据改善触发来执行(704)用于减小存储设备的非易失性存储器的声明容量的改善过程。在一些实施例中,改善模块包括用于变更存储设备的非易失性存储器的至少一部分的编码格式的模块(例如,图2D的利用模块232)和用于减小存储设备的非易失性存储器的声明容量的容量模块(例如,容量模块234)。

在一些实施例中,检测、执行、或检测和执行两者由存储设备(例如,图1A的存储设备120、图1B的存储设备160、或图1C的存储设备194)或存储设备的一个或多个部件(例如,图1A的存储控制器124)执行(706)。在一些实施例中,方法700(或者至少方法700的检测操作702和/或执行操作704)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1A和图2A-1中所示出的管理模块121-1的一个或多个处理单元(CPU)122-1)执行的指令进行控制。

在一些实施例中,检测、执行、或检测和执行两者由存储系统的不同于存储设备的一个或多个子系统执行(708)。例如,在这些实施例中的一些实施例中,检测、执行、或检测和执行两者由存储系统(例如,图1B的数据存储系统140)的存储系统控制器(例如,图1B的存储系统控制器150)执行。在一些实施例中,方法700(或者至少方法700的检测操作702和/或执行操作704)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1B和图2B-1中所示出的管理模块151-1的一个或多个处理单元(CPU)152-1)执行的指令进行控制。

在一些实施例中,检测、执行、或检测和执行两者至少部分地由主机执行(710)。在一些实施例中,方法700(或者至少方法700的检测操作702和/或执行操作704)至少部分地由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(未在图1A、图1B和图1C中示出的处理器)(比如,图1A和图2A-2的管理模块121-2、或图1B和图2B-2的管理模块151-2、或图1C和图2C-2的管理模块181-2的一个或多个处理单元(CPU))执行的指令进行控制。

在一些实施例中,主机(例如,图1A的计算机系统110、图1B的计算机系统142、或图1C的计算机系统172)包括(712)客户端,代表所述客户端而将数据存储在存储系统(例如,图1A的数据存储系统100、图1B的数据存储系统140、图1C的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。

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

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

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括根据改善过程的一个或多个参数来变更(718)存储设备的非易失性存储器的至少一部分的编码格式。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的改善模块230)变更存储设备的非易失性存储器的至少一部分(图1A的存储设备120的存储介质130)的编码格式和/或协调所述变更。在一些实施例中,改善过程的所述一个或多个参数包括改善过程的紧急程度、目标减小的存储设备的非易失性存储器的声明容量、和/或对存储设备的非易失性存储器的利用的目标减少量、或其任何组合或子集。在一些实施例中,根据改善过程的一个或多个参数来变更存储设备的非易失性存储器的至少一部分的编码格式包括仅变更足以满足所述一个或多个参数指定的减小的声明容量的目标量的编码格式。换句话说,改善过程的所述一个或多个参数指示或对应于对主机可用的存储容量的目标减小量。例如,如以下更加详细地描述的,如果可以通过这样做来满足减小的声明容量的目标量,则将非易失性存储器的一部分的编码格式从TLC变更成MLC,而不是将编码格式从TLC变更成SLC。在一些实施例中,改善过程的所述一个或多个参数考虑或使改善过程能够考虑将在预定义时间段(例如,一小时、一天、一周、或任何其他期间)内需要的对存储设备的非易失性存储器的声明容量的预计减小。例如,在一些实施例中,改善过程的参数指示声明容量的特定减小和利用的减少。主机可以使用修整操作来减少利用并且然后指示存储设备减小其声明容量。根据减少的容量和利用,存储设备变更非易失性存储介质的所选部分的编码格式(如以上所指出的,变更本身可以是多步骤过程)。在一些实施例中,减少利用、减小声明容量和变更编码格式的改善过程步骤可以以任何顺序发生并且可以部分地或完全地重叠(例如,并行地执行)。在一些实施例中,改善过程可以在完成减少利用之前改变存储设备的声明容量,其中,存储设备以较少的预留空间来进行操作,直到利用减少完成为止。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括将编码格式从更高密度物理编码格式变更(720)成更低密度物理编码格式。例如,将存储介质130(图1A)的可选择部分131的编码格式从MLC变更成SLC(例如,从更高密度物理编码格式变更成更低密度物理编码格式),从而使得包括可选择部分131的存储器单元比在之前的编码格式下存储更少的每单元比特。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括将每存储器单元状态数从更高状态数变更(722)成更低状态数。如以上关于图5A和图5B而描述的,存储器单元的状态表示存储器单元的总电压范围内的顺序电压范围,所述顺序电压范围表示不同的位元组(例如,在图5B中,顺序电压范围311、312、313、314表示相应位元组“11”、“01”、“00”和“10”)。非易失性存储器的存储器单元中的信息的比特数是每存储器单元可存储的可能状态的函数,所述函数由存储器单元的物理编码格式确定。确切地,每单元可存储的信息的比特数等于log2N,其中,N是每单元可能状态的相应最大数量。因此,在一些实施例中,变更每存储器单元状态数包括变更存储器单元的可检测电压电平数,由此变更存储在存储器单元中的信息的量。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括将编码格式从三层单元(TLC)格式变更(724)成多层单元(MLC)格式。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括将编码格式从三层单元(TLC)格式变更(726)成单层单元(SLC)格式。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括将编码格式从多层单元(MLC)格式变更(728)成单层单元(SLC)格式。

在一些实施例中,执行(704)用于减小存储设备的非易失性存储器的声明容量的改善过程包括减少(730)对存储设备的非易失性存储器的利用。如以上关于图2D而描述的,在一些实施例中,改善过程(606)包括利用减少过程(608)(例如,由图2A-1和图2A-2的利用模块232、图2B-1和图2B-2的利用模块262、或图2C-1和图2C-2的利用模块292执行)。可以减少对存储设备的非易失性存储器的利用的方式的示例包括修整或去映射非实时数据、删除主机使用的可丢弃数据(例如,临时数据文件)、和/或将数据从存储设备移动到一个或多个其他存储设备中。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括变更(732)存储设备的非易失性存储器的多个存储器部分中的存储器部分的编码格式。例如,参照图4,确切地,将包括组1(例如,多个组(组420-1至组420-q)中的组420-1)的存储器单元的编码格式从MLC变更成SLC,导致组1中的存储器单元存储比非易失性存储器的其他组中的存储器单元更少的每单元比特。

在一些实施例中,变更(704)存储设备的非易失性存储器的至少一部分的编码格式包括变更(734)存储设备的非易失性存储器所有客户端数据的编码格式。例如,将包括存储介质130(图1A)的所有存储器单元的编码格式从MLC变更成SLC,导致存储介质130的这些存储器单元存储每单元一比特信息,而不是二比特。在一些实施例中,存储设备可以采用高密度编码格式(例如,TLC或MLC)来存储所有客户端数据,但采用不同的编码格式(例如,SLC)来存储存储设备元数据(例如,映射表402)。改善过程可能导致将与客户端数据相关联的存储介质中的所有存储介质转换成更低密度编码格式,而存储设备元数据仍采用其原始编码格式。在一些实施例中,对客户端数据的保留是可选的。例如,类似于SCSI低层格式操作,如果没有保留客户端数据,则可以更快地执行改善过程。

在一些实施例中,执行(704)用于减小存储设备的非易失性存储器的声明容量的改善过程进一步包括通告(736)存储设备的非易失性存储器的减小的声明容量。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的容量模块234的通告模块239)通告存储设备(例如,图1A的存储设备120的存储介质130)或存储子系统的非易失性存储器的减小的声明容量/或者协调所述通告。在一些实施方式中,存储设备或相应存储控制器、集群控制器、管理模块或数据存储系统向主机发送消息,通告存储设备的非易失性存储器的减小的声明容量。在一些实施方式中,通过以下方式来完成通告减小的声明容量:向主机发送中断消息或其他消息。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与存储设备可操作地耦合的主机的查询以及响应于接收查询而上报存储设备的非易失性存储器的减小的声明容量。在一些这种实施方式中,主机被配置成用于在存储系统、存储控制器、管理模块、集群控制器或存储设备中周期性地查询例如系统或设备健康状态。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应(所述响应包括对存储设备的非易失性存储器的减小的声明容量的通知)。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应和提醒主机从存储设备处或者从包括存储设备的数据存储系统处获取包括存储设备的非易失性存储器的减小的声明容量的信息的通知。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是SCSI延迟错误或延迟错误响应码。

在一些实施例中,在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程(704)之后,所述方法包括检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示(738);以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示而中止(740)执行用于减小存储设备的非易失性存储器的声明容量的改善过程。在这些实施例的上下文中,检测用于中止的指示在本文中被定义为指接收用于中止对声明容量的减小的信号(例如,接收来自存储设备的控制器或包括存储设备的存储系统的存储系统控制器的信号)或者评估存储设备的一个或多个度量以及基于所述评估来决定中止对声明容量的减小。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。

在一些实施例中,因为许多参数的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、初始地、最终地、偶尔、或不定期地)重新计算或重新评估那些参数(比如,目标减小的声明容量和/或目标利用减少量)。在一些情况下,根据重新计算的或重新评估的参数,对改善过程的一个或多个部分(比如,利用减少过程)重新进行优先级排序、重新安排、或中止。

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

图8A至图8C展示了根据一些实施例的管理存储系统的方法800的流程图表示。在一些实施例中,方法800包括:检测(802)用于减小存储系统(例如,图1A的数据存储系统100、图1B的数据存储系统140、或图1C的数据存储系统170)的存储设备(例如,图1A的存储设备120、或图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)的非易失性存储器的声明容量的改善触发;以及根据检测到的改善触发,执行(804)用于减小存储设备的非易失性存储器的声明容量的改善过程,所述执行包括:从存储设备中删除主机(例如,图1A的计算机系统110、图1B的计算机系统142、或图1C的计算机系统172)使用的可丢弃数据;以及减小存储设备的非易失性存储器的声明容量。在一些实施例中,减小存储设备的非易失性存储器的声明容量包括减小存储设备的非易失性存储器的对主机可用的存储容量。存储设备的非易失性存储器的声明容量有时被称为通告容量,并且通常被主机的操作系统和/或文件系统用作主机的操作系统或文件系统将试图分配的最大容量。

在一些实施例中,由改善模块(例如,图2A-1、图2A-2或图2D的改善模块230、图2B-1或图2B-2的260、或图2C-1或图2C-2的290)或其部件(例如,图2A-1、图2A-2或图2D的检测模块231、图2B-1或图2B-2的261、或图2C-1或2C-2的291)检测(802)改善触发。在一些实施例中,检测改善触发包括接收或生成改善触发。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测改善触发(802)之前,方法800包括检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。

在一些实施例中,改善模块(例如,图2A-1和图2A-2的改善模块230、图2B-1和图2B-2的改善模块260、和/或图2C-1和图2C-2的改善模块290)用于根据改善触发来执行(804)用于减小存储设备的非易失性存储器的声明容量的改善过程。在一些实施例中,改善模块包括用于从存储设备中删除主机使用的可丢弃数据的利用模块(例如,确切地,图2D的利用模块232的删除模块236)和用于减小存储设备的非易失性存储器的声明容量的容量模块(例如,容量模块234)。

在一些实施例中,主机(例如,图1A的计算机系统110、图1B的计算机系统142、或图1C的计算机系统172)包括(806)客户端,代表所述客户端而将数据存储在存储系统(例如,图1A的数据存储系统100、图1B的数据存储系统140、图1C的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。

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

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

在一些实施例中,检测、执行、或检测和执行两者由存储设备(例如,图1A的存储设备120、图1B的存储设备160、或图1C的存储设备194)或存储设备的一个或多个部件(例如,图1A的存储控制器124)执行(812)。在一些实施例中,方法800(或者至少方法800的检测操作802和/或执行操作804)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1A和图2A-1中所示出的管理模块121-1的一个或多个处理单元(CPU)122-1)执行的指令进行控制。

在一些实施例中,检测、执行、或检测和执行两者由存储系统的不同于存储设备的一个或多个子系统执行(814)。例如,在这些实施例中的一些实施例中,检测、执行、或检测和执行两者由存储系统(例如,图1B的数据存储系统140)的存储系统控制器(例如,图1B的存储系统控制器150)执行。在一些实施例中,方法800(或者至少方法800的检测操作802和/或执行操作804)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1B和图2B-1中所示出的管理模块151-1的一个或多个处理单元(CPU)152-1)执行的指令进行控制。

在一些实施例中,检测、执行、或检测和执行两者至少部分地由主机执行(816)。在一些实施例中,方法800(或者至少方法800的检测操作802和/或执行操作804)至少部分地由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(未在图1A、图1B和图1C中示出的处理器)(比如,图1A和图2A-2的管理模块121-2、或图1B和图2B-2的管理模块151-2、或图1C和图2C-2的管理模块181-2的一个或多个处理单元(CPU))执行的指令进行控制。

在一些实施例中,删除(804)主机使用的可丢弃数据包括根据改善过程的一个或多个参数来删除(818)主机使用的可丢弃数据。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的利用模块232的删除模块236)从存储设备(例如,图1A的存储设备120的存储介质130)中删除主机使用的可丢弃数据和/或者协调所述删除。在一些实施例中,改善过程的所述一个或多个参数包括改善过程的紧急程度、目标减小的存储设备的非易失性存储器的声明容量、和/或对存储设备的非易失性存储器的利用的目标减少量、或其任何组合或子集。在一些实施例中,根据改善过程的一个或多个参数来删除主机使用的可丢弃数据(例如,临时数据)包括仅删除用于满足所述一个或多个参数指定的减小的声明容量的目标量的可丢弃数据。换句话说,改善过程的所述一个或多个参数指示或对应于对主机可用的存储容量的目标减小量。在一些实施例中,改善过程的所述一个或多个参数考虑或使改善过程能够考虑将在预定义时间段(例如,一小时、一天、一周、或任何其他期间)内需要的对存储设备的非易失性存储器的声明容量的预计减小。

在一些实施例中,删除(804)主机使用的可丢弃数据包括删除(820)临时数据。在一些实施例中,临时数据存储在存储设备(例如,图1A的存储设备120的存储介质130)中,并且包括例如安装在主机(例如,图1A的计算系统110)上的操作系统的临时数据或者主机使用的一个或多个应用、系统进程和/或程序所生成的临时数据。例如,在Unix或Linux操作系统中,如果在指定时间段(通常为一小时或一天等)内没有使用存储在目录“/tmp”中的文件,则它们已知是可丢弃的。

在一些实施例中,删除(804)主机使用的可丢弃数据包括删除(822)在需要时可以重建的数据。可以重建的数据包括例如参照存储在主机(例如,图1A的计算机系统110)的存储器和/或存储系统的存储设备(例如,图1A的存储设备120、或图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)中的数据而生成的并且可以在需要时再生成的某些索引、缓存或其他文件类型。

在一些实施例中,删除(804)主机使用的可丢弃数据包括删除(824)数据快照。数据快照包括例如备份文件/图像(例如,用于恢复数据)、虚拟机快照(例如,用于捕获虚拟机的状态、数据和硬件配置)、以及用于捕获存储在主机(例如,图1A的计算机系统110)的存储器和/或存储系统的存储设备(例如,图1A的存储设备120、或图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)中的数据的状态的其他类型的文件。

在一些实施例中,删除(804)主机使用的可丢弃数据包括删除(826)主机预标记为可丢弃数据的数据。在一些实施例中,这种数据包括用户未请求的预加载数据,所述预加载数据的一个示例是制造商存储在存储设备120中的工厂预加载数据(例如,程序、应用、用于恢复OS的备份文件等)。用户未请求的预加载数据的另一个示例是预期到用户的未来请求而由网站或在线应用预加载的数据。

在一些实施例中,删除(804)主机使用的可丢弃数据包括使映射表的一个或多个逻辑地址条目无效(828)(例如,通过使用修整操作),在所述映射表中,逻辑地址条目与可丢弃数据相关联,并且映射表用于将逻辑地址空间中的逻辑地址转换成存储设备的物理地址空间中的物理地址。例如,参照图4,删除可丢弃数据包括使映射表402的逻辑地址条目LBA 0无效,在所述映射表中,LBA 0被映射到物理地址空间410的组1(例如,组420-1)、块3(例如,块421-3)、页37(图4中未示出的页)中。

在一些实施例中,减小(804)存储设备的非易失性存储器的声明容量包括使(830)一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的容量模块234的LBA减小模块238)减少逻辑块地址空间(例如,图3的LBA空间320)的逻辑地址和/或协调所述减小。在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,八个)逻辑地址相对应(例如,每逻辑地址条目8个LBA)。

在一些实施例中,执行(804)用于减小存储设备的非易失性存储器的声明容量的改善过程进一步包括通告(832)存储设备的非易失性存储器的减小的声明容量。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的容量模块234的通告模块239)通告存储设备(例如,图1A的存储设备120的存储介质130)或存储子系统的非易失性存储器的减小的声明容量/或者协调所述通告。在一些实施方式中,存储设备或相应存储控制器、集群控制器、管理模块或数据存储系统向主机发送消息,通告存储设备的非易失性存储器的减小的声明容量。在一些实施方式中,通过以下方式来完成通告减小的声明容量:向主机发送中断消息或其他带内或带外消息。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与存储设备可操作地耦合的主机的查询以及响应于接收查询而上报存储设备的非易失性存储器的减小的声明容量。在一些这种实施方式中,主机被配置成用于在存储系统、存储控制器、管理模块、集群控制器或存储设备中周期性地查询例如系统或设备健康状态。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应(所述响应包括对存储设备的非易失性存储器的减小的声明容量的通知)。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应和提醒主机从存储设备处或者从包括存储设备的数据存储系统处获取包括存储设备的非易失性存储器的减小的声明容量的信息的通知。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是SCSI延迟错误或延迟错误响应码。

在一些实施例中,在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程(804)之后,所述方法包括检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示(834);以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示而中止(836)执行用于减小存储设备的非易失性存储器的声明容量的改善过程。检测用于中止的指示在本文中被定义为指接收用于中止对声明容量的减小的信号(例如,接收来自存储设备的控制器或包括存储设备的存储系统的存储系统控制器的信号)或者评估存储设备的一个或多个度量以及基于所述评估来决定中止对声明容量的减小。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。

在一些实施例中,因为许多参数的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、初始地、最终地、偶尔、或不定期地)重新计算或重新评估那些参数(比如,目标减小的声明容量和/或目标利用减少量)。在一些情况下,根据重新计算的或重新评估的参数,对改善过程的一个或多个部分(比如,利用减少过程)重新进行优先级排序、重新安排、或中止。

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

图9A至图9C展示了根据一些实施例的管理存储系统的方法900的流程图表示。在一些实施例中,方法900包括:检测(902)用于减小存储系统(例如,图1A的数据存储系统100、图1B的数据存储系统140、或图1C的数据存储系统170)的第一存储设备(例如,图1A的存储设备120、或图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)的非易失性存储器的声明容量的改善触发;以及根据检测到的改善触发,执行(904)用于减小第一存储设备的非易失性存储器的声明容量的改善过程,所述执行包括:将主机(例如,图1A的计算机系统110、图1B的计算机系统142、或图1C的计算机系统172)使用的数据(例如,图3的实时数据334)的一部分从存储系统的第一存储设备移动到另一个存储设备中;以及减小第一存储设备的非易失性存储器的声明容量。在一些实施例中,检测用于减小存储系统的第一存储设备的非易失性存储器的声明容量的改善触发包括生成用于减小存储系统的第一存储设备的非易失性存储器的声明容量的改善触发。在一些实施例中,减小第一存储设备的非易失性存储器的声明容量包括减小第一存储设备的非易失性存储器的对主机可用的存储容量。第一存储设备的非易失性存储器的声明容量有时被称为通告容量,并且通常被主机的操作系统和/或文件系统用作主机的操作系统或文件系统将试图分配的最大容量。

在一些实施例中,由改善模块(例如,图2A-1、图2A-2或图2D的改善模块230、图2B-1或图2B-2的260、或图2C-1或图2C-2的290)或其部件(例如,图2A-1、图2A-2或图2D的检测模块231、图2B-1或图2B-2的261、或图2C-1或2C-2的291)检测(902)改善触发。在一些实施例中,检测改善触发包括接收或生成改善触发。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测改善触发(902)之前,方法900包括检测磨损状况并在不减小第一存储设备的非易失性存储器的声明容量的情况下减小第一存储设备的非易失性存储器的预留空间。

在一些实施例中,改善模块(例如,图2A-1和图2A-2的改善模块230、图2B-1和图2B-2的改善模块260、和/或图2C-1和图2C-2的改善模块290)用于根据改善触发来执行(904)用于减小第一存储设备的非易失性存储器的声明容量的改善过程。在一些实施例中,改善模块包括用于将主机使用的数据的一部分从存储系统的第一存储设备移动到另一个存储设备中的利用模块(例如,确切地,图2D的利用模块232的移动模块237)和用于减小第一存储设备的非易失性存储器的声明容量的容量模块(例如,容量模块234)。

在一些实施例中,主机(例如,图1A的计算机系统110、图1B的计算机系统142、或图1C的计算机系统172)包括(906)客户端,代表所述客户端而将数据存储在存储系统(例如,图1A的数据存储系统100、图1B的数据存储系统140、图1C的数据存储系统170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储系统中。

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

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

在一些实施例中,检测、执行、或检测和执行两者至少部分地由主机执行(912)。在一些实施例中,方法900(或者至少方法900的检测操作902和/或执行操作904)至少部分地由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(未在图1A、图1B和图1C中示出的处理器)(比如,图1A和图2A-2的管理模块121-2、或图1B和图2B-2的管理模块151-2、或图1C和图2C-2的管理模块181-2的一个或多个处理单元(CPU))执行的指令进行控制。

在一些实施例中,检测、执行、或检测和执行两者由存储系统的不同于第一存储设备的一个或多个子系统执行(914)。例如,在这些实施例中的一些实施例中,检测、执行、或检测和执行两者由存储系统(例如,图1B的数据存储系统140)的存储系统控制器(例如,图1B的存储系统控制器150)执行。在一些实施例中,方法900(或者至少方法900的检测操作902和/或执行操作904)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(比如,图1B和图2B-1中所示出的管理模块151-1的一个或多个处理单元(CPU)152-1)执行的指令进行控制。

在一些实施例中,移动(904)主机使用的数据的一部分包括根据改善过程的一个或多个参数来移动(916)数据的所述部分。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的利用模块232的移动模块237)将主机使用的户数从第一存储设备(例如,图1A的存储设备120的存储介质130)或数据存储的第一存储设备内的物理地址移动到另一个存储设备中。在一些实施例中,改善过程的所述一个或多个参数包括改善过程的紧急程度、目标减小的第一存储设备的非易失性存储器的声明容量、和/或对第一存储设备的非易失性存储器的利用的目标减少量、或其任何组合或子集。在一些实施例中,根据改善过程的一个或多个参数来移动主机使用的数据的所述部分包括移动足以满足所述一个或多个参数指定的减小的声明容量的目标量的数据。换句话说,改善过程的所述一个或多个参数指示或对应于对主机可用的存储容量的目标减小量。在一些实施例中,改善过程的所述一个或多个参数考虑或使改善过程能够考虑将在预定义时间段(例如,一小时、一天、一周、或任何其他期间)内需要的对第一存储设备的非易失性存储器的声明容量的预计减小。

在一些实施例中,移动(904)主机使用的数据的所述部分包括(922):移动与一个或多个虚拟逻辑地址相关联的数据,包括更新虚拟地址映射模块。参照图2B-1,例如,系统映射模块250-1是将虚拟逻辑地址映射到中间地址的虚拟地址映射模块的示例,所述中间地址的每个中间地址标识与虚拟逻辑地址相对应的数据所存储的存储设备或存储设备内的位置。类似地,图2C-1的集群映射模块280-1是将虚拟逻辑地址映射到中间地址的虚拟地址映射模块的示例,所述中间地址的每个中间地址标识与虚拟逻辑地址相对应的数据所存储的存储设备或存储设备内的位置。

在一些实施例中,移动数据的所述部分包括选择(918)该数据的一个或多个逻辑地址以便使性能退化最小化。换句话说,在一些实施例中,所述方法包括选择移动哪些逻辑地址条目,以便使性能退化最小化。例如,为了实现特定的声明容量减小量,在一些情况下,可能存在多个逻辑地址候选项或候选项集合,可以变更(例如,通过移动相关联数据以及随后更新虚拟地址映射模块)虚拟地址映射模块(例如,图2B-1或图2B-2的系统映射模块250、或图2C-1或图2C-2的集群映射模块280)中对所述逻辑地址的映射以便实现存储设备的非易失性存储器的声明存储容量的减小。进一步地,可以比其他候选项集合更不频繁地访问或覆写候选项集合中的一些候选项集合。通过从最不频繁地访问或覆写的候选项集合当中选择(918)一个或多个逻辑地址,过程使性能退化最小化。在另一个示例中,根据磨损均衡方法来选择逻辑地址,以便促进均匀磨损或者以便避免非易失性存储器介质的不均匀磨损。

在一些实施例中,在移动与一个或多个逻辑地址相关联的数据之前,选择(920)所述一个或多个逻辑地址以便使垃圾收集开销最小化。当可以在不需要无理地将数据从第一存储设备的非易失性存储器的物理地址空间内的一个位置移动到另一个位置的情况下实现更新虚拟地址映射模块(至少在一些情况下)时,在实践中,检测到的改善触发的基本原因可能指示物理地将一些数据从第一存储设备移动到另一个存储设备中。根据一些实施例,进行选择(920)的设备或系统使用过程或分析方法来使将由变更虚拟地址映射模块产生的数据移动的量最小化。

在一些实施例中,减小(904)第一存储设备的非易失性存储器的声明容量包括对与从第一存储设备处移动的数据相关联的逻辑地址进行修整(924)。因此,被移动数据的“旧副本”不再可访问。

在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的容量模块234的LBA减小模块238)减少逻辑块地址空间(例如,图3的LBA空间320)的逻辑地址和/或协调所述减小。在一些实施例中,逻辑地址是在执行改善过程之前与第一存储设备相关联的那些逻辑地址。在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,八个)逻辑地址相对应(例如,每逻辑地址条目8个LBA)。

在一些实施例中,执行(904)用于减小第一存储设备的非易失性存储器的声明容量的改善过程进一步包括:使映射表的与数据的所述部分相关联的一个或多个逻辑地址条目无效(926),所述映射表用于将逻辑地址空间中的逻辑地址转换成第一存储设备的物理地址空间中的物理地址。例如,参照图4,执行改善过程包括使映射表402的逻辑地址条目LBA 0无效,在所述映射表中,LBA 0被映射到物理地址空间410的组1(例如,组420-1)、块3(例如,块421-3)、页37(图4中未示出的页)中。因此,与无效数据和许多逻辑地址相对应的相应存储器块准备好对主机不可用、进行删除、和/或进行垃圾收集(例如,将块的有效页重写到新的块中,并且擦除包含无效数据的旧块从而使得旧块可用于待写入的新数据)。在一些实施例中,执行改善过程包括还为与一个或多个无效逻辑地址条目相对应的一个或多个物理地址设置一个或多个指示符以便指示可以丢弃存储在一个或多个物理地址处的数据。替代性地,将与一个或多个无效逻辑地址条目相对应的物理地址中的一个或多个物理地址相对应的记录或其他数据移动到符合删除条件或准备好进行删除的存储器部分列表中。

在一些实施例中,执行(904)用于减小第一存储设备的非易失性存储器的声明容量的改善过程进一步包括通告(928)第一存储设备的非易失性存储器的减小的声明容量。在一些实施例中,存储控制器124(图1A)或其部件(例如,图2D的容量模块234的通告模块239)通告第一存储设备(例如,图1A的存储设备120的存储介质130)或存储子系统的非易失性存储器的减小的声明容量/或者协调所述通告。在一些实施方式中,第一存储设备或相应存储控制器、集群控制器、管理模块或数据存储系统向主机发送消息,通告第一存储设备的非易失性存储器的减小的声明容量。在一些实施方式中,通过以下方式来完成通告减小的声明容量:向主机发送中断消息或其他带内或带外消息。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与第一存储设备可操作地耦合的主机的查询以及响应于接收查询而上报第一存储设备的非易失性存储器的减小的声明容量。在一些这种实施方式中,主机被配置成用于在存储系统、存储控制器、管理模块、集群控制器或存储设备中周期性地查询例如系统或设备健康状态。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与第一存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应(所述响应包括对第一存储设备的非易失性存储器的减小的声明容量的通知)。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与第一存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应(所述响应包括对第一存储设备的非易失性存储器的减小的声明容量的通知)。

在一些实施方式中,通过以下方式来完成通告减小的声明容量:接收来自与第一存储设备可操作地耦合的主机的命令(例如,存储读取或写入命令)以及响应于接收命令而发送对命令的响应和提醒主机从第一存储设备处或者从包括第一存储设备的数据存储系统处获取包括第一存储设备的非易失性存储器的减小的声明容量的信息的通知。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是SCSI延迟错误或延迟错误响应码。

在一些实施例中,在开始执行用于减小第一存储设备的非易失性存储器的声明容量的改善过程(904)之后,所述方法包括检测用于中止对第一存储设备的非易失性存储器的声明容量的减小的指示(930);以及响应于检测用于中止对第一存储设备的非易失性存储器的声明容量的减小的指示而中止(932)执行用于减小第一存储设备的非易失性存储器的声明容量的改善过程。检测用于中止的指示在本文中被定义为指接收用于中止对声明容量的减小的信号(例如,接收来自第一存储设备的控制器或包括第一存储设备的存储系统的存储系统控制器的信号)或者评估第一存储设备的一个或多个度量以及基于所述评估来决定中止对声明容量的减小。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少第一存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。

在一些实施例中,因为许多参数的值可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、和修整或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、初始地、最终地、偶尔、或不定期地)重新计算或重新评估那些参数(比如,目标减小的声明容量和/或目标利用减少量)。在一些情况下,根据重新计算的或重新评估的参数,对改善过程的一个或多个部分(比如,利用减少过程)重新进行优先级排序、重新安排、或中止。

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

在具有多个存储设备的实施例中,存储系统可能发现针对(或者关联于)多个存储设备而从逻辑地址空间或逻辑地址空间的部分中构造出虚拟逻辑地址空间(LBA空间320)是有利的。存储系统(例如,数据存储系统140、数据存储系统170等)包括将接收到的虚拟逻辑地址转换成中间地址的虚拟映射模块(例如,系统映射模块250-2、集群映射模块280-1等)。在一些实施例中,虚拟映射模块可以包含算法函数(例如,Ceph存储系统的CRUSH映射)。在其他实施例中,虚拟映射模块可以是通过虚拟逻辑地址索引的中间地址表。在一些实施例中(例如,图1B),中间地址由特定存储设备(160-x)的一个或多个编号和一个或多个参考的存储设备的一个或多个逻辑地址组成。在一些实施例中(例如,图1C),中间地址由一个或多个存储子系统(192-x)的编号和一个或多个存储子系统内的数据的一个或多个定位符组成。定位符被存储子系统理解为引用该存储系统的一个或多个存储设备(194-x)一个或多个逻辑地址。例如,存储子系统可以使用文件系统来组织存储设备(194-1、194-2、…、等),在这种情况下,定位符可以是文件编号(例如,文件名)或对文件的一部分的编号。因为对虚拟映射模块的使用允许在与虚拟逻辑地址空间相关联的数据的位置中的存储系统灵活性,所以其是有利的。具体地,可以在不通过变更虚拟映射表的内容来改变虚拟逻辑地址的情况下在所述多个存储设备之间移动数据(或甚至移动到单个设备内的不同位置中)。

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

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

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

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

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

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

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

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

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