CN107003939B - 用于通过有条件地修整而减小存储设备的声明容量的过程和装置 - Google Patents
用于通过有条件地修整而减小存储设备的声明容量的过程和装置 Download PDFInfo
- Publication number
- CN107003939B CN107003939B CN201580047849.7A CN201580047849A CN107003939B CN 107003939 B CN107003939 B CN 107003939B CN 201580047849 A CN201580047849 A CN 201580047849A CN 107003939 B CN107003939 B CN 107003939B
- Authority
- CN
- China
- Prior art keywords
- storage device
- volatile memory
- storage
- capacity
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/56—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
- G11C11/5621—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
- G11C11/5628—Programming or writing circuits; Data input circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/34—Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
- G11C16/349—Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/02—Detection or location of defective auxiliary circuits, e.g. defective refresh counters
- G11C29/028—Detection or location of defective auxiliary circuits, e.g. defective refresh counters with adaption or trimming of parameters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7204—Capacity control, e.g. partitioning, end-of-life degradation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7206—Reconfiguration of flash memory system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7211—Wear leveling
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C2211/00—Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C2211/56—Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
- G11C2211/564—Miscellaneous aspects
- G11C2211/5641—Multilevel memory having cells with different number of storage levels
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
***、方法和/或设备用于减小存储***中的存储设备的非易失性存储器的声明容量。一方面,所述方法包括:检测改善触发;以及根据所述检测到的改善触发,执行用于减小所述存储设备的所述非易失性存储器的声明容量的改善过程,包括:获取所述存储设备的所述非易失性存储器的目标容量和所述存储设备的所述非易失性存储器的当前利用率,其中,所述目标容量低于所述存储设备的所述非易失性存储器的当前容量,并且所述当前利用率与逻辑地址空间中的已分配逻辑地址相对应;根据确定所述目标容量不大于所述当前利用率,修整所述已分配逻辑地址的至少一部分;以及减小所述存储设备的所述非易失性存储器的声明容量。
Description
技术领域
所公开的实施例总体上涉及存储器***,并且具体地涉及减小存储设备(例如,包括一个或多个闪存设备)的声明容量。
背景技术
半导体存储器设备(包括闪存)通常利用存储器单元来将数据存储为电性值,如电荷或电压。闪存单元例如包括具有用于存储表示数据值的电荷的浮栅的单个晶体管。闪存是可以被电擦除和重新编程的非易失性数据存储设备。更一般地,与需要电力来维持存储信息的易失性存储器相反,即使断电时,非易失性存储器(例如,闪存以及使用各种技术中的任何技术实现的其他类型的非易失性存储器)仍然保持所存储的信息。已经采用各种方式来促进存储密度的增加,包括:增加芯片上的通过制造发展而启动的存储器单元的密度,以及从单级闪存单元到多级闪存单元的转变,从而使得每个闪存单元可以存储两个或更多个比特。
闪存单元的反复擦除和重新编程引起电荷存储能力的降级(磨损)。最终,电荷存储能力降级到其变得不可能或无法恢复原始数据的点处(例如,不可恢复的码字从闪存设备中被读取、要求恢复码字的计算资源超过预定义的阈值、或者针对闪存设备的程序擦除(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至图7B展示了根据一些实施例的管理存储***的方法的流程图表示。
图8A至图8B展示了根据一些实施例的管理存储***的方法的流程图表示。
图9A-9D展示了根据一些实施例的管理存储***的方法的流程图表示。
根据惯例,附图中展示的各种特征不必按比例绘制。因此,为了清晰起见,不同特征的尺寸可以被任意放大或减小。此外,一些附图可能没有描绘给定***、方法或设备的所有部件。最后,贯穿说明书和附图,相同的参考数字可以用来表示相似的特征。
具体实施方式
当多级闪存单元已经达到其磨损极限时,它通常仍具有足以储存数量减少的电荷量的电荷保持能力。情况经常为,大多数擦除和重新编程周期可以在具有存储数据的完全恢复的磨损有限的多级闪存单元上执行,条件是减少数量的电荷量被使用和被期望。例如,以3比特每单元模式(TLC)操作的闪存设备在被认为磨损之前通常可以执行500至1500次擦除和重新编程周期。然而,在所述时间点,将通常仍具有足够的电荷存储能力来以单比特每单元模式(SLC)进行操作,以在SLC磨损极限达到之前用于附加的10,000至20,000次擦除和重新编程周期。因此,如果允许闪存设备存储较少的数据,则所述闪存设备的寿命可被延长。目前,存储***难以利用这个扩展的能力,因为用于通过减小预留空间来管理其容量随使用而降低的存储设备并与所述存储设备一起工作的存储***机制不能胜任。因此,期望用于管理并与这种存储设备一起工作的机制,包括用于通知周围***其即将发生的(或迫近的)容量减小从而使得所述***可以相应地调整其操作的机制。可能地,具有其他形式的非易失性存储器的存储器设备可以从本文献中所描述的那些机制相同或类似的机制中受益。
本文中所描述的各种实施例包括用于根据检测到的改善触发来减小存储设备的声明容量的***、方法和/或设备。一些实施例包括用于检测用于减小存储***中的存储设备的非易失性存储器的声明容量的改善触发,并且根据检测到的改善触发执行用于减小存储设备的非易失性存储器的声明容量的改善过程的***、方法和/或设备。
(J1)更确切地,一些实施例包括管理存储***的方法。在一些实施例中,在存储***的存储设备处执行所述方法。在一些实施例中,所述方法包括:(1)检测用于减小存储***中的存储设备的非易失性存储器的声明容量的改善触发;并且,(2)根据所检测的改善触发执行用于减小存储设备的非易失性存储器的声明容量的改善过程,所述执行包括:(i)根据从主机处接收的修整命令来修整逻辑地址空间中的一组逻辑地址的至少一部分;以及(ii)减小存储设备的非易失性存储器的声明容量。
(J1-1)在J1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述改善触发之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。
(J1-2)在J1-1所述的方法的一些实施例中,检测改善触发包括检测不同于第一磨损状况的第二磨损状况。
(J2)在J1或J1-1或J1-2所述的方法的一些实施例中,主机包括客户端,代表所述客户端而将数据存储在存储***中。
(J3)在J1或J1-1或J1-2所述的方法的一些实施例中,主机包括存储***的存储***控制器。
(J4)在J1或J1-1或J1-2所述的方法的一些实施例中,主机包括存储***的集群控制器。
(J5)在J1至J4中任一项所述的方法的一些实施例中,修整所述一组逻辑地址的至少一部分包括根据改善过程的一个或多个参数修整所述一组逻辑地址的至少一部分。
(J6)在J1至J5中任一项所述的方法的一些实施例中,修整所述一组逻辑地址的至少一部分包括:(i)从主机处接收指定逻辑地址空间中的所述一组逻辑地址的信息;以及(ii)使映射表的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间中的逻辑地址转换成存储设备的物理地址空间中的物理地址。
(J7)在J6所述的方法的一些实施例中,减小存储设备的非易失性存储器的声明容量包括使一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。替代性地,在J6所述的方法的一些实施例中,减小存储设备的非易失性存储器的声明容量包括使多个逻辑地址不可用于主机,所述多个逻辑地址多于或等于与无效逻辑地址条目相对应的多个逻辑地址。
(J8)在J1至J7中任一项所述的方法的一些实施例中,执行用于减小存储设备的非易失性存储器的声明容量的改善过程进一步包括通告存储设备的非易失性存储器的减小的声明容量。
(J9)在J1至J8中任一项所述的方法的一些实施例中,所述方法进一步包括:在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程之后,检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示;以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示,中止执行用于减小存储设备的非易失性存储器的声明容量的改善过程。
(J10)在J1至J9中任一项所述的方法的一些实施例中,执行用于减小存储设备的非易失性存储器的声明容量的改善过程包括减少对存储设备的非易失性存储器的利用。
(J11)在J1至J9中任一项所述的方法的一些实施例中,存储设备包括一个或多个闪存设备。
(J12)另一方面,存储设备包括(1)非易失性存储器;(2)一个或多个处理器;以及(3)控制器存储器(例如,存储设备中的非瞬态计算机可读存储介质),所述控制器存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使存储设备执行本文中所描述的J1至J11中任一项所述的方法或控制对其的执行。
(J13)在又另一方面,存储设备包括用于执行或使执行本文中所描述的J1至J11中任一项所述的方法的装置。
(J14)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储设备的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的J1至J11中任一项所述的方法的指令。
(J15)在又另一方面,存储***包括(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储器(例如,存储***中的非瞬态计算机可读存储介质),所述存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使存储***执行本文中所描述的J1至J11中任一项所述的方法或控制对其的执行。
(J16)在又另一方面,存储***包括用于执行或使执行本文中所描述的J1至J11中任一项所述的方法的装置。
(J17)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储***的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的J1至J11中任一项所述的方法的指令。
本文中所描述的各种实施例包括用于根据检测到的改善触发来减小存储设备的声明容量的***、方法和/或设备。一些实施例包括用于检测用于减小存储***中的存储设备的非易失性存储器的声明容量的改善触发,并且根据检测到的改善触发执行用于减小存储设备的非易失性存储器的声明容量的改善过程的***、方法和/或设备。
(M1)更确切地,一些实施例包括管理存储***的方法。在一些实施例中,在与存储***的存储设备可操作地耦合的主机处执行所述方法。在一些实施例中,所述方法包括:(1)检测用于减小存储***中的存储设备的非易失性存储器的声明容量的改善触发;并且,(2)根据所检测的改善触发执行用于减小存储设备的非易失性存储器的声明容量的改善过程,所述执行包括:(i)修整逻辑地址空间中的一组逻辑地址的至少一部分;以及(ii)减小存储设备的非易失性存储器的声明容量。
(M1-1)在M1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述改善触发之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。
(M1-2)在M1-1所述的方法的一些实施例中,检测改善触发包括检测不同于第一磨损状况的第二磨损状况。
(M2)在M1或M1-1或M1-2所述的方法的一些实施例中,主机包括客户端,代表所述客户端而将数据存储在存储***中。
(M3)在M1或M1-1或M1-2所述的方法的一些实施例中,主机包括存储***的存储***控制器。
(M4)在J1或J1-1或J1-2所述的方法的一些实施例中,主机包括存储***的集群控制器。
(M5)在M1至M4中任一项所述的方法的一些实施例中,修整所述一组逻辑地址的至少一部分包括根据改善过程的一个或多个参数修整所述一组逻辑地址的至少一部分。
(M6)在M1至M5中任一项所述的方法的一些实施例中,修整所述一组逻辑地址的至少一部分包括:(i)获取指定逻辑地址空间中的所述一组逻辑地址的信息;以及(ii)使映射表的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间中的逻辑地址转换成存储设备的物理地址空间中的物理地址。
(M7)在M6所述的方法的一些实施例中,减小存储设备的非易失性存储器的声明容量包括使一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。替代性地,在M6所述的方法的一些实施例中,减小存储设备的非易失性存储器的声明容量包括使多个逻辑地址不可用于主机,所述多个逻辑地址多于或等于与无效逻辑地址条目相对应的多个逻辑地址。
(M8)在M1至M7中任一项所述的方法的一些实施例中,执行用于减小存储设备的非易失性存储器的声明容量的改善过程进一步包括通告存储设备的非易失性存储器的减小的声明容量。
(M9)在M1至M8中任一项所述的方法的一些实施例中,所述方法进一步包括:在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程之后,检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示;以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示,中止执行用于减小存储设备的非易失性存储器的声明容量的改善过程。
(M10)在M1至M9中任一项所述的方法的一些实施例中,执行用于减小存储设备的非易失性存储器的声明容量的改善过程包括减少对存储设备的非易失性存储器的利用。
(M11)在M1至M10中任一项所述的方法的一些实施例中,存储设备包括一个或多个闪存设备。
(M12)另一方面,主机***包括(1)非易失性存储器;(2)一个或多个处理器;以及(3)存储器(例如,主机***中的非瞬态计算机可读存储介质),所述存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使主机***执行本文中所描述的M1至M11中任一项所述的方法或控制对其的执行。
(M13)在又另一方面,主机***包括用于执行或使执行本文中所描述的M1至M11中任一项所述的方法的装置。
(M14)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由主机***的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的M1至M11中任一项所述的方法的指令。
(M15)在又另一方面,存储***包括(1)一个或多个存储设备;(2)主机,与一个或多个存储设备可操作地耦合;(3)一个或多个处理器;以及(4)存储器(例如,存储***中的非瞬态计算机可读存储介质),所述存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使主机执行本文中所描述的M1至M11中任一项所述的方法或控制对其的执行。
(M16)在又另一方面,存储***包括用于执行或使执行本文中所描述的M1至M11中任一项所述的方法的装置。
(M17)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储***的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的M1至M11中任一项所述的方法的指令。
本文中所描述的各种实施例包括用于根据检测到的改善触发来减小存储设备的声明容量的***、方法和/或设备。一些实施例包括用于检测用于减小存储***中的存储设备的非易失性存储器的声明容量的改善触发,并且根据检测到的改善触发执行用于减小存储设备的非易失性存储器的声明容量的改善过程的***、方法和/或设备。
(N1)更确切地,一些实施例包括管理存储***的方法。在一些实施例中,所述方法包括:(1)检测用于减小存储***中的存储设备的非易失性存储器的声明容量的改善触发;以及(2)根据检测到的改善触发执行用于减小存储设备的非易失性存储器的声明容量的改善过程,所述执行包括:(i)获取存储设备的非易失性存储器的目标容量和存储设备的非易失性存储器的当前利用率,其中,目标容量低于存储设备的非易失性存储器的当前容量,并且当前利用率与逻辑地址空间中的已分配逻辑地址相对应;(ii)判定存储设备的非易失性存储器的目标容量是否大于存储设备的非易失性存储器的当前利用率;(iii)根据确定目标容量大于当前利用率,停止修整已分配逻辑地址;(iv)根据确定目标容量不大于当前利用率,修整已分配逻辑地址的至少一部分;以及(v)减小存储设备的非易失性存储器的声明容量。
(N1-1)在N1所述的方法的一些实施例中,所述方法进一步包括:(1)在检测所述改善触发之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及(2)响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。
(N1-2)在N1-1所述的方法的一些实施例中,检测改善触发包括检测不同于第一磨损状况的第二磨损状况。
(N2)在N1或N1-1或N1-2所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由存储设备执行。
(N3)在N1或N1-1或N1-2所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由存储***的不同于存储设备的一个或多个子***执行。
(N4)在N1或N1-1或N1-2所述的方法的一些实施例中,所述检测、所述执行、或所述检测和所述执行两者由主机执行。
(N5)在N4所述的方法的一些实施例中,主机包括客户端,代表所述客户端而将数据存储在存储***中。
(N6)在N4所述的方法的一些实施例中,主机包括存储***的存储***控制器。
(N7)在N4所述的方法的一些实施例中,主机包括存储***的集群控制器。
(N8)在N1至N7中任一项所述的方法的一些实施例中,修整已分配逻辑地址的至少一部分包括根据改善过程的一个或多个参数修整已分配逻辑地址的至少一部分。
(N9)在N1至N8中任一项所述的方法的一些实施例中,修整已分配逻辑地址的至少一部分包括:(i)获取指定逻辑地址空间中的一组逻辑地址的信息;以及(ii)使映射表的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间中的逻辑地址转换成存储设备的物理地址空间中的物理地址。
(N10)在N9所述的方法的一些实施例中,减小存储设备的非易失性存储器的声明容量包括使一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。替代性地,在N9所述的方法的一些实施例中,减小存储设备的非易失性存储器的声明容量包括使多个逻辑地址不可用于主机,所述多个逻辑地址多于或等于与无效逻辑地址条目相对应的多个逻辑地址。
(N11)在N1至N10中任一项所述的方法的一些实施例中,执行用于减小存储设备的非易失性存储器的声明容量的改善过程进一步包括通告存储设备的非易失性存储器的减小的声明容量。
(N12)在N1至N11中任一项所述的方法的一些实施例中,所述方法进一步包括:在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程之后,检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示;以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示,中止执行用于减小存储设备的非易失性存储器的声明容量的改善过程。
(N13)在N1至N12中任一项所述的方法的一些实施例中,执行用于减小存储设备的非易失性存储器的声明容量的改善过程包括减少对存储设备的非易失性存储器的利用。
(N14)在N1至N13中任一项所述的方法的一些实施例中,存储设备包括一个或多个闪存设备。
(N15)另一方面,存储设备包括(1)非易失性存储器;(2)一个或多个处理器;以及(3)控制器存储器(例如,存储设备中的非瞬态计算机可读存储介质),所述控制器存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使存储设备执行本文中所描述的N1至N5和N8至N14中任一项所述的方法或控制对其的执行。
(N16)在又另一方面,一些实施例包括存储设备,所述存储设备包括用于执行或使执行本文中所描述的N1至N5和N8至N14中任一项所述的方法的装置。
(N17)在又另一方面,一些实施例包括存储设备,所述存储设备包括用于执行或使执行本文中所描述的N1至N14中任一项所述的方法的装置。
(N19)在又另一方面,存储***包括(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储器(例如,存储***中的非瞬态计算机可读存储介质),所述存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使存储***执行本文中所描述的N1至N14中任一项所述的方法或控制对其的执行。
(N20)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储设备的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的N1至N5和N8至N14中任一项所述的方法的指令。
(N21)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储***的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的N1至N14中任一项所述的方法的指令。
(N22)在又另一方面,存储***包括(1)一个或多个存储设备;(2)具有一个或多个处理器的一个或多个子***;以及(3)存储器(例如,一个或多个子***中的非瞬态计算机可读存储介质),所述存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使一个或多个子***执行本文中所描述的N1至N14中任一项所述的方法或控制对其的执行。
(N24)在又另一方面,主机***包括(1)可选地,用于可操作地耦合至存储***的接口;(2)一个或多个处理器;以及(3)存储器(例如,主机***中的非瞬态计算机可读存储介质),所述存储器存储有一个或多个程序,所述一个或多个程序当由所述一个或多个处理器执行时使主机***执行本文中所描述的N1至N4和N6至N14中任一项所述的方法或控制对其的执行。
在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由主机***的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行或使执行本文中所描述的N1至N4和N6至N14中任一项所述的方法的指令。
为了提供对附图中展示的示例实施例的透彻理解,在此描述了大量细节。然而,可以在没有许多特定细节的情况下实践一些实施例,并且权利要求书的范围仅由在权利要求中具体记载的那些特征和方面限制。此外,并未对已知的方法、部件和电路进行详细描述,以免不必要模糊在此所描述的实施例的相关方面。
包括下述那些部件的数据存储***使用各种技术来避免由各种故障机制引起的数据丢失,包括存储介质故障、通信故障以及***和子***级别故障。这些机制的共同特征是使用数据冗余来保护数据、来补偿实际的或可能的数据误差(例如,介质误差、丢失数据、传输误差、无法访问的数据等)。一类冗余机制已知为纠错码(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(有时称为纵向扩展存储***、单节点存储***、RAID***等)包括多个存储设备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。在一些实施例中,一个或多个CPU 182-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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:
ο检测模块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、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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:
ο检测模块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、DDR RAM或者其他随机存取固态存储设备,并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器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、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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:
ο检测模块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可选地包括与(多个)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)的非易失存储器的声明容量的改善过程,所述改善模块可选地包括:
ο检测模块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中所示的示例中,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和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至图7B展示了根据一些实施例的管理存储***的方法700的流程图表示。在一些实施例中,方法700由存储***(例如,图1A的数据存储***100;图1B的数据存储***140;或图1C的数据存储***170)的存储设备(例如,图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)执行。为简洁和简单起见,方法700的操作中的至少一些操作将关于存储设备120(图1A)被描述;然而,本领域技术人员将认识到方法700同样适用于存储设备160-1至160-m(图1B)中的任何存储设备或存储设备194-1至194-n或194-j至194-k(图1C)中的任何存储设备。
存储设备检测(702)用于减小存储***(例如,图1A的数据存储***100、图1B的数据存储***140、或图1C的数据存储***170)的存储设备(例如,图1A的存储设备120、图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)的非易失性存储器的声明容量的改善触发。在一些实施例中,检测改善触发包括接收或生成改善触发。在一些实施例中,如以上关于图2A-1而描述的,检测模块(例如,图2A-1的检测模块231-1)用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测改善触发(702)之前,方法700包括检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。
根据检测到的改善触发,存储设备执行(704)用于通过以下方式减小存储设备的非易失性存储器的声明容量的改善过程:根据从主机处接收的修整命令来修整(706)逻辑地址空间中的一组逻辑地址的至少一部分;以及减小(712)存储设备的非易失性存储器的声明容量。在一些实施例中,如以上关于图2A-1而描述的,改善模块(例如,图2A-1的改善模块230-1)用于执行用于减小存储设备的非易失性存储器的声明容量的改善过程。在一些实施例中,修整模块(例如,图2D的修整模块235)用于修整逻辑地址空间中的一组逻辑地址的至少一部分(例如,图3的非实时数据332的一部分)。
在图3中所示出的示例中,修整的存储由修整的LBA空间330表示。修整操作通常将由非实时数据332占据的存储空间(在存储设备中)的至少一部分转换成未分配的存储。在逻辑地址空间(如LBA空间320)中,非实时数据332的被修整的逻辑地址变成未分配逻辑地址空间(如未分配的LBA空间340)的一部分。修整已分配逻辑地址的效果是物理地址位置被存储设备或其控制器标记为可用于再使用,并且相关联的逻辑地址变成未分配逻辑地址。目前未分配逻辑地址可以通过修整操作而不受影响。由此,修整数据是与删除或擦除数据不同的操作。通常,主机(例如,主机的文件***)并不跟踪特定逻辑地址是已分配(342)还是未分配(340)。通常,主机将跟踪特定逻辑地址是空闲还是在使用中。取决于历史使用情况(例如,它是否被预先写入),空闲逻辑地址实际上可以是或者已分配(342)的或者未分配(340)。由此,当主机确定其不再需要使用逻辑地址时,它可以发起修整操作,即使所述逻辑地址可能目前未分配(340)。
存储设备的非易失性存储器的声明容量有时被称为通告容量,并且通常被主机的操作***和/或文件***用作主机的操作***或文件***允许分配的最大容量。
在一些实施例中,存储设备通过以下方式修整(706)所述一组逻辑地址的至少一部分:根据改善过程的一个或多个参数来修整(708)所述一组逻辑地址的至少一部分。在一些实施例中,修整模块(例如,图2D的修整模块235)用于根据改善过程的一个或多个参数来修整所述一组逻辑地址的至少一部分。在一些实施例中,改善过程的一个或多个参数包括需要在存储设备中减小的非易失性存储器的声明容量的目标量。在一些实施例中,改善过程的一个或多个参数包括存储设备的非易失性存储器的目标和/或当前利用率。在一些实施例中,根据改善过程的一个或多个参数来修整所述一组逻辑地址的至少一部分包括修整足够的不再被主机使用的先前写入数据(例如,图3的非实时数据332),以便允许满足由一个或多个参数指定的声明容量减小的目标量。在一些实施例中,一个或多个参数考虑或使改善过程考虑存储设备的非易失性存储器在预定义时间段(例如,一小时、一天、一周、或一些其他的预定义时间段)内将被需要的预计声明容量减小。
在一些实施例中,存储设备通过(710)以下方式修整(706)所述一组逻辑地址的至少一部分:从主机处接收指定逻辑地址空间中的所述一组逻辑地址的信息;以及使映射表(例如,在图2A-1的转换表212-1中)的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间(例如,LBA空间320)中的逻辑地址转换成存储设备的物理地址空间(例如,物理地址空间318)中的物理地址。在一些实施例中,存储设备通过将一个或多个逻辑地址条目从映射表中重置、移除、和/或删除或者引起重置、移除、和/或删除来使一个或多个逻辑地址条目无效。在一些实施例中,存储设备可选地通过以下方式来修整(706)所述一组逻辑地址的至少一部分:还设置与一个或多个无效逻辑地址条目相对应的一个或多个物理地址的一个或多个指示符以便指示可以丢弃存储在一个或多个物理地址处的数据。例如,具有指示符的一个或多个物理地址随后可以被垃圾收集。
在一些实施例中,存储设备通过以下方式减小(712)存储设备的非易失性存储器的声明容量:使(714)一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,8)逻辑地址(例如,每逻辑地址条目8个LBA)相对应。在一些实施例中,改善模块(例如,图2A-1的改善模块230-1)或其部件(例如,图2D的LBA减小模块238)用于通过以下方式减小存储设备的非易失性存储器的声明容量:使一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。
在一些实施例中,存储设备通过以下方式执行(704)用于减小存储设备的非易失性存储器的声明容量的改善过程:还通告(716)存储设备的非易失性存储器的减小的声明容量。在一些实施例中,如以上关于图2D而描述的,通告模块(例如,图2D的通告模块239)用于通告存储设备的非易失性存储器的减小的声明容量。在一些实施例中,在操作(706)和(712)之前、之后、或平行于所述操作,存储设备通告存储设备的非易失性存储器的减小的声明容量。在一些实施例中,存储设备向主机发送消息,通告存储设备的非易失性存储器的减小的声明容量。在一些实施例中,存储设备通过将中断消息或其他消息发送至主机来通告减小的声明容量。
在一些实施例中,存储设备从与存储设备可操作地耦合的主机处接收查询,并且响应于接收查询,存储设备上报存储设备的非易失性存储器的减小的声明容量。在一些实施例中,主机被配置成用于在存储***或存储设备中周期性地查询例如***或设备的健康状态。
在一些实施例中,存储设备从与存储设备可操作地耦合的主机处接收命令(例如,存储读或写命令),并且响应于接收命令,存储设备发送对命令的响应,所述响应包括存储设备的非易失性存储器的减小的声明容量的通知。
在一些实施例中,存储设备从与存储设备可操作地耦合的主机处接收命令(例如,存储读或写命令),并且响应于接收命令,存储设备发送对命令的响应和提示主机从存储设备或包括存储设备的数据存储***处获取信息的通知,所述信息包括存储设备的非易失性存储器的减小的声明容量。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是SCSI延迟错误或延迟错误响应码。
在一些实施例中,主机包括(718)客户端,代表所述客户端而将数据存储在存储***(例如,图1A的数据存储***100、图1B的数据存储***140、或图1C的数据存储***170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储***中。例如,在一些实施例中,主机是计算机***110(图1A)或者计算机***110执行的客户端进程或应用;计算机***142(图1B)或者计算机***142执行的客户端进程或应用;和/或计算机***172(图1C)或者计算机***172执行的客户端进程或应用。
在一些实施例中,主机包括(720)存储***(例如,图1B的数据存储***140)的存储***控制器。在一些实施例中,存储***控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储***控制器150(图1B)。在这些实施例中的一些实施例中,数据存储***(例如,图1B的数据存储***140)被称为纵向扩展***。
在一些实施例中,主机包括(722)存储***(例如,图1C的数据存储***170)的集群控制器(例如,图1C的集群控制器180)。在一些实施例中,如例如在图1C中(在所述图中,数据存储子***中的每个数据存储子***可以被实施为具有一个或多个存储设备的数据存储***(例如,图1B的数据存储***140))所示出的,集群控制器在一个或多个数据存储子***当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1C)。在这些实施例中的一些实施例中,数据存储***(例如,图1C的数据存储***170)被称为横向扩展***,有时候被称为集群式存储***。
在一些实施例中,在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程之后,存储设备检测(724)用于中止对存储设备的非易失性存储器的声明容量的减小的指示;以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示而中止执行用于减小存储设备的非易失性存储器的声明容量的改善过程。在这些实施例中的一些实施例的上下文中,检测用于中止的指示在本文中被定义为指接收用于中止对声明容量的减小的信号(例如,接收来自存储设备的控制器或包括存储设备的存储***的存储***控制器的信号)或者评估存储设备的一个或多个度量以及基于所述评估来决定中止对声明容量的减小。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。
在一些实施例中,因为那些参数可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、修整、或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、初始地、最终地、偶尔、或不规律地)重新计算或重新评估多个参数(如目标减小的声明容量和/或目标利用率)。在一些情况下,根据重新计算的或重新评估的参数,对改善过程的一个或多个部分(如利用减少过程)重新进行优先级排序、重新安排、或中止。
在一些实施例中,存储设备包括(726)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1A的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1A的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1A的存储介质130)包括NAND类型闪存或NOR类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。
图8A至图8B展示了根据一些实施例的管理存储***的方法800的流程图表示。在一些实施例中,方法800由主机(例如,图1A的计算机***110、图1B的计算机***142、图1C的计算机***172、图1B的存储***控制器150、或图1C的集群控制器180)或主机的一个或多个部件(例如,图1A的管理模块121-2、图1B的***管理模块151、或图1C的集群模块181)执行,其中,主机与存储***(例如,图1A的数据存储***100、图1B的数据存储***140、或图1C的数据存储***170)的存储设备(例如,图1A的存储设备120、图1B的存储设备160、或图1C的存储设备194)可操作地耦合。在一些实施例中,方法800由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(如图2A-2中所示出的管理模块121-2的一个或多个处理单元(CPU)122-2、图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)执行。为简洁和简单起见,方法800的操作中的至少一些操作将关于计算机***110(图1A)被描述;然而,本领域技术人员将认识到方法800同样适用于计算机***142(图1B)、计算机***172(图1C)、存储***控制器150(图1B)、和集群控制器180(图1C)。
主机检测(802)用于减小存储***(例如,图1A的数据存储***100、图1B的数据存储***140、或图1C的数据存储***170)的存储设备(例如,图1A的存储设备120、图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)的非易失性存储器的声明容量的改善触发。在一些实施例中,检测改善触发包括接收或生成改善触发。在一些实施例中,检测模块(例如,图2A-2的检测模块231-2、图2B-1和图2B-2的检测模块261、或图2C-1和图2C-2的检测模块291)用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测触发条件(802)之前,主机检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。
根据检测到的改善触发,主机通过以下方式执行(804)用于减小存储设备的非易失性存储器的声明容量的改善过程:修整(806)逻辑地址空间中的一组逻辑地址的至少一部分;以及减小(812)存储设备的非易失性存储器的声明容量。在一些实施例中,如以上关于图2A-2而描述的,改善模块(例如,图2A-2的改善模块230-2)用于执行用于减小存储设备的非易失性存储器的声明容量的改善过程。在一些实施例中,修整模块(例如,图2D的修整模块235)用于修整逻辑地址空间中的一组逻辑地址的至少一部分(例如,图3的非实时数据332的一部分)。在一些实施例中,如以上关于图2A-1而描述的,减小存储设备的非易失性存储器的声明容量包括减小可用于存储设备的非易失性存储器的主机(例如,图1A的计算机***110)的存储容量。
在图3中所示出的示例中,修整的存储由修整的LBA空间330表示。修整操作通常将由非实时数据332占据的存储空间(在存储设备中)的至少一部分转换成未分配的存储。在逻辑地址空间(如LBA空间320)中,非实时数据332的被修整的逻辑地址变成未分配逻辑地址空间(如未分配的LBA空间340)的一部分。修整已分配逻辑地址的效果是物理地址位置被存储设备或其控制器标记为可用于再使用,并且相关联的逻辑地址变成未分配逻辑地址。目前未分配逻辑地址可以通过修整操作而不受影响。由此,修整数据是与删除或擦除数据不同的操作。通常,主机(例如,主机的文件***)并不跟踪特定逻辑地址是已分配(342)还是未分配(340)。通常,主机将跟踪特定逻辑地址是空闲还是在使用中。取决于历史使用情况(例如,它是否被预先写入),空闲逻辑地址实际上可以是或者已分配(342)的或者未分配(340)。由此,当主机确定其不再需要使用逻辑地址时,它可以发起修整操作,即使所述逻辑地址可能目前未分配(340)。
存储设备的非易失性存储器的声明容量有时被称为通告容量,并且通常被主机的操作***和/或文件***用作主机的操作***或文件***允许分配的最大容量。
在一些实施例中,主机通过以下方式修整(806)所述一组逻辑地址的至少一部分:根据改善过程的一个或多个参数来修整(808)所述一组逻辑地址的至少一部分。在一些实施例中,修整模块(例如,图2D的修整模块235)用于根据改善过程的一个或多个参数来修整所述一组逻辑地址的至少一部分。在一些实施例中,改善过程的一个或多个参数包括需要在存储设备中减小的非易失性存储器的声明容量的目标量。在一些实施例中,改善过程的一个或多个参数包括存储设备的非易失性存储器的目标和/或当前利用率。在一些实施例中,根据改善过程的一个或多个参数来修整所述一组逻辑地址的至少一部分包括修整足够的不再被主机使用的先前写入数据(例如,图3的非实时数据332),以便允许满足由一个或多个参数指定的声明容量减小的目标量。在一些实施例中,一个或多个参数考虑或使改善过程考虑存储设备的非易失性存储器在预定义时间段(例如,一小时、一天、一周、或一些其他的预定义时间段)内将被需要的预计声明容量减小。
在一些实施例中,主机通过(810)以下方式修整(806)所述一组逻辑地址的至少一部分:获取指定逻辑地址空间中的所述一组逻辑地址的信息;以及使映射表(例如,在图2A-1的转换表212-1中、或在图2A-2的转换表212-2中)的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间(例如,LBA空间320)中的逻辑地址转换成存储设备的物理地址空间(例如,物理地址空间318)中的物理地址。在一些实施例中,主机在逻辑地址空间中维持不再使用的逻辑地址列表。在一些实施例中,主机通过将一个或多个逻辑地址条目从映射表中重置、移除、和/或删除来使一个或多个逻辑地址条目无效。在一些实施例中,主机可选地通过以下方式来修整(806)所述一组逻辑地址的至少一部分:还设置与一个或多个无效逻辑地址条目相对应的一个或多个物理地址的一个或多个指示符以便指示可以丢弃存储在一个或多个物理地址处的数据。例如,具有指示符的一个或多个物理地址随后可以被垃圾收集。
在一些实施例中,主机通过以下方式减小(812)存储设备的非易失性存储器的声明容量:使(814)一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,8)逻辑地址(例如,每逻辑地址条目8个LBA)相对应。在一些实施例中,改善模块(例如,图2A-2的改善模块230-2、图2B-1和图2B-2的改善模块260、或图2C-1和图2C-2的改善模块290)或其部件(例如,图2D的LBA减小模块238)用于通过以下方式减小存储设备的非易失性存储器的声明容量:使一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。
在一些实施例中,主机通过以下方式执行(804)用于减小存储设备的非易失性存储器的声明容量的改善过程:还通告(816)存储设备的非易失性存储器的减小的声明容量。在一些实施例中,如以上关于图2D而描述的,通告模块(例如,图2D的通告模块239)用于通告存储设备的非易失性存储器的减小的声明容量。在一些实施例中,在操作(806)和(812)之前、之后、或平行于所述操作,主机通告存储设备的非易失性存储器的减小的声明容量。例如,当主机是存储***控制器150(图1B)或集群控制器180(图1C)时,主机分别向计算机***142(图1B)或计算机***172(图1C)通告存储设备的非易失性存储器的声明容量。继续此示例,主机向计算机***142(图1B)或计算机***172(图1C)发送通告存储设备的非易失性存储器的减小的声明容量的消息。继续此示例,主机通过向计算机***142(图1B)或计算机***172(图1C)发送中断消息或其他消息来通告减小的声明容量。
继续以上示例,在一些实施例中,主机从与存储设备可操作地耦合的计算机***142(图1B)或计算机***172(图1C)处接收查询,并且响应于接收查询,主机上报存储设备的非易失性存储器的减小的声明容量。在一些实施例中,计算机***142(图1B)或计算机***172(图1C)被配置成用于在存储***或存储设备中周期性地查询例如***或设备的健康状态。
继续以上示例,在一些实施例中,主机从与存储设备可操作地耦合的计算机***142(图1B)或计算机***172(图1C)处接收命令,并且响应于接收命令,主机发送对命令的响应,所述响应包括存储设备的非易失性存储器的减小的声明容量的通知。
继续以上示例,在一些实施例中,主机从与存储设备可操作地耦合的计算机***142(图1B)或计算机***172(图1C)处接收命令(例如,存储读或写命令),并且响应于接收命令,主机发送对命令的响应和提示计算机***142(图1B)或计算机***172(图1C)从存储设备或包括存储设备的数据存储***处获取信息的通知,所述信息包括存储设备的非易失性存储器的减小的声明容量。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是SCSI延迟错误或延迟错误响应码。
在一些实施例中,主机包括(818)客户端,代表所述客户端而将数据存储在存储***(例如,图1A的数据存储***100、图1B的数据存储***140、或图1C的数据存储***170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储***中。例如,在一些实施例中,主机是计算机***110(图1A)或者计算机***110执行的客户端进程或应用;计算机***142(图1B)或者计算机***142执行的客户端进程或应用;和/或计算机***172(图1C)或者计算机***172执行的客户端进程或应用。
在一些实施例中,主机包括(820)存储***(例如,图1B的数据存储***140)的存储***控制器。在一些实施例中,存储***控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储***控制器150(图1B)。在这些实施例中的一些实施例中,数据存储***(例如,图1B的数据存储***140)被称为纵向扩展***。
在一些实施例中,主机包括(822)存储***(例如,图1C的数据存储***170)的集群控制器(例如,图1C的集群控制器180)。在一些实施例中,如例如在图1C中(在所述图中,数据存储子***中的每个数据存储子***可以被实施为具有一个或多个存储设备的数据存储***(例如,图1B的数据存储***140))所示出的,集群控制器在一个或多个数据存储子***当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1C)。在这些实施例中的一些实施例中,数据存储***(例如,图1C的数据存储***170)被称为横向扩展***,有时候被称为集群式存储***。
在一些实施例中,在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程之后,主机检测(824)用于中止对存储设备的非易失性存储器的声明容量的减小的指示;以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示而中止执行用于减小存储设备的非易失性存储器的声明容量的改善过程。在这些实施例中的一些实施例的上下文中,检测用于中止的指示在本文中被定义为指接收用于中止对声明容量的减小的信号(例如,接收来自存储设备的控制器或包括存储设备的存储***的存储***控制器的信号)或者评估存储设备的一个或多个度量以及基于所述评估来决定中止对声明容量的减小。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。
在一些实施例中,因为那些参数可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除、修整、或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、初始地、最终地、偶尔、或不规律地)重新计算或重新评估多个参数(如目标减小的声明容量和/或目标利用率)。在一些情况下,根据重新计算的或重新评估的参数,对改善过程的一个或多个部分(如利用减少过程)重新进行优先级排序、重新安排、或中止。
在一些实施例中,存储设备包括(826)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1A的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1A的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,比如,每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1A的存储介质130)包括NAND类型闪存或NOR类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。
图9A至图9D展示了根据一些实施例的管理存储***的方法900的流程图表示。至少在一些实施例中,方法900由存储设备(例如,图1A的存储设备120、图1B的存储设备160、或图1C的存储设备194)或存储设备的一个或多个部件(例如,图1A的存储控制器124和/或存储介质130)执行,其中,存储设备与主机***(例如,图1A的计算机***110、图1B的计算机***142、图1C的计算机***172、图1B的存储***控制器150、或图1C的集群控制器180)可操作地耦合。在一些实施例中,方法900由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1A和图2A-1中所示出的管理模块121-1的一个或多个处理单元(CPU)122-1)执行的指令进行控制。在一些实施例中,方法900由存储***(例如,图1A的数据存储***100、图1B的数据存储***140、和/或图1C的存储***170)或存储***的一个或多个部件(例如,图1A的计算机***110和/或存储设备120、图1B的存储***控制器150、和/或图1C的集群控制器180)执行。在一些实施例中,在主机(例如,图1A的计算机***110、图1B的从计算机***142、和/或图1C的计算机***172)处执行方法900的操作中的一些操作,并且向存储设备(例如,图1A的存储设备120)和/或存储***(例如,图1B的存储***控制器150、和/或图1C的集群控制器180)的一个或多个子***传输信息。在一些实施例中,方法900至少部分地由存储在非瞬态计算机可读存储介质中并由主机(图1A、图1B和图1C中未示出)的一个或多个处理器执行的指令控制。为便于解释,以下描述了由存储设备(例如,图1A的存储设备120)执行的方法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中的任何存储设备)的非易失性存储器的声明容量的改善触发。在一些实施例中,检测改善触发包括接收或生成改善触发。在一些实施例中,检测模块(例如,图2A-1和图2A-2的检测模块231、图2B-1和图2B-2的检测模块261、或图2C-1和图2C-2的检测模块291)用于检测用于减小存储设备的非易失性存储器的声明容量的改善触发。此外,在一些实施例中,如以上关于图6的操作601而描述的,在检测改善触发(902)之前,方法900包括检测磨损状况并在不减小存储设备的非易失性存储器的声明容量的情况下减小存储设备的非易失性存储器的预留空间。
根据检测到的改善触发,方法900包括通过以下方式执行(904)用于减小存储设备的非易失性存储器的声明容量的改善过程:获取(906)存储设备的非易失性存储器的目标容量和存储设备的非易失性存储器的当前利用率,其中,目标容量低于存储设备的非易失性存储器的当前容量,并且当前利用率与逻辑地址空间中的已分配逻辑地址相对应;以及判定(908)存储设备的非易失性存储器的目标容量是否大于存储设备的非易失性存储器的当前利用率。在一些实施例中,改善模块(例如,图2A-1和图2A-2的改善模块230、图2B-1和图2B-2的改善模块260、或图2C-1和图2C-2的改善模块290)用于执行用于减小存储设备的非易失性存储器的声明容量的改善过程。根据哪个实体进行所述获取,所述获取(906)包括接收或生成目标容量。例如,在一些实施例中,如果所述获取(906)由存储设备(例如,图1A的存储设备120)执行,则存储设备生成目标容量。在另一个示例中,在一些实施例中,如果所述获取(906)由主机(例如,图1A的计算机***110)执行,则主机从存储设备处接收目标容量。
根据确定目标容量大于当前利用率,方法900包括停止修整(910)已分配逻辑地址。
根据确定目标容量不大于当前利用率,方法900包括修整(912)已分配逻辑地址的至少一部分(例如,图3的非实时数据332的一部分)。在一些实施例中,修整模块(例如,图2D的修整模块235)用于根据确定目标容量不大于当前利用率来修整已分配逻辑地址的至少一部分。在一些实施例中,修整已分配逻辑地址的至少一部分包括修整足够的用于减小利用率的先前写入数据(例如,图3的非实时数据332),以便满足存储设备的非易失性存储器的目标容量。
在图3中所示出的示例中,修整的存储由修整的LBA空间330表示。修整操作通常将由非实时数据332占据的存储空间(在存储设备中)的至少一部分转换成未分配的存储。在逻辑地址空间(如LBA空间320)中,非实时数据332的被修整的逻辑地址变成未分配逻辑地址空间(如未分配的LBA空间340)的一部分。修整已分配逻辑地址的效果是物理地址位置被存储设备或其控制器标记为可用于再使用,并且相关联的逻辑地址变成未分配逻辑地址。目前未分配逻辑地址可以通过修整操作而不受影响。由此,修整数据是与删除或擦除数据不同的操作。通常,主机(例如,主机的文件***)并不跟踪特定逻辑地址是已分配(342)还是未分配(340)。通常,主机将跟踪特定逻辑地址是空闲还是在使用中。取决于历史使用情况(例如,它是否被预先写入),空闲逻辑地址实际上可以是或者已分配(342)的或者未分配(340)。由此,当主机确定其不再需要使用逻辑地址时,它可以发起修整操作,即使所述逻辑地址可能目前未分配(340)。
在一些实施例中,修整(912)已分配逻辑地址的至少一部分包括根据改善过程的一个或多个参数来修整(914)已分配逻辑地址的至少一部分。在一些实施例中,修整模块(例如,图2D的修整模块235)用于根据改善过程的一个或多个参数来修整已分配逻辑地址的至少一部分。在一些实施例中,改善过程的一个或多个参数包括需要在存储设备中减小的非易失性存储器的声明容量的目标量。在一些实施例中,改善过程的一个或多个参数包括存储设备的非易失性存储器的目标和/或当前利用率。在一些实施例中,根据改善过程的一个或多个参数来修整已分配逻辑地址的至少一部分包括修整足够的不再被主机使用的先前写入数据(例如,图3的非实时数据332),以便允许满足由一个或多个参数指定的声明容量减小的目标量(例如,达到存储设备的非易失性存储器的目标容量)。在一些实施例中,一个或多个参数考虑或使改善过程考虑存储设备的非易失性存储器在预定义时间段(例如,一小时、一天、一周、或一些其他的预定义时间段)内将被需要的预计声明容量减小。
在一些实施例中,修整(912)已分配逻辑地址的至少一部分包括(916):获取指定逻辑地址空间中的一组逻辑地址的信息;以及使映射表的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将逻辑地址空间(例如,LBA空间320)中的逻辑地址转换成存储设备的物理地址空间(例如,物理地址空间318)中的物理地址。如果方法900由除主机外的任何实体执行,则所述获取包括从主机处接收所述一组逻辑地址。在一些实施例中,所述使无效包括将一个或多个逻辑地址条目从映射表中重置、移除、和/或删除或者引起重置、移除、和/或删除。在一些实施例中,修整(912)已分配逻辑地址的至少一部分包括可选地还包括:设置与一个或多个无效逻辑地址条目相对应的一个或多个物理地址的一个或多个指示符以便指示可以丢弃存储在一个或多个物理地址处的数据。例如,具有指示符的一个或多个物理地址随后可以被垃圾收集。
方法900包括减小(918)存储设备的非易失性存储器的声明容量。在一些实施例中,减小存储设备的非易失性存储器的声明容量包括减小可用于存储设备(例如,图1A的存储设备120、图1B的存储设备160-1至160-m中的任何存储设备、或图1C的存储设备194-1至194-n或194-j至194-k中的任何存储设备)的非易失性存储器的主机(例如,图1A的计算机***110、图1B的计算机***142、图1C的计算机***172、图1B的存储***控制器150、或图1C的集群控制器180)的存储容量。
在一些实施例中,减小(918)存储设备的非易失性存储器的声明容量包括使(920)一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,8)逻辑地址(例如,每逻辑地址条目8个LBA)相对应。在一些实施例中,改善模块(例如,图2A-1和图2A-2的改善模块230、图2B-1和图2B-2的改善模块260、或图2C-1和图2C-2的改善模块290)或其部件(例如,图2D的LBA减小模块238)用于通过以下方式减小存储设备的非易失性存储器的声明容量:使一定数量的逻辑地址对主机不可用,所述数量小于或等于与无效逻辑地址条目相对应的逻辑地址的数量。
在一些实施例中,执行(904)用于减小存储设备的非易失性存储器的声明容量的改善过程进一步包括通告(922)存储设备的非易失性存储器的减小的声明容量。在一些实施例中,在操作(912)和(918)之前、之后、或平行于所述操作,将所述通告(922)执行为改善过程的一部分。在一些实施例中,如以上关于图2D而描述的,通告模块(例如,图2D的通告模块239)用于通告存储设备的非易失性存储器的减小的声明容量。在一些实施例中,存储设备或相应存储控制器、集群控制器、管理模块或数据存储***向主机发送消息,通告存储设备的非易失性存储器的减小的声明容量。在一些实施例中,通过以下方式来完成通告减小的声明容量:发送中断消息或其他消息。
在一些实施例中,通过以下方式来完成通告减小的声明容量:从与存储设备可操作地耦合的主机处接收查询,并且响应于接收查询,上报存储设备的非易失性存储器的减小的声明容量。在一些这种实施例中,主机被配置成用于在存储***、存储控制器、管理模块、集群控制器或存储设备中周期性地查询例如***或设备健康状态。
在一些实施例中,通过以下方式来完成通告减小的声明容量:从与存储设备可操作地耦合的主机处接收命令(例如,存储读取或写入命令),并且响应于接收命令,发送对命令的响应,所述响应包括对存储设备的非易失性存储器的减小的声明容量的通知。
在一些实施例中,通过以下方式来完成通告减小的声明容量:从与存储设备可操作地耦合的主机处接收命令(例如,存储读取或写入命令),并且响应于接收命令,发送对命令的响应和提示主机从存储设备或包括存储设备的数据存储***处获取信息的通知,所述信息包括存储设备的非易失性存储器的减小的声明容量。在一些实施例中,用于在对来自主机的命令进行响应时返回通知的机制是SCSI延迟错误或延迟错误响应码。
在一些实施例中,主机包括(924)客户端,代表所述客户端而将数据存储在存储***(例如,图1A的数据存储***100、图1B的数据存储***140、或图1C的数据存储***170)中。在一些实施例中,客户端是或者包括实体,代表所述实体而将数据存储在存储***中。例如,在一些实施例中,主机是计算机***110(图1A)或者计算机***110执行的客户端进程或应用;计算机***142(图1B)或者计算机***142执行的客户端进程或应用;和/或计算机***172(图1C)或者计算机***172执行的客户端进程或应用。
在一些实施例中,主机包括(926)存储***(例如,图1B的数据存储***140)的存储***控制器。在一些实施例中,存储***控制器在一个或多个存储设备当中控制和/或协调操作。例如,在一些实施例中,主机是存储***控制器150(图1B)。在这些实施例中的一些实施例中,数据存储***(例如,图1B的数据存储***140)被称为纵向扩展***。
在一些实施例中,主机包括(928)存储***(例如,图1C的数据存储***170)的集群控制器(例如,图1C的集群控制器180)。在一些实施例中,如例如在图1C中(在所述图中,数据存储子***中的每个数据存储子***可以被实施为具有一个或多个存储设备的数据存储***(例如,图1B的数据存储***140))所示出的,集群控制器在一个或多个数据存储子***当中控制和/或协调操作。例如,在一些实施例中,主机是集群控制器180(图1C)。在这些实施例中的一些实施例中,数据存储***(例如,图1C的数据存储***170)被称为横向扩展***,有时候被称为集群式存储***。
在一些实施例中,检测、执行、或检测和执行两者由存储设备(例如,图1A的存储设备120、图1B的相应存储设备160、或图1C的相应存储设备194)或存储设备的一个或多个部件(例如,图1A的存储控制器124)执行(930)。在一些实施例中,方法900(或者至少方法900的检测操作902和/或执行操作904)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1A和图2A-1中所示出的管理模块121-1的一个或多个处理单元(CPU)122-1)执行的指令进行控制。
在一些实施例中,检测、执行、或检测和执行两者由存储***的不同于存储设备的一个或多个子***执行(932)。例如,在这些实施例中的一些实施例中,检测、执行、或检测和执行两者由存储***(例如,图1B的数据存储***140)的存储***控制器(例如,图1B的存储***控制器150)执行。在一些实施例中,方法900(或者至少方法900的检测操作902和/或执行操作904)由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1B和图2B-1中所示出的管理模块151-1的一个或多个处理单元(CPU)152-1)执行的指令进行控制。
在一些实施例中,检测、执行、或检测和执行两者至少部分地由主机执行(934)。在一些实施例中,方法900(或者至少方法900的检测操作902和/或执行操作904)至少部分地由存储在非瞬态计算机可读存储介质中并由主机的一个或多个处理器(未在图1A、图1B和图1C中示出的处理器)(如图1A和图2A-2的管理模块121-2、图1B和图2B-2的管理模块151-2、或图1C和图2C-2的管理模块181-2的一个或多个处理单元(CPU))执行的指令进行控制。
在一些实施例中,方法900包括(936):在开始执行用于减小存储设备的非易失性存储器的声明容量的改善过程之后,存储设备检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示;以及响应于检测用于中止对存储设备的非易失性存储器的声明容量的减小的指示而中止执行用于减小存储设备的非易失性存储器的声明容量的改善过程。在这些实施例中的一些实施例的上下文中,检测用于中止的指示在本文中被定义为指接收用于中止对声明容量的减小的信号(例如,接收来自存储设备的控制器或包括存储设备的存储***的存储***控制器的信号)或者评估存储设备的一个或多个度量以及基于所述评估来决定中止对声明容量的减小。例如,在改善过程的操作期间,将继续执行正常存储操作(例如,读取、写入、删除、修整等)。正常存储操作包括像修整等明确减少存储设备利用的操作,有可能足以值得中止改善过程。如垃圾收集等其他存储活动也可以减少利用,有可能足以值得中止改善过程。
在一些实施例中,因为那些参数可能由于改善过程和/或正常存储操作(例如,读取、写入、擦除和修整或去映射操作)而改变,所以改善过程(例如,周期性地、半连续地、初始地、最终地、偶尔、或不规律地)重新计算或重新评估多个参数(如目标减小的声明容量和/或目标利用率)。在一些情况下,根据重新计算的或重新评估的参数,对改善过程的一个或多个部分(如利用减少过程)重新进行优先级排序、重新安排、或中止。
在一些实施例中,存储设备包括(938)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1A的存储介质130),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质(例如,图1A的存储介质130)是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,如每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1A的存储介质130)包括NAND类型闪存或NOR类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。
半导体存储器设备包括易失性存储器设备(如动态随机存取存储器(“DRAM”)或静态随机存取存储器(“SRAM”))、非易失性存储器设备(如电阻式随机存取存储器(“ReRAM”)、电可擦除可编程只读存储器(“EEPROM”)、闪存(其还可以被考虑为EEPROM的子集)、铁电随机存取存储器(“FRAM”)、和磁阻随机存取存储器(“MRAM”))、以及能够存储信息的其他半导体元件。每种类型的存储器设备可以具有不同的配置。例如,闪存设备可以被配置成NAND或NOR配置。
位于基板内和/或上方的半导体存储器元件可以被安排在两个或三个维度(如二维存储器结构或三维存储器结构)中。
术语“三维存储器设备”(或3D存储器设备)在此被定义为指具有多个存储器层或多个存储器元件级(例如,有时被称为多个存储器设备级)的存储器设备,包括以下各项中的任一项:具有单片式或非单片式3D存储器阵列的存储器设备;或两个或更多个2D和/或3D存储器设备(其被封装在一起,以便形成堆叠芯片存储器设备)。
本领域的技术人员将意识到,本发明不限于所描述的二维和三维结构,但涵盖了如此处描述的本发明的精神和范围内的和如本领域的技术人员理解的所有相关存储器结构。
将理解的是,尽管此处可以使用术语“第一”、“第二”等来描述各个元件,但是这些元件不应被这些术语限制。这些术语仅用于将一个元件与另一个元件相区分。例如,在不改变描述的含义的情况下,第一存储设备可以被称为第二存储设备,并且类似地,第二存储设备可以被称为第一存储设备,只要一致地重新命名“第一存储设备”的所有出现并且一致地重新命名“第二存储设备”的所有出现即可。第一存储设备和第二存储设备都是存储设备,但是它们不是相同的存储设备。
此处所使用的术语仅出于描述特定实施例的目的,而不旨在于限制权利要求书。如在对实施例和所附权利要求书的描述中所使用的,除非上下文另有明示,否则单数形式“一个(a)”、“一个(an)”和“所述(the)”旨在同样包括复数形式。还将理解的是,如本文使用的术语“和/或”指代并且包括相关联的列举项的一个或多个项的任何和所有可能组合。将进一步理解的是,当在本说明书中使用术语“包括(comprises)”和/或“包括(comprising)”时,其指定陈述的特征、整数、步骤、操作、元件和/或部件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、部件和/或它们的组的存在或添加。
如在此所使用的,根据上下文,术语“如果”可以被解释为指“当…时”或者“在…时”或者“响应于确定”或者“根据确定”或者“响应于检测到”所述先决条件为真。类似地,根据上下文,短语“如果确定”或“如果”或“当时”可以被解释为指“在确定时”或“响应于确定”或“根据确定”或“在检测到时”或“响应于检测到”所述先决条件为真。
出于解释的目的,已经参考特定实施例描述了前述描述。然而,以上的说明性讨论并不旨在是详尽的或旨在将权利要求书限制成所公开的精确形式。鉴于以上教导,许多修改和变化都是可能的。选择并描述了实施例,以便最好地解释操作原理和实际应用,由此使能本领域的技术人员。
Claims (22)
1.一种管理存储***的方法,所述方法包括:
检测用于减小所述存储***的存储设备的非易失性存储器的声明容量的改善触发,所述改善触发对应于所述存储设备的非易失性存储器的预定义的磨损状况;以及
根据所检测到的改善触发,执行用于减小所述存储设备的所述非易失性存储器的声明容量的改善过程,所述执行包括:
获取所述存储设备的所述非易失性存储器的目标容量和所述存储设备的所述非易失性存储器的当前利用率,其中,所述目标容量低于所述存储设备的所述非易失性存储器的当前容量,并且所述当前利用率与逻辑地址空间中的已分配逻辑地址相对应;
判定所述存储设备的所述非易失性存储器的所述目标容量是否大于所述存储设备的所述非易失性存储器的所述当前利用率;
根据确定所述目标容量大于所述当前利用率,停止修整所述已分配逻辑地址;
根据确定所述目标容量不大于所述当前利用率,修整所述已分配逻辑地址的至少一部分,所述修整包括将所述逻辑地址空间中的所述已分配逻辑地址的部分转换成所述逻辑地址空间中的未分配的逻辑地址;以及
减小所述存储设备的所述非易失性存储器的声明容量,其中,声明容量是对主机可用的存储容量。
2.如权利要求1所述的方法,进一步包括:
在检测所述改善触发之前,检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及
响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。
3.如权利要求2所述的方法,其中,检测所述改善触发包括检测不同于所述第一磨损状况的所述预定义的磨损状况。
4.如权利要求1至3中任一项所述的方法,其中,所述主机包括客户端,代表所述客户端而将数据存储在所述存储***中。
5.如权利要求1至3中任一项所述的方法,其中,所述主机包括所述存储***的存储***控制器或所述存储***的集群控制器。
6.如权利要求1至3中任一项所述的方法,其中,修整所述已分配逻辑地址的至少一部分包括根据所述改善过程的一个或多个参数修整所述已分配逻辑地址的至少一部分。
7.如权利要求1至3中任一项所述的方法,其中,修整所述已分配逻辑地址的至少一部分包括:
获取指定所述逻辑地址空间中的一组逻辑地址的信息;以及
使映射表的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将所述逻辑地址空间中的逻辑地址转换成所述存储设备的物理地址空间中的物理地址。
8.如权利要求7所述的方法,其中,减小所述存储设备的所述非易失性存储器的声明容量包括使一定数量的逻辑地址对所述主机不可用,所述数量小于或等于与所述无效逻辑地址条目相对应的逻辑地址的数量。
9.如权利要求1至3中任一项所述的方法,其中,执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程进一步包括通告所述存储设备的所述非易失性存储器的减小的声明容量。
10.如权利要求1至3中任一项所述的方法,进一步包括:
在开始执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程之后,检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的指示;以及
响应于检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的所述指示而中止执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程。
11.如权利要求1至3中任一项所述的方法,其中,所述存储设备包括一个或多个闪存设备。
12.一种存储设备,包括:
非易失性存储器;
一个或多个处理器;以及
控制器存储器,其存储一个或多个程序,所述一个或多个程序在由所述一个或多个处理器执行时使所述存储设备执行操作,其包括:
检测用于减小所述存储设备的非易失性存储器的声明容量的改善触发,所述改善触发对应于所述存储设备的非易失性存储器的预定义的磨损状况;以及
根据所检测到的改善触发执行用于减小所述存储设备的所述非易失性存储器的声明容量的改善过程,所述执行包括:
获取所述存储设备的所述非易失性存储器的目标容量和所述存储设备的所述非易失性存储器的当前利用率,其中,所述目标容量低于所述存储设备的所述非易失性存储器的当前容量,并且所述当前利用率与逻辑地址空间中的已分配逻辑地址相对应;
判定所述存储设备的所述非易失性存储器的所述目标容量是否大于所述存储设备的所述非易失性存储器的所述当前利用率;
根据确定所述目标容量大于所述当前利用率而停止修整所述已分配逻辑地址;
根据确定所述目标容量不大于所述当前利用率而修整所述已分配逻辑地址的至少一部分,所述修整包括将所述逻辑地址空间中的所述已分配逻辑地址的所述部分转换成所述逻辑地址空间中的未分配的逻辑地址;以及
减小所述存储设备的所述非易失性存储器的声明容量,其中,声明容量是对主机可用的存储容量。
13.如权利要求12所述的存储设备,其中所述一个或多个程序进一步包括指令,所述指令在由所述一个或多个处理器执行时使所述存储设备执行操作,其包括:
在检测所述改善触发之前检测所述存储设备的所述非易失性存储器的第一磨损状况,其中,所述存储设备的所述非易失性存储器的总存储容量包括声明容量和预留空间;以及
响应于检测所述第一磨损状况而执行补救动作,所述补救动作减小所述存储设备的所述非易失性存储器的预留空间而不减小所述存储设备的所述非易失性存储器的声明容量。
14.如权利要求13所述的存储设备,其中,检测所述改善触发包括检测不同于所述第一磨损状况的第二磨损状况。
15.如权利要求12至14中任一项所述的存储设备,其中,所述主机包括客户端,代表所述客户端而将数据存储在存储***中。
16.如权利要求12至14中任一项所述的存储设备,其中,所述主机包括存储***的存储***控制器或所述存储***的集群控制器。
17.如权利要求12至14中任一项所述的存储设备,其中,修整所述已分配逻辑地址的至少一部分包括根据所述改善过程的一个或多个参数修整所述已分配逻辑地址的至少一部分。
18.如权利要求12至14中任一项所述的存储设备,其中,修整所述已分配逻辑地址的至少一部分包括:
获取指定所述逻辑地址空间中的一组逻辑地址的信息;以及
使映射表的与所述一组逻辑地址相关联的一个或多个逻辑地址条目无效,所述映射表用于将所述逻辑地址空间中的逻辑地址转换成所述存储设备的物理地址空间中的物理地址。
19.如权利要求18所述的存储设备,其中,减小所述存储设备的所述非易失性存储器的声明容量包括使一定数量的逻辑地址对所述主机不可用,所述数量小于或等于与所述无效逻辑地址条目相对应的逻辑地址的数量。
20.如权利要求12至14中任一项所述的存储设备,其中,执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程进一步包括通告所述存储设备的所述非易失性存储器的减小的声明容量。
21.如权利要求12至14中任一项所述的存储设备,其中所述一个或多个程序进一步包括指令,所述指令在由所述一个或多个处理器执行时使所述存储设备执行操作,其包括:
在开始执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程之后,检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的指示;以及
响应于检测用于中止对所述存储设备的所述非易失性存储器的声明容量的所述减小的所述指示,而中止执行用于减小所述存储设备的所述非易失性存储器的声明容量的所述改善过程。
22.如权利要求12至14中任一项所述的存储设备,其中,所述存储设备包括一个或多个闪存设备。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462044936P | 2014-09-02 | 2014-09-02 | |
US62/044,936 | 2014-09-02 | ||
US14/621,148 US9158681B1 (en) | 2014-09-02 | 2015-02-12 | Process and apparatus to reduce declared capacity of a storage device by conditionally trimming |
US14/621,148 | 2015-02-12 | ||
PCT/US2015/047908 WO2016036720A1 (en) | 2014-09-02 | 2015-09-01 | Process and apparatus to reduce declared capacity of a storage device by conditionally trimming |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003939A CN107003939A (zh) | 2017-08-01 |
CN107003939B true CN107003939B (zh) | 2020-04-28 |
Family
ID=54252679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580047849.7A Active CN107003939B (zh) | 2014-09-02 | 2015-09-01 | 用于通过有条件地修整而减小存储设备的声明容量的过程和装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9158681B1 (zh) |
EP (1) | EP3189437B1 (zh) |
KR (1) | KR20170046771A (zh) |
CN (1) | CN107003939B (zh) |
WO (1) | WO2016036720A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10956050B2 (en) | 2014-03-31 | 2021-03-23 | Sandisk Enterprise Ip Llc | Methods and systems for efficient non-isolated transactions |
US9916356B2 (en) | 2014-03-31 | 2018-03-13 | Sandisk Technologies Llc | Methods and systems for insert optimization of tiered data structures |
US10133764B2 (en) | 2015-09-30 | 2018-11-20 | Sandisk Technologies Llc | Reduction of write amplification in object store |
US10185658B2 (en) * | 2016-02-23 | 2019-01-22 | Sandisk Technologies Llc | Efficient implementation of optimized host-based garbage collection strategies using xcopy and multiple logical stripes |
US10289340B2 (en) | 2016-02-23 | 2019-05-14 | Sandisk Technologies Llc | Coalescing metadata and data writes via write serialization with device-level address remapping |
US10747676B2 (en) | 2016-02-23 | 2020-08-18 | Sandisk Technologies Llc | Memory-efficient object address mapping in a tiered data structure |
KR102435890B1 (ko) | 2017-08-17 | 2022-08-25 | 삼성전자주식회사 | 스토리지 장치의 어드레스 맵핑 방법 및 동작 방법 |
US10324839B2 (en) | 2017-11-03 | 2019-06-18 | Micron Technology, Inc. | Trim setting determination on a memory device |
US10431319B2 (en) | 2017-11-03 | 2019-10-01 | Micron Technology, Inc. | Selectable trim settings on a memory device |
US11132133B2 (en) * | 2018-03-08 | 2021-09-28 | Toshiba Memory Corporation | Workload-adaptive overprovisioning in solid state storage drive arrays |
KR20200064567A (ko) * | 2018-11-29 | 2020-06-08 | 에스케이하이닉스 주식회사 | 데이터 처리 시스템 및 그것의 동작방법 |
US10963332B2 (en) | 2018-12-17 | 2021-03-30 | Western Digital Technologies, Inc. | Data storage systems and methods for autonomously adapting data storage system performance, capacity and/or operational requirements |
KR20200088563A (ko) * | 2019-01-15 | 2020-07-23 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
US10957381B1 (en) * | 2019-08-28 | 2021-03-23 | Micron Technology, Inc. | Metadata grouping for un-map techniques |
CN115620793A (zh) * | 2021-07-12 | 2023-01-17 | 长鑫存储技术有限公司 | 一种半导体存储器及其上存储块的容量配置方法 |
GB2611542B (en) * | 2021-10-06 | 2023-11-15 | Advanced Risc Mach Ltd | Circuitry and method |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101625894A (zh) * | 2008-07-11 | 2010-01-13 | 三星电子株式会社 | 非易失性存储器装置及其操作方法 |
WO2012174216A2 (en) * | 2011-06-15 | 2012-12-20 | Apple Inc. | Block management schemes in hybrid slc/mlc memory |
CN103329103A (zh) * | 2010-10-27 | 2013-09-25 | Lsi公司 | 用于基于闪存的数据存储的自适应ecc技术 |
CN103440208A (zh) * | 2013-08-12 | 2013-12-11 | 华为技术有限公司 | 一种数据存储的方法及装置 |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5953255A (en) * | 1997-12-24 | 1999-09-14 | Aplus Flash Technology, Inc. | Low voltage, low current hot-hole injection erase and hot-electron programmable flash memory with enhanced endurance |
US8266367B2 (en) * | 2003-12-02 | 2012-09-11 | Super Talent Electronics, Inc. | Multi-level striping and truncation channel-equalization for flash-memory system |
US8452912B2 (en) * | 2007-10-11 | 2013-05-28 | Super Talent Electronics, Inc. | Flash-memory system with enhanced smart-storage switch and packed meta-data cache for mitigating write amplification by delaying and merging writes until a host read |
US7111292B2 (en) | 2001-09-10 | 2006-09-19 | Texas Instruments Incorporated | Apparatus and method for secure program upgrade |
US7761678B1 (en) | 2004-09-29 | 2010-07-20 | Verisign, Inc. | Method and apparatus for an improved file repository |
US7609561B2 (en) | 2006-01-18 | 2009-10-27 | Apple Inc. | Disabling faulty flash memory dies |
JP2008123330A (ja) | 2006-11-14 | 2008-05-29 | Toshiba Corp | 不揮発性半導体記憶装置 |
US7554853B2 (en) | 2006-12-30 | 2009-06-30 | Sandisk Corporation | Non-volatile storage with bias based on selective word line |
US7646636B2 (en) | 2007-02-16 | 2010-01-12 | Mosaid Technologies Incorporated | Non-volatile memory with dynamic multi-mode operation |
TWI368224B (en) | 2007-03-19 | 2012-07-11 | A Data Technology Co Ltd | Wear-leveling management and file distribution management of hybrid density memory |
US7802132B2 (en) | 2007-08-17 | 2010-09-21 | Intel Corporation | Technique to improve and extend endurance and reliability of multi-level memory cells in a memory device |
US8060719B2 (en) * | 2008-05-28 | 2011-11-15 | Micron Technology, Inc. | Hybrid memory management |
US9123422B2 (en) * | 2012-07-02 | 2015-09-01 | Super Talent Technology, Corp. | Endurance and retention flash controller with programmable binary-levels-per-cell bits identifying pages or blocks as having triple, multi, or single-level flash-memory cells |
US8412987B2 (en) | 2009-06-30 | 2013-04-02 | Micron Technology, Inc. | Non-volatile memory to store memory remap information |
US20100332950A1 (en) | 2009-06-30 | 2010-12-30 | Gurkirat Billing | Bit error threshold and content addressable memory to address a remapped memory device |
EP2476079A4 (en) | 2009-09-09 | 2013-07-03 | Fusion Io Inc | APPARATUS, SYSTEM, AND METHOD FOR STORAGE ALLOCATION |
KR101691088B1 (ko) | 2010-02-17 | 2016-12-29 | 삼성전자주식회사 | 불휘발성 메모리 장치, 그것의 동작 방법, 그리고 그것을 포함하는 메모리 시스템 |
KR101633048B1 (ko) | 2010-02-25 | 2016-06-24 | 삼성전자주식회사 | 메모리 시스템 및 그것의 데이터 처리 방법 |
US9047955B2 (en) | 2011-03-30 | 2015-06-02 | Stec, Inc. | Adjusting operating parameters for memory cells based on wordline address and cycle information |
KR101733620B1 (ko) | 2011-05-25 | 2017-05-11 | 삼성전자주식회사 | 기판에 적층된 복수의 메모리 셀들을 포함하는 불휘발성 메모리 |
KR20130060791A (ko) * | 2011-11-30 | 2013-06-10 | 삼성전자주식회사 | 마모도 제어 로직을 포함하는 메모리 시스템, 데이터 저장 장치, 메모리 카드, 그리고 솔리드 스테이트 드라이브 |
KR101856130B1 (ko) | 2012-01-04 | 2018-05-10 | 삼성전자주식회사 | 비휘발성 메모리 장치, 그리고 그것을 포함하는 메모리 시스템 |
US8856484B2 (en) * | 2012-08-14 | 2014-10-07 | Infinidat Ltd. | Mass storage system and methods of controlling resources thereof |
US8898548B1 (en) * | 2012-08-24 | 2014-11-25 | Western Digital Technologies, Inc. | Methods, data storage devices and systems having variable size ECC page size |
US8830717B2 (en) | 2012-11-29 | 2014-09-09 | Sandisk Technologies Inc. | Optimized configurable NAND parameters |
US9652376B2 (en) * | 2013-01-28 | 2017-05-16 | Radian Memory Systems, Inc. | Cooperative flash memory control |
US9804960B2 (en) | 2013-03-14 | 2017-10-31 | Western Digital Technologies, Inc. | Overprovision capacity in a data storage device |
-
2015
- 2015-02-12 US US14/621,148 patent/US9158681B1/en active Active
- 2015-09-01 KR KR1020177008651A patent/KR20170046771A/ko not_active Application Discontinuation
- 2015-09-01 EP EP15763728.1A patent/EP3189437B1/en active Active
- 2015-09-01 CN CN201580047849.7A patent/CN107003939B/zh active Active
- 2015-09-01 WO PCT/US2015/047908 patent/WO2016036720A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101625894A (zh) * | 2008-07-11 | 2010-01-13 | 三星电子株式会社 | 非易失性存储器装置及其操作方法 |
CN103329103A (zh) * | 2010-10-27 | 2013-09-25 | Lsi公司 | 用于基于闪存的数据存储的自适应ecc技术 |
WO2012174216A2 (en) * | 2011-06-15 | 2012-12-20 | Apple Inc. | Block management schemes in hybrid slc/mlc memory |
CN103440208A (zh) * | 2013-08-12 | 2013-12-11 | 华为技术有限公司 | 一种数据存储的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
KR20170046771A (ko) | 2017-05-02 |
WO2016036720A1 (en) | 2016-03-10 |
CN107003939A (zh) | 2017-08-01 |
EP3189437B1 (en) | 2018-11-07 |
EP3189437A1 (en) | 2017-07-12 |
US9158681B1 (en) | 2015-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107003939B (zh) | 用于通过有条件地修整而减小存储设备的声明容量的过程和装置 | |
CN106687935B (zh) | 用于通过变更编码格式来减小存储设备的声明容量的过程和装置 | |
US9582220B2 (en) | Notification of trigger condition to reduce declared capacity of a storage device in a multi-storage-device storage system | |
US9753653B2 (en) | High-priority NAND operations management | |
US9946483B2 (en) | Efficiently managing unmapped blocks to extend life of solid state drive with low over-provisioning | |
US9946473B2 (en) | Efficiently managing unmapped blocks to extend life of solid state drive | |
US9665311B2 (en) | Process and apparatus to reduce declared capacity of a storage device by making specific logical addresses unavailable | |
US9519427B2 (en) | Triggering, at a host system, a process to reduce declared capacity of a storage device | |
WO2015034954A1 (en) | Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses | |
CN107003938B (zh) | 触发用于减小多存储设备存储***中的存储设备的声明容量的过程 | |
US9582203B2 (en) | Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses | |
US9524112B2 (en) | Process and apparatus to reduce declared capacity of a storage device by trimming | |
US9563362B2 (en) | Host system and process to reduce declared capacity of a storage device by trimming | |
US9652153B2 (en) | Process and apparatus to reduce declared capacity of a storage device by reducing a count of logical addresses | |
US9552166B2 (en) | Process and apparatus to reduce declared capacity of a storage device by deleting data | |
US9582202B2 (en) | Process and apparatus to reduce declared capacity of a storage device by moving data | |
US9582212B2 (en) | Notification of trigger condition to reduce declared capacity of a storage device | |
US9563370B2 (en) | Triggering a process to reduce declared capacity of a storage device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |