所公开的实施例总体上涉及存储器系统,并且具体地涉及对用于增强存储设备(例如,包括一个或多个闪存设备)的性能和持久性的解除映射命令的处理。
背景技术:
半导体存储器设备(包括闪存)通常利用存储器单元来将数据存储为电性值,如电荷或电压。闪存单元例如包括具有用于存储表示数据值的电荷的浮栅的单个晶体管。闪存是可以被电擦除和重新编程的非易失性数据存储设备。更一般地,与需要电力来维持存储信息的易失性存储器相反,即使断电时,非易失性存储器(例如,闪存以及使用各种技术中的任何技术实现的其他类型的非易失性存储器)仍然保持所存储的信息。
因为闪存仅可以被编程和擦除有限次数并且进一步地一些存储器命令需要在预定义的时间量内完成(例如,以满足鉴定要求),所以重要的是优化用于增强存储设备的性能和持久性的存储器管理过程(例如,命令处理)。
技术实现要素:
所附权利要求书的范围内的系统、方法和设备的各个实施例各自具有若干方面,其中这些方面中没有哪个单个方面单独地负责在此所描述的属性。不限制所附权利要求书的范围,在考虑本公开之后,并且具体地在考虑标题为“具体实施方式”的部分之后,将理解如何使用各个实施例的各个方面来使能够处理用于增强存储设备的性能和持久性的解除映射命令。一方面,根据确定解除映射命令的大小满足大小阈值而执行第一解除映射过程的一个或多个操作并且根据确定解除映射命令不满足所述大小阈值而执行第二解除映射过程的一个或多个操作,其中,所述第一解除映射过程和所述第二解除映射过程都不包括将映射表保存到存储设备的非易失存储器中。
附图说明
为了可以更详细地理解本公开,可参考各个实施例的特征以产生更具体的说明,所述实施例中的一些被展示在附图中。然而,附图仅展示了本公开的相关特征,并且因此不应被认为是限制性的,因为说明书可以允许其他有效的特征。
图1是框图,展示了根据一些实施例的数据存储系统的实施方式。
图2是框图,展示了根据一些实施例的管理模块的实施方式。
图3是根据一些实施例的逻辑地址空间并且更确切地逻辑块地址(lba)空间的框图。
图4是根据一些实施例的映射表和物理地址空间的框图。
图5a至图5c展示了根据一些实施例的管理存储系统的方法的流程图表示。
图6是框图,展示了根据一些实施例的将数据保存到存储设备中,并且更具体地将映射表、日志和写入缓存中存储在易失性存储器中的信息保存到非易失性存储器中。
图7展示了根据一些实施例的用于处理存储设备中的解除映射命令的方法的流程图表示。
根据惯例,附图中展示的各种特征不必按比例绘制。因此,为了清晰起见,不同特征的尺寸可以被任意放大或减小。此外,一些附图可能没有描绘给定系统、方法或设备的所有部件。最后,贯穿说明书和附图,相同的参考数字可以用来表示相似的特征。
具体实施方式
在此所描述的各实施例包括用于使能够对用于增强存储设备的性能和持久性的解除映射命令进行处理的系统、方法和/或设备。一些实施例包括系统、方法和/或设备,用于根据确定解除映射命令的大小满足(例如,大于或等于)大小阈值而执行第一解除映射过程的一个或多个操作并且根据确定解除映射命令不满足(例如,小于)所述大小阈值而执行第二解除映射过程的一个或多个操作,其中,所述第一解除映射过程和所述第二解除映射过程都不包括将映射表保存到存储设备的非易失存储器中。
(a1)更确切地,一些实施例包括一种管理存储系统的方法。在一些实施例中,所述方法包括:(1)在易失性存储器中维护写入缓存,以用于存储与来自主机的写入命令相对应的数据,其中,所述主机操作性地耦合至所述存储系统的存储设备,所述存储设备包括非易失性存储器;(2)在易失性存储器中维护映射表,所述映射表用于将逻辑地址空间中对所述主机可用的逻辑地址转换为在所述存储设备的物理地址空间中的物理地址;(3)在所述存储系统的所述存储设备处,接收来自所述主机的解除映射命令;(4)判定所述解除映射命令的大小是否满足大小阈值,其中,所述解除映射命令的所述大小对应于有待由所述解除映射命令解除映射的逻辑地址数量;(5)根据确定所述解除映射命令的所述大小满足所述大小阈值,执行第一解除映射过程的一个或多个操作,其中,所述第一解除映射过程放弃(即,不包括)将所述映射表保存至所述存储设备的所述非易失性存储器中;以及(6)根据确定所述解除映射命令的所述大小不满足所述大小阈值,执行第二解除映射过程的一个或多个操作,其中,所述第二解除映射过程放弃(即,不包括)将所述映射表保存至所述存储设备的所述非易失性存储器中并且放弃(即,不包括)将所述写入缓存冲洗(flush)到所述存储设备的所述非易失性存储器中。
(a2)在a1所述的方法的一些实施例中,所述第一解除映射过程的所述一个或多个操作包括:(1)确定所述写入缓存中包含脏数据的条目数量,并且判定所述写入缓存中包含脏数据的所述条目数量是否满足阈值;(2)根据确定所述写入缓存中包含脏数据的所述条目数量满足所述阈值,将所述写入缓存冲洗到所述存储设备的所述非易失性存储器中;(3)根据确定所述写入缓存中包含脏数据的所述条目数量不满足所述阈值,清除所述写入缓存中包含由所述解除映射命令解除映射的逻辑地址的脏数据的每个条目;(4)根据所述解除映射命令更新易失性存储器中的所述映射表;以及(5)向日志添加一个或多个条目,所述一个或多个条目对应于所述解除映射命令。
(a3)在a1至a2中任一项所述的方法的一些实施例中,所述第二解除映射过程的所述一个或多个操作包括:针对由所述解除映射命令指定的每个逻辑地址,根据确定所述逻辑地址被表示来自所述写入缓存的条目中,从所述写入缓存中清除所述条目。
(a2)在a1至a2中任一项所述的方法的一些实施例中,所述第二解除映射过程的所述一个或多个操作包括:(1)判定由所述解除映射命令指定的对应逻辑地址的数据是否被存储在所述写入缓存中;(2)根据确定所述对应逻辑地址的所述数据被存储在所述写入缓存中:(a)判定所述对应逻辑地址的所述数据是否在传输中,(b)根据确定所述对应逻辑地址的所述数据在传输中,等待相应的写入操作完成,以及(c)从所述写入缓存中清除存储有所述对应逻辑地址的所述数据的条目;(3)根据所述解除映射命令更新易失性存储器中的所述映射表;以及(4)向日志添加一个或多个条目,所述一个或多个条目对应于所述解除映射命令。
(a5)在a1至a4中任一项所述的方法的一些实施例中,所述第二解除映射过程允许对来自所述主机的其他命令与所述解除映射命令一起进行处理。
(a6)在a1至5中任一项所述的方法的一些实施例中,所述解除映射命令的响应时间对应于所述解除映射命令的所述大小。
(a7)在a1至a6中任一项所述的方法的一些实施例中,所述方法进一步包括:在与从所述主机接收到的解除映射命令无关的调度基础上,将所述映射表保存至所述存储设备的所述非易失性存储器中。
(a8)在a1至a7中任一项所述的方法的一些实施例中,所述日志包括针对对应解除映射命令的条目,所述条目包括标识根据所述对应解除映射命令而被解除映射的多个逻辑地址的信息。
(a9)在a1至a8中任一项所述的方法的一些实施例中,所述日志包括针对对应解除映射命令的条目,所述条目包括标识根据所述对应解除映射命令而被解除映射的逻辑地址范围的信息。
(a10)在a1至a9中任一项所述的方法的一些实施例中,所述存储设备包括一个或多个闪存设备。
(a11)另一方面,一种存储设备包括:非易失性存储器(例如,包括如闪存设备等一个或多个非易失性存储设备);写入缓存;以及存储控制器,所述存储控制器具有被配置成用于执行一个或多个程序中的指令的一个或多个处理器,其中,所述存储控制器被配置成用于执行在此所描述的a1至a10方法中的任何方法。
(a12)在a11所述的存储设备的一些实施例中,所述存储控制器包括:写入缓存模块,所述写入缓存模块用于维护所述写入缓存;映射模块,所述映射模块用于维护所述映射表;以及解除映射模块,所述解除映射模块判定所述解除映射命令的所述大小是否满足所述大小阈值,根据确定所述解除映射命令的所述大小满足所述大小阈值而执行所述第一解除映射过程,并且根据确定所述解除映射命令的所述大小不满足所述大小阈值而执行所述第二解除映射过程。
(a13)在又另一方面,以上所描述的a1至a10方法中的任何方法由存储设备执行,所述存储设备包括用于执行在此所描述的方法中的任何方法的装置。
(a14)在又另一方面,一种存储系统包括:(1)存储介质(例如,包括如闪存设备等一个或多个非易失性存储设备);(2)一个或多个处理器;以及(3)存储一个或多个程序的存储器(例如,所述存储系统中的非易失性存储器或易失性存储器),所述一个或多个程序当由所述一个或多个处理器执行时使所述存储系统执行或控制在此所描述的a1至a10方法中的任何方法的执行。
(a15)在又另一方面,一些实施例包括一种非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质存储有被配置成由存储设备的一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括用于执行在此所描述的方法中的任何方法的指令。
为了提供对附图中展示的示例实施例的透彻理解,在此描述了大量细节。然而,可以在没有许多特定细节的情况下实践一些实施例,并且权利要求书的范围仅由在权利要求中具体记载的那些特征和方面限制。此外,并未对已知的方法、部件和电路进行详细描述,以免不必要模糊在此所描述的实施例的相关方面。
图1是框图,展示了根据一些实施例的数据存储系统100中的存储设备120。尽管展示了一些示例特征,但是,为简洁起见并且以免不必要模糊在此所公开的示例实施例的相关方面,没有展示各种其他特征。为此,作为非限制性示例,存储设备120(有时也被称为信息存储设备、或数据存储设备、或存储器设备)包括存储控制器124、一个或多个非易失性存储器(nvm)控制器130(如闪存控制器)、以及非易失性存储器(例如,一个或多个nvm设备140、142,如一个或多个闪存设备),并且结合计算机系统110一起使用。在一些实施例中,存储设备120包括单个nvm设备,而在其他实施例中,存储设备120包括多个nvm设备。在一些实施例中,nvm设备140、142包括nand类型闪存或nor类型闪存。此外,在一些实施例中,nvm控制器130是固态驱动器(ssd)控制器。然而,根据各种各样的实施例的方面,可以包括其他类型的存储介质(例如,pcram、reram、stt-ram等)。在一些实施例中,闪存设备包括一个或多个闪存管芯、一个或多个闪存封装体、一个或多个闪存信道等。在一些实施例中,数据存储系统100可以包含多于一个的存储设备120。
计算机系统110通过数据连接101耦合至存储控制器124。然而,在一些实施例中,计算机系统110包括作为部件和/或子系统的存储控制器124或存储控制器124的一部分。例如,在一些实施例中,存储控制器124的部分或全部功能是由在计算机系统110上执行的软件实现的。计算机系统110可以是任何合适的计算机设备,如计算机、膝上型计算机、平板计算机、上网本、因特网信息站、个人数字助理、移动电话、智能电话、游戏设备、计算机服务器、或任何其他计算设备。计算机系统110有时被称为主机、主机系统、客户端或客户端系统。在一些实施例中,计算机系统110是服务器系统,如数据中心中的服务器系统。在一些实施例中,计算机系统110包括一个或多个处理器、一种或多种类型的存储器、显示器和/或其他用户接口部件,如键盘、触屏显示器、鼠标、轨迹板、数字相机和/或用于增加功能的任何数量的补充设备。在一些实施例中,计算机系统110不具有显示器和其他用户接口部件。
所述一个或多个nvm控制器130通过连接103与存储控制器124耦合。连接103有时被称为数据连接,但是通常传达除数据外的命令,并且可选地传达元数据、纠错信息和/或除了将要存储在nvm设备140、142中的数据值以及从nvm设备140、142中读取出的数据值之外的其他信息。然而,在一些实施例中,存储控制器124、所述一个或多个nvm控制器130以及nvm设备140、142包括在如其部件等相同设备(即,集成设备)中。此外,在一些实施例中,存储控制器124、所述一个或多个nvm控制器130以及nvm设备140、142嵌入在主机设备(例如,计算机系统110)中,如移动设备、平板计算机、其他计算机或计算机控制设备,并且在此所描述的方法至少部分地由嵌入的存储控制器执行。
在一些实施例中,存储设备120包括nvm设备140、142,如闪存设备(例如,nvm设备140-1至140-n、以及nvm设备142-1至142-k)和nvm控制器130(例如,nvm控制器130-1至130-m)。以另一种方式来看,存储设备120包括m个存储器通道,其中每个存储器通道具有nvm控制器130以及耦合至nvm控制器130的nvm设备140或142集合,其中,m是大于一的整数。然而,在一些实施例中,两个或更多个存储器通道共享nvm控制器130。在任一示例中,每个存储器通道具有其自己不同的nvm设备140或142集合在非限制性示例中,典型存储设备中的存储器通道数量为8、16或32。在另一个非限制性示例中,每存储器通道nvm设备140或142的数量通常为8、16、32或64。此外,在一些实施例中,nvm设备140/142的数量在不同存储器通道中有所不同。
在一些实施例中,nvm控制器130中的每个nvm控制器包括被配置成用于执行一个或多个程序中的指令(例如,在nvm控制器130中)的一个或多个处理单元(有时也被称为cpu或处理器或微处理器或微控制器)。在一些实施例中,所述一个或多个处理器由在nvm控制器130的功能之内(以及某些情况下之外)的一个或多个部件共享。nvm设备140、142通过连接耦合至nvm控制器130,所述连接典型地传达除数据外的命令,并且可选地传达元数据、纠错信息和/或除了将要存储在nvm设备140、142中的数据值以及从nvm设备140、142中读取出的数据值之外的其他信息。nvm设备140、142可以包括任意数量(即,一个或多个)的存储设备,包括但不限于,非易失性半导体存储设备,如(多个)闪存设备。
例如,(多个)闪存设备(例如,nvm设备140、142)可以被配置成用于适合于如云计算应用、数据库应用的企业存储设备、主存储设备和/或辅助存储设备,或者于缓存在辅助存储设备(如硬盘驱动器)中所存储(或将要存储)的数据。另外地或替代性地,(多个)闪存设备(例如,nvm设备140、142)还可以被配置成用于个人计算机、膝上型计算机和平板计算机的相对更小型应用,如个人闪存驱动器或硬盘替代。尽管闪存设备和闪存控制器在此被用作示例,但是,在一些实施例中,存储设备120包括其他(多个)非易失性存储器设备和相应的(多个)非易失性存储控制器。
在一些实施例中,nvm设备140、142被划分为多个可寻址且单独可选择块。在一些实施例中,单独可选块是闪存设备中的最小尺寸可擦除单元。换言之,每个块包含可同时擦除的最少数量的存储器单元。每个块通常被进一步划分为多个页和/或字线,其中,每一页或字线典型地是块中的最小单独可寻址(可读)部分的实例。在一些实施例中(例如,使用某些类型的闪存),然而,数据集的最小单独可寻址单元是作为页的子集的扇区。也就是说,一个块包括多页,每一页包含多个扇区,并且每个扇区是用于从闪存设备读取数据的最小数据单元。
如以上指出的,当非易失性半导体存储设备的数据存储密度总体增加时,增加的存储密度的缺点为所存储的数据更倾向于被错误地存储和/或读取。在一些实施例中,误差控制编码可以用于限制由电气波动、存储介质缺陷、操作状况、设备历史、读取写入电路等或这些以及各种其他因素的组合引入的不可校正的误差数量。
在一些实施例中,存储控制器124包括管理模块121-1、主机接口129、存储介质(i/o)接口128以及(多个)附加模块125。存储控制器124可以包括各种附加特征,为简洁起见并且以免模糊在此公开的示例实施例的相关特征,没有展示所述附加特征,并且所述特征的不同安排是可能的。
主机接口129通过数据连接101向计算机系统110提供接口。类似地,存储介质接口128提供用于通过连接103到达nvm控制器130的接口。在一些实施例中,存储介质接口128包括读取写入电路,所述读取写入电路包括能够将读取信号提供至nvm控制器130的电路(例如,针对nand类型闪存的读取阈值电压)。在一些实施例中,连接101和连接103被实现为通信介质,在所述通信介质上,使用如ddr3、scsi、sata、sas等协议传达命令和数据。在一些实施例中,存储控制器124包括被配置成用于执行一个或多个程序中的指令(例如,在存储控制器124中)的一个或多个处理单元(有时也被称为cpu或处理器或微处理器或微控制器)。在一些实施例中,所述一个或多个处理器由在存储控制器124的功能之内(以及某些情况下之外)的一个或多个部件共享。
在一些实施例中,管理模块121-1包括被配置成用于执行一个或多个程序中的指令(例如,在管理模块121-1中)的一个或多个处理单元(cpu,有时还被称为处理器或微处理器或微控制器)122。在一些实施例中,一个或多个cpu122由在存储控制器124的功能之内(以及某些情况下之外)的一个或多个部件共享。管理模块121-1耦合至主机接口129、(多个)附加模块125以及存储介质接口128,以便协调这些部件的操作。在一些实施例中,管理模块121-1的一个或多个模块在计算机系统110的管理模块121-2中实现。在一些实施例中,计算机系统110(未示出)的一个或多个处理器被配置成用于执行一个或多个程序中的指令(例如,在管理模块121-2中)。管理模块121-2耦合至存储设备120,以便管理存储设备120的操作。
(多个)附加模块125耦合至存储介质接口128、主机接口129以及管理模块121-1。举例来讲,(多个)附加模块125可以包括误差控制模块,用于限制在写入存储器和/或从存储器读取的过程中无意中引入数据中的不可校正的误差的数量。在一些实施例中,(多个)附加模块125由管理模块121-1的一个或多个cpu122在软件中执行,并且,在其他实施例中,(多个)附加模块125全部地或部分地使用特殊用途电路实现(例如,以执行编码和解码功能)。在一些实施例中,(多个)附加模块125全部地或部分地由在计算机系统110上执行的软件实现。
在一些实施例中,包括在(多个)附加模块125中的误差控制模块包括编码器和解码器。在一些实施例中,编码器通过应用误差控制码(ecc)来对数据进行编码以产生码字,所述码字随后被存储在nvm设备140、142中。当从nvm设备140、142中读取编码数据(例如,一个或多个码字)时,解码器将解码过程应用于编码数据以恢复所述数据并且在误差控制码的误差校正能力范围内校正所述恢复数据中的误差。本领域技术人员将理解的是,各种误差控制码具有不同的误差检测和校正能力,并且由于超出本公开范围的原因,选择特定的码用于各种应用。由此,本文不提供各种类型的误差控制码的详尽回顾。此外,本领域技术人员将认识到,每一类或每一族误差控制码可以具有特定于所述一类或一族误差控制码的编码和解码算法。另一方面,一些算法可以至少在一定程度上用于对多个不同类或族的误差控制码进行解码。由此,为了简洁起见,在此不提供对本领域技术人员而言通常可用且已知的各种类型的编码和解码算法的详尽描述。
在一些实施例中,在写入操作过程中,主机接口129从计算机系统110接收有待存储在nvm设备140、142中的数据。由主机接口129接收的数据可用于编码器(例如,在(多个)附加模块125中),所述编码器对所述数据进行编码以产生一个或多个码字。所述一个或多个码字可用于存储介质接口128,所述存储介质接口128以与所利用的存储介质的类型无关的方式将所述一个或多个码字传送至nvm设备140、142(例如,通过nvm控制器130)。
在一些实施例中,当计算机系统(主机)110(例如,经由数据连接101,或替代性地单独的控制线或总线)将一个或多个主机读取命令发送至从nvm设备140、142请求数据的存储控制器124时,发起读取操作。存储控制器124经由存储介质接口128将一个或多个读取访问命令发送至nvm设备140、142(例如,通过nvm控制器130),以根据由所述一个或多个主机读取命令指定的存储器位置(地址)获取原始读取数据。存储介质接口128将原始读取数据(例如,包括一个或多个码字)提供给解码器(例如,在(多个)附加模块125中)。如果解码成功,则解码数据被提供给主机接口129,其中,解码数据可用于计算机系统110。在一些实施例中,如果解码不成功,则存储控制器124可以采取多个补救动作或提供不能解决误差状况的指示。
如以上所解释的,存储介质(例如,nvm设备140、142)被划分为多个可寻址的且可单独选择的块并且每个块可选地(但典型地)被进一步划分为多个页和/或字线和/或扇区。当在块基础上执行存储介质的擦除时,在许多实施例中,存储介质的读取和编程是在块的更小子单元上执行的(例如,在页基础、字线基础或扇区基础上)。在一些实施例中,块的较小子单元由多个存储器单元(例如,单级单元或多级单元)组成。在一些实施例中,编程是在整页上执行的。在一些实施例中,多级单元(mlc)nand闪存通常每单元具有四个可能的状态,每单元产生两比特信息。进一步地,在一些实施例中,mlcnand具有两页类型:(1)下页(有时被称为快页),以及(2)上页(有时被称为慢页)。在一些实施例中,三级单元(tlc)nand闪存每单元具有八个可能的状态,每单元产生三比特信息。尽管本文的描述示例性地使用tlc、mlc和slc,本领域技术人员将理解的是,本文描述的实施例可以扩展至每单元具有多于八个可能状态的存储器单元,每单元产生多于三比特的信息。在一些实施例中,存储介质(即,tlc、mlc或slc和/或所选的数据冗余机制)的编码格式是当数据实际被写入存储介质中时所做的选择。
举例来讲,如果数据按页被写入存储介质,但所述存储介质以块为单位被擦除,则所述存储介质中的页可能包含无效数据(例如,过期数据),但那些页不可被覆写入,直到包含那些页的整个块被擦除。为了利用无效数据对页进行写入操作,所述块中具有无效数据的页(若有的话)被读取并被重写入成新的块,而旧的块被擦除(或被放入队列中以等待擦除)。这个过程被称作垃圾收集。在垃圾收集之后,新块包含具有无效数据的页并且可以具有空页,所述空页可用于新数据写入,并且旧块可被擦除以便可用于新数据写入。因为闪存仅可以被编程和擦除有限次数,所以用于挑选(多个)接下来的块来进行重写入和擦除的算法的效率对基于闪存的存储系统的寿命和可靠性具有显著影响。
写入放大是一种现象,其中,写入存储介质(例如,存储设备120中的nvm设备140、142)的实际物理数据量是由主机(例如,计算机系统110,有时被称为主机)写入介质的逻辑数据量的倍数。如以上所讨论的,当存储介质的块在其可以被重写入之前必须被擦除时,用于执行这些操作的垃圾收集过程一次或多次产生重写入数据。这个倍乘效应增加了在存储介质的寿命之上所要求的写入次数,其缩短了可以可靠操作的时间。用于计算存储系统的写入放大的公式由以下等式给出:
任何基于闪存的数据存储系统架构的目标之一是尽可能地减少写入放大,从而使得可用的持久性用于满足存储介质可靠性和保修规格。更高的系统持久性还导致更低的成本,因为存储系统可能需要更少的预留空间。通过减少写入放大,存储介质的持久性增加并且存储系统的整体成本降低。通常,垃圾收集是在具有最少数量的有效页的擦除块上执行的,以获得最佳的性能和最佳的写入放大。
闪存设备利用存储器单元来将数据存储为电性值,如电荷或电压。每个闪存单元通常包括单晶体管,所述单晶体管具有用于存储电荷的浮栅,所述浮栅修改晶体管的阈值电压(即,导通晶体管所需的电压)。电荷大小以及电荷所产生的相应阈值电压用于表示一个或多个数据值。在一些实施例中,在读取操作期间,读取阈值电压施加于晶体管的控制栅极并且所产生的感测电流或电压被映射为数据值。
在闪存单元的背景下,术语“单元电压”和“存储器单元电压”指存储单元的阈值电压,所述阈值电压是需要施加于存储器单元的晶体管的栅极以便由晶体管传导电流的最小电压。类似地,施加于闪存单元的读取阈值电压(有时也被称为读取信号和读取电压)是施加于闪存单元的栅极以判定存储器单元是否在所述栅极电压处传导电流的栅极电压。在一些实施例中,当闪存单元的晶体管在给定读取阈值电压处传导电流时,指示所述单元电压小于读取阈值电压,针对所述读取操作的原始数据值为“1”并且另外地所述原始数据值为“0”。
图2是框图,展示了根据一些实施例的管理模块121-1,如图1中所示。管理模块121-1通常包括用于执行存储在存储器206中的模块、程序和/或指令并且由此执行处理操作的一个或多个处理单元(有时被称为cpu或处理器)122-1、存储器206(有时被称为控制器存储器)、以及使这些部件互连的一根或多根通信总线208。所述一根或多根通信总线208可选地包括使系统部件互连并且控制系统部件之间的通信的电路(有时被称为芯片组)。管理模块121-1通过所述一根或多根通信总线208耦合至主机接口129、(多个)附加模块125以及存储介质i/o128。存储器206包括高速随机存取存储器,如dram、sram、ddrram或者其他随机存取固态存储设备;并且可包括非易失性存储器,如一个或多个磁盘存储设备、光盘存储设备、闪存设备、或者其他非易失性固态存储设备。存储器206可选地包括与(多个)cpu122-1远离地定位的一个或多个存储设备。存储器206或者替代性地在存储器206内的(多个)非易失性存储器设备包括非瞬态计算机可读存储介质。在一些实施例中,存储器206或存储器206的非瞬态计算机可读存储介质存储下述程序、模块和数据结构或其子集或超集:
·转换表212,所述转换表用于将逻辑地址映射到物理地址(例如,在一些实施例中,转换表212包括图4的映射表402);
·数据读取模块214,所述数据读取模块用于从存储介质(例如,图1的nvm设备140、142)中的一个或多个码字、页或块读取数据;
·数据写入模块216,所述数据写入模块用于将数据写入存储介质(例如,图1的nvm设备140、142)中的一个或多个码字、页或块;
·数据擦除模块218,所述数据擦除模块用于从存储介质(例如,图1的nvm设备140、142)中的一个或多个块中擦除数据;
·垃圾收集模块220,所述垃圾收集模块用于对存储介质(例如,图1的nvm设备140、142)中的一个或多个块进行垃圾收集;
·命令接收模块222,所述命令接收模块用于接收来自主机的多个命令(例如,解除映射命令和i/o命令,如写入请求和/或读取请求);
·日志模块224,所述日志模块用户维护和/或保存日志(例如,日志226,有时被称为重放fifo);
·日志226,所述日志包括与来自主机的写入命令和解除映射命令相对应的数据结构集合,并且包含用于在掉电情况下使转换表212能够从转换表212的部分过期副本开始被重建的充分信息;
·映射模块228,所述映射模块用于执行与映射表(例如,转换表212)相关的一个或多个操作,所述映射模块可选地包括:
ο维护模块230,所述维护模块用于维护易失性存储器中的映射表;
ο保存模块232,所述保存模块用于将映射表保存到存储设备的非易失性存储器中;以及
ο重建模块234,所述重建模块用于重建映射表;
·写入缓存模块236,所述写入缓存模块用于维护写入缓存(例如,管理将数据写入缓存238中或从写入缓存238中冲洗数据);
·写入缓存238,所述写入缓存包括用于存储与来自主机的写入命令相对应的数据的数据结构(例如,写入缓存条目)集合;以及
·解除映射模块240,所述解除映射模块用于确定解除映射命令的大小并执行解除映射过程的一个或多个操作。
上述要素中的每一个都可以被存储在前面所提到的存储器设备中的一个或多个中,并且与用于执行上述功能的指令集相对应。上述模块或程序(即,指令集)不需要被实现为独立的软件程序、过程或模块,从而在各个实施例中,可以组合或者以其他方式重新排列这些模块的各个子集。在一些实施例中,存储器206可保存上述模块和数据结构的子集。此外,存储器206可存储上面没有说明的另外的模块和数据结构。在一些实施例中,存储在存储器206中的程序、模块和数据结构或者存储器206的计算机可读存储介质提供用于实现以下所描述的一些方法的指令。在一些实施例中,这些模块中的部分和全部可以利用将部分或全部模块功能包含在内的专用硬件电路来实现。
尽管图2示出了根据一些实施例的管理模块121-1,但是图2与其意在作为在此所描述的实施例的结构示意相比,更意在作为可以在管理模块121-1中存在的各种特征的功能描述。实践中,并且如本领域技术人员认识到的,分开示出的程序、模块和数据结构可以组合,并且一些程序、模块和数据结构可以被分开。
图3是根据一些实施例的逻辑地址(lba)空间320(有时被称为(la)空间)的框图。在一些实施例中,逻辑地址是从主机(例如,图1的计算机系统110)的角度来看,项(例如,文件或其他数据)所驻留的地址。在一些实施例中,逻辑地址(例如,在lba空间320中)由于映射函数或地址转换器(例如,图2中包括转换表212的函数或模块,或者图4中的映射表402)的操作而不同于物理地址(例如,在物理空间318中)。在一些实施例中,逻辑地址被实现为逻辑块地址(lba),所述lba被映射至物理闪存地址(例如,物理页编号(ppn))。物理地址通常包括与多级存储器层次相对应的多个部分,如,组(bank)、块(block)和页(page)。
在一些实施例中,逻辑块地址(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的一部分被修整,并由此通过使用修整或解除映射操作被转换为未分配的逻辑地址空间。
图4是根据一些实施例的映射表402和物理地址空间410的框图。在一些实施例中,映射表402包含多个条目,其中,映射表402的条目用于将在主机(例如,图1的计算机系统110)的逻辑地址空间中的逻辑块地址(例如,逻辑块地址(lba))转换为存储设备(例如,图1的存储设备120)的非易失性存储器在物理地址空间(例如,物理地址空间410)中的物理地址。在一些实施例中,lba是可由主机访问的最小单元存储数据的地址(例如,512b或4096b)。在一些实施例中,lba是在逻辑地址空间中按数值顺序组织的整数序列。在一些实施例中,lba是从逻辑地址空间选择的但不必连续的整数。例如,在利用稀疏逻辑地址空间的实现方式中,可寻址空间的量由可以被已分配的逻辑地址数量极限控制,但是那些逻辑地址分布在比可以被分配(例如,至主机或者主机或客户端的集合)的逻辑地址的最大数量更大的地址空间之上。
在一些实施例中,映射表402存储在与存储设备相关联的存储器中(例如,在图2的存储器206中,作为转换表212的一部分)。在一些实施例中,映射表402用于在管理模块121-1(图2)中实现转换表212。在一些实施例中,物理地址是物理页编号(ppn),包括组编号、块编号和页编号。在图4中所示的示例中,lba0被映射至物理地址空间410的组1(例如,组420-1)、块3(例如,块421-3)、页37(页未在块421-3中示出)。图4示出物理地址空间410包括多个非易失性存储器块421、422、423、424。如上所述,并且如在块424-p的表示中所示,存储设备的物理地址空间中的每个非易失性存储器块通常包括多个页426,其中,每一页是块的最小单独可访问(例如,可读或可写入)部分的实例。尽管图4展示了逻辑地址至物理地址映射的一个示例,在其他实施例中,可以使用不同的映射。例如,在一些实施例中,逻辑地址条目中的每个逻辑地址条目与多个(例如,八个)逻辑地址相对应(例如,每逻辑地址条目8个lba)。在一些实施例中,映射表402不需要包含连续的lba地址并且可以以任何方式被组织以促进高效的查找操作,例如,哈希表、二叉树、内容可寻址存储器等。
如以上指出的,保存保持在易失性存储设备中的数据和关键任务元数据对于非易失性数据存储设备而言是重要的。闪存设备需要使数据跨电源周期受到保护,并且完整转换表(例如,图2的转换表212或图4的映射表402)被要求针对存储设备(例如,图1的存储设备120)为有效的。然而,针对企业产品,转换表通常极大(例如,几百mb)并且在由电池备用(例如,电容器)提供的时间帧中保存完整转换表是不可行的。在一些实施例中,在调度时间处保存转换表的增加部分,以便使在掉电情况下需要被保存的数据量最小。然而,期望几乎立即执行有效地擦除数据的一部分(例如,一个扇区、一个单元、整个存储设备等)的解除映射命令,例如,其响应时间不大于1毫秒。这个响应时间不允许保存完整转换表。进一步地,响应于每一条解除映射命令而保存完整转换表是耗费时间的、增加了写入放大、降低了持久性并且降低了性能。在此描述的各实施例包括用于使能够快速重放解除映射命令、通过使用日志(有时被称为重放fifo)来确保转换表的一致性、以及增强性能和持久性的系统、方法和/或设备。参照以下图6和图7的描述,更好地理解在此描述的各实施例提供的益处。
图6是框图,展示了根据一些实施例的将数据保存到存储设备中,并且更具体地将映射表、日志和写入缓存(例如,映射表402、日志226和写入缓存238)中存储在易失性存储器600中的信息保存到非易失性存储器(例如,nvm140、142)中。在一些实施例中,易失性存储器600包含一个或多个映射表(例如,映射表402)、一个或多个日志(例如,日志226)、以及一个或多个写入缓存(例如,写入缓存238)。在一些实施例中,易失性存储器600是存储器206(图2)或存储器206的一部分。
为了降低从主机接收到的命令(如,解除映射命令)的命令处理和执行时间,在一些实施例中,存储设备将信息存储在易失性存储器的各数据结构中。为了保存电源周期之间的信息,存储设备将所述信息的至少一部分保存在非易失性存储器中。例如,存储设备120将映射表402、日志226和写入缓存238中在易失性存储器600中的信息存储于nvm140、142中,其方式使得改进命令处理和执行时间。在一些实施例中,管理模块协调将来自那些数据结构的信息保存到非易失性存储器中。例如,在一些实施例中,管理模块121-1用于协调冲洗写入缓存238、复制日志226、并且将映射表402按调度保存至nvm140、142。更确切地,在一些实施例中,写入缓存模块236用于促进写入缓存冲洗,日志模块240用于促进复制日志226的一个或多个分段,并且映射模块228的保存模块232用于协调按调度保存映射表402的一个或多个分段。
在一些实施例中,存储在易失性存储器中的映射表包括两个或更多个不同的分段,有时被称为区域或部分。如在图6中所描绘的,映射表402包含映射表分段mts0至mtsm的序列。在一些实施例中,映射表内的每个mts包含多个条目。例如,映射表402的mts0包含指示lba0被映射到位于nvm140、142内的组1、组3和页37(缩写为“1-3-37”)处的ppn的条目。以上参照图4更详细地讨论了映射表的内容。
如以下参照图5a至图5c更详细讨论的,在与从主机接收到的解除映射命令无关的调度基础上(例如,与接收和/或处理解除映射命令无关),将映射表(例如,映射表402)的分段(例如,mts0)保存到非易失性存储器。在一些实施例中,映射表660的每个分段包含指示日志630内的位置的日志指针。例如,如图6中所描绘的,mts0的非易失性副本包含指向日志630内的条目630-1的日志指针640。典型地,当映射表的分段被复制到非易失性存储器时,相应的日志指针指向日志226中的最后一个条目(或日志630中相应位置)或者日志226的第一个未填充的条目(或日志630中相应位置)。换言之,在一些实施例中,每个映射表分段中的日志指针640偏离写入日志指针中的最后一个条目,以将所述映射表分段保存到存储设备的非易失性存储器中。此外,最老的日志指针640对应于最老的日志条目,所述日志条目有待当在易失性存储器600中重建映射表402时被处理。在一些实施例中,重建映射表402是在掉电事件之后发起的。
在一些实施例中,存储在易失性存储器中的日志包含一个或多个不同的分段,有时被称为区域或部分。在一些实施例中,日志的每个分段包含与来自主机的写入命令和解除映射命令相对应的一个或多个条目。例如,如图6中所描绘的,日志226包含日志分段0(“logs0”)和logs1,并且每个日志分段包含与来自主机的写入命令和解除映射命令相对应的多个条目(例如,logs0的条目612-0、612-1和612-2)。更确切地,在这个示例中,条目612-0对应于lba1的请求解除映射的解除映射命令(映射表条目602中用删除线文本所展示的)并且条目612-0包含指示lba1已经被解除映射的信息。
在一些实施例中,将日志从易失性存储器复制到非易失性存储器包括当所述日志满足预定义充满度标准时将日志的至少第一部分保存到非易失性存储器(例如,nvm设备140、142)中,并且结合掉电事件将日志的最终部分保存到非易失性存储器中。例如,在一些实施例中,当日志半满时,将日志的前一半保存到非易失存储器中,并且结合掉电事件,将日志的最终部分(例如,日志的尚未被保存的剩余部分)保存到非易失性存储器中。如图6中所描绘的,例如,当logs0满足预定义充满度标准时,存储设备将logs0复制到非易失性存储器中。在一些实施例中,在将logs0复制到非易失性器之后,存储设备通过将条目添加至logs1而继续将日志条目添加至日志226。根据确定已经发生掉电事件,将日志的最终分段保存至非易失性存储器(例如,日志226的logs1)。在一些实施例中,日志信息(写入操作和解除映射信息)按照轮询顺序被写入日志中:在填充logs0之后,将其复制到非易失性存储器,并且将新的日志信息写入logs1直到其在logs1被复制到非易失性存储器的点处被填充,并且新的日志信息被写入logs0。此外,在一些实施例中,保留每个日志分段630-i的非易失性副本,直到针对映射表660的分段的最老的日志指针640指向超出所述日志分段的末尾的日志位置。
在一些实施例中,存储在易失性存储器中的写入缓存(例如,写入缓存238)包含多个单独的条目(例如,缓存行),其中,所述单独的条目或缓存行(包括空缓存行)各自包括地址信息(例如,逻辑地址、物理地址或两者)以及与来自主机的写入命令相对应的写入数据。在一些实施例中,写入数据是尚未被保存到存储设备的非易失性存储器中的数据。例如,如图6中所描绘的,写入缓存238包含单独的条目610-0、610-1、610-2、…、610-w。为了减小解除映射命令所需的处理时间,将写入缓存冲洗到非易失性存储器是基于经优化的基础发生的(参见以下图7的讨论以了解附加细节)。当冲洗写入缓存时,单独条目或缓存行中的数据与其他持久地(即,永久性地)存储的主机数据一起被存储到非易失性存储器中。例如,如图6中所描绘的,在将写入缓存238冲洗到非易失性存储器中之后,与单独条目610-1和610-2相对应的数据与持久存储的主机数据620一起被存储,如数据610-1和610-2在此所示。在一些实施例中,解除映射命令处理背景中的写入缓存冲洗参照图7更好理解。
图7展示了根据一些实施例的用于处理存储系统内的解除映射命令的方法的流程图表示。至少在一些实施例中,解除映射命令处理方法700由存储设备(例如,图1中的存储设备120)或存储设备的一个或多个部件(例如,图1中的存储控制器124、nvm控制器130和/或nvm设备140、142)执行,其中,存储设备与主机系统(例如,图1中的计算机系统110)操作性地耦合。在一些实施例中,解除映射命令处理方法700由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1和图2中所示出的管理模块121-1的一个或多个处理单元(cpu)122-1)执行的指令进行控制。在一些实施例中,解除映射命令处理方法700由存储设备(例如,图1的数据存储设备120)或者存储系统的一个或多个部件(例如,图1的计算机系统110和/或存储设备120)执行。在一些实施例中,解除映射命令处理方法700的一些操作是在主机(例如,图1的计算机系统110)处执行的并且信息被传输至存储设备(例如,图1的存储设备120)。在一些实施例中,解除映射命令处理方法700至少部分地由存储在非瞬态计算机可读存储介质中并由主机(图1中未示出)的一个或多个处理器执行的指令控制。为便于解释,以下描述了由存储设备(例如,由图1的存储设备120的存储控制器124)执行的解除映射命令处理方法700。在一些实施例中,方法700的操作至少部分地由管理模块121-1(图2)的命令接收模块222、解除映射模块240、写入缓存模块236以及日志模块224执行。然而,本领域技术人员将认识的是,在其他实施例中,在解除映射命令处理方法700中描述的一个或多个操作是由主机(例如,图1的计算机系统110)执行的。
在一些实施例中,解除映射命令处理方法700在存储设备接收(702)解除映射命令时开始。解除映射命令的大小被确定。例如,在一些实施例中,解除映射命令的大小等于或对应于由解除映射命令解除映射的逻辑块地址数量。在一些实施例中,解除映射命令的大小等于或对应于由解除映射命令解除映射的逻辑地址空间部分的大小。根据解除映射命令的大小不满足(例如,小于)大小阈值(“小解除映射命令”)的第一确定(704-否),存储设备继续判定针对由解除映射命令指定的每个对应逻辑地址(706)的数据是否被存储在写入缓存中。如果对应逻辑地址(例如,lba)的数据被存储在写入缓存中,那么存储设备从写入缓存(例如,存储设备的易失性存储器中的写入缓存)中清除(708)那些存储有所述对应逻辑地址的数据的写入缓存条目。通常,针对对应逻辑块地址的数据如果被存储在写入缓存中则被存储在单个写入缓存条目中,并因此仅一个写入缓存条目被清除。
替代性地,在一些实施例中,如果针对对应逻辑地址(例如,lba)的数据被存储在写入缓存条目中,那么存储设备将写入缓存条目中的数据标记为错数据而不是清除写入缓存条目。在一些这种实施例中,写入缓存条目根据缓存条目逐出方案被清除或覆写入。在一些实施例中,存储设备继续根据解除映射命令来更新映射表(718)并向日志添加一个或多个条目(720)。
例如,参照图6,如果较小解除映射命令请求lba2的解除映射(604)并且写入缓存238包含具有针对lba2的数据的写入缓存条目610-0,那么存储设备清除写入缓存条目610-0(替代性地,在一些实施例中,存储设备将写入缓存条目610-0中的数据标记为无错)。在一些实施例中,存储设备还通过从位于nvm140、142内2-6-7处的ppn解除映射(由映射表条目604中的删除线文本所展示的)lba2而更新映射表402并且将指示lba2已经被解除映射的条目添加至日志226。因此,在已经执行操作708之后,在下次将写入缓存238冲洗到非易失性存储器(例如,nvm140、142)中时,预先存储在写入缓存238中针对lba2的数据不被保存到非易失性存储器中。
在一些实施例中,根据相反地指示解除映射命令的大小满足(例如,大于或等于)大小阈值(“大解除映射命令”)的第一确定(704-是),然后由存储设备进行第二判定(710)。根据指示写入缓存中具有脏数据的所述条目数量小于(710-否)具有脏数据的条目的阈值数量(在此有时被称为第二阈值或写入缓存使用阈值,以区分是否来自上述大小阈值)的第二确定(710),存储设备继续分析写入缓存内的每个写入缓存行(712)。针对每个对应的写入缓存行(712),存储设备判定对应的写入缓存行是否包含解除映射目标(即,对应的写入缓存行包含针对由解除映射命令指定的逻辑地址的数据)。根据对应的写入缓存行包含解除映射目标的第三确定,存储设备从写入缓存清除(714)缓存行(替代性地,在一些实施例中,存储设备将缓存行中的数据标记为无错)。此外,存储设备根据解除映射命令来更新映射表(718)并向日志添加一个或多个条目(720)。
例如,参照图6,如果大解除映射命令请求解除映射lba1-2(映射表条目602和604)并且写入缓存238包含具有针对lba2的数据的缓存条目610-0并且写入缓存中不再有其他条目包含解除映射目标,那么存储设备清除写入缓存条目610-0(或者,替代性地,将写入缓存条目610-0中的数据标记为无错)并不清除来自写入缓存238的任何其他条目。存储设备还通过从位于nvm140、142内5-2-43处的ppn解除映射lba1(例如,映射表条目602)以及从位于nvm140、142内2-6-7处的ppn解除映射lba2(例如,映射表条目604)来更新映射表402。在一些实施例中,存储设备还将指示lba1-2已经被解除映射的条目添加至日志226。因此,在已经执行操作714之后,在下次将写入缓存238冲洗到非易失性存储器(例如,nvm140、142)中时,预先存储在写入缓存238中针对lba1和lba2的数据不被保存到非易失性存储器中。
根据指示解除映射命令较大的第一确定(704-是)以及相反地指示写入缓存中具有脏数据的条目数量大于(710-是)具有脏数据的条目的阈值数量的第二确定(710),存储设备将写入缓存(716)冲洗到非易失性存储器,由此将写入缓存中的所有脏数据写入到非易失性存储器中。举例来讲,参照图6,如果较大的解除映射命令请求解除映射lba1-2并且写入缓存238包含的具有脏数据的条目的数量大于具有脏数据的条目的阈值数量,那么存储设备冲洗写入缓存238(例如,具有脏数据的所有写入缓存条目中的数据被存储在nvm140、142中作为持久存储的主机数据620)。存储设备还根据解除映射命令来更新映射表(718)并将一个或多个相应的条目添加至日志(720)。
根据以上讨论的实施例来处理解除映射命令导致显著的性能增益。确切地,针对较大解除映射命令和较小解除映射命令两者的处理时间被显著地减小,因为保存数据(例如,(多个)映射表、(多个)日志、以及(多个)写入缓存)是在经优化的基础上发生的并且不以低效率的方式(例如,在每个解除映射命令之后)发生。重要地,关于解除映射命令处理方法700(针对较小和较大解除映射命令两者)所讨论的处理步骤不包括将映射表保存到存储设备的非易失性存储器中。如以上所提及的,将映射表保存到非易失性存储器中耗费时间、增加了写入放大、降低了持久性、并且降低了性能。此外,在一些实施例中,关于解除映射命令处理方法700所讨论的处理步骤仅当解除映射命令较大且写入缓存中具有脏数据的条目数量满足阈值(例如,写入缓存中具有脏数据的条目数量大于具有脏数据的条目的阈值数量)时将写入缓存冲洗到非易失性存储器中。因此,在一些实施例中,针对小解除映射命令的解除映射命令处理时间减小至少十倍,并且针对大解除映射命令的解除映射命令处理时间减小至少四倍。
以下参照图5a至图5c呈现了关于解除映射命令处理方法700的每个步骤的附加细节以及关于针对解除映射命令的附加处理步骤的细节。
图5a至图5c展示了根据一些实施例的管理存储系统的方法500的流程图表示。至少在一些实施例中,方法500由存储设备(例如,图1中的存储设备120)或存储设备的一个或多个部件(例如,图1中的存储控制器124、nvm控制器130和/或nvm设备140、142)执行,其中,存储设备与主机系统(例如,图1中的计算机系统110)操作性地耦合。在一些实施例中,方法500由存储在非瞬态计算机可读存储介质中并由设备的一个或多个处理器(如图1和图2中所示出的管理模块121-1的一个或多个处理单元(cpu)122-1)执行的指令进行控制。在一些实施例中,方法500由存储设备(例如,图1的存储设备120)或者存储系统100的一个或多个部件(例如,图1的计算机系统110和/或存储设备120)执行。在一些实施例中,方法500的操作中的一些操作在主机(例如,图1中的计算机系统110)处执行,并且信息被传输至存储设备(例如,图1中的存储设备120)。在一些实施例中,方法500至少部分地由存储在非瞬态计算机可读存储介质中并由主机(图1中未示出)的一个或多个处理器执行的指令控制。为便于解释,以下描述了由存储设备(例如,图1中的存储设备120)执行的方法500。在一些实施例中,方法500的操作至少部分地由管理模块121-1(图2)的命令接收模块222、解除映射模块240、写入缓存模块236以及日志模块224执行。然而,本领域的技术人员将认识到,在其他实施例中,方法500中描述的操作中的一个或多个操作由主机(例如,图1中的计算机系统110)执行。
存储设备(例如,图1的存储设备120)维护(502)存储设备的易失性存储器中的写入缓存(例如,图2的写入缓存238),以用于存储与来自主机(例如,图1的计算机系统110)的写入命令相对应的数据。主机操作性地耦合至存储设备,并且存储设备包括除了易失性存储器中的写入缓存之外的非易失性存储器(例如,图1的nvm设备140、142)。在一些实施例中,写入缓存模块(例如,图2的写入缓存模块236)用于管理写入缓存。此外,在一些实施例中,写入缓存存储尚未被保存到存储设备的非易失性存储器中的数据,如以上关于图2所讨论的。
在一些实施例中,存储设备包括(504)一个或多个闪存设备。在一些实施例中,存储设备包括存储介质(例如,图1的nvm设备140、142),并且存储介质包括如闪存设备等一个或多个非易失性存储设备。在一些实施例中,存储介质是单个闪存设备,而在其他实施例中,存储介质包括多个闪存设备。例如,在一些实施例中,存储介质包括在并行存储器通道中组织的数十个或数百个闪存设备,如每个存储器通道16、32或64个闪存设备,以及8、16或32个并行存储器通道。在一些实施例中,非易失性存储介质(例如,图1的nvm设备140、142)包括nand类型闪存或nor类型闪存。在其他实施例中,存储介质包括一种或多种其他类型的非易失性存储设备。
存储设备维护(506)易失性存储器中的映射表(例如,图2的转换表212、和/或图4的映射表402),所述映射表用于将逻辑地址空间中对主机可用的逻辑地址转换为在存储设备的物理地址空间中的物理地址。在一些实施例中,维护模块(例如,图2的维护模块230或映射模块228)用于维护易失性存储器中的映射表,所述映射表用于将逻辑地址空间中对主机可用的逻辑地址转换为在存储设备的物理地址空间中的物理地址,如以上关于图2所描述的。
存储设备在存储系统的存储设备处接收(508)来自主机的解除映射命令。在一些实施例中,命令接收模块(例如,图2的命令接收模块222)用于在存储系统的存储设备处接收来自主机的解除映射命令,如以上关于图2所描述的。
存储设备判定(510)解除映射命令的大小是否满足(例如,大于或等于)大小阈值,其中,所述解除映射命令的大小对应于有待由解除映射命令解除映射的逻辑地址数量。在一些实施例中,解除映射模块(例如,图2的解除映射模块240)用于判定解除映射命令的大小是否满足大小阈值,其中,所述解除映射命令的大小对应于有待由解除映射命令解除映射的逻辑地址数量,如以上关于图2和图7所描述的。
在一些实施例中,解除映射命令的响应时间对应(512)于解除映射命令的大小。在一些实施例中,解除映射命令的响应时间与解除映射命令的大小成比例。例如,在一些实施例中,大小为x的第一解除映射命令的响应时间是第一响应时间并且大小为y的第二解除映射命令的响应时间是第二响应时间,其中,y大于x,其中,第二响应时间大于第一响应时间。
存储设备根据确定解除映射命令的大小满足大小阈值而执行(514)第一解除映射过程的一个或多个操作,其中,所述第一解除映射过程放弃(即,不包括)将映射表保存至存储设备的非易失性存储器中。如以上所提及的,将映射表保存到非易失性存储器中耗费时间、增加了写入放大、降低了持久性、并且降低了性能。在一些实施例中,解除映射模块(例如,图2的解除映射模块240)用于根据确定解除映射命令的大小满足大小阈值而执行第一解除映射过程的一个或多个操作。以上关于图2描述了解除映射模块。
在一些实施例中,所述第一解除映射过程的所述一个或多个操作包括(516):(1)确定所述写入缓存中包含脏数据的条目数量,并且判定所述写入缓存中包含脏数据的所述条目数量是否满足阈值(例如,超过所述阈值,在此有时被称为第二阈值以将其与上述大小阈值区分开);(2)根据确定所述写入缓存中包含脏数据的所述条目数量满足所述阈值,将所述写入缓存冲洗到所述存储设备的所述非易失性存储器中;(3)根据确定所述写入缓存中包含脏数据的所述条目数量不满足所述阈值,清除所述写入缓存中包含由所述解除映射命令解除映射的逻辑地址的数据的每个条目(例如,通过检查写入缓存的每个条目来判定其是否存储了由解除映射命令解除映射的逻辑地址的脏数据,并且然后若其包含这种数据则清除所述条目);(4)根据所述解除映射命令更新易失性存储器中的所述映射表;以及(5)向日志添加一个或多个条目(例如,图2的日志226,有时被称为重放fifo),所述一个或多个条目对应于所述解除映射命令。关于操作516(1),在一些实施例中,例如,判定写入缓存中是否有多于阈值数量个条目包含脏数据包括判定所述写入缓存是否多于一半被脏数据填充。关于操作516(3),在一些实施例中,存储设备针对写入缓存命中执行反向搜索(例如,检查具有脏数据的每个缓存行以判定其是否包含与由解除映射命令解除映射的逻辑地址相对应的条目)。关于操作516(5),在一些实施例中,日志与来自主机的写入命令和解除映射命令相对应。在一些实施例中,日志是fifo(先入先出)队列。在一些实施例中,存储设备维护存储设备的单个日志。在一些实施例中,存储设备维护针对存储设备的每个逻辑端口(有时被称为存储器通道)的不同的日志。在一些实施例中,写入缓存模块(例如,图2的写入缓存模块236)、解除映射模块(例如,图2的解除映射模块240)、映射模块(例如,图2的映射模块228)和/或日志模块(例如,图2的日志模块224)执行操作516或者操作516的一个或多个部分。
在一些实施例中,所述日志包括(518)针对对应解除映射命令的条目,所述条目包括标识根据所述对应解除映射命令而被解除映射的多个逻辑地址的信息。例如,在一些实施例中,如果对应的解除映射命令为解除映射lba8、lba13和lba63,则日志中针对对应解除映射命令的条目包括标识lba8、lba13和lba63的信息。在一些替代性实施例中,日志包括与解除映射命令相对应的多个条目,每个条目指定由解除映射命令解除映射的单独的lba或者lba范围。例如,针对解除映射lba8和lba100-130的解除映射命令,所述日志包括两个条目,一个条目针对lba8而另一个条目针对lba范围100-130。
在一些实施例中,所述日志包括(520)针对对应解除映射命令的条目,所述条目包括标识根据所述对应解除映射命令而被解除映射的逻辑地址范围的信息。例如,在一些实施例中,如果对应的解除映射命令为解除映射lba8至lba63,则日志中针对对应解除映射命令的条目包括标识从lba8至lba63的逻辑地址范围的信息。在一些实施例中,日志中的条目通过标识第一lba为解除映射以及最后lba为解除映射而标识逻辑地址范围。
存储设备根据确定解除映射命令的大小不满足(例如,小于)大小阈值而执行(522)第二解除映射过程的一个或多个操作,其中,所述第二解除映射过程放弃(即,不包括)将映射表保存至存储设备的非易失性存储器中并且不包括将写入缓存冲洗到存储设备的非易失性存储器中。如以上所提及的,将映射表保存到非易失性存储器中耗费时间、增加了写入放大、降低了持久性、并且降低了性能。进一步地,将写入缓存冲洗到非易失性存储器降低了非易失性存储器的持久性并且在一些情况中使得打开的块(即,尚未填满)关闭,由此减小了预留空间并增加了写入放大。在一些实施例中,解除映射模块(例如,图2的解除映射模块240)用于根据确定解除映射命令的大小不满足大小阈值而执行第二解除映射过程的一个或多个操作,其中,所述第二解除映射过程放弃(即,不包括)将映射表保存至存储设备的非易失性存储器中并且放弃(即,不包括)将写入缓存冲洗到存储设备的非易失性存储器中,如以上关于图2所述。
在一些实施例中,第二解除映射过程的所述一个或多个操作包括(524):针对由解除映射命令指定的每个逻辑地址,根据确定写入缓存具有与逻辑地址相对应的脏数据的条目而从所述写入缓存中清除所述条目。换言之,根据确定写入缓存存储有逻辑地址的脏数据,第二解除映射过程从写入缓存中清除存储有所述逻辑地址的脏数据的条目。在一些实施例中,从写入缓存中清除条目包括清除错标志位并释放写入缓存的相应缓存行。
在一些实施例中,所述第二解除映射过程的所述一个或多个操作包括(526):(1)判定由解除映射命令指定的对应逻辑地址是否被表示在来自写入缓存的条目中;(2)根据确定所述对应逻辑地址的所述脏数据被存储在所述写入缓存中:(a)判定所述对应逻辑地址的所述数据是否在传输中,(b)根据确定所述对应逻辑地址的所述数据在传输中,等待相应的写入操作完成,以及(c)从所述写入缓存中清除存储有所述对应逻辑地址的所述数据的条目;(3)根据所述解除映射命令更新易失性存储器中的所述映射表;以及(4)向日志添加一个或多个条目,所述一个或多个条目对应于所述解除映射命令。关于操作526(2)(c),在一些实施例中,从写入缓存中清除条目包括清除错标志位并释放写入缓存的相应缓存行。关于操作526(4),在一些实施例中,日志与来自主机的写入命令和解除映射命令相对应。在一些实施例中,日志是fifo(先入先出)队列。在一些实施例中,存储设备维护存储设备的单个日志。在一些实施例中,存储设备维护针对存储设备的每个逻辑端口的不同的日志。在一些实施例中,写入缓存模块(例如,图2的写入缓存模块236)、解除映射模块(例如,图2的解除映射模块240)、映射模块(例如,图2的映射模块228)和/或日志模块(例如,图2的日志模块224)执行操作526或者操作526的一个或多个部分。
在一些实施例中,所述第二解除映射过程允许(528)对来自所述主机的其他命令与所述解除映射命令一起进行处理。例如,在一些实施例中,在第二解除映射过程期间将来自主机的读取命令和/或写入命令与解除映射命令一起进行处理。在一些实施例中,所述第二解除映射过程允许对来自所述主机的其他命令与所述解除映射命令一起进行处理,同时维护来自主机的命令的严格排序。
在一些实施例中,在与从主机接收到的解除映射命令无关的调度基础上(例如,与接收和/或处理解除映射命令无关),存储设备将映射表保存(530)到存储设备的非易失性存储器(例如,图1的nvm设备140、142)中。例如,在一些实施例中,存储设备在周期性基础上保存映射表。例如,按轮询顺序以每单位时间(例如,一分钟、五分钟等)一个分段的速率将映射表的分段复制到非易失性存储器中,直到已经复制了整个映射表,并且然后用映射表的第一分段进行恢复。在一些实施例中,存储设备在非周期性的调度基础上(例如,在1:00am、在3:30am以及在6:00am)保存映射表。在一些实施例中,保存模块(例如,图2的保存模块232)用于在与从主机接收到的解除映射命令无关的调度基础上,将映射表保存至存储设备的非易失性存储器中,如以上关于图2所述。
在一些实施例中,保存映射表包括在不同的调度时间处将映射表的多个不同部分保存到非易失性存储器中。在一些实施例中,存储设备在周期性基础上(例如,每小时等)存储映射表的一部分(例如,10mb)。在一些实施例中,存储设备在非周期性调度基础上(例如,在1:00am、在3:30am以及在6:00am)存储映射表的一部分。在一些实施例中,存储设备在第一时间处保存映射表的第一部分、在第二时间处保存映射表的第二部分、在第三时间处保存映射表的第三部分等。
将理解的是,尽管此处可以使用术语“第一”、“第二”等来描述各个元件,但是这些元件不应被这些术语限制。这些术语仅用于将一个元件与另一个元件相区分。例如,在不改变描述的含义的情况下,第一区域可以被称为第二区域,并且类似地,第二区域可以被称为第一区域,只要一致地重新命名“第一区域”的所有出现并且一致地重新命名“第二区域”的所有出现即可。第一区域和第二区域都是区域,不过它们不是同一区域。
此处所使用的术语仅出于描述特定实施例的目的,而不旨在于限制权利要求书。如在对实施例和所附权利要求书的描述中所使用的,除非上下文另有明示,否则单数形式“一个(a)”、“一个(an)”和“所述(the)”旨在同样包括复数形式。还将理解的是,如本文使用的术语“和/或”指代并且包括相关联的列举项的一个或多个项的任何和所有可能组合。将进一步理解的是,当在本说明书中使用术语“包括(comprises)”和/或“包括(comprising)”时,其指定陈述的特征、整数、步骤、操作、元件和/或部件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、部件和/或它们的组的存在或添加。
如在此所使用的,短语“a、b和c中的至少一者”将被解释为需要所列项目中的一个或多个项目,并且此短语关于单独a的单个实例、单独b的单个实例、或单独c的单个实例,同时还包括如“a中的一者或多者以及b中的一者或多者而没有c中的任何一者”等所列项目的组合。
如在此所使用的,根据上下文,术语“如果”可以被解释为指“当…时”或者“在…时”或者“响应于确定”或者“根据确定“或者“响应于检测到”所述先决条件为真。类似地,根据上下文,短语“如果确定”或“如果”或“当时”可以被解释为指“在确定时”或“响应于确定”或“根据确定”或“在检测到时”或“响应于检测到”所述先决条件为真。
出于解释的目的,已经参考特定实施例描述了前述描述。然而,以上的说明性讨论并不旨在是详尽的或旨在将权利要求书限制成所公开的精确形式。鉴于以上教导,许多修改和变化都是可能的。选择并描述了实施例,以便最好地解释操作原理和实际应用,由此使能本领域的技术人员。