1.本公开的实施例大体上涉及存储器子系统,且更具体地说,涉及管理存储器子系统的容量减小。
背景技术:2.存储器子系统可以包含存储数据的一或多个存储器装置。存储器装置可为例如非易失性存储器装置和易失性存储器装置。一般来说,主机系统可利用存储器子系统以在存储器装置处存储数据且从存储器装置检索数据。
技术实现要素:3.本公开的一方面提供一种系统,其包括:存储器装置集合;以及处理装置,其与所述存储器装置集合操作性地耦合以执行操作,所述操作包括:检测所述集合中的至少一个存储器装置的故障,其中所述故障影响所存储数据;向主机系统通知所述存储器装置集合的容量的改变;从所述主机系统接收在减小的容量下继续的指示;以及更新所述存储器装置集合以将所述容量改变为所述减小的容量。
4.本公开的另一方面提供一种方法,其包括:检测存储器装置集合中的至少一个存储器装置的故障,其中所述故障影响所存储数据;向主机系统通知所述存储器装置集合的容量的改变;由处理装置从所述主机系统接收在减小的容量下继续的指示;以及由所述处理装置更新所述存储器装置集合以将所述容量改变为所述减小的容量。
5.本公开的另一方面提供一种存储指令的非暂时性计算机可读媒体,所述指令在由处理装置执行时致使所述处理装置执行操作,所述操作包括:检测存储器装置集合的多个故障,其中第一故障影响第一存储器装置上的所存储数据,且第二故障影响第二装置上的所存储数据;在所述多个故障中的每一者之后向主机系统通知所述存储器装置集合的容量的改变;从所述主机系统接收在所述多个故障中的每一者之后以减小的容量继续的指示;以及在所述多个故障中的每一者之后更新所述存储器装置集合以将所述容量改变为所述减小的容量。
附图说明
6.根据下文给出的详细描述和本公开的各种实施例的附图,将更充分地理解本公开。然而,图式不应视为将本公开限制于具体实施例,而是仅用于解释和理解。
7.图1说明根据本公开的一些实施例的包含主机系统和存储器子系统的实例计算系统。
8.图2为根据本公开的一些实施例的图1的主机系统和存储器子系统的详细框图。
9.图3为根据本公开的一些实施例的包含具有多个区的分区命名空间的存储器子系统的框图。
10.图4为根据本公开的一些实施例的存储器子系统的详细框图。
11.图5为根据本公开的一些实施例的主机系统的详细框图。
12.图6为根据本公开的一些实施例的由存储器子系统执行以管理容量的减小的方法的流程图。
13.图7为根据本公开的一些实施例的由存储器子系统执行以管理容量的减小的另一方法的流程图。
14.图8为根据本公开的一些实施例的由存储器子系统执行以管理容量的减小的另一方法的流程图。
15.图9为根据本公开的一些实施例的由存储器子系统执行以管理容量的减小的另一方法的流程图。
16.图10为根据本公开的一些实施例的由主机系统执行以管理存储器子系统的容量的减小的方法的流程图。
17.图11为根据本公开的一些实施例的由主机系统执行以管理存储器子系统的容量的减小的另一方法的流程图。
18.图12是其中可操作本公开的实施例的实例计算机系统的框图。
具体实施方式
19.本公开的各方面使得主机系统和存储器子系统能够通过在减小的容量下保持操作来管理故障。存储器子系统可为存储装置、存储器模块,或存储装置和存储器模块的组合。下文结合图1描述存储装置和存储器模块的实例。一般来说,主机系统可利用包含存储数据的一或多个存储器装置的存储器子系统。主机系统可提供数据以存储于存储器子系统处,且可请求从存储器子系统检索数据。
20.存储器子系统可能容易遭受减小存储器子系统的容量且不利地影响主机系统的故障。举例来说,存储器子系统可包含多个存储器装置,且存储器装置中的一或多者可能发生故障且减小存储器子系统的容量。在过去,当存储器装置中的一者发生故障时,将更换存储器子系统。现代存储器子系统可包含许多存储器装置(例如,256个裸片),且可存储大量数据(例如,128太字节)。单个存储器装置的故障意味着存在仍然起作用的许多其它存储器装置。更换具有起作用的存储器装置的存储器子系统会浪费其余存储器装置,且通常需要重定位大量数据。
21.现代存储器子系统通常提供以对主机系统透明的方式处置故障的容错性。存储器子系统制造为具有一定存储空间大小,且使存储空间大小的第一部分可供主机系统使用,而可保留第二部分以供内部使用(例如,超量配给或冗余)。可供主机系统使用的存储空间大小的第一部分称为存储容量。当发生减小存储空间总量的故障时,存储器子系统可减小保留以供内部使用的第二部分的大小,以使得可供主机使用的第一部分的大小保持相同(例如,存储容量不变)。这可对主机系统透明地执行,因为存储器子系统可恢复存储在发生故障的存储器装置上的数据,且将其存储在可供主机系统使用的另一位置处。此类型的透明容错性可在其处置的故障的类型和其可承受的存储空间损失量方面受到限制,且尽管其可保持存储容量,但其可能会不利地影响存储器子系统的性能或可靠性。
22.本公开的各方面通过使主机系统和存储器子系统能够管理存储器子系统的容量的减小来解决以上和其它缺陷。在一个实施例中,存储器子系统可检测影响可供主机系统
使用的存储容量的存储器子系统中的故障。存储器子系统可包含存储器装置集合,且所述故障可影响存储器子系统的任何部分,且影响对存储于所述集合中的存储器装置中的一或多者上的数据的存取。在一个实例中,存储器装置中的一或多者可能发生故障(例如,裸片故障、平面故障),或可能变得不可存取(例如,通道或连接器故障)。在另一实例中,存储器装置可每存储器单元存储多于一个位的信息(例如,每单元4位),且存储器装置可能未能按预期起作用,且可下移以每存储器单元存储较少位的信息(例如,每单元3位,而不是每单元4位)。在这些实例中的任一者中,所述故障可导致存储容量的减小,且存储器子系统可与主机系统通信以管理存储器子系统的容量的减小。举例来说,存储器子系统可向主机系统通知发生故障,且指示受影响的存储空间的量、剩余容量,或其组合。主机系统可确认故障,且指示是否应更新存储器子系统以在减小的容量下操作。更新可保留不受故障影响的数据、恢复受故障影响的数据、重定位在存储器子系统内部或外部的数据,或其组合。
23.本公开的优点包含但不限于增强存储器子系统的效率、持续时间和使用。确切地说,所述技术可为有利的,因为其使得存储器子系统能够在更换之前保持在使用中达较长时间,且因此降低总体拥有成本(tco)。在一个实例中,每当存储器装置中的一者发生故障(例如,nand裸片发生故障)时,存储器子系统可使用其余存储器装置更新其配置以在较低容量下操作。此更新可重复地且响应于每一故障而发生,直到最后一个存储器装置发生故障为止。这使得存储器子系统能够随时间推移承受多个故障,且在更换之前保持在操作中达较长持续时间。其它优点包含使得存储器子系统能够在保持存储器子系统的可靠性、性能和效率的同时减小容量。如上文所论述,存储器子系统可通过采用存储空间的一部分用于内部使用且使所述部分可用于主机系统而响应于故障保持容量恒定。所采用的部分可能已经用于超量配给或冗余,且其移除可能会降低存储器子系统的性能、可靠性或效率。额外优点包含使得主机系统和存储器子系统能够在不使用于内部使用的存储空间最小化的情况下减小存储器子系统的容量。本文所公开的技术还可使得主机系统和存储器子系统能够在容量减小时保留数据。主机系统通常通过重新格式化存储器子系统来处置容量的减小,所述重新格式化删除存储器子系统上的数据。在重新格式化之前,主机系统将存储器子系统的数据复制到临时存储装置,且接着在重新格式化之后将数据复制、恢复、校正或以其它方式重新创建回到存储器子系统上。本文中所公开的技术通过保留不受故障影响的数据且在一些实例中通过恢复受故障影响的数据中的一些或全部而减少或避免复制(例如,处理器循环、i/o、临时存储空间)所消耗的计算资源。如下文中所论述的数据存储装置和存储器装置的领域的技术人员将显而易见其它优点。
24.图1说明根据本公开的一些实施例的包含主机系统120和存储器子系统110的实例计算系统100。存储器子系统110可包含媒体,如一或多个易失性存储器装置(例如,存储器装置140)、一或多个非易失性存储器装置(例如,存储器装置130)或这些的组合。每一存储器装置130或140可为一或多个存储器组件。
25.存储器子系统110可为存储装置、存储器模块,或存储装置和存储器模块的组合。存储装置的实例包含固态驱动器(ssd)、快闪驱动器、通用串行总线(usb)快闪驱动器、嵌入式多媒体控制器(emmc)驱动器、通用快闪存储(ufs)驱动器、安全数字(sd)卡和硬盘驱动器(hdd)。存储器模块的实例包含双列直插式存储器模块(dimm)、小外形dimm(so-dimm),和各种类型的非易失性双列直插式存储器模块(nvdimm)。
26.计算系统100可为计算装置,例如台式计算机、膝上型计算机、网络服务器、移动装置、运载工具(例如,飞机、无人机、火车、汽车或其它运输工具)、支持物联网(iot)的装置、嵌入式计算机(例如,包含在运载工具、工业设备或联网市售装置中的计算机),或包含存储器和处理装置(例如,处理器)的此类计算装置。
27.计算系统100可包含耦合到一或多个存储器子系统110的主机系统120。在一些实施例中,主机系统120耦合到不同类型的存储器子系统110。图1说明耦合到一个存储器子系统110的主机系统120的一个实例。如本文中所使用,“耦合到”或“与......耦合”通常是指组件或装置之间的连接,其可为间接通信连接或直接通信连接(例如,不具有中间组件或装置),无论有线或无线,包含例如电连接、光学连接、磁性连接和其类似物的连接。
28.主机系统120可包含处理器芯片组和由所述处理器芯片组执行的软件堆栈。处理器芯片组可包含一或多个核心、一或多个高速缓存器、存储器控制器(例如,nvdimm控制器),和存储协议控制器(例如,pcie控制器、sata控制器)。主机系统120使用存储器子系统110,例如,将数据写入到存储器子系统110以及从存储器子系统110读取数据。
29.主机系统120可经由可在系统总线上通信的物理主机接口耦合到存储器子系统110。物理主机接口的实例包含但不限于串行高级技术附件(sata)接口、外围组件互连高速(pcie)接口、通用串行总线(usb)接口、光纤通道、串行附接scsi(sas)、双数据速率(ddr)存储器总线、小型计算机系统接口(scsi)、双列直插式存储器模块(dimm)接口(例如,支持双数据速率(ddr)的dimm套接接口)、开放nand快闪接口(onfi)、双数据速率(ddr)、低功率双数据速率(lpddr)或任何其它接口。物理主机接口可用来在主机系统120与存储器子系统110之间传输数据。当存储器子系统110通过物理主机接口(例如,pcie总线)与主机系统120耦合时,主机系统120可以进一步利用nvm高速(nvm express,nvme)接口来存取组件(例如,存储器装置130)。物理主机接口可提供用于在存储器子系统110与主机系统120之间传送控制、地址、数据和其它信号的接口。图1说明存储器子系统110以作为实例。一般来说,主机系统120可经由同一通信连接、多个单独通信连接和/或通信连接的组合存取多个存储器子系统。
30.存储器装置130、140可包含不同类型的非易失性存储器装置和/或易失性存储器装置的任何组合。易失性存储器装置(例如,存储器装置140)可为但不限于随机存取存储器(ram),例如动态随机存取存储器(dram)和同步动态随机存取存储器(sdram)。
31.非易失性存储器装置(例如,存储器装置130)的一些实例包含“与非”(nand)型快闪存储器和就地写入存储器,例如三维交叉点(“3d交叉点”)存储器。非易失性存储器的交叉点阵列可结合可堆叠交叉网格化数据存取阵列而基于体电阻的改变来进行位存储。另外,与许多基于闪存的存储器对比,交叉点非易失性存储器可执行就地写入操作,其中可在不预先擦除非易失性存储器单元的情况下对非易失性存储器单元进行编程。nand类型快闪存储器包含例如二维nand(2d nand)和三维nand(3d nand)
32.存储器装置130中的每一个可包含一或多个存储器单元阵列。一种类型的存储器单元,例如,单层级单元(slc)可存储一个位每单元。其它类型的存储器单元,例如多层级单元(mlc)、三层级单元(tlc)、四层级单元(qlc)和五层级单元(plc)每单元可存储多个位。在一些实施例中,存储器装置130中的每一者可包含一或多个存储器单元阵列,例如slc、mlc、tlc、qlc、plc或其任何组合。在一些实施例中,特定存储器装置可包含存储器单元的slc部
分,以及mlc部分、tlc部分、qlc部分或plc部分。存储器装置130的存储器单元可分组为页,所述页可指用于存储数据的存储器装置的逻辑单元。对于一些类型的存储器(例如,nand),页可进行分组以形成块。
33.尽管描述了例如非易失性存储器单元的3d交叉点阵列及nand型快闪存储器(例如,2d nand、3d nand)等非易失性存储器组件,但存储器装置130可基于任何其它类型的非易失性存储器,例如只读存储器(rom)、相变存储器(pcm)、自选存储器、其它基于硫属化物的存储器、铁电晶体管随机存取存储器(fetram)、铁电随机存取存储器(feram)、磁随机存取存储器(mram)、自旋转移力矩(stt)-mram、导电桥接ram(cbram)、电阻性随机存取存储器(rram)、基于氧化物的rram(oxram)、或非(nor)快闪存储器、电可擦除可编程只读存储器(eeprom)。
34.存储器子系统控制器115(为简单起见,控制器115)可与存储器装置130通信以进行操作,例如在存储器装置130处读取数据、写入数据或擦除数据和其它此类操作。存储器子系统控制器115可以包含硬件,例如一或多个集成电路和/或离散组件、缓冲存储器,或其组合。硬件可包含具有专用(即,硬译码)逻辑的数字电路系统以执行本文所描述的操作。存储器子系统控制器115可为微控制器、专用逻辑电路系统(例如,现场可编程门阵列(fpga)、专用集成电路(asic)等)或其它合适的处理器。
35.存储器子系统控制器115可包含处理装置,其包含经配置以执行存储在本地存储器119中的指令的一或多个处理器(例如,处理器117)。在所说明的实例中,存储器子系统控制器115的本地存储器119包含经配置以存储指令的嵌入式存储器,所述指令用于执行控制存储器子系统110的操作(包含处置存储器子系统110与主机系统120之间的通信)的各种过程、操作、逻辑流程以及例程。
36.在一些实施例中,本地存储器119可包含存储存储器指针、所提取的数据等的存储器寄存器。本地存储器119还可包含用于存储微码的只读存储器(rom)。尽管将图1中的实例存储器子系统110说明为包含存储器子系统控制器115,但在本公开的另一实施例中,存储器子系统110不包含存储器子系统控制器115,且可能改为依靠(例如由外部主机或由与存储器子系统分开的处理器或控制器提供的)外部控制。
37.通常,存储器子系统控制器115可从主机系统120接收命令或操作,且可将所述命令或操作转换为指令或适当命令来实现对存储器装置130的所要存取。存储器子系统控制器115可负责其它操作,例如耗损均衡操作、垃圾收集操作、错误检测和错误校正码(ecc)操作、加密操作、高速缓存操作,以及与存储器装置130相关联的逻辑地址(如,逻辑块地址(lba)、命名空间)与物理地址(例如,物理块地址)之间的地址转换。存储器子系统控制器115可进一步包含主机接口电路系统以经由物理主机接口与主机系统120通信。主机接口电路系统可将从主机系统接收到的命令转换成存取存储器装置130的命令指令,且将与存储器装置130相关联的响应转换成用于主机系统120的信息。
38.存储器子系统110还可包含未说明的额外电路或组件。在一些实施例中,存储器子系统110可以包含高速缓存或缓冲器(例如,dram)和地址电路系统(例如,行解码器和列解码器),其可从存储器子系统控制器115接收地址且对地址进行解码以存取存储器装置130。
39.在一些实施例中,存储器装置130包含本地媒体控制器135,其与存储器子系统控制器115结合操作以对存储器装置130的一或多个存储器单元执行操作。外部控制器(例如,
存储器子系统控制器115)可在外部管理存储器装置130(例如,对存储器装置130执行媒体管理操作)。在一些实施例中,存储器子系统110为受管理存储器装置,其为具有在裸片上的控制逻辑(例如,本地媒体控制器135)和用于相同存储器装置封装内的存储器管理的控制器(例如,存储器子系统控制器115)的原始存储器装置130。受管理存储器装置的实例是受管理nand(mnand)装置。
40.计算系统100包含在主机系统120中的存储结构124和在存储器子系统110中的主机协商组件214。存储结构124可经配置以适应存储器子系统110的容量的减小,如遍及图式所论述。在一些实施例中,主机系统120包含容量管理功能性的至少一部分。在其它实施例中或组合地,主机系统120的控制器115和/或处理装置223包含容量管理功能性的至少一部分。举例来说,主机系统120的控制器和处理装置(处理器)可经配置以执行存储于存储器中的指令,所述指令用于执行操作以管理存储器子系统的容量的减小,且用于鉴于如本文中所描述的容量减小而配置存储结构124。
41.图2为包含可通过减小存储器子系统110的容量而适应故障的主机系统120和存储器子系统110的计算系统100的详细框图。所述故障中的一或多者可同时发生或在不同时间发生,且可在延长的持续时间(例如,数天、数周、数年)内扩散。技术可使主机系统120和存储器子系统110能够重复地适应由每一故障引起的容量的减小。在所展示的实例中,存储器子系统110可与多个存储器装置130a-z、容量232a-z、故障234a-z和数据236a-b相关联。
42.存储器装置130a-z可包含高密度非易失性存储器装置,其中当没有电力供应到存储器装置时需要数据的保持。非易失性存储器装置的一个实例为与非(nand)存储器装置。上文结合图1的存储器装置130描述非易失性存储器装置的其它实例。非易失性存储器装置为具有块(例如,物理块)集合的一或多个裸片的封装,且每一块可包含页集合。页可包含单元(例如,存储器单元)集合,且每一单元可为存储信息的电子电路。取决于单元类型,单元可以存储二进制信息的一或多个位,且可具有与正存储的位数相关的各种逻辑状态。逻辑状态可以由二进制值(例如,“0”和“1”)或此类值的组合表示。实例单元类型包含单层级单元(例如,每单元1位)、多层级单元(例如,每单元2位)、三层级单元(例如,每单元3位)、四层级单元(例如,每单元4位)、其它量,或其组合。
43.存储器装置集合可包含存储器子系统110的一或多个存储器装置。所述集合可包含存储器子系统的全部存储器装置或存储器子系统的一些存储器装置。在图2中所示的实例中,存储器子系统110的存储器装置集合可包含各自彼此分离且独立的多个存储器装置130a-z(例如,不同裸片)。在其它实例中,存储器装置集合可包含单个存储器装置,且所述单个存储器装置可包含单独或共同管理的一或多个区、区段或部分。在任一实例中,存储器装置集合可归因于装置故障而随时间推移与不同容量(例如,容量232a-z)相关联。
44.容量232a-z表示存储器子系统110在不同时间点的容量。容量232a-z中的每一者可为指示可供主机系统120使用的数据存储空间的存储容量(例如,主机系统可在存储器子系统上存储的数据的最大量)。存储容量可基于存储器装置集合的容量或大小。在一个实例中,可互换地使用术语容量与大小。在另一实例中,术语容量与大小可不同,且大小可为总存储空间大小,且容量可为总存储空间大小的可在主机系统外部获得的部分。总大小的剩余部分可用于内部目的(例如,超量配给、存储奇偶校验数据等)。在其它实例中,术语容量还可或替代地指代或基于通道容量,且对应于可将数据存取、写入、读取、复制、移动或传输
到一或多个存储器子系统110、存储器装置130a-z、主机系统120或其组合或从其存取、写入、读取、复制、移动或传输数据的速率。
45.存储器装置130a-z的集合的容量可随时间推移而改变,且容量232a可为初始容量,且容量232z可为经更新容量(例如,减小的容量)。初始容量可为在设计、制造、组装、安装、初始化或其它时间时的存储器子系统110的原始容量。经更新容量可为存储器子系统在后续时间点的容量,且可相同于、小于或大于初始容量。在图2中所示的实例中,容量232a可为存储器子系统110在安装时间的初始容量(例如,1太字节),且基于所述集合中的所有存储器装置130a-z为功能完全的。容量232z可为存储器子系统110在存储器装置130a-z的集合已遇到一或多个故障234a-z之后的经更新容量(例如,900千兆字节)。
46.故障234a-z可包含影响存储器子系统110的容量的任何故障。故障可能致使存储器子系统110的一部分停止如所设计的工作。所述部分可包含存储器装置(例如,nand裸片、存储器单元)、存储器控制器(例如,控制器115或135)、连接器(例如,封装连接器、接口)、互连件、扩展器、总线、存储器子系统110或主机系统120的其它部分或其组合或与之相关。故障可影响由存储器子系统110存储的数据,且致使数据不可存取、不正确、不准确、不可靠、不可预测、遗漏、擦除、其它效果,或其组合。在一个实例中,故障可致使所述部分完全停止工作(例如,停止操作)。在另一实例中,故障可致使所述部分部分地停止工作,且所述部分可继续操作但不能够满足一或多个阈值(例如,低于最小阈值或高于最大阈值)。所述一或多个阈值可包含或涉及性能阈值、可靠性阈值、容量阈值、冗余阈值、其它阈值,或其组合。关于图2和4的故障检测组件212更详细地论述故障的检测和阈值的使用。
47.故障234a-z可包含硬件故障、软件故障、其它故障,或其组合。硬件故障可为由存储器子系统110的硬件引起的任何故障。实例硬件故障可包含裸片故障、连接器故障、通信通道故障、封装故障、其它硬件故障,或其组合。软件故障可为由存储器子系统110的计算机代码(例如由存储器子系统110的控制器执行的计算机代码(例如,固件、微码、机器代码、操作码、硬件指令或程序代码))引起的任何故障。单个硬件或软件故障可影响存储器装置的一部分、整个存储器装置或存储器子系统110的多个存储器装置。故障234a-z可归因于存储器装置、连接器、总线、扩展器、封装、存储器子系统110或主机系统120的其它部分或其组合的疵点、瑕疵、缺陷或不足而发生。
48.故障可在任何时间发生,且可在故障影响存储器子系统110的容量之前、期间或之后确定或检测。在一个实例中,在主机系统120正使用装置之后,可发生故障234a-z中的一或多者(例如,操作故障)。在另一实例中,故障234a-z中的一或多者可在由主机系统120使用之前发生,但直到由主机系统120使用之后才检测到(例如,潜在故障、隐藏故障)。在任一实例中,故障234a-z可同时发生或在不同时间发生,且不同时间可分隔开一或多分钟、小时、天、周、年、十年或其它持续时间。在所展示的实例中,故障234a-z可在不同时间发生,且影响存储器子系统110的不同部分。举例来说,故障234a可在第一时间(时间t)发生,且可影响整个存储器装置130a(例如,裸片故障导致存储器装置的100%存储空间损失)。故障234b可在第二时间(t+1个月)发生,且可影响存储器装置130b的一部分(例如,单元故障造成存储器装置的50%存储空间损失)。故障234z可在第三时间(t+1年)发生,且可为影响多个存储器装置130y-z(例如,总线故障)的单个故障。在所提供的实例中的任一者中,故障可不利地影响由存储器子系统110存储的数据236a-b,且致使数据236a-b中的一些变得不可存取。
49.数据236a-b可为由一或多个存储器装置中的存储器子系统110存储的数据。数据236a-b可为提供到存储器子系统110的数据,或可为由存储器子系统110产生的数据。提供到存储器子系统110的数据可称为用户数据或外部数据,且可为可由主机系统120或另一存储器子系统提供的外部可存取数据。由存储器子系统110产生的数据可称为内部数据,且可为不可在外部存取且用于内部使用(例如,管理、映射、维护、耗损均衡、冗余等)的数据。
50.存储器子系统110可包含用于管理故障且与主机系统120通信以管理存储器子系统110的容量改变的一或多个组件。在图2中所示的实例中,存储器子系统110包含故障检测组件212、主机协商组件214和容量更新组件216。故障检测组件212可使得存储器子系统110能够检验自身以检测故障,且确定对存储器子系统110的容量的影响。主机协商组件214可使得存储器子系统110能够与主机系统120通信以指示故障的发生和/或后果。主机协商组件214还可与主机系统120交互以恢复和重定位数据。容量更新组件216使得存储器子系统110能够在有或没有保留数据的情况下减小存储器子系统110的容量,且鉴于减小的容量重建内部数据(例如,重建奇偶校验数据)。组件212、214和216关于图4更详细地论述,且可经由通信通道227与主机系统120通信。
51.通信通道227可将存储器子系统110与主机系统120可通信地耦合。通信通道227可包含一或多个接口、连接器、互连件、适配器、硬件或软件的其它件,或其组合。通信通道227可实施标准或专用通信协议,所述标准或专用通信协议包含或基于non-volatile memory express
tm
(nvme)、advanced host controller interface
tm
(ahci)、serial advanced technology attachment interface
tm
(例如,sata、msata)、peripheral component interconnect
tm
(例如,pci、pcie)、small computer system interface
tm
(scsi、iscsi)、integrated drive electronics
tm
(例如,ide、eide)、infiniband
tm
、compute express link
tm
(cxl)、其它通信技术,或其组合。存储器子系统110和主机系统120可使用通信通道227来传输一或多个消息229a-b。
52.消息229a-b可为涉及故障或由故障引起的容量改变的消息。消息可与信号、中断、通知、事件、指示、包、帧、数据报、其它通信单元或其组合相同或类似。消息可为不存在消息内容的信号,或可为在消息的开始(例如,标头)、中间(例如,有效负载、主体)或结束(例如,尾部、页脚、尾端)处包含消息内容的信号。消息内容可为包含识别数据(例如,事件、事件类型、命令、源或目标识别符)、指针数据(例如,集合或其它数据结构的地址)、其它数据或其组合的数据(例如,消息数据)。在一个实例中,消息229a-b中的一或多者可为异步事件通知(aen)、异步事件请求(aer)、其它异步或同步事件,或其组合。在图3中所示的实例中,消息229a可从存储器子系统110传输到主机系统120,且消息229b可从主机系统120传输到存储器子系统110。关于图4和图5更详细地论述消息229a和229b。
53.主机系统120可包含操作系统221,所述操作系统包含使其能够使用消息229a-b与存储器子系统110通信且管理存储器子系统110的容量的减小的一或多个组件。主机系统120可包含一或多个处理装置223和主存储器225以执行操作系统221和故障确定组件222、数据保留组件224和存储系统组件226。故障确定组件222使主机系统120能够确定存储器子系统110已经检测到造成容量减小的故障。数据保留组件224可使得主机系统120能够在减小的容量下继续使用存储器子系统且保留数据、恢复数据,或其组合。存储系统组件226使得主机系统120能够基于故障和减小的容量重新配置一或多个存储结构(例如,文件系统或
数据库)。关于图5更详细地论述组件222、224和226。
54.图3为包含多个区的存储器子系统110的详细框图。存储器子系统110可与图1和2的存储器子系统110相同或类似,且可包含多个存储器装置130a-z。存储器装置130a-z可由布置成二维栅格的存储器单元组成。存储器单元可以列(下文也称为位线)和行(下文也称为字线)的阵列蚀刻到硅晶片上。字线可以指存储器装置的存储器单元的一或多个行,所述一或多个行与一或多个位线一起使用以生成存储器单元中的每一个的地址。位线与字线的相交点构成存储器单元的地址。块331可指存储器装置(例如,130a)的用于存储数据的存储单位,且可包含存储器单元群组、字线群组、字线或个别存储器单元。可将一或多个块331分组在一起以形成称为区的较大存储单位。存储器装置130a-z中的每一者可包含一或多个区。
55.存储器子系统110可配置有包含多个区330a-z的命名空间。命名空间可包含存储器装置130a-z中的一或多者的地址空间。命名空间是可格式化成块(例如,逻辑块或物理块)的非易失性存储器的数量。存储器子系统110的控制器(例如,控制器115或135)可支持使用命名空间识别数据(例如,命名空间id、开始lba)参考的多个命名空间。命名空间可与使用命名空间管理和命名空间附接命令创建、更新或删除的命名空间数据结构相关联。命名空间数据结构可指示特定于特定命名空间的能力和设置。在一个实例中,命名数据结构和命名空间可对应于分区命名空间。
56.分区命名空间(zns
tm
)可为由nvm express
tm
(nvme
tm
)组织界定的依序命名空间。配置有分区命名空间的存储器装置可称为分区命名空间存储器装置或zns存储器装置,且可实施如由nvme界定的分区命名空间命令集。在分区命名空间中,存储器装置130a-z中的每一者的地址空间可划分成一或多个区330a-z。当使用分区命名空间时,可从区的开始处开始依序执行写入,且可在较大粒度(例如,64千字节)下执行写入,且可在写入操作的持续时间内不可存取所述区。因此,如果在写入操作进行的同时接收到对存储在相同区或不同区中的数据的读取请求,则存储器子系统110将必须暂停写入操作以便执行读取。在一个实例中,分区命名空间可由固态驱动器(ssd)的控制器实施且包含区330a-z,其中可存在用于一或多个存储器装置130a-z中的每一者的一或多个区。区的使用是有利的,因为其在存储器装置的容量增大时实现存储空间的更有效管理。举例来说,可指定具有一或多个区的集合以供由主机系统或具有对存储器装置的存取的某一其它系统执行的特定应用程序(例如,应用程序、过程或线程)使用。
57.区330a-z中的每一者可为经识别且作为单个存储单元管理的存储器装置的连续或不连续部分(例如,块范围)。每一区可对应于区识别数据,所述区识别数据可用于唯一地识别区且可与区识别符(区id)、区描述符、区标签或其它术语相同或类似。区可为存储器存储单元(例如,存储器单元),且可具有可基于另一存储器存储单元(例如,块、单元、页、裸片、装置或子系统)的大小(例如,整倍数)的预定义大小。存储器子系统110可使用固定大小(例如,恒定大小或静态大小)用于区,其中所有区可具有相同大小或可使用可变大小(例如,可调整大小、动态大小),其中由存储器子系统110使用的区可具有不同大小。区的大小可由存储器子系统110、存储器装置130a-z、主机系统120、存储系统、装置驱动器、其它实体或其组合确定(例如,选择或检测)。
58.更新区可包含使所述区复位且写入到所述区。使区复位可涉及一或多个操作,所
述操作包含擦除、更新、配置或格式化区或区的数据(例如,内容或元数据)。主机系统或存储器子系统可起始复位,且可由主机系统、存储器子系统(例如,控制器115)、存储器装置(例如,控制器135)、其它处理器或其组合执行操作中的一或多者。在一个实例中,使区复位可将区的写入指针的位置更新到新位置(例如,将写入指针复位到区的开始)。通常从写入指针依序执行到区的写入。可从存储器装置的顶部(例如,ic裸片的较小地址)到存储器装置的底部(例如,ic裸片的较大地址)连续地执行依序写入。
59.图4为说明存储器子系统110的示范性组件的框图。在一个实例中,存储器子系统110可为固态驱动器(ssd),其包含存储器装置、本地存储器119(例如,dram)和用于执行组件的逻辑的一或多个处理装置(例如,存储器控制器)。在所说明的实例中,存储器子系统110可与图1到3的存储器子系统110相同或类似,且可包含在存储器子系统控制器115、本地媒体控制器135或其组合中的故障检测组件212、主机协商组件214和容量更新组件216。组件和模块的特征可在计算机代码(例如,固件、软件或其它计算机程序)、硬件(例如,电路系统)或其组合中实施。可在不损失一般性的情况下包含更多或更少组件或模块,且组件或模块中的两者或更多者可组合到单一单元中,或组件的特征可分离成两个或更多个单元。
60.故障检测组件212使存储器子系统110能够检测并以日志记录可能影响存储器子系统110的容量的故障。如上文所论述,故障可影响所存储数据或存取所存储数据的能力,且可与存储器子系统110的任何部分(例如,存储器装置、控制器、连接器、接口等中的一或多者)相关联。在图4中所示的实例中,故障检测组件212可包含检验模块410、库存模块412和容量确定模块414。
61.检验模块410可使存储器子系统110能够检验存储器子系统110的一或多个部分以检测故障的指示。所述部分可包含存储器装置(例如,nand裸片)、存储器控制器(例如,控制器115或135)、连接器(例如,封装连接器、接口)、互连件、总线、扩展器、存储器子系统110或主机系统120的其它部分或其组合或与之相关。检验模块410可提供装置自测试且包含可执行逻辑,所述可执行逻辑使存储器子系统110的处理装置(例如,控制器115或135)能够间接或直接检验所述部分。
62.直接检验存储器子系统的一部分可涉及检验表示所述部分的一或多个数据结构且存储故障的指示。故障的指示可为指示故障的存在、故障的大小、故障的类型、故障的位置、故障的数量、故障的其它方面或其组合的信号、消息或数据。数据结构可为或可包含一或多个日志(例如,错误日志、存取日志)、指针(例如,故障的存储器地址)、识别符(例如,区识别符、逻辑块地址)、标志(例如,位标志、处理器寄存器)、列表(例如,链表)、索引、队列、阵列、表、矩阵、其它数据结构,或其组合。
63.直接检验存储器子系统的一部分可涉及扫描或测试具有故障的存储器子系统的所述部分。扫描所述部分可与搜索相同或类似,且可涉及存取或尝试存取所述部分且分析所述存取的结果(例如,检查是否可读取值、可存取位置、接收响应)。测试所述部分可涉及存取所述部分且将存取结果与预期数据进行比较(例如,将读取值与预期值或阈值进行比较)。测试还可或替代地提供随后测试的输入。举例来说,测试可提供输入(例如,写入数据、发送信号),且随后检查所述输入或其对应输出(例如,读取所写入数据、检查对信号的响应)。
64.检验所述部分可涉及产生或更新一或多个测量值。所述测量值可指示存储器子系
统的所述部分的可靠性、性能、其它方面,或其组合。所述测量值可包含一或多个数值、字符值、统计值、概率值、其它值,或其组合,且可表示数量、百分比、比率、平均值、中值、标准差或其它数学特性。在一个实例中,所述测量值可为表示所述部分(例如,存储器装置、存储器单元)可靠地存储数据的能力的可靠性测量值。可靠性测量值可基于所述部分可靠地或不可靠地存储数据的次数,且所述值可在由所述部分存储的数据包含错误(例如,位翻转、无效值、错误电压)时增大或减小。
65.库存模块412使得存储器子系统110能够通过用与故障有关的数据更新库存来盘存所述故障。与故障相关的数据可作为故障数据442存储在本地存储器119中。故障数据442可与健康数据相同或类似,且可包含识别或描述故障的影响、故障的起因、故障的指示、故障的其它方面或其组合的数据。故障的影响可为故障的结果或后果,且可包含存储单元(例如,块、区)集合、存储器装置、控制器、存储器子系统110的其它部分,或其组合。在一个实例中,库存模块412可产生已受故障影响的一或多个存储单元的集合,且将其存储为故障数据442。所述集合可称为发生故障的集合、不可存取的集合、有缺陷的集合、功能失常的集合、有缺点的集合或其它术语。还可检测并记录(例如,盘存)故障的起因,且其可涉及温度(例如,极热或冷)、湿度(例如,湿润度或干燥度)、电(例如,泄漏、电流或电压浪涌、短路、静电放电)、磁性(例如,磁场、磁力)、电磁(例如,电磁干扰(emi)、电磁辐射(emr))、其它起因,或其组合。
66.容量确定模块414使存储器子系统110能够在故障之前、期间或之后确定存储器子系统110的容量。如上文所论述,容量可为基于一或多个存储器装置的集合的存储空间大小的存储容量。存储容量可小于集合的存储空间大小,且可取决于用于内部使用的存储空间的量(例如,内部数据和数据结构)。确定容量可基于存储器子系统110是否提供超量配给、耗损均衡、错误检测、错误校正、恢复、冗余、垃圾收集、压缩、加密、其它特征,或其组合。在一个实例中,容量确定模块414可基于受故障影响的存储单元集合、不受故障影响的存储单元集合、所有存储单元或其组合来计算容量的改变或新容量(例如,减小的容量)。计算可以涉及汇总(例如,添加)这些集合中的一或多者的容量或大小且将结果作为容量数据446存储。
67.容量确定模块414可确定一或多个新容量,其各自可称为故障诱发容量。当确定故障诱发容量时,容量与存储器子系统的一或多个其它特征(例如,性能、可靠性、可恢复性、其它特征,或其组合)之间可存在取舍(例如,反比关系)。第一故障诱发容量可对应于使其它特征保持恒定或大体上恒定的容量(例如,具有原始容量的5%)。举例来说,第一故障诱发容量可用于保持可用于内部使用的存储空间恒定(例如,相同量或比例)的减小的容量(例如,10%容量减小),这最小化或消除用于超量配给和奇偶校验数据的空间的任何减小。第二值可对应于在其它特征的成本下使容量的改变最小化的容量(例如,性能和可恢复性降低)。举例来说,此故障诱发容量可通过允许可供用于内部使用的存储空间的较大减小(这不利地影响超量配给、奇偶校验数据或其它内部使用)来最小化容量的减小(例如,1%减小,相较于10%减小)。在一个实例中,可使用表示特征之间的关系(例如,容量与性能之间的取舍)的一或多个数学函数(例如,等式、式)来计算故障诱发容量。可求解数学函数,以使得特征中的一或多者最大化、最小化、保持恒定,或其组合。
68.主机协商组件214使存储器子系统110能够与主机系统120通信以协商存储器子系
统110的容量的改变。在一个实例中,主机协商组件214可包含通知模块420、数据恢复模块422、数据重定位模块424、指令接收模块426、其它模块,或其组合。
69.通知模块420使得存储器子系统110能够向主机系统通知故障。向主机系统通知可涉及产生指示故障的存在、故障的类型、受故障影响的存储器子系统的一部分、其它信息或其组合的通知。通知可呈由存储器子系统110发送且经由通信通道传输到主机系统的消息(例如,消息229a)的形式。通知模块420可传输对应于相同故障的一或多个消息。第一消息可向主机系统通知检测到故障(例如,发生故障、呈现故障、存在故障),且可包含容量已经减小的指示。指示可包含指示容量是否改变(例如,二元是/否)、指示容量改变的量(例如,100gb损失)、指示受影响的数据量(例如,受影响的外部数据和/或内部数据的量)、指示新容量的一或多个值、其它值,或其组合。第二消息可向主机系统通知受故障影响的一或多个存储单元的集合。存储单元的集合可为块(例如,逻辑块地址)、区(例如,区识别符)、装置(例如,裸片、封装)、其它单元的集合,或其组合。存储单元的集合可对应于单个存储器装置或不同存储器装置。第二消息或后续消息还可或替代地指示受故障影响的数据是否可被存取、校正或恢复。第一消息和第二消息可合并为单个消息或跨越更多消息扩散。
70.数据恢复模块422使得存储器子系统110能够恢复受故障影响的所存储数据。恢复所存储数据可涉及存取恢复数据444且执行错误检测(例如,检测数据改变)、错误校正(例如,修正改变的数据)、数据恢复(恢复被擦除数据),或其组合。恢复数据444可存储在本地存储器119中,且可包含错误检测数据(例如,错误检测码、校验和、循环冗余检查(crc))、错误校正数据(例如,错误校正码(ecc)、前向错误校正(fec)、擦除码)、冗余数据(例如,重复数据、奇偶校验数据)、其它数据,或其组合。数据恢复模块422可尝试存取受故障影响的存储单元中的一或多者的数据。数据恢复模块422可使用恢复数据444来检测无错误且可保留的数据。数据恢复模块422还可或替代地使用恢复数据444来校正可存取的数据或重新产生不可存取的数据。
71.当数据恢复模块422产生不可存取的数据时,有可能存储器子系统110不再可具有足够的存储容量来存储所产生的数据。数据恢复模块422可使存储器子系统110能够向主机系统指示存储器装置集合能够恢复数据但不能够存储所恢复的数据。存储器子系统不能够存储的数据部分可称为过量数据(例如,超过减小的容量的数据)。存储器子系统可接着从主机系统接收存储位置以存储所恢复的数据,且提供所恢复的数据以供存储在存储位置处。关于数据重定位模块424更详细地论述此过程。
72.数据重定位模块424使存储器子系统110能够重定位存储器子系统110的数据。重定位数据可涉及包含读取、写入、移动、复制、重复、去重复、加密、解密、压缩、解压缩、其它操作或其组合的操作。数据重定位模块424可将数据从第一位置(例如,原始位置、源位置)重定位到一或多个第二位置(例如,新位置、目的地位置、目标位置)。第一位置和第二位置可为存储器子系统110内部的内部位置、存储器子系统110外部的外部位置,或其组合。内部位置可包含存储器装置(例如,nand裸片)中的一或多者中或存储器子系统110的本地存储器119(例如,控制器dram)中的位置。外部位置可包含在存储器子系统110外部的主机系统的位置。主机系统的位置可在主机系统内部(例如,在pc或服务器内),或可在主机系统外部(例如,在计算机网络上)。外部位置可包含在主机系统的主要存储装置(例如,主存储器225)、主机系统的辅助存储装置(例如,另一存储器子系统、硬盘驱动器(hdd))、主机系统外
部的存储装置(例如,网络附接存储装置(nas)、存储区域网络(san))、主机系统的处理器(例如,cpu、gpu、网络适配器)中的位置、其它位置,或其组合。
73.位置可由存储器子系统110或主机系统120确定,且基于主机系统、存储器子系统、其它系统或其组合的输入数据。存储器子系统110可从主机系统接收数据,所述数据指示所述位置中的一或多者。在一个实例中,主机系统可将外部位置(例如,目标位置)提供到存储器子系统110,且存储器子系统110可将数据传输到外部位置。在另一实例中,主机系统可在不提供特定外部位置的情况下提供内部位置(例如,源位置),且存储器子系统110可通过用可类似于传统存取请求(例如,读取请求)的数据传输(例如,响应、答复)而响应于主机系统。在又一实例中,主机系统可将内部位置和外部位置两者提供到存储器子系统110,且存储器子系统110可将数据从内部位置复制或移动(例如,重定位)到外部位置。
74.存储器子系统110可在将或不将数据传输到主机系统的cpu的情况下将数据传输到主机系统的外部位置。在一个实例中,存储器子系统110可经由通信通道将数据传输到主机系统的cpu,其中所述数据在传送到外部位置时暂时由cpu存储。在另一实例中,存储器子系统110可经由通信通道将数据传输到外部位置而不将数据传输到cpu,且因此避免cpu必须暂时存储数据。此后一实例可使用与直接存储器存取(dma)、数据直接输入/输出(ddio)、远程直接存取存储器(rdma)、其它i/o加速技术或其组合相同或类似的技术。
75.直接存储器存取是一些主机系统的特征,且使某些硬件子系统能够独立于中央处理单元(cpu)存取主机系统的存储器(例如,主存储器225)。硬件子系统可包含一或多个存储器子系统(例如,ssd控制器)、硬盘驱动器(hdd)控制器、网络接口控制器(nic)、图形控制器、声卡、其它硬件装置,或其组合。主机系统和/或存储器子系统可使得能够使用直接存储器存取来传输数据。在没有dma的情况下,cpu在使用经编程输入/输出时暂时存储所传输数据(例如,临时副本),且通常在读取或写入操作的整个持续时间内被占用。在有dma的情况下,cpu可配置一或多个硬件子系统以存取主机系统和/或其它主机系统的存储位置,且可使得cpu能够在数据正传送时进行其它操作。当正传送大量数据且cpu无法跟上数据传送速率时,此特征尤其有用。dma可将昂贵的存储器操作(例如大副本)从cpu分担到其它硬件子系统,且cpu可随后在完成操作时接收中断。远程直接存储器存取(rdma)为直接存储器存取的形式,其中主机机器内部的硬件系统中的一者可经由cpu将数据传输到主机系统外部的位置。这可以通过使硬件子系统(例如,存储器子系统110)能够将数据传输到网络接口控制器(例如,网络适配器、网卡)的存储器来完成,所述网络接口控制器可以经由网络将数据传输到主机系统(例如,nas、san、远程主机系统)外部的装置。
76.指令接收模块426可使存储器子系统110能够接收且处理指示是否在减小的容量下继续操作的指令。存储器子系统110的容量可在接收指令之前、期间或之后减小。在一个实例中,可在接收指令之前减小容量,且所述指令可致使存储器子系统在减小的容量下继续操作。在另一实例中,在检测到错误之后容量可保持相同,且指令可致使存储器子系统减小容量且在减小的容量下继续。这可在存储器子系统110检测到故障且能够暂时避免容量的减小时发生。这可涉及延迟减小(例如,延迟下移多层级单元)或通过使用内部空间(例如,减少超量配给或冗余存储空间)、压缩现有数据、重定位数据、其它操作或其组合而暂时补偿容量的任何减小。在任一实例中,指令可致使存储器子系统110最终在减小的容量下操作。
77.指令可包含一或多个指令、命令、信号、消息、机器代码、操作、操作码,或其组合。指令可与充当是否改变容量(例如,减小容量)或在先前改变的容量下继续或停止操作的指示的数据(例如,指令数据或内容)相关联。在一个实例中,数据可指示一或多个容量,且可包含原始容量(1tb)、新容量(900gb)、容量的增量改变(例如,减小100gb)、其它容量值,或其组合。在另一实例中,数据可指示关于是否继续改变容量或在改变的容量下操作的二元响应(是/否、真/假)。在任一实例中,存储器子系统110可通过执行容量更新组件216而对指令作出响应。
78.容量更新组件216可使得存储器子系统110能够响应于故障而更新其配置。这可涉及鉴于改变的容量而更新存储器装置集合和一或多个数据结构。如上文所论述,容量可对应于存储空间的可供主机系统在外部使用的部分,且可为存储器子系统110的总存储空间的子集,因为存储空间的一部分可用于内部使用。容量更新组件216可响应于检测到特定故障而执行一或多次,且可减小容量、保持容量恒定或增大容量。在一个实例中,容量更新组件216可配置存储器子系统110以响应于故障而在减小的容量下操作。在另一实例中,容量更新组件216可在检测到故障之后暂时最小化容量减小(例如,保持容量恒定),且接着可随后减小容量以用于长期操作。如上文所论述,暂时最小化或避免容量减小可涉及通过暂时使用内部使用存储空间、通过压缩所存储数据、通过推迟多层级单元的大小减小或通过使用奇偶校验数据提供对不可存取数据的读取存取来延迟容量减小。延迟容量减小可使得主机系统能够分析故障和容量的即将发生或现有减小且对其作出反应。在一个实例中,容量更新组件216可包含锁定模块430、容量减小模块432、重建模块434、其它模块,或其组合。
79.锁定模块430使存储器子系统110能够限制主机系统对存储器子系统110的一部分的存取。锁定模块430可通过添加(例如,创建、产生、应用、激活)、移除(例如,删除、破坏、去激活)、修改(例如,编辑、更新)或强制执行一或多个锁而限制存取。所述锁可通过停用(例如,禁止、阻止、停止、关闭)或启用(例如,允许、准许、授权)一或多个不同类型的存取(例如,读取存取、写入存取、其它存取,或其组合)来限制存取。所述锁可包含一或多个读取锁、写入锁或其它锁。读取锁可停用主机系统以使其不具有对所述锁对应于(例如,应用于)的存储器子系统的部分的读取存取及写入存取两者。写入锁可停用主机系统以使其不具有写入存取,同时使主机系统能够进行读取存取。
80.锁可由存储器子系统110或由主机系统120起始,且可应用于存储器子系统110或主机系统120的特定部分。举例来说,锁可应用于一或多个存储器子系统、存储器装置、区、块、存储器单元、裸片、封装、通信通道、连接器、互连件、存储器子系统的其它部分,或其组合。所述锁可限制对主机系统的任何或所有部分或部分的组合的存取。受限存取可应用于一些或所有过程(例如,内核、超管理器、应用程序、文件系统)、处理器(例如,cpu/gpu)、硬件子系统(图形卡、网络接口)、主机系统的其它部分,或其组合。
81.锁定模块430可将锁应用于受故障影响的存储器子系统的一部分(例如,发生故障的部分)。被锁定的部分可相同于、小于或大于受故障影响的特定部分。这可在可应用锁的粒度不同于受故障影响的部分时发生。举例来说,锁可应用于整个裸片或区,即使裸片或区的小部分受故障影响。术语发生故障的部分可指代受故障影响的特定部分,或指代包含不受故障影响的部分的较大部分。在一个实例中,锁定模块可将写入锁应用于受故障影响的部分,且写入锁可停用主机系统将数据写入到所述部分的能力,但使主机系统能够读取所
述部分的数据。数据中的一些可能归因于故障而不可存取,且可由存储器子系统110恢复。
82.容量减小模块432使存储器子系统110能够更新存储器子系统110的配置以减小容量。更新配置可涉及执行一或多个去激活操作、截断操作、下移操作或其组合。去激活操作可涉及去激活发生故障的部分中的一或多者,使得它们不再表示为可用于存储数据(例如,外部数据和/或内部数据)。去激活可与标示、取消映射、停用、关闭、移除、删除、破坏、阻挡、标记、擦除、抹除、其它动作或其组合相同或类似。截断操作可涉及再分配存储装置且通过在存储空间的开始、中间或结束(例如,内部或外部可存取的地址空间)删除预定量来减小总容量。预定量可基于受故障影响的存储空间的量,且可相同于、小于、大于发生故障的存储空间的量。
83.大小减小操作还可或替代地用于减小容量。如上文所论述,存储器子系统110可包含每存储器单元存储多于一个位的信息的多层级单元(mlc)。大小减小操作可重新配置存储器子系统110和存储器装置中的一或多者,以将每存储器单元所存储的位的数量从第一大小(例如,较大大小、原始大小)减小到第二大小(例如,较小大小、减小的大小)。存储器单元的第一大小和第二大小可包含单层级单元(slc)、双层级单元(dlc)、三层级单元(tlc)、四层级单元(qlc)、五层级单元(plc)、其它大小单元,或其组合。每一大小减小可将存储器单元减小一或多个层级,且可重复大小减小多次,直到多层级单元变成单层级单元或被舍弃为止。
84.更新配置的操作可应用于存储器子系统的任何部分。所述操作可应用于一或多个特定存储器单元、块、区、裸片、芯片、芯片组、封装、其它装置或其组合的目标部分。操作可影响受故障影响的目标部分和存储器子系统110的一或多个其它部分。对目标部分执行操作可致使存储器子系统的其它部分中的一些或全部被更新(例如,重新映射、重新编号、重新标记、重新分区、重新编索引)。在一个实例中,对目标部分的操作可致使之前和之后的部分(例如,所有其它部分)被更新。在另一实例中,对目标部分的操作可致使在不更新先前部分的情况下更新后续部分。在任一实例中,所述操作可通过重新配置存储器子系统来减小容量。
85.重建模块434使得存储器子系统110能够基于减小的容量(例如,新配置)更新由存储器子系统存储的数据。更新数据可涉及添加数据、移除数据或改变一或多个数据结构的数据。数据可对应于容量,且可包含指针数据(起始地址)、映射数据(例如,逻辑到物理映射)、表数据、索引数据、其它数据,或其组合。在一个实例中,这可涉及重新产生恢复数据(例如,奇偶校验数据)、压缩数据、加密数据,或其组合。
86.图4的组件和模块可为存储器子系统110的特定实施例中所包含的组件和模组的超集或子集。在上文所论述的实例中,存储器子系统110可包含所有组件和模块。在其它实例中,存储器子系统110可不存在数据恢复模块422、数据重定位模块424、重建模块434、库存模块412或其它模块的特征,且可由如下文关于主机系统120所论述的另一装置执行,或对于特定实施例可为不必要的。
87.图5为说明使用一或多个通信通道(未展示)与图4的存储器子系统连接的主机系统120的示范性组件的框图。关于图5中的组件和模块所论述的特征可实施于主机系统120或存储器子系统110的计算机代码(例如,固件、软件或其它计算机程序)或硬件(例如,电路系统)中。可在不损失一般性的情况下包含更多或更少组件或模块。举例来说,组件中的两
者或更多者可组合为单一组件,或组件的特征可划分成两个或更多个组件。在所说明的实例中,主机系统120可与图1到2的主机系统120相同或类似,且可包含故障确定组件222、数据保留组件224和存储系统组件226。在其它实例中,主机系统120可不存在本地恢复模块520、远程恢复模块522或其它模块的特征,且可依赖于另一装置(例如,存储器子系统110)来执行特征,或对于特定实施例,可不存在所述特征。
88.故障确定组件222使主机系统120能够确定并盘存影响存储器子系统110的容量的故障。如上文所论述,故障可影响所存储数据或存取所存储数据的能力,且可与存储器子系统110的任何部分(例如,存储器装置、控制器、连接器、接口等中的一或多者)相关联。在一个实例中,故障确定组件222可包含通知接收模块510和日志记录模块512。
89.通知接收模块510使主机系统120能够从存储器子系统110接收关于故障的通知。通知可使得主机系统能够确定存储器子系统已遇到减小存储器子系统的存储容量的故障。通知可由存储器子系统产生,且指示故障的存在、故障的类型、受故障影响的存储器子系统的一部分、其它信息,或其组合。通知可呈由存储器子系统110发送且经由通信通道传输到主机系统120的消息(例如,消息229a)的形式。通知接收模块510可接收对应于相同故障的一或多个消息。第一消息可向主机系统通知故障存在(例如,发生故障、呈现故障),且可视情况包含存储器子系统的容量已经减小的指示。指示可包含指示容量是否改变(例如,二元是/否)、指示容量改变的量(例如,100gb损失)、指示受影响的数据量(例如,外部数据和/或内部数据)、指示新容量、其它值或其组合的一或多个值。第二消息可向主机系统通知受故障影响的一或多个存储单元的集合。存储单元的集合可为块(例如,逻辑块地址)、区(例如,区识别符)、装置(例如,裸片、封装)、其它单元的集合,或其组合。存储单元的集合可对应于单个存储器装置或不同存储器装置。第二消息或后续消息还可或替代地指示受故障影响的数据是否可被存取、校正或恢复。第一消息和第二消息可合并为单个消息或跨越更多消息扩散。
90.日志记录模块512使得主机系统120能够通过用与故障相关的数据更新库存来以日志记录故障。与故障相关的数据可作为故障数据442存储在主存储器225中。故障数据442可与图4的故障数据442相同或类似,且可从存储器子系统110接收或由主机系统120产生、补充、汇总或扩增。故障数据442可为包含识别或描述故障的影响、故障的起因、故障的指示、故障的其它方面或其组合的数据的健康数据。故障的影响可为故障的结果和/或响应,且可对应于存储单元(例如,块、区、存储器装置、控制器、存储器子系统110的其它部分,或其组合)的集合。在一个实例中,日志记录模块512可接收或产生已受故障影响的一或多个存储单元的集合,且将其存储为故障数据442。所述集合可称为发生故障的集合、不可存取的集合、有缺陷的集合、功能失常的集合、有缺点的集合或其它术语。还可记录(例如,盘存)故障的起因,且其可涉及温度(例如,极热或冷)、湿度(例如,湿润度或干燥度)、电(例如,泄漏、电流或电压浪涌、短路、静电放电)、磁性(例如,磁场、磁力)、电磁(例如,电磁干扰(emi)、电磁辐射(emr))、其它起因或其组合。
91.当存储器子系统的容量已减小时,数据保留组件224使主机系统120能够增强存储器子系统上的数据的保留。在过去,主机系统将通过指示应更换存储器子系统或通过重新格式化存储器子系统以在较低容量下操作而对存储器子系统故障作出响应。重新格式化存储器子系统为资源密集型操作,其可移除存储器子系统的数据且消耗大量时间、处理功率、
临时存储空间、i/o和其它宝贵资源。数据保留组件224可通过保持经受住故障的数据且视情况校正或恢复受故障影响的数据来增强数据的保留。在图5中所示的实例中,数据保留组件224可包含本地恢复模块520、远程恢复模块522和数据重排模块524。
92.本地恢复模块520使得主机系统120能够使用在主机系统120本地的资源恢复受存储器子系统的故障影响的数据。在主机系统120本地的资源可包含主机系统120内部的任何硬件、软件或数据。当主机系统120包含在主机系统120的计算机罩壳(例如,计算机底盘、壳套、机柜、框架、机架、刀片式单板)内时,资源在主机系统内部。这可包含主要数据存储装置(例如,主存储器)、辅助数据存储装置(例如,存储器子系统110、hdd)、其它装置,或其组合。在一个实例中,本地恢复模块520可通过从备份存取数据、从原始源存取数据、使用恢复数据产生遗失数据、其它恢复机制或其组合而恢复受故障影响的数据(例如,遗失数据)。在另一实例中,本地恢复模块520可致使存储器子系统恢复受故障影响的数据,如上文关于图4的数据恢复模块422所论述。主机系统120可请求对受故障影响的数据的存取,且存储器子系统可在主机系统120请求所述数据之前、期间或之后产生所述数据。存储器子系统可向主机系统指示数据已恢复或可避免指示且对主机系统120透明地执行数据恢复。在一些情形中,本地恢复模块520可能不能够恢复受存储器子系统故障影响的数据,且可使用远程恢复模块522。
93.远程恢复模块522使得主机系统120能够通过使用远离主机系统120的一或多个资源而恢复受故障影响的数据。远离主机系统120的资源可包含在主机系统120的计算机罩壳外部的任何硬件、软件或数据。这包含可使用一或多个导线、缆线、连接器、计算机网络(例如,lan、wan、因特网)或其组合耦合到主机系统120的可通信的资源。在一个实例中,远程恢复模块522可通过从另一主机系统存取数据而恢复受故障影响的数据。主机系统120和所述另一主机系统可为存储分布网络中的节点,其可具有相关复制品或备份、集群中的对等点、其它关系或其组合。
94.数据重排模块524可使主机系统120能够在存储器子系统110、主机系统120或其组合上重排数据。重排数据可涉及一或多个操作,所述一或多个操作包含读取、写入、移动、复制、重复、去重复、加密、解密、压缩、解压缩、其它操作或其组合。数据重排模块524可将数据从第一位置(例如,原始位置、源位置)复制到一或多个第二位置(例如,新位置、目的地位置、目标位置)。第一位置和第二位置可在易失性或非易失性存储器中,且可为在存储器子系统110内部的内部位置、在存储器子系统110外部的外部位置,或其组合。外部位置可包含在主机系统内部的位置(例如,在计算机罩壳内),或可在主机系统120外部(例如,在网络上)。外部位置可包含在主机系统的主要存储装置(例如,主存储器)、主机系统的辅助存储装置(例如,另一存储器子系统、硬盘驱动器(hdd))、主机系统外部的存储装置(例如,网络附接存储装置(nas)、存储区域网络(san))、主机系统的处理器(例如,cpu、gpu、网络适配器)中的位置、其它位置或其组合。
95.所述位置可基于主机系统120、存储器子系统、其它系统或装置或其组合的数据而确定。主机系统可将指示所述位置中的一或多者的数据提供到存储器子系统。在一个实例中,主机系统120可将外部位置(例如,目标位置)提供到存储器子系统,且存储器子系统可将数据传输到外部位置。在另一实例中,主机系统可提供内部位置(例如,源位置)而不提供特定外部位置,且存储器子系统可返回内部位置处的数据,其可类似于传统存取请求(例
如,读取请求)。在又一实例中,主机系统120可将内部位置和外部位置两者提供到存储器子系统,且存储器子系统可将数据从内部位置复制或移动(例如,重定位)到外部位置。
96.主机系统120可配置直接存储器存取(dma),使得存储器子系统可将数据传输到主机系统的外部位置而不将其传输到主机系统的cpu。dma可为特别有利的,因为数据重排模块524可布置非常大量的数据(例如,100gb到1tb),且可在几乎没有管理传输的cpu的参与的情况下执行数据传输。cpu可配置dma特征且监听信号(例如,截获)以确定传送何时完成。上文关于图4中的存储器子系统110的数据重定位模块424更详细地论述dma。
97.存储系统组件226可使得主机系统120能够通过重新配置主机系统120的存储系统来适应存储器子系统的容量的减小。存储系统可为任何数据存储系统,且可为文件系统、数据库系统、分布式存储系统、虚拟存储系统、其它存储系统,或其组合。存储系统可由作为内核的部分执行的代码、装置驱动程序、应用程序、主机操作系统的其它部分或其组合管理。在图5中所示的实例中,存储系统组件226可包含容量管理模块530、指令提供模块532及存储结构更新模块534。
98.容量管理模块530可使得主机系统120能够在故障之前、期间或之后确定和控制存储器子系统110的容量。如上文所论述,容量可为基于一或多个存储器装置的集合的存储空间大小的存储容量。存储容量可小于集合的存储空间大小,且可取决于用于内部使用的存储空间的量(例如,内部数据和数据结构)。确定容量可涉及与存储器子系统通信,并确定或控制存储器子系统对超量配给、耗损均衡、错误检测、错误校正、恢复、冗余、垃圾收集、压缩、加密、其它特征或其组合的使用。在一个实例中,容量管理模块530可基于从存储器子系统接收的数据而确定(例如,计算、检测)容量的改变或新容量(例如,减小的容量)。
99.容量管理模块530可使得主机系统120能够执行与上文关于存储器子系统的容量确定模块414所论述的功能相同或类似的功能。举例来说,主机系统120可确定一或多个故障诱发容量。当确定故障诱发容量时,容量与存储器子系统的一或多个其它特征(例如,性能、可靠性、可恢复性、其它特征或其组合)之间可存在取舍(例如,容量与超量配给之间的反比关系)。第一故障诱发容量可对应于使其它特征保持恒定或大体上恒定的容量(例如,具有原始容量的5%)。举例来说,第一故障诱发容量可用于保持可用于内部使用的存储空间恒定(例如,相同量或比例)的减小的容量(例如,10%减小),这最小化或消除用于超量配给和奇偶校验数据的空间的任何减小。第二值可对应于在其它特征的成本下使容量的改变最小化的容量(例如,性能和可恢复性降低)。举例来说,此故障诱发容量可通过允许可供用于内部使用的存储空间的较大减小(这不利地影响超量配给、奇偶校验数据或其它内部使用)来最小化容量的减小(例如,1%减小)。在一个实例中,可使用表示特征之间的关系(例如,特征取舍)的一或多个数学函数(例如,等式、式)来计算一或多个故障诱发容量。可求解数学函数,以使得特征中的一或多者最大化、最小化或保持恒定。
100.指令提供模块532可使主机系统120能够指示存储器子系统在减小的容量下操作且保持存储系统的数据。可在检测到故障之后且在已重新配置存储器子系统以在减小的容量下操作之前、期间或之后传输指令。在一个实例中,存储器子系统可通知主机系统120且等待主机系统120在针对减小的容量重新配置存储器子系统之前提供指令。在另一实例中,存储器子系统可在主机系统提供指令之前且在向主机系统120通知故障之前、期间或之后开始减小容量的过程。
101.指令可由主机系统120产生,且包含内容(例如,数据)或与内容(例如,数据)相关联。指令可包含一或多个单独或组合指令、命令、信号、消息、机器代码、操作、操作码或其组合。内容可充当是否改变容量(例如,减小容量)或在先前改变的容量下继续或停止操作的指示。在一个实例中,数据可指示关于是否继续改变容量或在改变的容量下操作的二元响应(是/否、真/假)。在一个实例中,数据可指示一或多个容量,且可包含原始容量(1tb)、新容量(900gb)、容量的增量改变(例如,减小100gb)、其它容量值,或其组合。在任一实例中,主机系统120可传输指令且使用存储结构更新模块534更新存储结构124。
102.存储结构更新模块534可使得主机系统120能够通过配置(例如,重新配置)存储系统的存储结构124来适应存储器子系统的容量的减小。存储模块更新模块534可执行为一或多个系统过程(例如,内核过程)、用户过程(例如,应用程序过程)或其组合。存储结构124可包含用于管理数据从一或多个存储器子系统的存储和检索的一或多个数据结构。存储结构124可包含用于组织数据的数据结构和规则,且可涉及将数据分离到可个别地识别和存取的存储单元中。存储结构124中的一些或全部可存储在主存储器225、存储器子系统110、其它主要或辅助存储装置或其组合中。在一个实例中,存储结构124可为如下文更详细地论述的文件系统。
103.文件系统可包含多个层,且多个层可包含逻辑文件系统(例如,逻辑层)、虚拟文件系统(例如,虚拟层)、物理文件系统(例如,物理层)、其它层,或其组合。逻辑文件系统可管理与应用程序的交互,且可提供将文件系统操作(例如,打开、关闭、创建、删除、读取、写入、执行)暴露于其它计算机程序的应用程序编程接口(例如,文件系统api)。文件系统的逻辑层可管理安全性和权限且维持打开的文件表项和每个过程文件描述符。逻辑文件系统可将所请求的操作(例如,写入请求)传递到一或多个其它层以供处理。虚拟文件系统可使操作系统能够支持物理文件系统的多个并行例子,其中所述多个并行例子中的每一者可称为文件系统实施方案。物理文件系统可管理存储装置(例如,存储器子系统110)的物理操作。物理文件系统可处置缓冲和管理主存储器,且可负责存储器装置130a-z上的特定位置中的存储单元的物理放置。物理文件系统可包含装置映射逻辑,且可与装置驱动器(例如,ssd驱动器)或与通道交互以与存储器子系统110交互。文件系统层中的一或多者可明确地分离,或可组合在一起以便存储文件系统数据。
104.文件系统数据可为与文件系统相关联的任何数据,且可包含由文件系统接收的数据(例如,用户数据)或由文件系统产生的数据。文件系统数据可表示一或多个外部文件系统对象、内部文件系统对象或其组合的数据。外部文件系统对象可为可由使用文件系统api的计算机程序(例如,应用程序)在外部存取的文件系统对象。外部文件系统对象可包含文件(例如,文件数据和元数据)、目录(例如,文件夹)、链接(例如,软链接、硬链接)或其它对象。内部文件系统对象可为保持在文件系统内部且使用文件系统api不可存取的文件系统对象。内部文件系统对象可包含存储树对象(例如,盘区地图、盘区树、块树)、流对象(例如,流识别符)、文件群组数据(例如,类似文件的群组)、存储单元、块群组、盘区或其它内部数据结构。
105.每一文件系统对象可与对象数据和对象元数据相关联。对象数据可为对象的内容(例如,文件数据),且对象元数据可为关于对象的信息(例如,文件元数据)。对象元数据可指示对象的属性,例如存储位置(例如,区、块群组、存储单元)、数据源(例如,流、应用程序、
用户)、数据类型(例如,文本、图像、音频、视频)、大小(例如,文件大小、目录大小)、时间(例如,创建时间、修改时间、存取时间)、所有权(例如,用户id、群组id)、权限(例如,读取、写入、执行)、文件系统位置(例如,父目录、绝对路径、本地路径)、其它属性,或其组合。在一个实例中,文件系统数据可包含新文件的数据,且新文件可包含文件数据和文件元数据。文件数据可包含文件的内容(例如,图像内容、音频内容),且文件元数据可包含内容的一或多个属性(例如,对应于区z、流s和/或应用程序a的识别符)。
106.对象数据和对象元数据(例如,属性、树节点)可一起存储在同一存储位置处的同一数据结构中,或可单独地存储在不同存储位置处的不同数据结构中。举例来说,存储结构124可将对象元数据存储在索引节点(例如,索引节)数据结构中,且索引节点数据结构可具有到对象数据的一或多个指针。索引节可为unix式文件系统中描述文件系统对象的数据结构。每一索引节可指示文件系统对象的数据的属性和存储位置(例如,块地址)。目录可表示为“索引节”,且可含有自身的条目、其父条目(例如,父目录)和其子条目(例如,子目录或文件)中的每一者。
107.文件系统可将所分配的空间划分为可为大小可变的分配区的块群组。分配区可用于存储对象元数据(例如,盘区树节点、索引节)和对象数据(例如,文件内容、盘区)。块群组(bg)可理解为被分配给存储器装置的连续区域且保留用于文件系统的文件系统数据的文件系统对象(例如,一系列lba)的连续部分。此连续区域可表示为块编号的范围(例如,物理地址)。可将较大文件分割成被个别地跟踪的块群组,以使得在对存储器装置130a-z进行一系列必要的分配和写入时,文件的分配和管理是可行的。对象数据与对象元数据的默认比率可为1:2。其旨在使用orlov块分配器的概念将相关的文件系统对象分配在一起,并通过在群组之间留下自由空间来抵抗碎片。(然而,ext3块群组具有根据文件系统的大小计算的固定位置,而b树文件系统中的那些块群组为动态的且为按需要创建的。)每一块群组可与块群组识别符(例如,块群组项目)相关联。文件系统树中的索引节可包含对对应块群组的参考(例如,到存储单元的指针)。
108.图6为根据本公开的一些实施例的由存储器子系统执行以管理存储器子系统的容量的减小的方法600的流程图。方法600可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专门逻辑、可编程逻辑、微码、装置的硬件、集成电路,等)、软件(例如,在处理装置上运行或执行的指令),或其组合。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流程也是可能的。
109.在操作610处,处理逻辑可检测集合中的至少一个存储器装置的故障,其中所述故障影响所存储数据。在一个实例中,存储器子系统为固态驱动器(ssd),且处理装置为固态驱动器的存储器控制器。在一个实例中,处理装置可检测在不同时间发生且影响集合中的不同存储器装置的多个故障。
110.在操作620处,处理逻辑可向主机系统(例如,主机系统120)通知存储器装置集合(例如,存储器装置130a到130z)的容量的改变。所述通知可涉及将第一消息传输到主机系统以指示故障,且将第二消息传输到主机系统以指示受故障影响的存储单元集合。第一消息和/或第二消息是异步事件通知(aen)消息。在一个实例中,处理装置可在故障中的每一
者之后通知主机系统,且在故障中的每一者之后减小容量。
111.在操作630处,处理逻辑可从主机系统接收在减小的容量下继续的指示。在一个实例中,所述操作可涉及确定第二故障之后的容量是否满足阈值容量。阈值容量可为存储器装置集合的预定最小容量。响应于满足阈值容量,处理装置可向主机系统指示存储器装置集合可在减小的容量下操作。响应于不满足阈值容量,处理装置可向主机系统指示存储器装置集合不可操作。
112.在操作640处,处理逻辑可更新存储器装置集合以将容量改变为减小的容量。这可涉及锁定至少一个存储器装置的发生故障的部分。所述锁定可包含写入锁,所述写入锁启用主机系统的读取且停用主机系统的写入。在一个实例中,处理装置可向主机系统提供响应于主机系统对发生故障的部分的读取请求而恢复的数据。处理装置还可或替代地删除至少一个存储器装置的数据,且基于减小的容量产生存储器装置集合的恢复数据。在方法600的其它实例中,操作可包含使用存储于存储器装置集合中的恢复数据恢复受一或多个故障影响的所存储数据。
113.图7为根据本公开的一些实施例的由存储器子系统执行以管理存储器子系统的容量的减小的方法700的流程图。方法700可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专门逻辑、可编程逻辑、微码、装置的硬件、集成电路,等)、软件(例如,在处理装置上运行或执行的指令),或其组合。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流程也是可能的。
114.在操作710处,处理逻辑可将存储器装置配置成具有包含多个区的分区命名空间。分区命名空间可为由nvm express
tm
(nvme
tm
)组织界定的依序命名空间。在分区命名空间中,存储器装置中的每一者的地址空间可划分成一或多个区。区中的每一者可为经识别且作为单个存储单元管理的存储器装置的连续或不连续部分(例如,块范围)。每一区可对应于区识别数据,所述区识别数据可用于唯一地识别区且可与区识别符(区id)、区描述符、区标签或其它术语相同或类似。区可为存储器存储单元(例如,存储器单元),且可具有可基于另一存储器存储单元(例如,块、单元、页、裸片、装置或子系统)的大小(例如,整倍数)的预定义大小。在一个实例中,存储器子系统为固态驱动器(ssd),且处理装置为固态驱动器的存储器控制器。
115.在操作720处,处理逻辑可向主机系统通知与多个区中的区相关联的故障,且所述故障可影响所存储数据。在一个实例中,所述通知可涉及将指示存储器装置的受故障影响的一或多个区的集合的消息传输到主机系统。
116.在操作730处,处理逻辑可从主机系统接收在减小的容量下继续的指示。在一个实例中,处理装置还可或替代地向主机系统指示存储器装置集合的容量不能够存储所恢复数据。处理装置可从主机系统接收存储所恢复数据的存储位置。存储位置可在主机系统的主存储器中。
117.在操作740处,处理逻辑可恢复受故障影响的区的所存储数据。所存储数据的恢复可涉及存取由存储器装置存储的恢复数据(例如,奇偶校验数据),且基于恢复数据产生受故障影响的所存储数据。
118.在操作750处,处理逻辑可更新存储器装置集合以将容量改变为减小的容量。更新可涉及锁定与至少一个存储器装置的故障相关联的区。锁定可使用写入锁,所述写入锁启用主机系统的读取且停用主机系统的写入。处理装置可向主机系统提供响应于对所述区的读取请求而恢复的数据。处理装置还可更新分区命名空间以减小容量,这可涉及去激活区和删除所述区中的所有数据。处理装置可基于减小的容量产生存储器装置集合的恢复数据。
119.图8为根据本公开的一些实施例的由存储器子系统执行以管理存储器子系统的容量的减小的方法800的流程图。方法800可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专门逻辑、可编程逻辑、微码、装置的硬件、集成电路,等)、软件(例如,在处理装置上运行或执行的指令),或其组合。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流程也是可能的。
120.在操作810处,处理逻辑可检测每存储器单元存储多个位的存储器装置的故障。检测故障可涉及基于存储器装置每存储器单元存储多个位的能力而计算可靠性测量值。处理装置可响应于比较可靠度测量值与预定阈值而确定故障存在。在一个实例中,存储器子系统为固态驱动器(ssd),且处理装置为固态驱动器的存储器控制器。
121.在操作820处,处理逻辑可将指示存储器装置集合的减小的容量的消息发送到主机系统。发送消息可涉及将第一消息发送到主机系统以指示故障,且将第二消息发送到主机系统以指示受故障影响的存储单元集合。第一消息和/或第二消息可为异步事件通知(aen)消息。
122.在操作830处,处理逻辑可从主机系统接收在减小的容量下继续的消息。在一个实例中,处理装置可向主机系统指示存储器装置集合包含超过减小的容量的数据。处理装置可从主机系统接收存储位置以存储所恢复数据,且将超过减小的容量的数据提供到存储位置。存储位置可在主机系统的主存储器中或在另一位置处。
123.在操作840处,处理逻辑可基于减小的容量而更新存储器装置集合。更新涉及减少集合中的一或多个存储器装置每存储器单元所存储的位的数量。在一个实例中,存储器装置包含多层级单元(mlc)(例如,由其组成),且减少每存储器单元所存储的位的数量涉及将四层级单元(qlc)下移到三层级单元(tlc)。
124.方法800还可或替代地涉及处理装置检测同一存储器装置的第二故障。可基于存储器装置无法每存储器单元存储减少的位数量来检测第二故障。处理装置可通过更新存储器装置集合以进一步减少存储器装置的每存储器单元存储的位的数量(例如,从tlc到slc)而对第二故障作出响应。
125.图9为根据本公开的一些实施例的由存储器子系统执行以管理存储器子系统的容量的减小的方法900的流程图。方法900可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或其组合。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,
在每个实施例中并不需要所有过程。其它过程流程也是可能的。
126.在操作910处,处理逻辑可检测集合中的多个存储器装置的故障。故障可致使存储器装置的数据不可存取。在一个实例中,存储器装置的故障为连接器、通信通道或裸片中的至少一者的硬件故障。
127.在操作920处,处理逻辑可确定存储器装置集合的容量已改变为减小的容量。在一个实例中,存储器子系统为固态驱动器(ssd),且处理装置为固态驱动器的存储器控制器。
128.在操作930处,处理逻辑可向主机系统通知减小的容量。通知指示包含归因于故障而不可存取的数据的存储单元集合。在一个实例中,通知涉及处理装置传输向主机系统指示包含不可存取的数据的逻辑块集合的消息。在另一实例中,通知涉及处理装置传输向主机系统指示包含不可存取的数据的一或多个区的集合的消息。
129.在操作940处,处理逻辑可在故障之后从主机系统恢复存储单元集合的数据。所述恢复涉及处理装置恢复使用存储于存储器装置集合上的奇偶校验数据不可存取的数据的一部分。
130.在操作950处,处理逻辑可更新存储器装置集合以存储所恢复数据且将容量改变为减小的容量。更新可涉及锁定至少一个存储器装置的发生故障的部分。所述锁定可包含写入锁,所述写入锁启用主机系统的读取且停用主机系统的写入。处理装置可响应于对发生故障的部分的读取请求而向主机系统提供所恢复的数据。处理装置可删除至少一个存储器装置的数据,且基于减小的容量产生或更新存储器装置集合的奇偶校验数据。
131.图10为根据本公开的一些实施例的由主机系统执行以管理存储器子系统的容量的减小的方法1000的流程图。方法1000可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路系统、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令)或其组合。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流程也是可能的。
132.在操作1010处,处理逻辑可确定故障影响存储器子系统的存储容量。所述故障可包含裸片、连接器或存储器子系统的通信通道中的至少一者的故障。存储器子系统可存储存储系统的一或多个存储结构的数据。在一个实例中,存储器子系统可为固态驱动器(ssd),且主机系统可执行与固态驱动器的存储器控制器通信的装置驱动器。确定故障可涉及主机系统从存储器子系统接收指示故障存在的消息,且所述消息可为或包含一或多个异步事件通知(aen)消息。
133.在操作1020处,处理逻辑可指示存储器子系统在减小的容量下操作且保持存储结构的所存储数据。在一个实例中,存储结构可为文件系统,且处理装置可基于存储器子系统的减小的容量而配置存储结构。
134.在操作1030处,处理逻辑可接收存储器子系统的受故障影响的存储单元集合。在一个实例中,存储单元集合包含包含不可存取的数据的一或多个逻辑块(例如,逻辑块地址)的集合。在另一实例中,存储单元集合包含包含不可存取的数据的一或多个区的集合。
135.在操作1040处,处理逻辑可恢复受故障影响的存储单元集合中的数据。在一个实例中,恢复数据涉及接收由存储器子系统使用奇偶校验数据恢复的数据。在另一实例中,恢
复数据涉及从另一主机系统上的数据的副本接收数据。在任一实例中,处理装置可将所接收的数据存储在存储器子系统中或另一存储器子系统中的存储位置处。
136.图11为根据本公开的一些实施例的由主机系统执行以管理存储器子系统的容量的减小的方法1100的流程图。方法1100可由处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路、专门逻辑、可编程逻辑、微码、装置的硬件、集成电路,等)、软件(例如,在处理装置上运行或执行的指令),或其组合。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流程也是可能的。
137.在操作1110处,处理逻辑可接收存储器子系统的存储容量受故障影响的指示。所述接收可涉及接收指示故障存在的第一消息及接收指示受故障影响的存储单元集合的第二消息。第一消息和第二消息可为异步事件通知(aen)消息。存储器子系统包含每单元存储多个位且可存储存储结构的数据的存储器单元。在一个实例中,存储器子系统可为固态驱动器(ssd),且主机系统执行与固态驱动器的存储器控制器通信的装置驱动器。在一个实例中,处理装置可基于存储器子系统的减小的容量而配置存储结构(例如,文件系统)。
138.在操作1120处,处理逻辑可指示存储器子系统在减小的容量下操作。减小的容量可为减小存储器子系统的每存储器单元所存储的位的数量的结果。在一个实例中,每单元存储多个位的存储器单元可为四层级单元,且指示存储器子系统在减小的容量下操作致使四层级单元下移到三层级单元。
139.在操作1130处,处理逻辑可接收存储器子系统包含超过减小的容量的数据的指示。这可于在检测到故障时存储器子系统处于或接近于填满容量时发生。存储器子系统可能够恢复不可存取(例如,丢失)的数据,但不具有存储所恢复数据的位置。
140.在操作1140处,处理逻辑可将存储位置提供到存储器子系统。存储位置可在存储器子系统外部,且足够大以存储所恢复数据。
141.在操作1150处,处理逻辑可使得存储器子系统能够将存储结构的数据存储在所述存储位置处。使得存储器子系统能够存储数据可涉及主机系统使得存储器子系统能够使用直接存储器存取(dma)传输数据。在一个实例中,主机系统可接收存储器子系统的存储容量受额外故障影响的指示,且可指示存储器子系统在另一减小的容量下操作。所述另一减小的容量可将每存储器单元所存储的位的数量减小到每存储器单元单个位。
142.图12说明计算机系统1200的实例机器,所述实例机器内可执行用于致使所述机器执行本文中所论述的方法中的任何一或多者的指令集。在一些实施例中,计算机系统1200可对应于主机系统(例如,图1到2的主机系统120),其包含、耦合到或利用存储器子系统(例如,图1的存储器子系统110)。在替代性实施例中,机器可连接(例如联网)到lan、内联网、外联网和/或因特网中的其它机器。机器可作为对等(或分布式)网络环境中的对等机器或作为云计算基础设施或环境中的服务器或客户端机器而以客户端-服务器网络环境中的服务器或客户端机器的容量进行操作。
143.所述机器可为个人计算机(pc)、平板pc、机顶盒(stb)、个人数字助理(pda)、蜂窝电话、网络器具、服务器、网络路由器、交换机或桥接器,或能够执行(循序或以其它方式)指定待由所述机器采取的动作的指令集的任何机器。另外,尽管说明单个机器,但还应认为术
语“机器”包含机器的任何集合,所述集合单独地或共同地执行一(或多)个指令集以进行本文中所论述的方法中的任何一或多种。
144.实例计算机系统1200包含处理装置1202、主存储器1204(例如,只读存储器(rom)、快闪存储器、动态随机存取存储器(dram),例如同步dram(sdram)或rambus dram(rdram)等)、静态存储器1206(例如,快闪存储器、静态随机存取存储器(sram)等)以及数据存储系统1218,它们经由总线1230彼此通信。
145.处理装置1202表示一或多个通用处理装置,例如微处理器、中央处理单元等等。更特定来说,处理装置可为复杂指令集计算(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器或实施其它指令集的处理器,或实施指令集的组合的处理器。处理装置1202也可为一或多个专用处理装置,例如专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、网络处理器等等。处理装置1202被配置成执行指令1226以用于执行本文中所论述的操作和步骤。计算机系统1200可以进一步包含网络接口装置1208,以通过网络1220进行通信。
146.数据存储系统1218可包含机器可读存储媒体1224(也称为非暂时性计算机可读媒体),所述机器可读存储媒体上存储有一或多个指令集1226或体现本文中所描述的方法或功能中的任何一或多者的软件。指令1226还可在由计算机系统1200执行期间完全或至少部分地驻存在主存储器1204内和/或处理装置1202内,主存储器1204和处理装置1202也构成机器可读存储媒体。机器可读存储媒体1224、数据存储系统1218和/或主存储器1204可对应于图1的存储器子系统110。
147.在一个实施例中,指令1226包含用以实施对应于图5的模块和组件(例如,容量管理模块530)的功能性的指令。虽然机器可读存储媒体1224在实例实施例中展示为单个媒体,但术语“非暂时性机器可读存储媒体”应被认为包含存储所述一或多个指令集的单个媒体或多个媒体。术语“机器可读存储媒体”还应被认为包含能够存储或编码供机器执行的指令集合且致使机器执行本公开的方法中的任何一种或多种的任何媒体。因此,应认为术语“机器可读存储介质”包含但不限于固态存储器、光学介质和磁性介质。
148.已在针对计算机存储器内的数据位的操作的算法和符号表示方面呈现了先前详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用以将其工作的主旨最有效地传达给所属领域的其他技术人员的方式。在本文中,且一般将算法构想为产生所要结果的操作的自洽序列。操作是要求对物理量进行物理操纵的操作。通常(但未必),这些量采用能够存储、组合、比较以及以其它方式操纵的电或磁信号的形式。已经证实,主要出于常用的原因,将这些信号称为位、值、元素、符号、字符、项、编号等等有时是便利的。
149.然而,应牢记,所有这些和类似术语将与适当物理量相关联,且仅仅为应用于这些量的便利标记。本公开可以指将计算机系统的寄存器和存储器内的表示为物理(电子)数量的数据操控和变换为计算机系统存储器或寄存器或其它这类信息存储系统内的类似地表示为物理数量的其它数据的计算机系统或类似电子计算装置的动作和过程。
150.本公开还涉及用于执行本文中的操作的设备。这一设备可以出于所需目的而专门构造,或其可包含通过存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。这种计算机程序可存储在计算机可读存储媒体中,例如但不限于任何类型的盘,包含软盘、光盘、cd-rom以及磁性光盘、只读存储器(rom)、随机存取存储器(ram)、eprom、eeprom、
磁卡或光卡,或适合于存储电子指令的任何类型的媒体,其各自连接到计算机系统总线。
151.本文中呈现的算法和显示器在本质上并不与任何特定计算机或其它设备相关。各种通用系统可以与根据本文中的教示的程序一起使用,或可以证明构造用以执行所述方法更加专用的设备是方便的。将如下文描述中所阐述的那样来呈现各种这些系统的结构。另外,未参考任何特定编程语言来描述本公开。应了解,可使用各种编程语言来实施如本文中所描述的本公开的教示内容。
152.本公开可提供为计算机程序产品或软件,其可包含在其上存储有可用于编程计算机系统(或其它电子装置)以进行根据本公开的过程的指令的机器可读媒体。机器可读媒体包含用于以机器(例如,计算机)可读的形式存储信息的任何机构。在一些实施例中,机器可读(例如,非暂时性计算机可读)媒体包含机器(例如,计算机)可读存储媒体,例如只读存储器(“rom”)、随机存取存储器(“ram”)、磁盘存储媒体、光学存储媒体、快闪存储器组件等等。
153.在前述说明书中,本公开的实施例已经参考其特定实例实施例进行描述。将显而易见的是,可在不脱离如所附权利要求书中阐述的本公开的实施例的更广精神和范围的情况下对本公开进行各种修改。因此,应在说明性意义上而非限制性意义上看待说明书和图式。