在电力关闭时保存数据转让专利

申请号 : CN201810224592.3

文献号 : CN108874695B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郑凯隆赖昀佐E.利西特西恩J.罗S.B.皮莱

申请人 : 西部数据技术公司

摘要 :

主机数据段被接收并存储在与当前存储在非易失性存储器中的先前存储的数据单元相对应的高速缓存数据单元中。创建元数据,该元数据标识与接收到的主机数据段对应的、先前存储的数据单元中未经修改的先前存储的主机数据段,该元数据包括指示先前存储的数据单元需要更新的更新标志。响应于检测到意外的电力中断,高速缓存数据单元和元数据被写入到非易失性存储器阵列的区域,该区域不同于先前存储的数据单元当前被存储的区域。在意外的电力中断之后恢复操作时,则基于更新标志将高速缓存数据单元识别为响应于电力关闭已经被保存,而没有在非易失性存储器阵列中更新先前存储的数据单元,并且然后将该高速缓存数据单元重新加载到存储器高速缓存中。

权利要求 :

1.一种数据存储系统,包括:

非易失性存储器阵列;

易失性存储器;和

控制器,被配置为:

接收用于在所述非易失性存储器阵列中存储的多个主机数据段;

将接收到的主机数据段存储在易失性存储器的存储器高速缓存内的高速缓存数据单元中,该高速缓存数据单元对应于当前在非易失性存储器阵列中的先前存储的数据单元;

创建用于高速缓存数据单元的元数据和更新标志,所述元数据标识对应于所接收的主机数据段的、在先前存储的数据单元中的未经修改的先前存储的主机数据段,所述更新标志指示未经修改的先前存储的段需要更新;

根据电力关闭的指示检测电力关闭是意外的电力中断;

响应于检测到意外的电力中断,将高速缓存数据单元和元数据从存储器高速缓存写入到不同于非易失性存储器阵列中的第二区域的非易失性存储器阵列的第一区域,其中先前存储的数据单元当前被存储在所述第二区域中,而不更新第二区域中先前存储的数据单元;以及在意外的电力中断之后恢复操作时,基于检测到更新标志,将所述第一区域中的高速缓存数据单元和元数据识别为响应于电力关闭已经从存储器高速缓存中被复制、而没有在非易失性存储器阵列中更新先前存储的数据单元,并且将高速缓存数据单元和元数据从非易失性存储器阵列的第一区域重新加载到存储器高速缓存中。

2.如权利要求1所述的数据存储系统,其中当在意外的电力中断之后恢复操作时,所述控制器还被配置为:在重新加载高速缓存数据单元之后,基于元数据和在高速缓存数据单元中接收到的主机数据段,更新在非易失性存储器阵列的第二区域中的先前存储的数据单元的未经修改的先前存储的段。

3.如权利要求2所述的数据存储系统,其中所述元数据包括位掩码,该位掩码标识与接收到的主机数据段相对应的、先前存储的数据单元的先前存储的未经修改的段。

4.如权利要求2所述的数据存储系统,其中所述元数据包括映射到第二区域的地址,其中更新先前存储的数据单元的未经修改的先前存储的段包括:基于地址映射将先前存储的数据单元从第二区域加载到存储器高速缓存中;

使用来自重新加载的高速缓存数据单元的主机数据段更新先前存储的数据单元;以及将更新后的先前存储的数据单元存储在非易失性存储器阵列中。

5.如权利要求2所述的数据存储系统,其中所述控制器还被配置为响应于检测到意外的电力中断:与将高速缓存数据单元和元数据从存储器高速缓存写入到非易失性存储器阵列的第一区域相结合地来暂停读取操作。

6.如权利要求1所述的数据存储系统,其中基于针对被指定为响应于电力关闭已经从存储器高速缓存复制的数据单元而对非易失性存储器阵列的扫描,在第一区域中标识高速缓存数据单元,而不在非易失性存储器阵列中更新对应的先前存储的数据单元。

7.如权利要求6所述的数据存储系统,其中所述控制器还被配置为:在元数据中设置所述更新标志,以将高速缓存数据单元标识为包括接收到的主机数据段,其中,在意外的电力中断之后恢复操作时,基于在扫描期间检测到的更新标志来识别高速缓存数据单元。

8.如权利要求7所述的数据存储系统,其中响应于检测到意外的电力中断来设置所述更新标志。

9.如权利要求1所述的数据存储系统,还包括:

在意外的电力中断后的恢复操作之后、并且在重新加载高速缓存数据单元之后,在存储器高速缓存内执行读取-修改-写入过程,以用接收到的主机数据段更新先前存储的数据单元的未经修改的先前存储的段。

10.一种存储控制器,包括:

用于接收用于在非易失性存储器阵列中存储的多个主机数据段的部件;

用于高速缓存接收到的主机数据段的部件;

用于创建用于所接收的主机数据段的元数据的部件,所述元数据标识与接收到的主机数据段相对应的、在先前存储的数据单元中先前存储的未经修改的主机数据段;

用于指示未经修改的先前存储的段需要更新的部件;

用于根据电力关闭的指示检测所述电力关闭是意外的电力中断的部件;

用于响应于检测到意外的电力中断将高速缓存的接收到的主机数据段和元数据写入不同于非易失性存储器的第二区域的非易失性存储器的第一区域的部件,其中先前存储的数据单元当前被存储在所述第二区域中,而不更新先前存储的数据单元;以及用于在意外的电力中断之后恢复操作时、将第二区域中高速缓存的接收到的主机数据段和元数据识别为响应于电力关闭已经从存储器高速缓存中被复制、而没有在非易失性存储器中更新先前存储的数据单元的部件;以及用于将所识别的高速缓存的接收到的主机数据段和元数据从非易失性存储器的第一区域重新加载到存储器高速缓存中的部件。

11.如权利要求10所述的存储控制器,还包括:

用于在意外的电力中断之后恢复操作时更新当前存储在非易失性存储器的第二区域中的先前存储的数据单元中的未经修改的先前存储的主机数据段的部件。

12.如权利要求10所述的存储控制器,还包括:

用于针对被指定为响应于电力关闭已经从存储器高速缓存复制的数据而扫描非易失性存储器、而不在非易失性存储器中更新相应的先前存储的数据实例的部件。

13.如权利要求12所述的存储控制器,还包括:

用于在所述元数据中设置更新标志以在所述非易失性存储器的所述第一区域中标识接收到的主机数据段的部件,其中,在所述意外的电力中断之后恢复操作时,基于在扫描期间检测到的更新标志来标识接收到的主机数据段。

14.一种方法,包括:

接收用于在所述非易失性存储器阵列中存储的多个主机数据段;

将接收到的主机数据段存储在易失性存储器高速缓存内的高速缓存数据单元中,所述高速缓存数据单元对应于当前处于所述非易失性存储器中的先前存储的数据单元;

创建用于高速缓存数据单元的元数据和更新标志,所述元数据标识与接收到的主机数据段对应的、先前存储的数据单元中未经修改的先前存储的主机数据段,所述更新标志指示未经修改的先前存储的段需要更新;

根据电力关闭的指示,检测电力关闭是意外的电力中断;

响应于检测到意外的电力中断,将高速缓存数据单元和元数据从易失性存储器高速缓存写入不同于非易失性存储器的第二区域的非易失性存储器的第一区域,其中先前存储的数据单元当前被存储在所述第二区域中,而不更新第二区域中先前存储的数据单元;以及在意外的电力中断之后恢复操作时,基于检测到更新标志而将第一区域中的高速缓存数据单元和元数据识别为响应于电力关闭已经从易失性存储器高速缓存被复制,而没有在非易失性存储器中更新先前存储的数据单元;以及将高速缓存数据单元和元数据从非易失性存储器的第一区域重新加载到易失性存储器高速缓存中。

15.如权利要求14所述的方法,还包括:

在意外的电力中断之后恢复操作时,基于元数据和在高速缓存数据单元中的接收到的主机数据段更新在非易失性存储器阵列的第二区域中的先前存储的数据单元的未经修改的先前存储的段。

16.如权利要求15所述的方法,其中所述元数据包括位掩码,该位掩码标识与接收到的主机数据段相对应的、先前存储的数据单元的未经修改的先前存储的段。

17.如权利要求16所述的方法,其中所述元数据包括映射到第二区域的地址,其中更新先前存储的数据单元的未经修改的先前存储的段包括:基于地址映射将先前存储的数据单元从第二区域加载到存储器高速缓存中;

使用来自重新加载的高速缓存数据单元的主机数据段更新先前存储的数据单元;以及将更新后的先前存储的数据单元存储在非易失性存储器阵列中。

18.如权利要求15所述的方法,还包括:响应于检测到意外的电力中断,与将高速缓存数据单元和元数据从存储器高速缓存写入到非易失性存储器阵列的第一区域相结合地来暂停读取操作。

19.如权利要求15所述的方法,还包括:

在电力关闭之前,在元数据中设置更新标志以将高速缓存数据单元标识为包括接收到的主机数据段;以及在意外的电力中断之后恢复操作时,针对具有在元数据中设置的更新标志的数据单元扫描非易失性存储器,其中基于检测到更新标志、在扫描期间在第一区域中识别接收到的主机数据段。

20.如权利要求19所述的方法,其中响应于检测到意外的电力中断来设置所述更新标志。

说明书 :

在电力关闭时保存数据

技术领域

[0001] 本公开涉及在电力中断期间的数据保存。

背景技术

[0002] 闪存相对于其他类型的存储设备具有许多优点。闪存一般提供比硬盘驱动器(HDD)更快的读取访问时间和更好的抗冲击性。与动态随机存取存储器(DRAM)不同,闪存是非易失性的,这意味着在移除设备的电力时存储在闪存器件中的数据不会丢失。这些优点和其他优点可以解释闪存在诸如存储卡、USB闪存驱动器、移动电话、数码相机、大容量存储设备、MP3播放器等的设备中的存储应用日益普及。
[0003] 闪存存储系统可能会经历意外的电力中断或电力丢失,在此期间存储系统可以使用备用电力进行操作。备用电力仅能够在短时间段内提供电力,在此短时间段期间存储系统需要保存存储在易失性存储器中的关键数据以确保数据的完整性。

发明内容

[0004] 主题技术涉及一种用于取回存储在闪存中的信息的方法。根据各个方面,数据存储设备可以包括存储器裸芯(die)的非易失性存储器阵列、易失性存储器;和控制器。控制器被配置为:接收用于在所述非易失性存储器阵列中存储的多个主机数据段;将接收到的主机数据段存储在易失性存储器的存储器高速缓存内的高速缓存数据单元(cached data unit)中,高速缓存数据单元对应于当前在非易失性存储器阵列中的先前存储的数据单元;创建用于高速缓存数据单元的元数据,所述元数据标识对应于所接收的主机数据段的、在先前存储的数据单元中未经修改的先前存储的主机数据段,以及更新标志,该更新标志指示未经修改的先前存储的段需要更新;根据电力关闭的指示检测电力关闭是意外的电力中断。响应于检测到意外的电力中断,控制器被配置为将高速缓存数据单元和元数据从存储器高速缓存写入到不同于非易失性存储器阵列中的第二区域的非易失性存储器阵列的第一区域,其中先前存储的数据单元当前被存储在所述第二区域中,而不更新第二区域中先前存储的数据单元;以及在意外的电力中断之后恢复操作时,基于检测到更新标志,将所述第一区域中的高速缓存数据单元和元数据识别为响应于电力关闭已经从存储器高速缓存中被复制,而不在非易失性存储器阵列中更新先前存储的数据单元,并且将高速缓存数据单元和元数据从非易失性存储器阵列的第一区域重新加载到存储器高速缓存中。
[0005] 控制器还被配置为:当在意外的电力中断之后恢复操作时,在重新加载更新后的数据单元之后,基于元数据和在高速缓存数据单元中接收到的主机数据段,更新在非易失性存储器阵列的第二区域中的先前存储的数据单元的未经修改的先前存储段。其他方面包括相应的系统、装置、方法和计算机程序产品。
[0006] 应该理解,根据下面的详细描述,本公开的其他配置对于本领域技术人员来说将变得清楚,其中本公开的各种配置以例示的方式示出和描述。如将认识到的,本公开能够具有其他和不同的配置,并且能够在各个其他方面对其若干细节进行修改,全部都不脱离本公开的范围。因此,附图和详细描述应被视为例示性的而非限制性的。

附图说明

[0007] 图1描绘了可操作地连接到示例数据存储系统的示例主机系统。
[0008] 图2A描绘了高速缓冲存储器,其包括存储高速缓存的主机数据单元的存储器的第一区域和存储用于高速缓存数据单元的元数据条目的存储器的第二区域。
[0009] 图2B描绘了存储一系列示例所存储的数据条目的非易失性存储区域,其包括数据条目的元数据部分的分解描绘。
[0010] 图3描绘了当电力丢失时用于保存数据的第一示例过程的流程图。

具体实施方式

[0011] 以下阐述的详细描述旨在作为对本公开的各种配置的描述,而不旨在表示可以实践本公开的仅有配置。所附的附图被纳入本文并构成详细描述的一部分。该详细描述包括了具体细节,目的是提供对本公开的透彻理解。然而,本领域技术人员将清楚的是,可以无需这些具体细节来实践本公开。在一些情况中,以框图形式示出结构和组件,以避免模糊本公开的构思。为了便于理解,类似的组件标有相同的元件编号。
[0012] 固态硬盘(SSD)使用闪存单元架构来制造。闪存是电可擦除可编程只读存储器(EEPROM)的改进形式。传统的EEPROM设备一次只能擦除或写入一个存储器位置。相比之下,闪存允许在一次编程操作中擦除或写入多个存储器位置。因此闪存可以以比传统EEPROM更高的有效速度进行操作。
[0013] 当前的闪存存储设备受到许多限制。尽管闪存可以在物理页面级读取或写入,但它只能在块级擦除或重写。从预擦除块开始,可以将数据写入该块内的任何物理页面。然而,一旦数据已经被写入物理页面,该物理页面的内容就不能改变,直到包含该物理页面的整个块被擦除。换句话说,虽然闪存可以支持随机存取读取和写入操作,但可能不支持随机存取重写或擦除操作。
[0014] 为了减少写入操作的数量并提高性能,闪存器件在对数据进行操作时执行各种高速缓存技术。例如,对高速缓存中的数据的修改可以不复制到闪存,直到绝对必要。主机数据在易失性存储器中更新,直到它准备好被保存到非易失性存储器中,并且然后在方便时被保存到非易失性存储器中。
[0015] 除了非易失性闪存之外,许多闪存器件包括控制器和诸如DRAM的易失性存储器,该控制器和易失性存储器用在对闪存器件的读取和写入操作的管理中以及用在闪存器件和它们所连接的主机设备之间的通信中。例如,DRAM可以包含将主机设备使用的逻辑地址与存储数据的非易失性闪存中的物理地址相关联的寻址表。许多闪存器件依赖于它们所连接的主机设备来取电。在电力的突然和意外丢失(例如,由于从主机拔出闪存器件)时,存储在闪存器件的易失性存储器中的信息可能丢失,这可能导致在电力恢复时重建寻址表中的数据损坏或不适当的延迟。为了解决这个问题,闪存器件包括用于提供足够的紧急电力的机制,以提供将寻址表复制到非易失性闪存的时间。
[0016] 图1描绘了根据本主题技术的各个方面的可操作地连接到示例数据存储系统的示例主机系统110。在所描绘的示例中,数据存储系统120(例如,固态驱动器)包括控制器130、易失性存储器140和非易失性固态存储器阵列150。
[0017] 控制器130或其中的一个或多个组件可以被配置为运行用于执行本文描述的操作和功能的代码或指令。例如,控制器130可以被配置为执行用于管理请求流和地址映射的操作,并且执行计算和生成命令。控制器130的处理器可以是通用微处理器、多核处理器、微控制器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),可编程逻辑器件(PLD)、控制器、状态机、门控逻辑、分立硬件组件或前述的组合。由控制器130和/或其处理器运行的一个或多个指令序列可被存储在易失性存储器140或非易失性存储器阵列150、电子介质、光学介质、磁介质或(多个)其他类型的存储介质,并且可以从易失性存储器
140或非易失性存储器阵列150、电子介质、光学介质、磁介质或(多个)其他类型的存储介质读取这些指令序列。这些存储介质表示在其上可以存储可由控制器130和/或其处理器运行的指令/代码的有形的和/或非暂时性机器或计算机可读介质的示例。在一些实施方式中,可以从主机系统110(例如,经由主机接口)接收指令。
[0018] 易失性存储器140可以包括随机存取存储器(RAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、诸如DDR3的同步动态随机存取存储器(SDRAM)或它们的任何组合。非易失性固态存储器阵列150包括闪存。根据各个方面,存储器阵列150可以包括一个或多个闪存集成电路、硫族化物RAM(C-RAM)、相变存储器(PC-RAM或PRAM)、可编程金属化单元RAMPMCRAM或PMCm)、双向统一存储器(Ovonic Unified Memory,OUM)、电阻RAM(RRAM),NANO存储器(例如,单级单元(SLC)存储器、多级单元(MLC)存储器或其任何组合)、NOR存储器、EEPROM、铁电存储器(FeRAM)磁阻RAM(MRAM)、其他分立NVM(非易失性存储器)芯片或它们的任何组合。数据存储系统120还可以包括其他类型的非易失性和/或易失性存储器,例如磁存储器。
[0019] 非易失性固态存储器阵列150可以包括多个非易失性器件(例如,闪存管芯)。存储器阵列150可以包括在多个通道当中分割的多个闪存器件。每个闪存器件可以包括一个或多个物理闪存芯片,或者可以包括不同数量的闪存芯片。例如,在固态存储器阵列150内,闪存器件的一些可以包括一个闪存芯片,而其他的可以包括多于一个的闪存芯片。
[0020] 存储器阵列150的闪存器件可以包括一个或多个闪存接口。每个闪存接口经由相应的通道将控制器130连接到闪存器件中的一个。通道的每一个可以使用在闪存接口中的一个和相应的(多个)闪存器件之间耦接的一个或多个物理I/O总线来实施。每个通道允许相应的闪存接口向对应的闪存器件发送读取、写入和/或擦除命令。每个闪存接口可以包括寄存器(例如,先进先出(FIFO)寄存器),其针对相应的闪存器件将来自控制器130的读取、写入和/或擦除命令排队。尽管如上所使用的术语“通道”是指耦接在闪存接口与相应的闪存器件之间的总线,但术语“通道”也可指可通过总线寻址的相应的闪存器件。
[0021] 存储器阵列150的闪存器件可以被分成块。每个数据块可以被进一步分成数据单元。如本文所描述的“数据单元”,可以包括数据的页面。例如,每个数据块的大小可以是128千字节(K字节),并且每个数据单元的大小可以是4千字节(K字节)。在这个例子中,每个数据块具有32个4K字节的数据单元。数据块可以具有除128K字节之外的其他大小,包括但不限于256K字节或512K字节。例如,256K字节的数据块可能具有64个4K字节的数据单元。数据单元也可具有除4K字节之外的其他大小。例如,数据单元可以具有是1K字节或2K字节的倍数的任何大小。
[0022] 控制器130可以被配置为从主机系统110的存储接口模块112(例如,设备驱动器)接收数据和/或存储访问命令。由存储接口模块112通信传达的存储访问命令可以包括由主机系统110发出的读取和写入命令。读取和写入命令可以指定用于访问数据存储系统120的逻辑地址(例如,逻辑块地址或LBA)。控制器130可以在存储器阵列150中运行接收到的命令。
[0023] 数据存储系统120可以存储由主机系统110通信传达的数据。换句话说,数据存储系统120可以用作主机系统110的存储器储存。为了促进该功能,控制器130可以实施逻辑接口。逻辑接口可以将数据存储系统的存储器作为可以存储主机数据或用户数据的一组逻辑地址(例如,连续地址)呈现给主机系统110。在内部,控制器130可以将逻辑地址映射到存储器150中的各个物理位置或地址。控制器130包括缓冲器132,其中缓冲器132可以包括易失性存储器,诸如RAM、SRAM、DRAM、SDRAM等。在一些实施方式中,缓冲器132可以在控制器130的外部。控制器130还可以包括数据完整性模块134,该数据完整性模块134被配置为监测和保持存储在数据存储系统120中的数据的完整性。在一些实施方式中,当数据存储系统120经历电力中断或丢失的状况时,数据完整性模块134保持数据的完整性。
[0024] 在一些实施方式中,缓冲器132或易失性存储器140可以用作存储器高速缓存,诸如用于存储器阵列150的写入高速缓存缓冲器。例如,出于各种原因(诸如为了提高写入性能),数据存储系统120可以高速缓存少量的主机数据。在各种实施方式中,数据存储系统120确保主机数据的完整性,特别是在数据存储系统经历突然或意外的电力丢失的事件中。
也就是说,数据存储系统120将高速缓存的主机数据从缓冲器132移动到非易失性存储器
150。
[0025] 在一些实施方式中,数据存储系统120保持由主机系统120使用的逻辑地址与非易失性固态存储器阵列150中的物理存储器位置之间的映象(map)或映射(mapping)。映射可以被构造为提供对应于逻辑地址的物理地址的查找,并且可以基于逻辑地址(和/或基于物理地址)来索引映射。由主机系统110写入数据存储系统120的最小单元的大小可以不同于由数据存储系统120存储在非易失性存储器阵列150中的最小数据单元。例如,数据存储系统120的数据单元的大小可以是4千字节,并且由主机系统120写入的主机数据段的大小可以是512字节。在由主机系统120使用的逻辑地址与非易失性固态存储器阵列150中的物理存储器位置之间的映射可以解决该差异。
[0026] 该映射可以被保持为表和/或任何其他合适的数据结构。作为主机数据被移动的结果,对应于给定逻辑地址(例如,LBA)的物理存储器位置可能改变。例如,由于一个或多个内务操作(诸如垃圾收集(例如,回收无效数据所使用的存储器空间)、磨损平衡(例如,将写入负载基本上均匀地分布在存储器页和/或块上)、存储器刷新(例如,周期性地刷新所存储的数据)、坏块管理(例如,发现和不使用存储不可靠的数据块)等),可以在存储器阵列150内移动主机数据。另外,当主机系统110针对特定逻辑地址写入数据时,由于数据被存储在不同的物理存储器位置,因此该逻辑地址的映射可能改变。例如,主机系统110可以将针对LBA的数据存储到数据存储系统120,然后由数据存储系统120将该数据存储在第一物理地址中。稍后,可以从主机系统100接收更新的针对LBA的数据,使得存储在对应的第一物理地址处的数据变得无效。
[0027] 在某些实施方式中,数据存储系统120保持包含块的映射信息的日志。例如,日志可以包含给定块的逻辑到物理(和/或物理到逻辑)映射信息,并且日志可以用于跟踪写入给定块的主机数据。该日志可以包括按时间顺序排列的主机命令的历史。日志数据可以被周期性地刷新或写入到非易失性固态存储器阵列150。
[0028] 在各种实施方式中,在被写入到非易失性固态存储器阵列150之前,传入(例如,热)的主机数据可以被部分地或完全地高速缓存在缓冲器132中。因为主机数据段(例如,主机扇区)的大小(例如,512字节)可能比可以存储在非易失性存储器阵列150中的最小数据单元(例如,4千字节)小,所以传入的主机数据段可以首先被写入在易失性存储器(例如,在缓冲器132中)中和/或在易失性存储器中被更新,然后作为数据单元或块传送到非易失性存储器阵列150。
[0029] 就这点而言,控制器130可以实施读取-修改-写入过程以更新物理地址处的数据。在读取-修改-写入过程期间,未经修改的先前存储的数据被加载到存储器高速缓存中,与存储器高速缓存中最近接收到的主机数据合并,并且然后被存储回非易失性存储器。读取-修改-写入过程可以被周期性地启动,或者可以在满足某些触发条件(例如,存储器高速缓存中的主机数据的阈值量、当阈值数量的资源可用时等)时被触发。在一个示例中,从主机系统110接收主机数据段并将其高速缓存在与非易失性存储器阵列150中先前存储的数据单元相对应的高速缓存数据单元中。当控制器130确定接收到的主机数据应该被写入到非易失性存储器阵列150时,先前存储的数据单元被加载到存储器高速缓存中,并且然后用来自高速缓存数据单元的接收到的主机数据来修改。然后将修改后的数据单元存储回非易失性存储器阵列150。在一些实施方式中,整个读取-修改-写入过程可以作为原子操作来执行。在一些实施方式中,当整个高速缓存数据单元被新主机数据填充时,高速缓存的主机数据单元可以被直接写入到非易失性存储器阵列150。在一些实施方式中,可以将高速缓存数据单元写入新的物理存储器地址和被更新以反映新地址的主机LBA。
[0030] 如将参照图2进一步描述的,数据存储系统120还可以创建关于传入的主机数据段的元数据,该元数据包括当前存储在存储器高速缓存内的高速缓存数据单元中的主机数据段和在非易失性存储器阵列150中的先前存储数据单元之间的逻辑到物理的映射。该元数据可以与主机数据段一起被高速缓存在存储器高速缓存中,并且然后当主机数据单元被存储到存储器阵列时被存储(例如,与主机数据一起)在非易失性存储器阵列150中。
[0031] 在数据存储系统120的正常关闭或重新启动时,控制器130可以将高速缓存的主机数据单元从存储器高速缓存保存或刷新到非易失性存储器阵列150,连同执行其他关闭操作,包括例如更新逻辑到物理映射或更新日志数据。然而,意外的电力丢失会导致当前存储在存储器高速缓存中的主机数据单元的丢失。就这点而言,数据存储系统120可以包括主电源160和备用电源170。主电源160(其可以是连接到交流(AC)或直流(DC)电源的电力供应)在正常操作期间向数据存储系统120提供电力。备用电源被配置为当主电力被意外中断或丢失时向数据存储系统120提供暂时电力。备用电源可以包括一个或多个电力储存设备。例如,备用电源可以包括一个或多个电容器,诸如一个或多个板载电容器或超级电容器。
[0032] 如将进一步描述的,从主机系统110接收主机数据段并将其存储在与当前存储在非易失性存储器阵列150中的先前存储的数据单元相对应的高速缓存数据单元中。控制器130创建元数据,该元数据标识与接收到的主机数据段相对应的、在先前存储的数据单元内未经修改的主机数据段。元数据还可以包括指示先前存储的数据单元需要更新的更新标志。响应于检测到意外的电力中断,读取操作可能被取消以保存电力和控制器带宽,从而支持将高速缓存数据单元写入到非易失性存储器。就这点而言,读取-修改-写入操作也可以被取消或暂停。然后可以将高速缓存数据单元和对应的元数据按原样写入非易失性存储器阵列150,而不将数据与先前存储的数据单元合并。高速缓存数据单元和对应的元数据可以存储在不同于先前存储的数据单元当前被存储的区域的非易失性存储器阵列150的预定区域中。在意外的电力中断之后恢复操作时,基于例如更新标志的检测,每个高速缓存数据单元在非易失性存储器内被识别为是先前存储的高速缓存数据单元而不是正常的主机数据。
然后将识别的高速缓存数据单元重新加载到存储器高速缓存中。
[0033] 图2A描绘了高速缓冲存储器200,其包括存储高速缓存的主机数据单元204的存储器的第一区域202和存储用于高速缓存数据单元的元数据条目208的存储器的第二区域206。高速缓冲存储器200可以在易失性存储器140内被分配,或者可以分布于不同的易失性存储器中。例如,存储器的第一区域202可以在易失性存储器140中,并且存储器的第二区域
206可以在片上高速缓存内。每个数据单元204(在所描绘的示例中被标记为A、B、C、D等)可以包括从主机系统110接收的多个主机数据段。例如,数据单元A的长度可以是4千字节,并且包括八个512字节的主机段。如将进一步描述的,每个高速缓存数据单元204对应于在非易失性存储器阵列150中的先前存储的数据单元。
[0034] 存储器的第二区域206可以包括高速缓存表,其中表中的每个元数据条目208(在所描绘的示例中被标记为a、b、c、d等)与对应的高速缓存数据单元204相关联。作为示例,当从主机系统110接收主机数据段并将其作为高速缓存数据单元A的一部分存储时,可以更新对应的元数据条目a以记录新接收的数据。如将进一步描述的,每个元数据条目208可以包括先前存储在非易失性存储器阵列150中的数据单元中的主机数据段的标识,其中该主机数据段对应于在对应的数据单元204中最近接收到的主机数据段,并且该标识需要更新以反映新接收到的数据。每个元数据条目208还可以包括指示在非易失性存储器阵列150中的先前存储的数据单元需要更新的更新标志。
[0035] 图2B描绘了存储一系列示例被存储的数据条目212和214的非易失性存储区域210,其包括数据条目214的元数据部分的分解描绘216。非易失性存储器区域210可以是被指定用于响应于意外的电力停止而存储的高速缓存数据的非易失性存储器阵列150的区域,而不更新先前存储的数据单元。在所描绘的示例中,非易失性存储器区域210不同于在其中存储了与高速缓存数据单元204相对应的先前存储的数据单元的非易失性存储器的区域。所描绘的数据条目214包括从高速缓冲存储器200接收的数据单元204(数据单元A)以及与关于数据单元的元数据条目208相对应的元数据216。在一些实施方式中,元数据216可以与数据条目214分开存储。
[0036] 数据条目214内的数据单元204表示从主机系统110接收的主机数据。如先前所描述的,数据单元204可以包括多个主机数据段(例如,扇区)。元数据结构216描述数据单元204内的主机数据段的各种特性。例如,元数据结构216可以包括地址映射220,该地址映射包括针对数据单元204中的主机数据段的一个或多个逻辑地址,和/或非易失性存储器阵列
150中的物理地址,其中在该物理地址处存储数据单元204的相应的先前存储的数据单元(包括主机数据段)。物理位置可以是表示存储器中的位置的地址,或者在一些实施方式中可以是数字(例如,与地址的偏移)。根据各种实施方式,元数据结构216还部分地标识数据单元的先前存储的数据单元的哪些主机数据段在数据单元204中被主机系统110修改。
[0037] 元数据216还可以包括标志222和数据掩码224。标志222是该数据条目214(和/或其数据单元204)是否包括需要通过读取-写入-修改过程处理的更新后的主机数据的指示符,或者它是否是可以被直接写入到非易失性存储器阵列150的数据。标志222可以是元数据216中的预定位置处的单个位。当标志被设置(例如,设置为“1”而不是“0”)时,与元数据216相关联的数据单元204可被标识为包括当前存储在非易失性存储器阵列150中的、数据单元204的相应的先前存储的数据单元的修改部分。
[0038] 数据掩码224标识先前存储的数据单元中未经修改的先前存储的主机数据段,该主机数据段对应于数据条目214的数据单元204中最近接收到的主机数据段。掩码224可以是位掩码,其位数等于数据单元204内的主机数据段的数量(或数据单元204的大小除以主机数据段的大小)。掩码的位序列中的每个位可以对应于距数据单元204的起始地址(和/或距存储在非易失性存储器阵列150的原始位置中的原始数据单元的相应的有效载荷)的预定偏移。在掩码内设置位(例如,设置为“1”而不是“0”)可以指示数据单元204内的相应位置是在数据单元204的先前存储的数据单元中需要被更新的新主机数据(或者其他受影响数据)。在一些实施方式中,掩码224可以指定数据单元204(或数据单元的先前存储的数据单元)内对应于新的和/或受影响的数据的地址或偏移。
[0039] 图3描绘了根据本主题技术的各个方面,用于当电力丢失时保存数据的第一示例过程300的流程图。为了解释的目的,本文参考在本文描述的组件和/或过程来描述示例过程300的各个框。过程300的一个或多个框可以由例如一个或多个处理器来实施,包括例如图1的控制器130或者控制器130的一个或多个组件或处理器。在一些实施方式中,可以由一个或多个不同的处理器或控制器将一个或多个框与其他框分开实施。进一步为了解释的目的,示例过程300的框被描述为串行或线性地发生。然而,示例过程300的多个块可以并行发生。另外,不需要以所示顺序执行示例过程300的框和/或不需要执行示例过程300的一个或多个框。
[0040] 过程300可以由控制器130和/或数据完整性模块134运行。数据存储系统120通过接收用于在非易失性存储器阵列中存储的多个主机数据段而开始(302)。接收到的主机数据段被存储(例如,暂时)在易失性存储器的存储器高速缓存内的高速缓存数据单元中(304)。如先前所描述的,高速缓存数据单元对应于当前在非易失性存储器阵列150中的先前存储的数据单元。创建用于高速缓存数据单元204的元数据208(306)。元数据208标识与接收到的主机数据段相对应的、在先前存储的数据单元中未经修改的主机数据段。如先前所描述的,元数据208可以包括指示先前存储的数据单元中的未经修改的段需要更新的更新标志。如先前所描述的,元数据208还可以包括标识与接收到的主机数据段相对应的、先前存储的数据单元的未经修改的段的位掩码。
[0041] 数据存储系统120(和/或控制器130)根据电力关闭的指示检测电力关闭是否是意外的电力中断(308)。在一些实施方式中,可以通过询问主电源160来确定其是否继续供电以做出该确定。如果电力丢失不是意外的,则过程300继续正常关闭操作(310)。就这点而言,以正常操作方式(例如,经历读取-修改-写入)处理被存储在易失性存储器中的高速缓存(或热)主机数据和系统数据,并将其保存到非易失性固态存储器阵列150。映射数据被更新并且可以被写入到非易失性固态存储器阵列150。
[0042] 如果控制器130确定电力意外丢失或中断(并且数据存储系统120正在以备用电力运行),则将高速缓存数据单元和元数据从存储器高速缓存写入到不同于非易失性存储器的第二区域的非易失性存储器阵列150的第一区域,其中先前存储的数据单元当前存储在所述第二区域中(312)。根据各种实施方式,在不更新第二区域中的先前存储的数据单元的情况下写入每个高速缓存数据单元。就这点而言,控制器130可取消或暂停读取操作(例如,所有未完成的读取操作或未完成的读取操作的子集),从而取消或暂停正常的读取-修改-写入过程。然后,高速缓存数据单元和对应的元数据按原样被写入到非易失性存储器阵列150,而不经历将数据与先前存储的数据单元合并的正常的读取-修改-写入过程。如先前所讨论的,元数据可以包含指示高速缓存数据单元未经历合并过程而被存储的特殊标记(例如,更新标志222)。可以在启动电力关闭之前或之后设置更新标志222。在一些实施方式中,可以在更新后的数据单元的一个或多个部分首先被写入在存储器高速缓存中或在存储器高速缓存中被更新时设置更新标志。在一些实施方式中,响应于检测到意外的电力中断而设置更新标志。
[0043] 在一些时间点,在意外的电力中断之后数据存储单元120重新通电,并且恢复操作(314)。在意外的电力中断之后恢复操作时,将第一区域中的高速缓存数据单元识别为响应于电力关闭已经从存储器高速缓存被复制,而不在非易失性存储器的第二区域中更新先前存储的数据单元(316)。例如,可以基于在针对包括更新标志的数据单元对非易失性存储器进行扫描期间检测元数据中的更新标志来识别更新的数据单元。就这点而言,控制器130被具体配置为在例如非易失性存储器阵列150的预定区域内针对更新标志进行扫描,其中该预定区域被指定用于在意外电力关闭期间存储高速缓存数据。
[0044] 一旦被找到,高速缓存数据单元及其对应的元数据就从非易失性存储器的第一区域重新加载到存储器高速缓存中(318)。先前存储的数据单元的未经修改的段被基于元数据和在高速缓存数据单元中接收到的主机数据段进行更新(320)。就这点而言,可以针对重新加载到存储器高速缓存中的数据单元重新启动先前被取消或暂停的读取-修改-写入过程,并且可以在读取-修改-写入期间使用接收到的主机数据段修改未经修改的段,如先前所述。先前存储的数据单元可以基于元数据216的地址映射220内的物理地址来定位,并且元数据内的位掩码可以促进识别先前存储的数据单元的哪些部分需要更新。
[0045] 在一些情况下,位掩码(或更新标志)可以指示先前存储的数据单元的全部部分已被更新。在这种情况下,控制器130可以放弃读写-修改过程并直接将重新加载的数据单元直接写入到非易失性存储器阵列150。在任何一种情况下,数据单元都可以被写入到在地址映射中识别的同一地址(在擦除先前存储的数据之后),或者被写入到新地址,然后更新地址映射。
[0046] 相应地,可以通过定位与更新标志相关联的全部数据来恢复在意外关闭之前存在的存储器高速缓存。然后,控制器130可以读取重新加载的单元的映射数据(例如,在它们被加载时或者在全部单元的加载完成之后),以将对应的原始或先前存储的、在意外关闭期间没有更新的数据单元定位在非易失性存储器中。控制器130可继续对高速缓存数据恢复正常的读取-修改-写入操作(就好像关闭没有发生一样),依次或根据需要更新存储在非易失性存储器阵列中的每个原始数据单元。在一些实施方式中,控制器130可循环通过重新加载到存储器高速缓存中的数据单元的每一个,并且在继续数据存储设备120的正常操作和/或关于其他传入的主机数据的其他读写操作之前更新对应的先前存储的数据单元的全部。数据存储设备120的映射表(以及,例如,日志条目)也可以基于重新加载的数据单元的元数据来恢复。
[0047] 示例过程300的许多上述特征以及相关特征和应用可以被实施为软件程序,其被指定为记录在计算机可读存储介质(也被称为计算机可读介质)上的指令集。当这些指令由一个或多个处理单元(例如,一个或多个处理器、处理器的核或其他处理单元)运行时,它们使(多个)处理单元执行在指令中指示的动作。计算机可读介质的示例包括但不限于CD-ROM、闪存驱动器、RAM芯片、硬盘驱动器、EPROM等。计算机可读介质不包括载波和通过无线或有线连接传递的电子信号。
[0048] 如图1进一步所描绘的,数据存储系统120还可以包括总线(标记为“数据”)。总线可以使用合适的接口标准,包括但不限于串行高级技术附件(SATA)、高级技术附件(ATA)、小型计算机系统接口(SCSI),PCI扩展(PCI-X)、光纤通道、串行附接的SCSI(SAS)、安全数字(SD)、嵌入式多媒体卡(EMMC)、通用闪存(UFS)和外设组件高速互连(PCIe)。
[0049] 主机设备110和数据存储系统120可以经由有线或无线连接彼此通信,并且相对于彼此可以本地或远程。根据一些方面,数据存储系统120可以包括引脚(或插座)以与主机设备110上的对应插座(或引脚)配对以建立电连接和物理连接。根据一个或多个其它方面,数据存储系统120包括无线收发器,以将主机设备110和数据存储系统120置于与彼此的无线通信中。
[0050] 非易失性存储器150的闪存器件表示用于存储数据的非易失性存储器器件。根据本公开的一方面,每个闪存器件可以包括例如NAND闪存。闪存可以具有标准接口规范。该标准确保来自多个制造商的芯片可以互换地使用(至少在很大程度上)。该接口可以进一步隐藏闪存的内部工作并仅返回内部检测到的数据的位值。
[0051] 在适当的情况下术语“软件”意味着包括可以被读入存储器中以供处理器处理的、驻留在只读存储器中的固件或存储在磁存储器中的应用。而且,在一些实施方式中,本主题公开的多个软件方面可以在保持本主题公开的不同软件方面的同时被实施为较大程序的子部分。在一些实施方式中,多个软件方面也可以被实施为单独的程序。最后,共同实施本文描述的软件方面的单独的程序的任何组合都在本主题公开的范围内。在一些实施方式中,软件程序在被安装以在一个或多个电子系统上操作时定义运行和执行软件程序的操作的一个或多个特定的机器实施方式。
[0052] 计算机程序(也被熟知为程序、软件、软件应用、脚本或代码)可以以任何形式的编程语言(包括编译语言或解释语言、声明性语言或程序性语言)来编写,并且可以以任何形式(包括作为独立程序或作为模块、组件、子例程、对象或适合在计算环境中使用的其他单元)来部署。计算机程序可以,但是不需要,对应于文件系统中的文件。程序可以存储在拥有其它程序或者数据(例如,存储在标记语言文档中的一个或多个脚本)的文件的一部分中,存储在专用于被讨论的程序的单一文件中,或者存储在多个协调的文件(例如,存储一个或多个模块、子程序、或者代码部分)中。计算机程序可以被部署为在一个计算机上运行,或者在位于一个场所的或者分布在多个场所之间并通过通信网络互连的多个计算机上运行。
[0053] 应该理解,本文描述的例示性框、模块、元件、组件、方法和算法可以被实施为电子硬件、计算机软件或两者的组合。为了例示硬件和软件之间的可交换性,上面已经对各种例示性框、模块、单元、组件、方法和算法围绕其功能进行了一般描述。至于这种功能是实施成硬件还是实施成软件,取决于特定的应用和对整个系统所施加的设计约束。熟练的技术人员可以针对每个特定应用以各种方式实施所述功能。各个组件和框可以不同地布置(例如,以不同的顺序排列,或以不同的方式分割),全部都不脱离本公开的范围。
[0054] 可以理解的是,所公开的过程中的步骤的具体顺序或层次被呈现为一些示例性方法的例示。可以理解的是,基于设计偏好和/或其他考虑,可以重新布置过程中的步骤的具体顺序或层次。例如,在一些实施方式中,可以同时执行步骤的一些。因此,所附方法权利要求以示样顺序呈现了各个步骤的要素,但并不意味着将其限于所呈现的特定顺序或层次。
[0055] 提供先前的描述是为了使本领域的任何技术人员能够实践本文描述的各个方面。先前的描述提供了本公开的各种示例,并且本公开不限于这些示例。对于本领域技术人员来说,对这些方面的各种修改都将是很清楚的,并且,本文所定义的通用原理也可以应用于其它方面。因此,权利要求不旨在被限制于本文所示的各个方面,而是要符合与语言声明相一致的全部范围,其中以单数形式对元件的引用并非旨在意味“一个且仅一个”(除非具体这样说明),而是“一个或多个”。除非具体说明,否则术语“一些”是指一个或多个。男性的代词(例如,他的)包括女性和中性(如她的和它的),并且反之亦然。标题和副标题(如果有的话)仅用于方便,并且不限制主题公开。
[0056] 谓词“被配置为”、“可被操作来”和“被编程为”并不意味着主题的任何特定的有形或无形修改,而是旨在可被互换地使用。例如,被配置为监测和控制操作或组件的处理器也可以意味着被编程为监测和控制各操作的处理器,或者可被操作来监测和控制各操作的处理器。同样,被配置为运行代码的处理器可以被解释为被编程为运行代码或可被操作来运行代码的处理器。
[0057] 短语“与...通信”和“耦接”是指经由在本文命名或未命名的一个或多个组件(例如,存储卡读取器)与...直接通信或与...间接通信。
[0058] 诸如“方面”的短语并不意味着这样的方面对于本公开是必要的,或者这样的方面应用于本公开的全部配置。与方面相关的公开可以应用于全部配置或一个或多个配置。方面可以提供一个或多个示例。诸如方面的短语可以指一个或多个方面,并且反之亦然。诸如“实施方式”的短语并不意味着这样的实施方式对于本公开是必要的,或者这样的实施方式应用于本公开的全部配置。与实施方式相关的公开可以应用于全部方面或一个或多个方面。实施方式可以提供一个或多个示例。诸如“实施方式”的短语可以指一个或多个实施方式,并且反之亦然。诸如“配置”的短语并不意味着这样的配置对于本公开是必要的,或者这样的配置应用于本公开的全部配置。与配置相关的公开可以应用于全部配置或一个或多个配置。配置可以提供一个或多个示例。诸如“配置”的短语可以指一个或多个配置,并且反之亦然。
[0059] 本文使用词语“示例性”来意味“用作示例或例示”。本文描述为“示例性”的任何方面或设计不一定必须被解释为相对于其他方面或设计是优选或有利的。