用于管理缓存接纳的系统和方法

文档序号:6498270阅读:219来源:国知局
用于管理缓存接纳的系统和方法
【专利摘要】缓存层利用存储层(例如,虚拟存储层)的逻辑地址空间和存储元数据缓存后备存储器的数据。所述缓存层保持访问元数据,以跟踪所述逻辑地址空间中的逻辑标识符的数据特性,所述跟踪包括与不在所述缓存中的数据有关的访问。所述访问元数据和所述存储层保持的存储元数据分开并且不同。所述缓存层利用所述访问元数据确定是否接纳数据进入缓存。当数据满足缓存接纳标准时,可以接纳所述数据进入所述缓存,所述接纳标准可以包括访问阈值和/或序列度量。访问元数据的按时间排序的历史记录可用于识别后备存储器的所述逻辑地址空间中的重要的/有用的块,这对缓存器来说是有利的。
【专利说明】用于管理缓存接纳的系统和方法

【技术领域】
[0001] 本发明涉及数据存储,并且更具体地,涉及利用访问元数据管理缓存接纳。

【背景技术】
[0002] 缓存装置可用于改进计算系统的输入/输出性能。缓存装置可以包括高性能存储 装置,例如,易失性存储器、非易失性存储器(例如,闪存)等。通过选择性地接纳经常访问 的数据,能够最有效地利用缓存装置。通过接纳不经常访问的数据,缓存能够"中毒"。这种 不经常访问的数据可能占用缓存的有限容量而将更经常访问的数据排除在外,这可能消除 缓存的性能优势。因此,需要一种用于管理缓存接纳的系统和方法,以通过基于一个或者多 个缓存接纳标准选择性地接纳数据进入缓存来防止缓存中毒。

【专利附图】

【附图说明】
[0003] 为了更容易地理解本发明的优点,将通过参考附图中示出的特定实施例,对以上 简要描述的本发明进行更具体的描述。需要理解的是,这些附图只描述了本发明的典型实 施例,因此并不认为其限制本发明的范围,通过使用附图,将用附加的特征和细节描述和解 释本发明,其中:
[0004] 图1是包括非易失性存储装置的系统的框图;
[0005] 图2是非易失性存储装置的一个实施例的框图;
[0006] 图3是包括写入数据流水线和读取数据流水线的存储控制器的一个实施例的框 图;
[0007] 图4是包括虚拟存储层的系统的一个实施例的框图;
[0008] 图5描述了正向索引的一个实施例;
[0009] 图6描述了反向索引的一个实施例;
[0010] 图7描述了非易失性存储装置的物理存储空间内的附加点的一个实施例;
[0011] 图8描述了顺序的、基于日志的格式的一个例子;
[0012] 图9A描述了缓存访问元数据的访问数据结构一个例子;
[0013] 图9B描述了一组有序的缓存访问元数据的访问数据结构一个例子;
[0014] 图10A描述了逻辑标识符和访问元数据之间的基于哈希的示例性映射;
[0015] 图10B描述了逻辑标识符和访问元数据之间的基于范围的示例性映射;
[0016] 图10C描述了逻辑标识符和访问元数据之间的示例性混合映射;
[0017] 图11是管理缓存接纳的方法的一个实施例的流程图;
[0018] 图12是管理缓存接纳的方法的另一个实施例的流程图;
[0019] 图13描述了用于确定序列度量的数据访问的有序序列的一个例子;
[0020] 图14是使用序列度量管理缓存接纳的方法的一个实施例的流程图;
[0021] 图15A是描述动态接纳标准的一个例子的曲线图;
[0022] 图15B是描述动态接纳标准的另一个例子的曲线图;
[0023] 图15C是描述包括低价值接纳标准的动态接纳标准的另一个例子的曲线图;
[0024] 图16是使用访问度量和序列度量管理缓存接纳的方法的一个实施例的流程图。

【具体实施方式】
[0025] 图1描述了包括非易失性存储装置102的系统100的一个实施例。在描述的实施 例中,系统100包括主机计算系统114、吞吐量管理设备122和存储装置102。主计算系统 114可以是计算机,例如,服务器、笔记本电脑、台式机、移动设备或者本领域公知的其他计 算设备。主机计算系统114通常包括诸如存储器、处理器、总线和本领域公知的其他部件的 部件。
[0026] 主机计算系统114对存储装置102中的数据进行存储,并通过通信连接与存储装 置102进行数据通信。存储装置102可以位于主机计算系统114的内部,也可以位于主机 计算系统114的外部。通信连接可以是总线、网络或者允许在主机计算系统114和存储装 置102之间传输数据的其他连接方式。在一个实施例中,存储装置102通过PCI连接(例 如,PCI eXpresS("PCI-e"))连接到主机计算系统114。存储装置102可以是插入到主机 计算系统114上的PCI-e接口的卡。
[0027] 描述的实施例中的存储装置102执行数据存储操作,例如,读取、写入、擦除等。在 某些实施例中,存储装置102的电源连接和通信连接是主机计算系统114和存储装置102 之间的同一个物理连接的一部分。例如,存储装置102可以通过下述方式接入到电源:PCI、 PCI-e、串行高级技术附件("串行ΑΤΑ"或者"SATA")、并行ATA( "PATA")、小型计算机系 统接口( "SCSI")、IEEE 1394( "火线(FireWire)")、光纤信道、通用串行总线("USB")、 PCIe-AS或者与主机计算系统114的其他连接。
[0028] 存储装置102为主机计算系统114提供非易失性存储。图1示出的存储装置102 为包括存储控制器104、写入数据流水线106、读取数据流水线108和非易失性的非易失性 存储介质110的非易失性的非易失性存储装置102。存储装置102可以包括附加部件,为了 提供存储装置102的简单视图而没有示出所述附加部件。
[0029] 非易失性存储介质110对数据进行存储以使得即使当没有对存储装置102供电时 仍然预留数据。在某些实施例中,非易失性存储介质110包括固态存储介质,例如,闪存、纳 米随机存取存储器("NRAM")、磁阻 RAM( "MRAM")、动态 RAM( "DRAM")、相变 RAM( "PRAM")、 赛道存储器、忆阻存储器、基于纳米线的存储器、基于硅-氧化物的亚10纳米工艺存储 器、石墨烯存储器、硅-氧化物-氮化物-氧化物-硅("S0N0S")、电阻随机存取存储器 ("RRAM")、可编程金属化单元("PMC")、导电桥接RAM( "CBRAM")等。同时,在描述的实 施例中,存储装置102包括非易失性存储介质110,在其他实施例中,存储装置102可以包 括磁介质,例如,硬盘、磁带等,存储介质102还可以包括光学介质或者其他非易失性数据 存储介质。存储装置102还可以包括对非易失性存储介质110中的数据的存储和检索进 行协调的存储控制器104。存储控制器104可以使用一个或者多个索引定位和检索数据, 并对存储在存储装置102中的数据执行其他操作。例如,存储控制器104可以包括清理器 (gro_er),其用于执行数据清理操作,例如,垃圾收集。
[0030] 如所示出的,在某些实施例中,存储装置102实施了写入数据流水线106和读取数 据流水线108,下面将对该例子进行更加详细地描述。当将数据从主机计算系统114传输到 非易失性存储介质110时,写入数据流水线106可以对数据执行特定的操作。这些数据可 以包括,例如错误校正码(ECC)的生成、加密、压缩或者其他操作。读取数据流水线108可 以对正从非易失性存储介质110读出并发送到主机计算系统114的数据执行类似的和潜在 的逆操作。
[0031] 在一个实施例中,主机计算系统114除了存储装置102之外还包括一个或者多个 其他部件,例如,附加存储装置、图形处理器、网卡等。鉴于本公开,本领域技术人员将会理 解不同类型的部件可以包括在主机计算系统114中。所述部件可以位于主机计算系统114 的内部或者外部。在一个实施例中,一些所述部件可以是连接到主机计算系统114并通过 主机计算系统114接收功率的PCI或者PCI-e卡。
[0032] 在某些实施例中,驱动器118或者可选的存储接口 116是应用程序接口("API"), 并且用于将命令和其他数据转换成适于发送到存储控制器104的格式。在另一个实施例 中,驱动器118包括存储控制器104的一个或者多个功能。例如,驱动器118可以包括下 面描述的全部或者部分模块,并且可以包括用于存储装置106的一个或者多个索引或者映 射。包含存储系统102的驱动器118、一个或者多个存储控制器104和一个或者多个存储装 置106具有连接到文件系统/文件服务器的存储接口 116,并且文件系统/文件服务器中的 传统配置有利地推入(即,卸载)到存储系统102中。
[0033] 如在本申请中使用的逻辑标识符是不同于存储数据单元的数据的物理地址的数 据单元的标识符。如在本申请中使用的数据单元是逻辑地分组到一起的任意一组数据。数 据单元可以是文件、对象、便宜/独立的磁盘/驱动器数据带的冗余阵列("RAID")的数 据段、或者用于数据存储中的其他数据组。数据单元可以是可执行的代码、数据、元数据、目 录、索引、可以存储到存储装置中的任何其他类型的数据、或者它们的组合。可以通过名字、 逻辑地址、物理地址、地址范围或者用于标识数据单元的其他常规的标识来标识数据单元。 逻辑标识符包括数据单元标识符(例如,文件名)、对象标识符、索引节点、通用唯一标识符 ("UUID")、全局唯一标识符("⑶ID")、或者其他数据单元标签,并且还可以包括逻辑块地 址("LBA")、柱面/磁头/扇区("CHS")、或者其他低级别逻辑标识符。逻辑标识符一般 包括可以映射到物理位置的任何逻辑标签。
[0034] 在某些实施例中,存储装置106将数据以顺序的、基于日志的格式存储到非易失 存储介质110中。例如,当修改数据单元时,从一个物理存储位置读出该数据单元的数据, 修改所述数据,并随后将其写入到不同的物理存储位置。将数据写入到数据存储装置106 的顺序和次序可以包括在非易失性存储装置102上执行的存储操作的次序的事件日志。通 过遍历事件日志(和/或重放存储操作的次序),可以构建或者重建存储元数据,例如,正向 索引。
[0035] 在典型的随机存取装置中,逻辑标识符几乎与随机存取装置的物理地址一对一的 对应。典型随机存取装置中的这种一对一的映射(不包括为坏块映射预留的随机存取装置 上的少量的物理地址)还与下述关系相关,所述关系为与逻辑标识符相关的存储容量和与 物理地址相关的物理容量之间的接近于一对一的关系。例如,如果逻辑标识符是逻辑块地 址("LBA"),则与LBA相关的每个逻辑块都具有固定的容量。随机存储装置上的对应的物 理块通常与逻辑块的容量相同。这使得典型的文件服务器114/文件系统能够通过管理逻 辑标识符(例如,LBA)管理随机存取装置上的物理容量。这种LBA到PBA映射的连续性一 般依赖于文件系统,并且文件系统利用该连续性对存储在数据存储装置上的数据进行碎片 整理。类似地,某些系统可以使用该连续性来定位特定物理磁道上的数据以改进性能,如被 称作磁盘"短行程(short stroking)"的技术的情况。高度可预测的LBA到PBA的映射在 某些应用中对于通过直接管理逻辑地址空间来间接管理物理存储空间中的数据存储来说 是重要的。
[0036] 然而,存储系统102可以是日志结构的文件系统,这样就没有用于确定LBA到PBA 的映射的"固定的"关系或者算法,或者在另一个实施例中,存储系统102可以是随机存取, 但是可以由多于一个的客户端110或者文件服务器114/文件系统访问该存储系统102,以 使得分配给每个客户端110或者文件服务器114/文件系统的逻辑标识符表示的存储容量 远大于典型系统的逻辑到物理标识符的一对一的关系。存储系统102还可以是精简配置 的,以使得一个或者多个客户端110中的每一个具有远大于存储系统102中的存储装置106 的存储容量的分配逻辑地址范围。在系统100中,存储系统102管理并分配逻辑标识符,以 使得逻辑标识符和物理标识符之间没有预先定义的一对一或者接近于一对一的关系。
[0037] 因为与典型的存储系统相比,系统100允许对存储容量进行更加有效的管理,所 以系统100是有利的。例如,对于可以由多个客户端110访问的典型的随机存取装置来说, 如果给每个客户端都分配特定容量的存储空间,那么即使占用的存储空间的实际容量非常 少,存储空间通常也会存在并且不会再分配该存储空间。因为系统100降低了连接到存储 装置106的标准精简配置系统的复杂度,所以系统100还是有利的。标准精简配置系统具有 包括在空间逻辑地址空间中的逻辑标识符和物理存储位置之间的逻辑到逻辑的映射的精 简配置层。因为消除了映射的多个层并且在最低层进行了精简配置(逻辑到物理的映射), 所以系统100更加有效。
[0038] 图2是示出根据本发明的非易失性存储装置102中的包括写入数据流水线106和 读取数据流水线108的非易失性存储装置控制器202的一个实施例200的框图。非易失性 存储控制器202可以包括多个存储控制器0-N104a-n,每一个控制非易失性存储介质110。 在描述的实施例中,示出了两个非易失性控制器:非易失性控制器0104a和存储控制器N 104η,并且每个控制器控制各自的非易失性存储介质110a-n。在描述的实施例中,存储控 制器0104a控制数据信道,以使得相连的非易失性存储介质110a存储数据。存储控制器N 104η控制与存储的数据相关的索引元数据信道,并且相关的非易失性存储介质110η存储 索引元数据。在可替换的实施例中,非易失性存储装置控制器202包括单个非易失性控制 器104a和单个非易失性存储介质110a。在另一个实施例中,具有多个存储控制器104a-n 和相关的非易失性存储介质ll〇a-n。在一个实施例中,连接到它们的相关的非易失性存储 介质110a-110n-l的一个或者多个非易失性控制器104a-104n-l控制数据,而连接到它的 相关的非易失性存储介质ll〇n的至少一个存储控制器104η控制索引元数据。
[0039] 在一个实施例中,至少一个非易失性控制器104是现场可编程门阵列("FPGA"), 并且控制器的功能被编程到FPGA中。在特定的实施例中,所述FPGA是Xilinx? FPGA。在 另一个实施例中,存储控制器104包括专门设计为存储控制器104的部件,例如,专用集成 电路("ASIC")或者自定义逻辑方案。每个存储控制器104通常包括写入数据流水线106 和读取数据流水线108,将参考图3对其做进一步的描述。在另一个实施例中,至少一个存 储控制器由组合FPGA、ASIC和自定义逻辑部件构成。
[0040] 非易失性存储介质110是设置在存储体(bank) 214中的非易失性存储元件阵列 216、218、220,并且通过双向存储输入/输出("1/0")总线210并行地访问所述存储元件 阵列。在一个实施例中,存储I/O总线210能够在任何时间进行单向通信。例如,当数据正 写入到非易失性存储介质110时,就不能从该非易失性存储介质110读取数据。在另一个 实施例中,数据可以同时在两个方向流动。然而,如本文所使用的与数据总线相关的双向, 其指的是数据通路,该数据通路在某个时刻仅在一个方向上可以具有数据流,但是当双向 数据总线上的一个方向中的数据流停止时,数据可以在该双向数据总线上的相反方向中流 动。
[0041] 非易失性存储元件(例如,SSS 0.0216a)通常被配置为电路板上的芯片(一个或 者多个裸芯片的封装)或者裸芯片。如所描述的,即使这几个元件一起封装到芯片封装、堆 叠芯片封装或者某些其他封装元件,非易失性存储元件(例如,216a)仍然独立操作或者半 独立于其他非易失性存储元件(例如,218a)。如所描述的,将一行非易失性存储元件216a、 216b、216m指定为存储体214。如所描述的,可以有"η"个存储体214a-n,并且在非易失性 存储介质110中的η X m个非易失性存储元件阵列216、218、220中每个存储体有"m"个非 易失性存储元件216a-m、218a-m、220a-m。当然,不同的实施例包括的η和m值可以不同。 在一个实施例中,非易失性存储介质ll〇a的每个存储体214包括20个非易失性存储元件 216a-216m,并且具有8个存储体214。在一个实施例中,非易失性存储介质110a的每个存 储体214包括24个非易失性存储元件216a-216m,并且具有8个存储体214。除了 η X m 个非易失性存储元件阵列216a-216m、218a-218m、220a-220m之外,还可以对一个或者多个 附加列(P)进行寻址,并且这些附加列与一个或者多个行的其他非易失性存储元件216a、 216b、216m并行操作。在一个实施例中,增加的P列存储跨越特定存储体的m个存储元件的 ECC块(S卩,ECC代码字)部分的奇偶校验数据。在一个实施例中,每个非易失性存储元件 216、218、220由单层单元("SLC")装置组成。在另一个实施例中,每个非易失性存储元件 21 6、218、22〇由多层单元("MLC")组成。
[0042] 在一个实施例中,将共享存储I/O总线210a上的公用线211的非易失性存储元件 (例如,216b、218b、220b)封装到一起。在一个实施例中,非易失性存储元件216、218、220 在每个封装中可以具有一个或多个裸芯片,其中,一个或者多个封装垂直堆叠,并且可以独 立地访问每个裸芯片。在另一个实施例中,非易失性存储元件(例如,SSS 0.0216a)在每 个裸芯片中可以具有一个或者多个垂直裸芯片,并且在每个封装可以具有一个或者多个裸 芯片,其中,一个或者多个封装垂直的堆叠,并且可以独立地访问每个垂直裸芯片。在另一 个实施例中,非易失性存储元件SSS 0. 0216a在每个裸芯片中可以具有一个或者多个垂直 裸芯片,并且在每个封装中可以具有一个或者多个裸芯片,其中,某些或者全部所述一个或 者多个裸芯片垂直堆叠,并且可以独立地访问每个垂直裸芯片。
[0043] 在一个实施例中,两个裸芯片垂直地堆叠,并且四个堆叠一组,以形成8个存储元 件(例如,SSS 0.0-SSS 8.0)216&、218&...22(^,每一个都在单独的存储体2143、2141^.. 214η中。在另一个实施例中,24个存储元件(例如,SSS 0. 0-SSS 0. 24)216a、216b…216m 形成逻辑存储体214a,这样8个逻辑存储体中的每一个都具有24个存储元件(例如,SSS 0. 0-SSS8. 24)216、218…220。将数据通过存储I/O总线210发送到非易失性存储介质110, 进而到特定组的存储元件中的所有存储元件(SSS 0. 0-SSS 8. 0)216a、218a…220a。存储 控制总线212a用于选择特定的存储体(例如,存储体0214a),以使得将通过连接到所有存 储体214的存储I/O总线210接收到的数据正好写入到选择的存储体214a。
[0044] 在一个实施例中,存储I/O总线210由一个或者多个独立的I/O总线(包括210a. a-m…210n. a-m的"IIOBa-m")构成,其中,每列中的非易失性存储元件共享一个并行连接 到每个非易失性存储元件216、218、220的独立的I/O总线。例如,存储I/O总线210a的一 个独立的I/O总线210a. a可以物理地连接到每个存储体214a-n中的第一个非易失性存储 元件216a、218a、220a。存储I/O总线210b的第二个独立的I/O总线210a. b可以物理地连 接到每个存储体214a-n的第二非易失性存储元件216b、218b、220b。可以同时和/或并行 地访问存储体214a中的每个非易失性存储元件216a、216b、216m(如图2中示出的一行非 易失性存储元件)。在一个实施例中,其中非易失性存储元件216、218、220包括堆叠封装 的裸芯片,特定堆叠中的所有封装都物理连接到同一个独立的I/O总线。如本文所使用的, "同时"还包括接近同时地访问,其中在稍微不同的时间间隔访问装置以避免切换噪声。在 该上下文中使用的"同时"不同于依次地单独发送命令和/或数据的顺序或者顺次的访问。
[0045] 通常,使用存储控制总线212独立地选择存储体214a_n。在一个实施例中,使用芯 片使能或者芯片选择来选择存储体214。在芯片选择和芯片使能都可用的情况下,存储控制 总线212可以选择一堆封装内的一个封装。在其他实施例中,存储控制总线212使用其他 命令选择一堆封装内的一个封装。还可以通过在存储I/O总线210和存储控制总线212上 传输的地址信息和控制信号的组合选择非易失性存储兀件216、218、220。
[0046] 在一个实施例中,每个非易失性存储元件216、218、220都被划分成擦除块,并且 每个擦除快都被划分成页面。可以将非易失性存储元件216、218、220上的擦除块称作物理 擦除块或者"PEB"。典型的页面的大小为2048个字节("2kB")。在一个例子中,非易失性 存储元件(例如,SSS 0.0)包括两个寄存器并且可以将其编程为两个页面,这样具有两个 寄存器的非易失性存储元件216、218、220就具有4kB的容量。由20个非易失性存储元件 216a、216b、216m组成的存储体214则将具有80kB的页面容量,可以通过存储I/O总线210 的独立的I/O总线输出的同样的地址访问所述页面。
[0047] 可以将非易失性存储元件216a、216b、…216m组成的存储体214中的该组80kB 的页面称作逻辑页面或者虚拟页面。类似地,可以将存储体214a的每个存储元件216a、 216b、··· 216m的擦除块分组以形成逻辑擦除块(也可以将其称作虚拟擦除块)。在一个实 施例中,当在非易失性存储元件内接收擦除命令时,擦除非易失性存储元件内的页面的擦 除块。而随着技术的发展,期望非易失性存储元件216、218、220内的擦除块、页面、内存片 或者其他逻辑和物理分区的尺寸和数量随着时间而改变,期望很多实施例与新的配置一致 是可能的,并且期望很多实施例与本文的一般描述一致。
[0048] 通常,当将包写入到非易失性存储元件216内的特定位置时,在存储I/O总线210 上发送物理地址,并且所述物理地址后面跟着的是所述包,其中,想要将所述包写入到特定 存储体的特定存储元件的特定物理擦除块所特有的特定页面内的位置。物理地址包括了非 易失性存储元件216将包指引到页面内的指定位置所用到的足够的信息。因为存储元件列 (例如,SSS 0.0-SSS N.0216a、218a、……220a)中的所有存储元件都连接到存储I/O总 线接口 210a的同一个独立的I/O总线(例如,210a. a),以到达合适的页面并避免将包写入 到存储元件列(例如,SSS 0.0-SSS N.0216a、218a、……220a)中的分配有类似的地址的 页面,通过存储控制总线212a选择包括具有要写入包的正确页面的非易失性存储元件SSS 0. 0216a的存储体214a,并且不选择非易失性存储介质110a中的其他存储体214b…214η。
[0049] 类似地,满足存储I/O总线210上的读取命令需要存储控制总线212上的信号来 选择单个存储体214a和该存储体214a内的合适的页面。在一个实施例中,读取命令读取 整个页面,并且因为在存储体214a中有多个并行的非易失性存储元件216a、216b、一216111, 所以利用读取命令读取的是整个逻辑页面。然而,如下文将要解释的与存储体交错(bank interleave)有关的内容,可将读取命令分解成多个子命令。类似地,在写入操作中可以将 整个逻辑页面写入到存储体214a的非易失性存储元件216a、216b、…216m中。
[0050] 可以在存储I/O总线210上发送用于对擦除块进行擦除的擦除块擦除命令,所述 存储I/O总线210具有用于擦除特定擦除块的特定擦除块地址。通常,存储控制器104a可 以通过存储I/O总线210的并行通道(独立的I/O总线210a-n. a-m)发送用于擦除逻辑擦 除块的擦除块擦除命令,每个所述并行通道具有用于擦除特定擦除块的特定擦除块地址。 同时,通过存储控制总线212选择特定存储体(例如,存储体0214a),以防止擦除没有选择 的存储体(例如,存储体1-N 214b-n)中的具有类似地址的擦除块。可选地,通过存储控制 总线212选择不特定的存储体(例如,存储体0214a)(或者选择所有的存储体),以能够擦 除并行的所有存储体(存储体1-N 214b-n)中具有类似地址的擦除块。可以使用存储I/O 总线210和存储控制总线212的组合将其他命令发送到特定位置。本领域技术人员将会意 识到使用双向存储I/O总线210和存储控制总线212选择特定存储位置的其他方式。
[0051] 在一个实施例中,包被顺序地写入到非易失性存储介质110。例如,存储控制器 104a发送包到存储元件216的存储体214a的存储写入缓冲器,并且当缓冲器充满的时候, 就将包写入到指定的逻辑页。存储控制器104a随后将存储写入缓冲器再次充满包,并且当 缓冲器充满的时候,将包写入到下一个逻辑页。下一个逻辑页可能位于同一个存储体214a 中,或者位于另一个存储体(例如,214b)中。继续该进程,一个逻辑页面接着一个逻辑页 面,通常直到逻辑擦除块充满为止。在另一个实施例中,随着该进程的继续,流可以连续穿 过逻辑擦除块的边界,从一个逻辑擦除块到另一个逻辑擦除块。
[0052] 在读取、修改、写入操作中,与请求数据相关的包在读取操作中被定位并读取。已 经修改过的修改的请求数据的数据段不会写入到读取它们的位置。相反,将修改的数据段 再次转换成包,并将其顺序地写入到当前正在写入的逻辑页面中的下一个可用的位置。修 改各个包的索引项,以使其指向包括修改的数据段的包。与相同的还未修改的请求数据相 关的包的索引中的一个或者多个项将包括指向未修改的包的原始位置的指针。因此,如果 保存了原始的请求数据,例如,保存请求数据的以前的版本,那么原始请求数据在索引中就 将具有指向作为原始写入的所有包的指针。新请求的数据将在索引中具有指向某些包的指 针和指向当前正写入的逻辑页面中的修改的包的指针。
[0053] 在复制操作中,索引包括用于映射到存储在非易失性存储介质110中的多个包的 原始请求数据的项。当执行了复制操作时,产生请求数据的新副本,并且在将请求数据的新 副本映射到原始包的索引中产生新项。请求数据的新副本也写入到非易失性存储介质110, 其中,它的位置映射到索引中的新项。请求包的新副本可用于标识原始请求数据内的包,其 中,在已经改变了原始请求数据,而原始数据还没有传送到请求数据的副本并且索引丢失 或者损坏的情况下,参考所述原始请求数据内的包。
[0054] 有利的是,顺序地写入包有助于更均匀地使用非易失性存储介质110并且允许固 态存储装置控制器202监测非易失性存储介质110中的存储热点和各种逻辑页面的使用等 级。顺序地写入包还有助于强大的、高效的垃圾收集系统,下面将对其进行详细描述。本领 域技术人员将会意识到顺序存储包的其他益处。
[0055] 在各种实施例中,非易失性存储装置控制器202还包括数据总线204、局部总线 206、缓冲控制器208、缓冲器0-N 22a-n、主控制器224、直接存储存取("DMA")控制器226、 存储器控制器228、动态存储器阵列230、静态随机存储器阵列232、管理控制器234、管理总 线236、到系统总线240的桥接器238、以及其他逻辑电路242,下面将对其进行描述。在其 他实施例中,系统总线240耦合到一个或者多个网络接口卡("NIC")244(-些网络接口 卡可以包括远程DMA( "RDMA")控制器246)、一个或者多个中央处理单元("CPU")248、一 个或者多个外部存储控制器250和相关联的外部存储器阵列252、一个或多个存储控制器 254、对等控制器256和专用处理器258,下面将对其进行描述。连接到系统总线240的部件 244-258可以位于主机计算系统114或者其他装置中。
[0056] 通常,存储控制器104通过存储I/O总线210将数据传输到非易失性存储介质 110。在非易失性存储器设置在存储体214中并且每个存储体214包括可以并行访问的多 个存储元件216a、216b、216m的典型的实施例中,存储I/O总线210是总线阵列,用于每列 存储元件216、218、220的一个存储I/O总线横跨存储体214。如本文所使用的,术语"存储 I/O总线"可以指一个存储I/O总线210或者独立的数据总线阵列,其中,所述阵列的单个 数据总线独立地彼此之间传输不同的数据。在一个实施例中,访问一列存储元件(例如, 216a、218a、220a)的每个存储I/O总线210可以包括用于在一列存储元件216a、218a、220a 中访问的存储分区(例如,擦除块)的逻辑到物理的映射。如果第一存储区域失败、部分失 败、无法访问或者具有某些其他问题,则该映射(或者坏块重映射)允许映射到存储分区的 物理地址的逻辑地址重新映射到不同的存储分区。
[0057] 还可以通过系统总线240、桥接器238、局部总线206、缓冲器222并最终通过数据 总线204将数据从请求装置155传输到存储控制器104。数据总线204通常连接到由缓冲 控制器208控制的一个或者多个缓冲器222a-n。缓冲控制器208通常控制数据从局部总 线206传输到缓冲器222,以及通过数据总线204传输到流水线输入缓冲器306和输出缓 冲器330。缓冲控制器208通常控制如何可以将从请求装置传送来的数据临时存储到缓冲 器222中并随后传送到数据总线204上,或者反之亦然,以考虑到不同的时钟域、防止数据 冲突等。缓冲控制器208通常与主控制器224联合操作以协调数据流。当数据到达时,数 据将先到达系统总线240,再通过桥接器238传输到局部总线206。
[0058] 通常,如主控制器224和缓冲控制器208所指示的,数据从局部总线206传输到一 个或者多个数据缓冲器222。数据随后从缓冲器222流出进入到数据总线204,通过非易失 性控制器104,并到达非易失性存储介质110,例如,NAND闪存或者其他存储介质。在一个实 施例中,使用一个或者多个数据信道传输数据和与数据一起到达的相关的带外元数据("元 数据"),所述一个或者多个数据信道包括一个或者多个存储控制器l〇4a-104n-l和相关的 非易失性存储介质110a-110n-l,同时至少一个信道(存储控制器104η,非易失性存储介质 110η)专用于带内元数据,例如,索引信息和在非易失性存储装置102内部产生的其他元数 据。
[0059] 局部总线206通常是双向总线或者一组总线,其允许在非易失性存储装置控制器 202内部的装置之间以及非易失性存储装置102内部的装置和连接到系统总线240的装置 244-258之间传输数据或者命令。桥接器238有助于局部总线206和系统总线240之间的 通信。本领域技术人员将会意识到其他实施例,例如,环形结构或者切换星形配置以及桥接 器23和总线240、206、204、210的功能元件。
[0060] 系统总线240通常是主机计算系统114的总线,或者是安装或连接非易失性存储 装置102的其他装置的总线。在一个实施例中,系统总线240可以是PCI-e总线、串行高级 技术附件("串行ΑΤΑ")总线、并行ΑΤΑ等。在另一个实施例中,系统总线240是外部总线, 例如,小型计算机系统接口( "SCSI")、火线、光纤信道、USB、PCIe-AS等。可以将非易失性 存储装置102封装,以内部地安装到装置或者作为外部连接的装置。
[0061] 非易失性存储装置控制器202包括控制非易失性存储装置102内的较高级别的功 能的主控制器224。在各种实施例中,主控制器224通过解析对象请求和其他请求控制数据 流,指示创建索引以将与数据相关的对象标识符映射到相关数据、协调DMA请求等的物理 位置。本文描述的很多功能全部或者部分由主控制器224控制。
[0062] 在一个实施例中,主控制器224使用嵌入式控制器。在其他实施例中,主控制器 224使用局部存储器,例如,动态存储器阵列230 (动态随机存取存储器"DRAM")、静态存储 器阵列232 (静态随机存取存储器"SRAM")等。在一个实施例中,使用主控制器224控制局 部存储器。在另一个实施例中,主控制器224通过存储器控制器228访问局部存储器。在 另一个实施例中,主控制器224运行Linux服务器并且可以支持各种常用的服务器接口,例 如,万维网、超文本标记语言("HTML")等。在另一个实施例中,主控制器224使用纳米处 理器(nano-processor)。可以使用可编程的或者标准逻辑或者上文列出的控制器类型的任 何组合来构造主控制器224。本领域技术人员将会意识到主控制器224的很多实施例。
[0063] 在一个实施例中,存储装置/非易失性存储装置控制器202管理多个数据存储装 置/非易失性存储介质ll〇a-n,主控制器224划分内部控制器(例如,存储控制器104a-n) 之间的工作负载。例如,主控制器224可以划分要写入到数据存储装置(例如,非易失性存 储介质110a-n)的对象,以使得对象的一部分存储到每个连接的数据存储装置。该特征是 允许快速存储和访问对象的增强的性能。在一个实施例中,使用FPGA实现主控制器224。 在另一个实施例中,可以通过管理总线236、通过网络连接到NIC 244的系统总线240、或者 连接到系统总线240的其他装置,来更新主控制器224内的固件。
[0064] 在一个实施例中,管理对象的主控制器224对块存储进行仿真,以便主机计算系 统114或者连接到存储装置/非易失性存储装置102的其他装置将所述存储装置/非易失 性存储装置102视作块存储装置,并将数据发送到所述存储装置/非易失性存储装置102 中的特定物理地址。主控制器224随后对块进行划分,并存储将作为对象的数据块。主控 制器224随后将块和与块一起发送的物理地址映射到由主控制器224确定的实际位置。所 述映射存储到对象索引中。通常,对于块仿真来说,在计算机(例如,主机计算系统114或 者希望将存储装置/非易失性存储装置102用作块存储装置的其他装置)的驱动器中配备 有块装置应用程序接口( "API")。
[0065] 在另一个实施例中,主控制器224与NIC控制器244和嵌入式RDMA控制器246协 调工作,以实时地发送数据和命令集的RDMA传输。NIC控制器244可以隐藏在不透明的端 口后面以便能够使用自定义的驱动器。此外,主机计算系统114上的驱动器可以通过I/O 存储驱动器访问计算机网络116,所述I/O存储驱动器使用标准堆栈API并且与NIC 244相 结合地操作。
[0066] 在一个实施例中,主机控制器224也是独立驱动("RAID")控制器的冗余阵列。 在数据存储装置/非易失性存储装置102与一个或者多个其他数据存储装置/非易失性存 储装置102网络连接的情况下,主控制器224可以是用于单级RAID、多级RAID、渐进式RAID 等的RAID控制器。主控制器224还允许将一些对象存储到RAID阵列中,并且不用RAID存 储其他对象。在另一个实施例中,主控制器224可以是分布式RAID控制器元件。在另一个 实施例中,主控制器224可以包括多个RAID、分布式RAID以及如本文其他地方所描述的其 他功能元件。在一个实施例中,主控制器224控制数据在RAID类结构中的存储,其中,奇偶 校验信息存储在逻辑页面的一个或者多个存储元件216、218、220中,所述奇偶校验信息对 存储在同一个逻辑页面的其他存储元件216、218、220中的数据进行保护。
[0067] 在一个实施例中,主控制器224与单个或者冗余网络管理器(例如,开关)协同工 作,以建立路由、平衡带宽利用率、失效备援(failover)等。在另一个实施例中,主控制器 224与集成专用逻辑(通过局部总线206)和相关的驱动器软件协同工作。在另一个实施例 中,主控制器224与连接的专用处理器258或者逻辑(通过外部系统总线240)和相关的驱 动器软件协同工作。在另一个实施例中,主控制器224与远程专用逻辑(通过计算机网络 116)和相关的驱动器软件协同工作。在另一个实施例中,主控制器224与局部总线206或 者连接到硬盘驱动器("HDD")存储控制器的外部总线协同工作。
[0068] 在一个实施例中,主控制器224与一个或者多个存储控制器254通信,其中,存储 装置/非易失性存储装置102可以作为通过SCSI总线、因特网SCSI ( "iSCSI")、光纤信道 等连接的存储装置。同时,存储装置/非易失性存储装置102可以自主地管理对象,并且可 以作为对象文件系统或者分布式对象文件系统出现。还可以由对等控制器256和/或专用 处理器258访问主控制器224。
[0069] 在另一个实施例中,主控制器224与自主集成管理控制器协同工作,以定期验证 FPGA码和/或控制器软件、在运行(复位)时验证FPGA码和/或在上电(复位)期间验证 控制器软件、支持外部复位请求、支持由于看门狗超时而发出的复位请求、支持电压、电流、 功率、温度和其他环境度量的测量以及阈值中断的设置。在另一个实施例中,主控制器224 管理垃圾的收集以释放擦除块,从而再次利用释放的擦除块。在另一个实施例中,主控制器 224管理损耗均衡。在另一个实施例中,主控制器224允许将数据存储装置/非易失性存储 装置102划分成多个逻辑装置,并且允许基于分区的介质加密。在另一个实施例中,主控制 器224支持具有先进的、多位ECC校正的存储控制器104。本领域技术人员将意识到存储控 制器202中或者更具体地在非易失性存储装置102中的主控制器224的其他特征和功能。 [0070] 在一个实施例中,非易失性存储装置控制器202包括存储器控制器228,其控制动 态随机存储器阵列230和/或静态随机存储器阵列232。如上所述,存储器控制器228可以 是独立的或者与主控制器224集成。存储器控制器228通常控制某些类型的易失性存储器, 例如,DRAM (动态随机存储器阵列230)和SRAM (静态随机存储器阵列232)。在其他例子中, 存储器控制器228还控制其他存储器类型,例如,电可擦除可编程只读存储器("EEPR0M") 等。在其他实施例中,存储器控制器228控制两种或者更多种存储器类型,并且存储器控制 器228可以包括多于一个的控制器。通常,存储器控制器228控制尽可能多的SRAM 232, SRAM 232可用并且由DRAM 230补充该SRAM 232。
[0071] 在一个实施例中,对象索引存储在存储器230、232中,并且随后将所述对象索引 定期卸载到非易失性存储介质ll〇n或者其他非易失性存储器的通道中。本领域技术人员 将会意识到存储器控制器228、动态存储器阵列230和静态存储器阵列232的其他使用和配 置。
[0072] 在一个实施例中,非易失性存储装置控制器202包括DMA控制器226,其控制存储 装置/非易失性存储装置102和一个或者多个外部存储控制器250以及相关的外部存储器 阵列252和CPU248之间的DMA操作。需要指出的是,将外部存储控制器250和外部存储器 阵列252称作外部的,原因在于它们位于存储装置/非易失性存储装置102的外部。另外, DMA控制器226还可以通过NIC 244和相关的RDMA控制器246对利用请求装置进行的RDMA 操作进行控制。
[0073] 在一个实施例中,非易失性存储装置控制器202包括连接到管理总线236的管理 控制器234。通常,管理控制器234对环境指标和存储装置/非易失性存储装置102的状 态进行管理。管理控制器234可以监控管理总线236上的装置温度、风扇速度、电源设置 等。管理控制器234可以支持对FPGA码存储和控制器软件的可擦除可编程只读存储器 ("EEPR0M")的读取和编程。通常,管理总线236连接到存储装置/非易失性存储装置102 的各种部件。管理控制器234可以在局部总线206上传输报警和中断等,或者可以包括到 系统总线240或者其他总线的单独的连接。在一个实施例中,管理总线236是内置集成电 路("I2C")总线。本领域技术人员将会意识到通过管理总线236连接到存储装置/非易 失性存储装置102的部件的管理控制器234的其他功能和应用。
[0074] 在一个实施例中,非易失性存储装置控制器202包括可以为特定应用自定义的其 他逻辑电路242。通常,在非易失性装置控制器202或者主控制器224被配置为使用FPGA 或者其他可配置的控制器的情况下,基于特定应用、客户的要求、存储要求等可以将自定义 的逻辑电路包括在其中。
[0075] 图3是示出根据本发明的非易失性存储装置102中的存储控制器104的一个实施 例300的示意性框图,所述存储控制器104具有写入数据流水线106、读取数据流水线108 和吞吐量管理设备122。实施例300包括数据总线204、局部总线206和缓冲器控制器208, 这些器件与相对于图2的非易失性存储装置控制器202描述的那些器件基本上类似。写入 数据流水线106包括打包器302和错误校正码("ECC")生成器304。在其他实施例中, 写入数据流水线106包括输入缓冲器306、写入同步缓冲器308、写入程序模块310、压缩模 块312、加密模块314、垃圾收集器旁路(其中的一部分位于读取数据流水线108内)、介质 加密模块318和写入缓冲器320。读取数据流水线108包括读取同步缓冲器328、ECC校正 模块322、解包器324、校准模块326和输出缓冲器330。在其他实施例中,读取数据流水线 108可以包括介质解密模块332、一部分垃圾收集器旁路316、解密模块334、解压缩模块336 和读取程序模块338。存储控制器104还可以包括控制和状态寄存器340和控制队列342、 存储体交错控制器344、同步缓冲器346、存储总线控制器348和多路复用器("MUX") 350。 下面描述非易失性控制器104和相关的写入数据流水线106和读取数据流水线108的部 件。在其他实施例中,可以使用同步非易失性存储介质110,并且可以去除同步缓冲器308、 328。
[0076] 写入数据流水线106包括打包器302,其直接或者间接地通过另一个写入数据流 水线106阶段接收要写入到非易失性存储器中的数据段或者元数据段,并生成适合非易失 性存储介质110的尺寸的一个或者多个包。数据段或者元数据段通常是数据结构(例如,对 象)的一部分,但是也可以包括整个数据结构。在另一个实施例中,数据段是数据块的一部 分,但是也可以包括整个数据块。通常,从计算机(例如,主机计算系统114,或者其他计算 机或装置)接收一组数据(例如,数据结构),并且在传送到非易失性存储装置102的数据 段中将所述一组数据传送到所述非易失性存储装置102。数据段还可以以其他名称为大家 所熟知,例如,包,但是如本文所引用的数据段包括全部或者一部分数据结构或者数据块。
[0077] 每个数据结构被存储为一个或者多个包。每个数据结构可以具有一个或者多个容 器包。每个包都包括包头。包头可以包括头类型字段。类型字段可以包括数据、属性、元数 据、数据段定界符(在有多个包的情况下)、数据结构、数据链接等。包头还可以包括关于包 的大小的信息,例如,包括在包中的数据的字节数。可以通过包的类型确定包的长度。包头 可以包括确定包和数据结构之间的关系的信息。可能的例子是使用数据包包头中的偏移量 标识数据段在数据结构内的位置。本领域技术人员将会意识到可以包括在由打包器302添 加到数据的包头中的其他信息以及可以添加到数据包中的其他信息。
[0078] 每个包都包括包头并且可能包括来自数据段或者元数据段的数据。每个包的包头 包括将包和包所属的数据结构联系起来的相关信息。例如,包头可以包括对象标识符或者 其他数据结构标识符以及指示形成数据包的数据段、对象、数据结构或者数据块的偏移量。 包头还可以包括存储总线控制器348使用的用于存储包的逻辑地址。包头还可以包括关于 包的大小的信息,例如,包括在包中的字节数。包头还可以包括序列号,当重建数据段或者 数据结构时,所述序列号标识数据段相对于数据结构内的其他包所属的位置。包头可以包 括包头类型字段。类型字段可以包括数据、数据结构属性、元数据、数据段定界符(在有多 个包的情况下)、数据结构类型、数据结构链接等。本领域技术人员将会意识到可以包括在 由打包器302添加到数据或元数据的包头中的其他信息以及可以添加到包中的其他信息。
[0079] 写入数据流水线106包括为从打包器302接收到的一个或者多个包生成一个或者 多个错误校正码("ECC")的ECC生成器304。ECC生成器304通常使用错误校正算法生成 与一个或者多个数据包一起存储的ECC检查位。ECC生成器304生成的ECC码和与ECC码 相关的一个或者多个数据一起包括ECC块。与一个或者多个包一起存储的ECC数据用于检 测并校正通过传输和存储引入到数据中的错误。在一个实施例中,包作为长度N的未编码 块传输到ECC生成器304。计算、追加长度S的全部特征,并将其作为长度N+S的编码块输 出。N和S的值依赖于ECC算法的特征,选择所述ECC算法的特征以实现特定性能、效率和 鲁棒度量。在一个实施例中,ECC块和包之间没有固定的关系,包可以包括多于一个的ECC 块;ECC块可以包括多于一个的包;并且第一包可以在ECC块内的任何地方结束,第二包可 以在同一个ECC块内的第一包结束之后开始。在一个实施例中,并不动态地修改ECC算法。 在一个实施例中,与数据包一起存储的ECC数据足够鲁棒,从而可以校正多于2比特的错 误。
[0080] 有利的是,使用允许多于单个比特校正或者甚至双比特校正的鲁棒ECC算法允许 延长非易失性存储介质110的寿命。例如,如果闪存用作非易失性存储介质110中的存储 介质,该闪存就可以在每次擦除循环不会出错的情况下被写入大概100, 〇〇〇次。使用鲁棒 ECC算法可以扩展这种使用限制。在非易失性存储装置102上设有ECC生成器304和对应 的ECC校正模块322的情况下,与如果使用鲁棒性较弱的ECC算法(例如,单比特校正)相 t匕,非易失性存储装置102能够进行内部错误校正并且具有更长的使用寿命。然而,在其 他实施例中,ECC生成器可以使用鲁棒性较弱的算法并且可以校正单比特或者双比特错误。 在另一个实施例中,为了增加容量,非易失性存储装置110可以包括不太可靠的存储器,例 如,多级单元("MLC")闪存,其中,由于没有更加鲁棒的ECC算法,该存储器可能不是十分 的可靠。
[0081] 在一个实施例中,写入流水线106包括输入缓冲器306,所述输入缓冲器306接 收要写入到非易失性存储介质110的数据段并且存储到输入数据段,直到写入数据流水线 106的下一个阶段,例如,打包器302 (或者更加复杂的写入数据流水线106的其他阶段)准 备处理下一个数据段。输入缓冲器306通常允许速率之间的差异,通过写入数据管线106 使用合适容量的数据缓冲器接收和处理数据段。为了提高数据总线204的工作效率,输入 缓冲器306还允许数据总线204以高于写入数据流水线106可以承受的速率向写入数据流 水线106传输数据。通常,当写入数据流水线106不包括输入缓冲器306的时候,则在其他 地方实现缓冲功能,例如,在非易失性存储装置102中但在写入数据流水线106之外、在主 机计算系统114中(例如,在网络接口卡("NIC")内)、或者在其他装置中(例如,当使用 远程直接存储器存取("RDMA")时)。
[0082] 在另一个实施例中,写入数据流水线106还包括写入同步缓冲器308,其在将包写 入到非易失性存储介质110之前,将从ECC生成器304接收到的包进行缓存。写入同步缓 冲器308位于局部时钟域和非易失性存储时钟域之间的边界,并且考虑到时钟域的差别而 提供缓存。在其他实施例中,可以使用同步非易失性存储介质110,并且可以去除同步缓冲 器 308、328。
[0083] 在一个实施例中,写入数据流水线106还包括介质加密模块318,其直接或者间接 地从从打包器302接收一个或者多个包,并且在将包发送到ECC生成器304之前,使用对于 非易失性存储装置102唯一的加密密钥对一个或者多个包进行加密。通常,对包括包头在 内的整个包进行加密。在另一个实施例中,不加密包头。在本文中,将加密密钥理解为是指 由存储控制器104在外部管理的秘密加密密钥。
[0084] 介质加密模块318和对应的介质解密模块332为存储在非易失性存储介质110中 的数据提供安全级别。例如,在利用介质加密模块318进行加密数据的情况下,如果非易失 性存储介质110连接到不同的存储控制器104、非易失性存储装置102或者服务器,在不使 用在将数据写入到非易失性存储介质110期间使用的同样的解密密钥的情况下,不付出特 别大的努力,通常就不能读取非易失性存储介质110的内容。
[0085] 在典型的实施例中,非易失性存储介质102不将加密密钥存储到非易失性存储器 中,并且不允许外部访问加密密钥。在初始化期间将加密密钥提供给存储控制器104。非易 失性存储装置102可以使用并存储与加密密钥一起使用的非机密的加密随机数。每个包可 以与不同的随机数一起存储。为了提高加密算法的保护,可以在具有唯一随机数的多个包 之间分割数据段。
[0086] 可以从主机计算系统114、服务器、密钥管理者或者管理由存储控制器104使用 的加密密钥的其他装置接收加密密钥。在另一个实施例中,非易失性存储介质110可以具 有两个或者更多个分区,并且存储控制器104表现的好像它是两个或者更多个存储控制器 104,每个存储控制器工作于非易失性存储介质110内的单个分区。在该实施例中,每个分 区可以使用唯一的介质加密密钥。
[0087] 在另一个实施例中,写入数据流水线106还包括加密模块314,其对直接或者间接 地从输入缓冲器306接收到的数据段或者元数据段进行加密,其中,在将数据段发送到打 包器302之前,使用与数据段一起接收到的加密密钥对数据段进行加密。加密模块314使用 的用于加密数据的加密密钥可以不是非易失性存储装置102内存储的所有数据所公有的, 而是可以如下文所述的,在每个数据结构的基础上不同并且在接收数据段时一起接收。例 如,可以将加密模块314要加密的数据段的加密密钥与数据段一起接收,或者可以将加密 密钥作为用于写入数据段所属的数据结构的命令的一部分来接收。固态存储装置102可以 使用并存储每个数据结构包中的与加密密钥结合使用的非机密的加密随机数。每个包可以 与不同的随机数一起存储。为了提高加密算法的保护,可以在具有唯一随机数的多个包之 间分割数据段。
[0088] 可以从主机计算系统114、另一个计算机、密钥管理者或者保存用于加密数据段 的加密密钥的其他装置接收加密密钥。在一个实施例中,将加密密钥从非易失性存储装置 102、主机计算系统114、计算机或者其他外部代理中的一个传输到存储控制器104,其中, 所述其他外部代理具有执行工业标准方法以安全地传输和保护私钥和公钥的能力。
[0089] 在一个实施例中,加密模块314利用与包一起接收到的第一加密密钥加密第一 包,并且利用与第二包一起接收到的第二加密密钥加密第二包。在另一个实施例中,加密模 块314利用与包一起接收到的第一加密密钥加密第一包,并且在不加密的情况下直接将第 二数据包传送到下一个阶段。有利的是,包括在非易失性存储装置102的写入数据流水线 106中的加密模块314允许一个数据结构接着一个数据结构或者一个数据段接着一个数据 段的进行数据加密而无需单个文件系统或者其他外部系统,以保持跟踪用于存储相应的数 据结构或者数据段的不同的加密密钥。每个请求装置155或者相关的密钥管理者都独立地 管理用于只加密由请求装置155发送的数据结构或者数据段的加密密钥。
[0090] 在一个实施例中,加密模块314可以使用对于非易失性存储装置102唯一的加密 密钥加密一个或者多个包。加密模块314可以独立地执行该介质加密,或者执行除了以上 描述的加密之外的其他加密。通常,对包括包头在内的整个包进行加密。在另一个实施例 中,不加密包头。加密模块314执行的介质加密为存储在非易失性存储介质110中的数据 提供安全级别。例如,在利用对于特定非易失性存储装置102唯一的介质加密密钥加密数 据的情况下,如果非易失性存储介质110连接到不同的存储控制器104、非易失性存储装置 102或者主机计算系统114,在不使用在将数据写入到非易失性存储介质110期间使用的同 样的解密密钥的情况下,不付出特别大的努力,通常就不能读取非易失性存储介质110的 内容。
[0091] 在另一个实施例中,写入数据流水线106包括压缩模块312,其在将数据段发送到 打包器302之前,压缩元数据段的数据。压缩模块312通常使用本领域技术人员公知的压 缩程序压缩数据段或者元数据段,以减少数据段或者元数据段占用的存储容量。例如,如果 数据段包括512个"0"字符串,压缩模块312就可以使用代表512个"0"的代码或者标志 代替该52个" Ο ",其中,与512个" Ο "占用的空间相比,代码更紧凑。
[0092] 在一个实施例中,压缩模块312使用第一压缩程序压缩第一数据段,并且不压缩 的情况下传递第二数据段。在另一个实施例中,压缩模块312利用第一压缩程序压缩第一 数据段,并且利用第二压缩程序压缩第二数据段。在非易失性存储装置102内具有这种灵 活性是有利的,这样计算机系统114或者将数据写入到非易失性存储装置102的其他装置 中的每一个可以指定压缩程序,或者一个可以指定压缩程序,而另一个可以指定不进行压 缩。还可以根据基于每个数据结构类型或者数据结构类别的默认设置,进行压缩程序的选 择。例如,特定数据结构的第一数据结构可以能不使用默认的压缩程序设置,而相同数据结 构类别和相同数据结构类型的第二数据结构可以使用默认压缩程序,并且相同数据结构类 别和相同数据结构类型的第三数据结构可以使用不压缩。
[0093] 在一个实施例中,写入数据流水线106包括垃圾收集旁路316,其作为垃圾收集系 统中的数据旁路的一部分从读取数据流水线108接收数据段。垃圾收集系统(也称作"清 理器"或者清理操作)通常对不再有效的包进行标记,这通常是因为该包被标记为删除,或 者已经被修改并且修改的数据存储在不同的位置。在某些情况下,垃圾收集系统确定可以 恢复存储器的特定扇区(例如,擦除块)。该确定可能是由于缺少可用的存储容量、标记为 无效的数据的百分比达到阈值、有效数据的合并、存储器的扇区的错误检测率达到阈值、或 者基于数据分布改善性能等。垃圾收集算法可以考虑多种因素以确定何时恢复存储器的扇 区。
[0094] 一旦存储器的扇区被标记为恢复,通常就必须重新定位该扇区中的有效包。垃圾 收集器旁路316允许将数据读取到读取数据流水线108中,并随后将其直接传输到写入数 据流水线106而无需将其移出到存储控制器104外。在一个实施例中,垃圾收集器旁路316 是工作在非易失性存储装置102内的自主垃圾收集器系统的一部分。这允许非易失性存 储装置102管理数据,以便数据在整个非易失性存储介质110中系统的传播,以提高性能、 数据可靠性,并避免非易失性存储介质110中的任何一个位置或区域的过度使用和使用不 足,并延长非易失性存储介质110的使用寿命。
[0095] 垃圾收集器旁路316对数据段插入到写入数据流水线106和计算系统114或者其 他装置写入其他数据段进行协调。在描述的实施例中,数据收集旁路316在写入数据流水 线106中的打包器302之前并在读取数据流水线108中的解包器314之后,但是也可以位 于所述读取数据流水线108和写入数据流水线106中的任何位置。在通过大量使用写入流 水线108填充逻辑页面的剩余部分期间,可以使用垃圾收集旁路316,以提高非易失性存储 介质110内的存储效率,从而减少垃圾收集的频率。
[0096] 清理可以包括更新存储在非易失性存储介质110上的数据。存储在非易失性存储 介质110上的数据可能随着时间的推移而退化。存储控制器104可以包括清理器,其标识 非易失性存储装置102上的"陈旧"数据(在预定的时间内没有修改和/或移动的数据), 并且通过将数据重新写入到不同的存储位置来更新陈旧的数据。
[0097] 在某些实施例中,可以暂时禁用垃圾收集系统、清理器和/或垃圾收集旁路316, 以允许将数据连续地存储到非易失性存储装置102的物理存储位置上。禁用垃圾收集系统 和/或旁路316可以保证写入数据流水线106中的数据不与其他数据交错。
[0098] 在某些实施例中,可以在非易失性存储装置的物理存储空间的特定部分限制垃圾 收集和/或清理器。例如,存储元数据(例如,下面描述的反向索引)可以周期性地预留在 非易失性存储位置。可以限制垃圾收集和/或清理以在与预留的存储元数据对应的非易失 性存储介质的部分上操作。
[0099] 在一个实施例中,写入数据流水线106包括为了高效的写入操作而缓存数据的写 入缓冲器320。通常,写入缓冲器320包括足够用于包的容量,以在非易失性存储介质110 中填充至少一个逻辑页面。这允许写入操作在不受到干扰的情况下将数据的整个逻辑页面 发送到非易失性存储介质110。通过将写入数据流水线106的写入缓冲器320和读取数据 缓冲器108内的缓冲器的容量设为相同,或者大于非易失性存储介质110内的存储写入缓 冲器的容量,写入和读取数据会更加有效,这是因为通过编制单个写入命令就可以将数据 的整个逻辑页面发送到非易失性存储介质110,而不需要编制多个命令。
[0100] 当正在填充写入缓冲器320时,非易失性存储介质110可以用于其他读取操作。这 是有利的,因为当数据写入到存储写入缓冲器和流入到存储写入缓冲器的数据停滞时,具 有较小写入缓冲器或者没有写入缓冲器的其他非易失性装置可以占用非易失性存储。读取 操作会被阻止,直到充满并且编程了整个存储写入缓冲器。用于没有写入缓冲器或者具有 小型写入缓冲器的系统的另一种方法是清洗没有充满的存储写入缓冲器,以便能够进行读 取。另一方面,这是低效的,因为填充页面要求多个写入/编程周期。
[0101] 对于描述的具有容量大于逻辑页面的写入缓冲器320的实施例来说,包括多个子 命令的单个写入命令可以然后被单个程序命令跟随,以将来自每个非易失性存储元件216、 218、220中的存储写入缓冲器的数据的页面传送到每个非易失性存储元件216、218、220内 的指定页面。该技术具有消除对部分页面编程的优点,众所周知,对部分页面编程降低了数 据的可靠性和持久性,并且当缓冲器充满时释放用于读取和其他命令的目标存储体。
[0102] 在一个实施例中,写入缓冲器320是乒乓缓冲器,其中,缓冲器的一侧充满并且随 后指定为在合适的时间传输,而乒乓缓冲器的另一侧正在被填充。在另一个实施例中,写入 缓冲器320包括容量大于数据段的逻辑页面的先入先出("FIFO")寄存器。本领域技术人 员将会意识到其他写入缓冲器310配置,其在将数据写入到非易失性存储介质110之前,允 许存储数据的逻辑页面。
[0103] 在另一个实施例中,写入缓冲器320的容量小于逻辑页面,以便小于页面的信息 可以写入到非易失性存储介质110中的存储写入缓冲器中。在该实施例中,为了防止写入 数据流水线106中的停滞不保持读取操作,使用垃圾收集系统对数据进行排序,作为垃圾 收集过程的一部分,需要将垃圾收集系统从一个位置移动到另一个位置。在写入数据流水 线106中的数据停滞的情况下,可以通过垃圾收集旁路316将数据馈送到写入缓冲器320 并随后馈送到非易失性存储介质110中的存储写入缓冲器,以在对数据进行编程之前,填 充逻辑页面的页面。通过这种方式,写入数据流水线106中的数据停滞将不会停滞从非易 失性存储装置102的读取。
[0104] 在另一个实施例中,写入数据流水线106包括写入程序模块310,其具有在写入数 据流水线106内的一个或者多个用户自定义的功能。写入程序模块310允许用户自定义写 入数据流水线106。用户可以基于特定的数据要求或者应用自定义写入数据流水线106。 当存储控制器104是FPGA时,用户可以使用自定义的命令和功能相对容易地对写入数据流 水线106进行编程。用户还可以使用写入程序模块310将自定义的功能包括在ASIC中,然 而,自定义ASIC比FPGA可能难的多。写入程序模块310可以包括缓冲器和旁路机构,以允 许在写入程序模块310中对第一数据段执行操作,同时可以使第二数据段继续通过写入数 据流水线106。在另一个实施例中,写入程序模块310可以包括能够通过软件编程的处理器 核。
[0105] 需要指出的是,写入程序模块310显示为位于输入缓冲器306和压缩模块312之 间,然而,写入程序模块310可以位于写入数据流水线106的任何地方,并且可以分布于各 个阶段302-320之间。另外,可能会有分布于各个阶段302-320之间的、独立编程和操作的 多个写入程序模块310。另外,可以改变阶段302-320的顺序。本领域技术人员将会意识 至IJ,可以基于特定的用户需求可行地改变阶段302-320的顺序。
[0106] 读取数据流水线108包括ECC校正模块322,其通过使用与请求包的每个ECC块一 起存储的ECC,确定从非易失性存储介质110接收到的请求包的ECC块中是否存在数据错 误。如果存在任何错误并且可以使用ECC对所述错误进行校正,ECC校正模块322就随后 校正请求包中的任何错误。例如,如果ECC能够检测到6个比特发生错误,但是只能校正3 个比特的错误,ECC校正模块322就校正至多3个比特发生错误的请求包的ECC块。ECC校 正模块322通过将发生错误的比特改变为正确的比特或者0状态来校正发生错误的比特, 以便请求包与当将其写入到非易失性存储介质110时的包相同,并且为包生成ECC。
[0107] 如果ECC校正模块322确定请求包包括比ECC能够校正的更多的发生错误的比 特,ECC校正模块322就不能校正请求包的损坏的ECC块中的错误,并且发送中断。在一个 实施例中,ECC校正模块322发送具有指示请求包发生错误的消息的中断。该消息可以包 括ECC校正模块322不能校正错误的信息或者可以暗示ECC校正模块322不能校正错误。 在另一个实施例中,ECC校正模块322利用中断和/或消息发送请求包的损坏的ECC块。
[0108] 在一个实施例中,主控制器224读取ECC校正模块322不能校正的请求包的损坏 的ECC块或者部分损坏的ECC块,其被校正并返回到ECC校正模块322,以便由读取数据流 水线108作进一步的处理。在一个实施例中,将请求包的损坏的ECC块或者部分损坏的ECC 块发送到请求数据的装置。请求装置155可以校正所述ECC块或者使用另一个副本(例如, 备份或者镜像副本)代替所述数据,并且随后可以使用请求数据包的代替数据或者将其返 回到读取数据流水线108。请求装置155可以使用发生错误的请求包中的包头信息识别需 要替换损坏的请求包或者替换包所属的数据结构的数据。在另一个实施例中,存储控制器 104使用某些类型的RAID存储数据并且能够恢复损坏的数据。在另一个实施例中,ECC校 正模块322发送中断和/或消息,并且接收装置放弃与请求数据包相关的读取操作。本领 域技术人员将会意识到,作为ECC校正模块322确定请求包的一个或者多个ECC块损坏并 且ECC校正模块322不能校正所述错误的结果,可以采取其他选项和动作。
[0109] 读取数据流水线108包括解包器324,其直接或者间接地从ECC校正模块322接收 请求包的ECC块,并且检查并去除一个或者多个包包头。解包器324可以通过检查包头内 的包标识符、数据长度、数据位置等,验证包包头。在一个实施例中,包头包括可用于验证传 送到读取数据流水线108的包是请求包的哈希码。解包器324还从由打包器302添加的请 求包去除包头。解包器324可以不对特定的包执行操作,只是不加修改就向前传送这些包。 可能的例子是,在索引重建要求包头信息的重建过程期间请求容器标签。另外的例子包括 指定在非易失性存储装置102内使用的各种类型的包的传输。在另一个实施例中,解包器 324的操作可以依赖于包的类型。
[0110] 读取数据流水线108包括校准模块326,其从解包器324接收数据并去除不需要的 数据。在一个实施例中,发送到非易失性存储介质110的读取命令获得包。请求数据的装 置可能不需要获得的包中的所有数据,并且校准模块326去除不需要的数据。如果获得的 页面内的数据是请求的数据,对准模块326就不去除任何数据。
[0111] 校准模块326在将数据发送到下一个阶段之前,将数据重新格式化为与请求数据 段的装置格式兼容的数据结构的数据段。通常,当由读取数据流水线108对数据进行处理 时,数据段或者包的大小在各个阶段会发生变化。对准模块326使用接收到的数据以将数 据格式化成适合发送到请求装置155并且结合起来形成响应的数据段。例如,来自一部分 第一数据包的数据可以与来自一部分第二数据包的数据相结合。如果数据段大于请求装置 155请求的数据,校准模块326就可以放弃不需要的数据。
[0112] 在一个实施例中,读取数据流水线108包括读取同步缓冲器328,其在读取数据流 水线108进行处理之前,缓存从非易失性存储介质110接收到的一个或者多个请求包。读 取同步缓冲器328位于非易失性存储时钟域和局部总线时钟域之间的边界,并且考虑到时 钟域的差别而提供缓存。
[0113] 在另一个实施例中,读取数据流水线108包括输出缓冲器330,其从校准模块326 接收请求包并且在将接收到的包传输到请求装置155之前存储所述包。输出缓冲器330考 虑到了何时从读取数据流水线108的阶段接收数据段和何时将数据段传输到存储控制器 104的其他部分或者请求装置155之间的时间差。输出缓冲器330还允许数据总线204以 高于读取数据流水线108能够承受的速率从读取数据流水线108接收数据,以提高数据总 线204的工作效率。
[0114] 在一个实施例中,读取数据流水线108包括介质加密模块332,其从ECC校正模 块322接收一个或者多个加密的请求包,并且在将所述一个或者多个请求包发送到解包器 324之前,利用对于非易失性存储装置102唯一的加密密钥对所述一个或者多个请求包进 行解密。通常,介质解密模块332解密数据所使用的加密密钥与介质加密模块318使用的 加密密钥相同。在另一个实施例中,非易失性存储介质110可以具有两个或者更多个分区, 并且存储控制器104表现的好像它是两个或者更多个存储控制器104,每个存储控制器工 作于非易失性存储介质110内的单个分区。在该实施例中,每个分区可以使用唯一的介质 加密密钥。
[0115] 在另一个实施例中,读取数据流水线108包括解密模块334,其在将解包器324格 式化的数据段发送到输出缓冲器330之前,加密所述数据段。可以使用与读取请求一起接 收到的加密密钥解密数据段,所述读取请求启动对从读取同步缓冲器328接收到的请求包 的获取。解密模块334可以使用与读取第一包的读取请求一起接收到的加密密钥解密第一 包,并且随后可以使用不同的加密密钥解密第二包,或者不加解密就把第二包发送到读取 数据流水线108的下一个阶段。当使用没有加密的加密随机数存储包时,结合使用随机数 和加密密钥解密数据包。可以从主机计算系统114、客户端、密钥管理者或者管理存储控制 器104使用的加密密钥的其他装置接收加密密钥。
[0116] 在另一个实施例中,读取数据流水线108包括对由解包器324格式化的数据段进 行解压缩的解压缩模块336。在一个实施例中,解压缩模块336使用存储在包包头和容器 标签中的一个或者二者中的压缩信息选择补充程序,压缩模块312使用所述补充程序压缩 数据。在另一个实施例中,由请求正被解压缩的数据段的装置指定解压缩模块336使用的 解压缩程序。在另一个实施例中,解压缩模块336根据基于每个数据结构类型或者数据结 构类别的默认设置,选择加压缩程序。第一对象的第一包可以能不使用默认的解压缩程序, 而相同数据结构类别或者相同数据结构类型的第二数据结构的第二包可以使用默认的解 压缩程序,并且相同数据结构类别或者相同数据结构类型的第三数据结构可以使用不解压 缩。
[0117] 在另一个实施例中,读取数据流水线108包括读取程序模块338,其包括读取数据 流水线108内的一个或者多个用户自定义的功能。读取程序模块338具有和写入程序模块 310类似的特征并且允许用户向读取数据流水线108提供自定义的功能。读取程序模块338 可以位于如图3所示的位置,也可以位于读取数据流水线108内的其他位置,或者可以包括 在读取数据流水线108内的多个位置处的多个部分。另外,可以有位于读取流水线108内 的多个位置的、独立工作的多个读取程序模块338。本领域技术人员将会意识到读取数据流 水线108内的其他形式的读取程序模块338。和写入数据流水线106-样,可以重新设置读 取数据流水线108的阶段,并且本领域技术人员将会意识到读取数据流水线108内的其他 顺序的阶段。
[0118] 存储控制器104包括控制和状态寄存器340和相应的控制队列342。控制和状态 寄存器340和控制队列342有助于对命令和子命令进行控制和排序,所述命令和子命令与 在写入数据流水线106和读取数据流水线108中处理的数据相关。例如,打包器302中的 数据段可以具有在与ECC生成器304相关的控制队列342中的一个或者多个相应的控制 命令或者指令。当对数据段进行打包时,可以在打包器302内执行某些指令或者命令。当 将从数据段产生的、新形成的数据包传送到下一个阶段时,可以通过控制和状态寄存器340 将其他命令或者指令传送到下一个控制队列342。
[0119] 可以同时将命令或者指令加载到用于正传送到写入数据流水线106的包的控制 队列342,当流水线阶段对各个包执行时,每个流水线阶段取出适当的命令或者指令。类似 地,可以同时将命令或者指令加载到用于读取数据流水线108正请求的包的控制队列342, 当流水线阶段对各个包执行时,每个流水线阶段取出适当的命令或者指令。本领域技术人 员将会意识到控制和状态寄存器340和控制队列342的其他特征和功能。
[0120] 存储控制器104和/或非易失性存储装置102还可以包括存储体交错控制器344、 同步缓冲器346、存储总线控制器348和多路复用器("MUX")350。
[0121] 在某些实施例中,虚拟存储层提供便于存储客户端执行持久存储操作的界面。虚 拟存储层可以简化存储客户的数据存储操作并且表现出加强的存储特征,例如,可分性、食 物支持、恢复等。图4描述了包括虚拟存储层(VSL)430的系统400的一个实施例,所述虚 拟存储层(VSL)将非易失性存储装置402的逻辑地址空间呈现给在计算装置401上运行的 存储客户端应用程序412。计算装置401可以包括处理器、非易失性存储、存储器、人机交互 (HMI)部件、通信接口(用于通过网络420进行的通信)等。
[0122] 非易失性存储装置402可以包括单个非易失性存储装置、可以包括多个非易失性 存储装置、存储器群组或者其他合适的配置。虚拟存储层430可以驱动程序、用户空间应用 程序等。在某些实施例中,结合上述的驱动程序118实现虚拟存储层430。虚拟存储层430 和/或存储客户端412可以体现为存储在非易失性存储装置上的指令。
[0123] VSL 430可以保持逻辑地址空间,并且通过VSL 430 (VSL接口 436)提供的一个或 者多个接口和/或API将所述逻辑地址空间呈现给存储客户端412。存储客户端412可以 包括但不限于:操作系统、虚拟操作系统(例如,客户机操作系统、管理程序等)、文件系统、 数据库应用程序、服务器应用程序、通用应用程序等。在某些实施例中,运行在远程计算装 置450上的一个或者多个存储客户端452通过网络420访问VSL 430。
[0124] VSL 430被配置为在可以包括如上所述的非易失性存储装置的非易失性存储装置 402上执行持久存储操作。VSL 430通过通信总线421与非易失性存储装置402通信,所述 通信总线421包括但不限于:PCE-e总线、网络连接(例如,无线带宽(Infiniband))、存储网 络、光纤信道协议(FCP)网络、HyperSCSI等。可以根据非易失性存储装置402的容量和/ 或配置来配置存储操作。例如,如果非易失性存储装置402包括一次性写入、块可擦除的装 置,VSL 430就可以被配置为相应的地执行存储操作(例如,在初始化的或者擦除的存储位 置等上的存储数据)。
[0125] 在某些实施例中,VSL 430访问存储元数据434,以保持逻辑地址空间432中的逻 辑标识符(例如,块)和非易失性存储装置402上的物理存储位置之间的联系。如本文所使 用的,物理存储位置可以指非易失性存储装置402的任何存储位置,其可以包括但不限于: 存储分区、擦除块、存储单元、页面、逻辑页面、逻辑擦除块等。
[0126] VSL 430保持逻辑地址空间432中的逻辑标识符和非易失性存储装置402上的物 理存储位置之间的"任意到任意"的分配。VSL 430可以导致数据被写入或者更新到非易失 性存储装置402上的"非原址"("out-of-place")。在某些实施例中,顺序的并且以基于 日志的格式存储数据。将数据存储到"非原址"提供了损耗均衡的好处,并且体现了很多非 易失性存储装置的"一次性擦除和编程"的性能。此外,非原址写入(以及将数据写入到逻 辑存储位置而不是单个页面)体现了非易失性存储装置402的非对称特性。非对称特性是 指不同的存储操作(读取、写入、擦除)占用的时间量不同的概念。例如,将数据编程到非 易失性存储介质410占用的时间长至是从固态存储元件介质410读取数据所占用的时间的 10倍。此外,在某些情况下,只能将数据编程到首先经过初始化处理(例如,擦除)的物理 存储位置。擦除操作占用的时间长至编程操作占用的时间的10倍(并且比读取操作所占 用的时间要延长100倍)。逻辑地址空间432中的逻辑标识符和非易失性存储装置402上 的物理存储位置之间的关系保存在存储元数据434中。
[0127] 在某些实施例中,VSL 430使得数据以顺序的、基于日志的格式保存到非易失性存 储器402上。顺序的、基于日志的存储可以包括持续在非易失性存储装置402上执行的存 储操作的顺序。在某些实施例中,数据与持久性元数据一起存储,所述持久性元数据和数据 本身一起保存到非易失性存储装置402上。例如,可以使用存储在非易失性存储装置402 和/或非易失性存储装置402的当前存储位置(例如,下面讨论的附加点)的序列标识符 来保持存储操作执行的顺序。
[0128] 以顺序的、基于日志的格式持久数据可以包括将元数据持久在描述所述数据的非 易失性存储装置402上。持久性元数据可以与数据本身一起存储(例如,同样的程序和/ 或存储操作和/或在非易失性存储装置402支持的最小写入单元中);从而可以保证持久 性元数据和它描述的数据一起存储。在某些实施例中,数据以容器格式(例如,包、ECC码 字等)存储。持久性元数据可以作为数据的包格式的一部分(例如,作为包头、包尾或者包 内的其他字段)包括在其中。可选地或者另外地,部分持久性元数据可以和它描述的数据 分开存储。在这种情况下,持久性元数据可以链接到(或者参考)它描述的数据(反之亦 然)。
[0129] 持久性元数据描述数据并且可以包括但不限于:数据的逻辑标识符(或者其他标 识符)、安全或者访问控制参数、序列信息(例如,序列标识符)、持久性元数据标志(例如, 指示包括在原子量级存储操作中)、事务标识符等。持久性元数据可以包括重建存储元数据 434的某些部分和/或重放在非易失性存储装置402上执行的存储操作的顺序。
[0130] 按照本文描述的顺序的、基于日志的格式存储的数据可以包括在非易失性存储 装置402上执行的存储操作的"事件日志"。因此,VSL 430通过访问以与事件日志的顺 序相匹配的特定顺序存储在非易失性存储介质410上的数据,可以能重放在非易失性存 储装置402上执行的存储操作的顺序。当发生无效的断开(或者其他故障情况)时,顺 序的、基于日志的数据格式使VSL 430能够重建存储元数据434和其他数据。下述专利 文献描述了用于尽管在非法关闭的情况下仍然能够进行故障修复和/或保证数据完整性 的设备、系统和方法的例子:2010年12月17日申请的、名称为"APPARATUS, SYSTEM, AND METHOD FOR PERSISTENT MANAGEMENT OF DATA IN A CACHE DAVICE" 的美国临时专利申 请 No. 61/424, 585 和 2010 年 12 月 20 日申请的、题为 "APPARATUS, SYSTEM, AND METHOD FOR PERSISTENT MANAGEMENT OF DATA IN A CACHE DAVICE" 的美国临时专利申请 No. 61/425, 167,通过引用的方式将其作为整体合并于本文中。在某些实施例中,非易失性 存储装置402包括辅助电源407 (例如,电池、电容器等),在发生了非法关闭的情况下,所 述辅助电源407为存储控制器404和/或非易失性存储介质410供电。非易失性存储装置 402 (或者控制器404)从而可以包括"保护域"或者"断电安全域"(由辅助电源407定义)。 一旦在非易失性存储装置的保护域将数据传输到所述非易失性存储装置,便可以保证数据 持久存储到非易失性存储介质410。可选地或者另外地,存储控制器404可以能执行独立于 主机计算装置401的存储操作。
[0131] VSL 430实现的顺序的、基于日志的存储格式为存储在非易失性存储器402上的 数据和存储元数据434提供故障修复和/或保证数据的完整性。在非法关闭和重建操作之 后,VSL 430可以使重建的存储元数据434暴露于存储客户端412。存储客户端412从而可 以将故障修复和数据的完整性委托给VSL 430,这样可以显著地简化存储客户端412和/或 允许存储客户端412更有效的工作。例如,文件系统存储客户端412可以要求对它的某些 元数据(例如,I节点表、文件分配表等)执行故障修复和/或数据完整性业务。存储客户 端412可能不得不实现这些业务本身,这可能显著的增加存储客户端412的负担和/或复 杂性。存储客户端412可以通过将故障修复和/或数据的完整性委托给VSL 430来解除这 种负担。如上所述,VSL 430以顺序的、基于日志的格式存储数据。这样,在发生无效关闭的 情况下,VSL 430能够重建存储元数据434,和/或通过使用非易失性存储装置402上的顺 序的、基于日志格式的数据识别数据的"当前"版本。VSL 430提供通过VSL接口 436对重 建的存储元数据434和/或数据的访问。因此,在非法关闭之后,文件系统存储客户端412 可以访问故障修复后的文件系统元数据和/或可以保证通过VSL 430访问的文件数据的完 整性。
[0132] 逻辑地址空间432可以是"稀疏的",这表示逻辑地址空间432足够大,大到分配 的/指定的逻辑标识符是不连续的并且被一个或者多个未分配的/未指定的地址的部分分 开,这样,包括的逻辑容量就可以超过非易失性存储装置402的物理存储容量。因此,可以 独立于非易失性存储装置402定义逻辑地址空间432 ;逻辑地址空间432可以提供比非易 失性存储装置402的物理存储容量更大的地址空间,与非易失性存储装置402提供的存储 位置分区和块大小相比,可以提供不同的存储位置分区和/或块大小,等等。逻辑地址空间 432和非易失性存储器402之间的联系由VSL 430管理(使用存储元数据434)。存储客户 端412可以利用VSL接口 436,而不是特定非易失性存储装置402提供的更加有限的块存储 层和/或其他存储接口。
[0133] 在某些实施例中,逻辑地址空间432可以非常大,其包括64比特的逻辑标识符 (LID)标注的64比特的地址空间。逻辑地址空间432 (例如,64比特的地址)中的每个64 比特的逻辑标识符标注各个虚拟存储位置。如本文所使用的,虚拟存储位置是指逻辑存储 容量块(例如,分配块)。VSL 430可以被配置为实现任意容量的虚拟存储位置;典型的容 量范围是从512到4086字节(或者基于存储客户端412的需求,甚至从8kb到16kb);然 而,本公开并不限于此。由于逻辑地址空间432(和其中的虚拟存储位置)独立于非易失性 存储装置402的物理存储空间和/或存储分区,所以逻辑地址空间432可以适合存储客户 端412的要求。
[0134] VSL 430可以使用存储元数据434管理逻辑地址空间内的分配。在某些实施例中, VSL 430保持存储元数据434,所述存储元数据434使用正向索引跟踪逻辑地址空间432的 分配。VSL 430可以分配逻辑地址空间432内的存储范围,以供特定存储客户端412使用。 逻辑标识符可以分配给特定存储客户端412以持久存储实体。如本文所使用的,存储实体 是指能够对于非易失性存储装置402持久的逻辑地址空间412中的任何数据或者数据结 构;因此,存储实体可以包括但不限于:文件系统对象(例如,文件、流、I节点等)、数据库 基元(例如,数据库表格、盘区等)、流、持久性存储空间、存储器映射文件等。存储器实体还 可以指虚拟存储单元(VSU)。文件系统对象是指文件系统使用的任何数据结构,所述数据结 构包括但不限于:文件、数据流、文件属性、文件索引、卷索引、节点表等。
[0135] 如上所述,分配逻辑标识符是指为特定用户或者存储客户端预留逻辑标识符。逻 辑标识符可以指一组或者一系列逻辑地址空间432(例如,一组或者一系列虚拟存储位 置)。可以通过逻辑地址空间432的虚拟存储位置的大小确定分配的逻辑标识符的逻辑容 量。如上所述,逻辑地址空间432可以被配置为提供任何预定大小的虚拟存储位置。可以 通过一个或者多个存储客户端412、VSL 430等配置虚拟存储位置的大小。
[0136] 然而,除非需要,分配的逻辑标识符可以不必与非易失性存储装置402上的物理 存储位置相关,和/或可以不必将分配的逻辑标识符指定给所述物理存储位置。在某些实 施例中,VSL 430所分配的逻辑标识符包括了逻辑地址空间432中的大的、连续的范围。通 过VSL 430提供的大逻辑地址空间(例如,64比特地址的空间)实现逻辑地址空间中的大 的、连续的范围的可行性。例如,VSL 430可以将分配给文件的逻辑标识符与用于文件的数 据的逻辑地址空间432中的地址范围为2~32的连续虚拟存储位置相关。如果每个虚拟存 储位置(例如,分配块)是512个字节,则分配的逻辑标识符可以表示2兆兆字节的逻辑容 量。非易失性存储装置402的物理存储容量可以小于2兆兆字节和/或可以仅足够存储少 量的这种文件,这样如果逻辑标识符分配导致物理存储空间的等效分配,VSL 430就将很快 消耗光非易失性存储装置402的容量。然而,有利的是,VSL 430被配置为分配逻辑地址空 间432内的大的、连续的范围,并且延迟将非易失性存储装置402上的物理存储位置分配给 逻辑标识符,直到需要的时候才进行分配。类似地,VSL 430可以支持使用"稀疏"分配的 逻辑范围。例如,存储客户端412可以请求第一数据段持久保存在分配的逻辑标识符的"包 头"和第二数据段持久保存在分配的逻辑标识符"尾部"。VSL 430可以仅分配非易失性存 储装置402上的、需要持久保存第一和第二数据段的那些物理存储位置。对于不用于持久 保存数据的分配的逻辑标识符,VSL 430可以不为该逻辑标识符分配或者预留在非易失性 存储装置402上的物理存储位置。
[0137] VSL 430保持存储元数据,以跟踪逻辑地址空间中的分配并且跟踪逻辑地址空间 432中的逻辑标识符和非易失性存储介质410上的物理存储位置之间的分配。在某些实施 例中,VSL 430使用单个元数据结构跟踪逻辑分配和物理存储位置的分配。可选地或者另 外地,VSL 430可以被配置为使用独立的物理预留元数据跟踪逻辑分配元数据中的逻辑分 配并且跟踪非易失性存储介质410上的物理存储位置的分配。
[0138] 存储客户端412可以通过VSL接口 436访问VSL 430。在某些实施例中,存储客户 端412可以将特定功能委托给VSL。例如,如上所述,存储客户端412可以利用VSL 430的 顺序的、基于日志的数据格式来将故障修复和/或数据完整性功能委托给VSL 430。在一些 实施例中,存储客户端可以将逻辑地址空间432和/或物理存储预留委托给VSL 430。
[0139] 通常,存储客户端412 (例如,文件系统)跟踪可用的逻辑地址和/或物理存储位 置。可以将存储客户端412可用的逻辑存储位置限制到底层非易失性存储装置的物理存储 容量(或者其中的分区)。因此,存储客户端412可以保持"反映"非易失性存储装置的物 理存储位置的一组逻辑地址。例如,如图4所示,存储客户端412可以为新文件识别一个或 者多个可用的逻辑块地址(LBA)。因为在传统的实现中LBA可以直接映射到物理存储位置, 所以LBA不太可能是连续的;连续LBA的可用性可以依赖于底层块存储装置的容量和/或 该文件是否是"碎片"。存储客户端412随后执行块级操作,以特别是通过块存储层(例如, 块除冰接口)存储文件。如果底层存储装置提供逻辑块地址和物理存储位置之间一对一的 映射,则和传统存储装置一样,块存储层执行适当的LBA到物理地址的转换并且执行请求 的存储操作。然而,如果底层非易失性存储装置不支持一对一的映射(例如,底层存储装置 是顺序的或者写入不合适位置的装置,例如,根据本公开实施例的非易失性存储装置),则 需要另一组冗余的转换(例如,闪存转换层或者其他映射)。该组冗余的转换和对存储客 户端412保持逻辑地址分配的要求可以表示给存储客户端412执行的存储操作的繁重的负 担,并且可以使得不进行费时的"碎片整理"操作就很难或者不可能分配连续的LBA范围。
[0140] 在某些实施例中,存储客户端412将分配功能委托给VSL 430。存储客户端412 可以访问VSL接口 436以请求逻辑地址空间432中的逻辑范围。VSL 430使用存储元数据 434跟踪逻辑地址空间432的分配状态。如果VSL 430确定请求的逻辑地址范围还没有被 分配,VSL 430就为存储客户端412分配请求的逻辑地址范围。如果请求的范围已经被分 配(或者只有部分范围还没有被分配),VSL 430就可以返回逻辑地址空间432中的替换的 范围和/或可以返回失败信息。在某些实施例中,VSL 430可以返回逻辑地址空间432中 的替换的范围,该替换的范围包括连续范围的逻辑地址。具有连续范围的逻辑地址通常简 化了存储实体关于逻辑地址范围的管理。由于VSL 430使用存储元数据保持逻辑地址空间 432和非易失性存储装置402上的物理存储位置之间的关系,所以不需要一组冗余的地址 转换。此外,VSL 430使用存储元数据434识别未分配的逻辑标识符,这使存储客户端412 摆脱了这种负担。
[0141] 在某些实施例中,VSL 430如上所述的在逻辑地址空间432内进行分配。VSL 430 可以访问包括分配的逻辑地址范围的索引(例如,图5的正向索引)以识别未分配的逻辑 标识符,在接收到请求时将所述未分配的逻辑标识符分配给存储客户端412。例如,VSL 430 可以如上所述的保持包括范围编码(range-coded)的树型数据结构的存储元数据434;树 中的条目可以表示逻辑地址空间432中的分配的逻辑标识符,并且树中的"孔"表示没有分 配的逻辑标识符。可选地或者另外地,VSL 430保持可以分配给存储客户端的未分配的逻 辑标识符的索引(例如,不需要搜索正向索引)。
[0142] 图5描述了存储元数据,特别是正向索引的一个例子,所述正向索引504保持一个 或者多个非易失性存储装置(例如,上文描述的存储装置106)的逻辑地址空间的分配。正 向索引504可以被进一步地配置为保持分配的逻辑标识符和非易失性存储装置上的物理 存储位置之间的分配。可以由VSL 430、存储控制器(例如,上文描述的存储控制器404)和 /或驱动器(例如,上文描述的驱动器118)等保持正向索引504。
[0143] 在图5的例子中,数据结构504实现为范围编码的B树(B-tree)。然而本公开并 不限于此;可以使用合适的数据结构实现正向索引504,所述数据结构包括但不限于:树、B 树、范围编码的B树、基数树、映射、内容可寻址映射(CAM)、表、哈希表或者其他合适的数据 结构(或者数据结构的组合)。
[0144] 正向索引504包括多个条目505(条目505A-G),每个条目代表逻辑地址空间中的 一个或者多个逻辑标识符。例如,条目505B引用逻辑标识符515 (LID 072-083)。数据可 以顺序地或者"在不合适位置"存储到非易失性存储装置上,这样,就可能没有逻辑标识符 和物理存储位置之间的对应关系。正向索引504保持分配的逻辑标识符和物理存储位置 之间的分配(例如,使用物理存储位置参考517)。例如,参考517B将逻辑标识符515 (LID 072-083)分配给非易失性存储装置的一个或者多个物理存储位置。在某些实施例中,参考 517包括非易失性存储装置上的物理地址。可选地或者另外地,参考517可以对应于第二数 据结构(例如,反向索引)等。可以响应于数据的物理存储位置的改变(例如,由于清理操 作、数据更新、修改、覆盖等)而更新参考517。
[0145] 在某些实施例中,一个或者多个条目505可以表示已经分配给存储客户端但是还 没有分配给任何特定物理存储位置的逻辑标识符(例如,存储客户端还没有使数据写入到 逻辑标识符)。可以将未分配的条目的505的物理存储位置参考517标记为"空"或者没有 分配。
[0146] 通过边界507将条目505被安排到树数据结构中。在某些实施例中,通过逻辑标 识符对条目505进行索引,这提供了对条目505的快速有效的查找。在图5的例子中,按照 逻辑标记符的顺序安排条目505,这样,条目505C就引用"最低的"逻辑标识符而505G引用 "最高的"逻辑标识符。通过遍历正向索引504的边界507访问特定条目505。在某些实施 例中,将正向索引504均衡,以便所有叶条目505在树内都具有相似的深度。
[0147] 为了清楚起见,图5示例性地描述了包括多个逻辑标识符的条目505,然而,本公 开并不限于此,并且本领域技术人员将会意识到,条目505可以包括任何合适的逻辑标识 符表示,包括但不限于:字母-数字字符、十六进制字符、二进制值、文本标识符、哈希码等。
[0148] 索引504的条目505可以引入可变大小和/或长度的逻辑标识符;单个条目51205 可以引入多个逻辑标识符(例如,一组逻辑标识符、逻辑标识符范围、不连续的一组逻辑标 识符等)。例如,条目505B表示连续范围的逻辑标识符072-083。索引504的其他条目可 以表示一组不连续的逻辑标识符;条目505G表示逻辑标识符454-477和535-598,通过各 个参考517G和527G为各个逻辑标识符分配各自的物理存储位置。正向索引504可以使用 任何合适的技术表示逻辑标识符;例如,条目50?引入逻辑标识符178和对应于逻辑标识 符范围178-192的长度15。
[0149] 在某些实施例中,条目504包括和/或参考元数据519,所述元数据519可以包括 关于逻辑标识符的元数据,例如:年限、大小、逻辑标识符属性(例如,客户端标识符、数据 标识符、文件名、组标识符)、底层物理存储位置等。可以通过逻辑标识符(通过与各个条目 505相关的逻辑标识符)对元数据519进行索引,这样,无论数据的底层物理存储位置的位 置如何变化,元数据519仍然可以保持与条目505的联系。
[0150] 索引504可以用于有效地确定非易失性存储装置是否包括特定的逻辑标识符。在 一个例子中,存储客户端可以请求分配特定的逻辑标识符。如果索引504包括条目505,所 述条目505包括请求的逻辑标识符,则认为与请求相关的该逻辑标识符可以被识别为已经 分配。如果逻辑标识符没有在索引中,则可以通过在索引504中创建新条目505来将所述 逻辑标识符分配给请求者。在另一个例子中,存储客户端请求特定逻辑标识符的数据。通 过访问条目505的代表物理存储位置的参考517,可以确定数据的物理存储位置,其中,所 述条目505包括逻辑标识符。在另一个例子中,客户端修改关于逻辑标识符的数据。在另 一个例子中,存储客户端修改特定逻辑标识符的现有数据。修改后的数据被顺序地写入到 非易失性存储装置上的新的物理存储位置,并且更新索引504中的条目505的物理存储位 置参考517以引入新数据的物理存储位置。可以将过期的数据标记为要在清理操作中进行 回收的无效数据。
[0151] 图5的正向索引保持逻辑地址空间,这样,就通过逻辑标识符对逻辑地址空间进 行索引。如上所述,索引504中的条目505可以包括代表非易失性存储装置上的物理存储 位置的参考517。在某些实施例中,参考517可以包括物理存储位置的物理地址(或者地址 范围)。可选地或者另外地,参考517可以是间接的(例如,引入第二数据结构,如反向索 引)。
[0152] 图6描述了用于保持关于非易失性存储装置的物理存储位置的元数据的反向索 弓丨622的一个例子。在图6的例子中,反向索引622实现为表格数据结构。然而,本公开并 不限于此,而是可以使用任何合适的数据结构实现反向索引622。例如,在某些实施例中, 利用上文描述的正向索引504在相同的数据结构中实现反向索引622 (例如,将反向索引 622的部分和/或条目可以作为正向索引504的叶条目包括在内)。索引622包括多个条 目620 (描述为表格数据结构622中的行),每个条目可以包括条目ID 624、物理地址626、 与存储在物理非易失性存储介质410上的物理地址626的数据相关的数据长度628 (在这 种情况下,数据是压缩数据)、有效标签630、与数据相关的逻辑地址632、与逻辑地址632相 关的数据长度634、以及其他杂项数据636。在另一个实施例中,反向索引622可以包括指 示物理地址626是否存储脏数据或者干净数据等的指示符。
[0153] 可以根据特定非易失性存储装置的配置和/或布置组织反向索引622。因此,可以 通过存储分区(例如,擦除块)、物理存储位置(例如,页面)、逻辑存储位置等来布置反向 索引622。在图6的例子中,将反向索引622布置成多个擦除块阳40、638和642),每个擦 除块包括多个物理存储位置(例如,页面、逻辑页面等)。
[0154] 条目620包括关于物理存储位置的元数据,所述物理存储位置包括图5的条目 505F的数据。条目620指示物理存储位置位于擦除块η 638内。擦除块η 638之前是擦除 块η-1640,之后是擦除块η+1642 (没有示出擦除块η-1和η+1的内容)。
[0155] 条目ID 624可以是地址、虚拟链接、或者将反向索引622中的条目与正向索引504 中的条目相关联的其他数据(或者其他存储元数据)。物理地址626指示非易失性存储装 置(例如,非易失性存储介质410)上的物理地址。与物理地址626相关的数据长度628标 识存储在物理地址626的数据的长度。可以将物理地址626和数据长度628 -起称作目标 参数644。
[0156] 可以将逻辑标识符632和数据长度634称作源参数646。利用逻辑地址空间的逻 辑标识符将逻辑标识符632与条目相关联。逻辑标识符632可用于将反向索引622的条目 与正向索引504的条目505相关联。数据长度624是指逻辑地址空间中的数据长度(例如, 从存储客户端的角度来看)。特别是由于数据压缩、包头开销、加密开销等,源参数646数据 长度634可以与源参数644数据长度634不同。在图6的例子中,与条目620相关的数据 是可以高度压缩的,并且可以从逻辑地址空间中的64个块压缩到非易失性存储装置上的1 个块。
[0157] 有效标签630指示映射到条目620的数据是否有效。在这种情况下,与条目60相 关的数据是有效的,并且在图6中将其描述为条目620的行中的"Y"。如本文所使用的,有 效数据是指最新更新的还没有被删除和/或还没有使其过期(覆盖或者修改)的数据。反 向索引622可以跟踪非易失性存储装置的每个物理存储位置的有效状态。正向索引504可 以包括只对应于有效数据的条目。在图6的例子中,条目"Q" 648指示与条目648相关的 数据是无效的。需要指出的是,正向索引504不包括与条目Q 648相关的逻辑地址。条目 Q 648可以对应于条目505C的数据的过期版本(由现在存储在条目"C"的数据覆盖)。
[0158] 反向索引622可以保留无效数据的条目,以便在存储恢复(例如,清理)时可以快 速区分有效和无效数据。在某些实施例中,正向索引504和/或反向索引622可以以类似 的方式跟踪脏数据和干净数据,以在当进行作为高速缓冲的操作时从干净数据中区分中脏 数据。
[0159] 在某些实施例中,反向索引622可以省略源参数646。例如,如果源参数646与数 据一起存储,其可能位于存储的数据的包头中,反向索引622就可以通过包括与数据相关 的物理地址626标识逻辑地址,其中,可以从存储的数据识别出源参数646。
[0160] 反向索引622还可以包括其他杂项数据636,例如,文件名、对象名、源数据、存储 客户端、安全标记、原子性标记、事务标识符等。本领域技术人员将会意识到反向索引622 中有用的其他信息。尽管物理地址626图示在反向索引622中,但是在其他实施例中,物理 地址626或者其他目标参数644可以包括在其他位置,例如,包括在正向索引604、中间表格 或者数据结构等中。
[0161] 可以通过擦除块或者擦除区域(或者其他存储分区)布置反向索引622,以便遍历 一部分索引允许清理器识别特定存储分区(例如,擦除块638)中的有效数据并且对有效数 据的数量进行量化、或者反之,识别无效数据并且对无效数据的数量进行量化。清理器可以 部分地基于每个分区中的有效和/或无效数据的数量来选择要恢复的存储分区。
[0162] 在某些实施例中,将清理器和/或垃圾收集处理限制为在物理存储空间的特定部 分内执行。例如,部分存储元数据434可以周期性的持久存储到非易失性存储装置402,从 而可以将垃圾收集器和/或清理器限制到运行在对应于持久性存储元数据434的物理存储 位置上。在某些实施例中,通过相对年限(例如,按照顺序)来持久保存存储元数据434,在 更加新的部分保留在非易失性存储器中的同时,持久保存较老的部分。因此,可以将清理器 和/或垃圾收集系统限制为对物理地址空间的较老的部分执行操作,这样,就不太可能会 影响进程存储请求的数据。
[0163] 再次参考图4,非易失性存储装置402可以被配置为以顺序的、基于日志的格式将 数据存储到非易失性存储装置410上。因此,非易失性存储装置的内容可以包括在非易失 性存储介质410上的存储操作的有顺序的"事件日志"。通过在非易失性存储装置402的物 理存储空间内的附加点附加数据,可以保持存储操作的顺序排序。可选地或者另外地,可以 通过存储在非易失性存储介质410上的持久性数据来保持序列信息。例如,非易失性存储 介质410上的每个存储分区(例如,擦除块)可以包括各自的指示符(例如,时间戳、序列 号或者其他指示符),以指示事件日志内的存储分区的顺序或者次序。
[0164] 图7描述了非易失性存储介质(例如,非易失性存储介质410)的物理存储空间 700。物理存储空间700被安排在存储分区(例如,擦除块)中,每个存储分区包括能够存 储数据的多个物理存储位置(例如,页面或者逻辑页面)。可以将存储分区的页面初始化 (例如,擦除)为组。
[0165] 可以为每个物理存储位置分配范围从0到N的各自的物理地址。数据顺序得存储 在附加点720。附加点720可以顺序地移动通过物理存储空间700。在将数据存储在附加 点720(存储位置716)之后,附加点顺序地前进到下一个可用的物理存储位置。如本文所 使用的,可用的物理存储位置是指已经初始化并且准备存储数据(例如,已经被擦除)的物 理存储位置。某些非易失性存储介质(例如,非易失性存储介质410)在擦除之后只能编程 一次。因此,如本文所使用的,可用的物理存储位置可以指处于初始化(例如,擦除的)状 态的存储位置。如果序列中的下一个存储位置不可用(例如,包括有效数据、还没有被擦除 或者初始化、业务中断等),附加点720就选择下一个可用的物理存储位置。在图7的例子 中,在将数据存储到物理存储位置716之后,附加点720可以跳过不可用的存储分区713并 且继续到下一个可用位置(例如,存储分区714的物理存储位置717)。
[0166] 将数据存储到"最后的"存储位置(例如,存储分区815的存储位置N 718)之后, 附加点720返回到第一分区712 (或者如果712不可用,就返回到下一个可用的存储分区)。 因此,附加点720可以将物理地址空间视为循环的或者周期的。
[0167] 再次参考图4,以顺序的、基于日志的格式存储数据可以包括将元数据持久存储到 描述存储在其上的数据的非易失性存储介质410上。持久性元数据可以包括与数据相关的 逻辑标识符和/或提供与非易失性存储介质410上执行的存储操作的顺序排序有关的序列 信息。因此,该顺序的、基于日志的数据可以代表跟踪在非易失性存储装置402上执行的存 储操作的顺序的"事件日志"。
[0168] 图8描述了顺序的、基于日志数据的格式(包格式810)的一个例子。数据包810 包括数据段812,所述数据段812包括一个或者多个逻辑标识符的数据。在某些实施例中, 数据段812包括压缩的、加密的和/或白化的数据。如本文所使用的,"白化的数据"指偏置 的、编码的和/或被配置为具有特定模式和/或统计特性的数据。此外,可以将数据段812 编码为一个或者多个错误校正码数据结构(例如,ECC代码字)和/或符号。数据段812可 以是预定的大小(例如,固定的"块"或者"数据段"大小)。可选地,数据段812的大小可 以是可变的。
[0169] 包810包括存储在非易失性存储介质上的持久性元数据814。在某些实施例中,持 久性元数据814与数据段812 -起存储(例如,作为包包头、包尾等)。持久性元数据814 可以包括逻辑标识符指示符815,其标识数据段812所属的逻辑标识符。逻辑标识符指示符 815可以用于重建存储元数据,例如,正向索引(例如,正向索引504)和/或反向索引(例 如,反向索引622)。持久性元数据814可以进一步包括一个或者多个元数据标记817。如 下文所述,标记817可用于支持原子量级存储操作、事务、缓存操作等。
[0170] 在某些实施例中,包810与序列指示符818相关联。序列指示符818可以和包810 一起持久存储到存储位置(例如,页面)和/或持久存储到包810的存储分区(例如,擦 除块)。可选地,序列指示符818可以持久存储到独立的存储位置。在某些实施例中,当使 存储分区可用时(例如,当初始化、擦除时,当第一个或者最后一个存储位置被编程时,等 等),应用序列指示符。序列指示符818可用于确定非易失性存储装置上的存储操作的顺序 排序。顺序的、基于日志的数据格式提供非易失性存储装置(例如,非易失性存储装置402) 上的存储操作的"事件日志"。
[0171] 再次参考图4,在发生无效关闭(或者导致部分存储元数据434丢失的其他事件) 的情况下,本文公开的顺序的、基于日志的格式使VSL 430能够重建存储元数据434和其他 数据。
[0172] 如上所述,存储元数据434(例如,图5的正向索引504)保持逻辑标识符和非易失 性存储装置上的物理存储位置之间的"任意到任意"的分配。因此,逻辑标识符和非易失性 存储介质410上的物理存储位置之间可能没有预先确定的映射;逻辑标识符的数据可以存 储到非易失性存储介质410的任意物理存储位置。
[0173] 如上所述,可以通过存储在非易失性存储装置402上的顺序的、基于日志的数据 来重建存储元数据434。基于附加点的位置和/或与数据相关的序列指示符来识别最新版 本的数据。在重建期间,可以使用如图8所示的与数据相关的持久性元数据识别(并且丢 弃)与不完整的原子量级存储请求相关的数据。
[0174] 在某些实施例中,系统400可以包括缓存层440,其被配置为使用非易失性存储装 置402缓存后备存储器460的缓存数据。后备存储器460可以包括一个或者多个硬盘、网 络附属存储器(NAS)、存储区域网络(SAN)或者其他持久性存储器。后备存储器460可以包 括能够对存储客户端412的数据进行存储的多个物理存储位置461。后备存储器460可以 通信地耦合到计算装置401的总线421。可选地或者另外地,后备存储器460可以通过网络 420通信地耦合到计算装置401 (和VSL 430)。
[0175] 缓存层440可以被配置为利用VSL 430将后备存储器460的数据缓存到非易失性 存储介质410上。在某些实施例中,VSL 430被配置为提供对应于后备存储器460的地址 空间的逻辑地址空间432。从而,逻辑地址空间432可以对应于后备存储器461的物理存储 位置461。因此,VSL 430可以保持存储元数据434,以将后备存储器469的逻辑标识符和 非易失性存储介质410上的缓存数据的存储位置(例如,非易失性存储装置402上的物理 存储位置)相关联。逻辑地址空间432可以具有与后备存储器460的物理存储容量相同的 逻辑容量。可选地,逻辑地址空间432可以是"稀疏的",以使其超过后备存储器460的物理 存储容量。逻辑地址空间432的逻辑容量(以及后备存储器460的物理容量)可以超过非 易失性存储装置402的物理容量。如上所述,VSL 430可以管理非易失性存储介质402的 逻辑地址空间432和物理存储容量的分配。在某些实施例中,VSL 430可以提供多个逻辑 地址空间432,每个逻辑地址空间对应于不同的后备存储器460和/或不同的存储客户端 412。VSL 430可以为每个逻辑地址空间432保持独立的存储元数据434。
[0176] 缓存层440可以利用逻辑地址空间432和VSL 430保持的存储元数据434缓存后 备存储器460的数据。缓存层440可以使用后备存储器460的逻辑标识符(通过VSL 430 的逻辑地址空间432获得)引入非易失性存储介质410上的缓存数据。因此,缓存层440 可以不必保持它本身的存储元数据;缓存层可以不保持独立的索引来将后备存储器460的 逻辑标识符和非易失性存储介质410上的高速存储位置相关联。通过利用VSL 430的逻辑 地址空间432和存储元数据434,可以显著地减轻缓存层440的开销。
[0177] 缓存层440可以选择性地接纳后备存储器460的数据进入缓存。如本文所使用的, "接纳"数据进入缓存是指将数据缓存到非易失性存储介质410上。可以响应于导致缓存缺 失(例如,与请求有关的数据在非易失性存储装置402上并不是有效的-读取缺失或者写 入缺失)的数据访问而接纳数据进入缓存。可以响应于数据适合缓存(例如,将不会使缓 存中毒)的确定而接纳数据。如本文所使用的,适合缓存的数据是指一个或者多个存储客 户端412很可能随后访问的数据。相比之下,使缓存"中毒"是指接纳存储客户端412不太 可能随后请求的数据(例如,"一次性使用"的数据)进入缓存。如本文所使用的,数据访问 是指与数据相关的任何操作,包括但不限于:读取、写入、修改、截取等。
[0178] 缓存层440可以基于访问元数据442作出缓存接纳的决定。访问元数据442可以 包括与VSL 430提供的逻辑地址空间432内的逻辑标识符的数据访问特性相关的信息。访 问元数据442可以独立于VSL 430的存储元数据434。因此,可以在与存储元数据434(例 如,和正向索引、反向索引等独立和/或不同)分开和/或不同的数据结构中保持访问元数 据 442。
[0179] 访问元数据442可以包括与跨越VSL 430提供的整个逻辑地址空间432的访问特 性相关的信息。因此,访问元数据442可以包括与"缓存的"逻辑标识符相关的访问元数据 以及与"没有缓存的"逻辑标识符相关的访问元数据。如本文所使用的,"缓存的"逻辑标识 符是指缓存在非易失性存储介质410上的数据的逻辑标识符。"没有缓存的"逻辑标识符是 指当前没有缓存在非易失性存储介质410上的数据的逻辑标识符。与传统的"最近最少使 用"的缓存度量不同,访问元数据442可用于无论数据当前是否在缓存中都可识别适于缓存 的数据。
[0180] 缓存层440可被配置为响应于逻辑地址空间432内的数据访问而更新访问元数据 442。更新访问元数据442可以包括将访问请求的指示包括在访问元数据442中。在某些 实施例中,缓存层440包括缓存接纳模块444,其被配置为使用缓存访问元数据442作出缓 存访问决定(例如,识别适合缓存的数据)。在某些实施例中,缓存接纳模块444可以响应 于缓存缺失来确定逻辑标识符的访问度量(例如,关于逻辑标识符的数据访问请求),并且 当数据的访问度量满足"访问阈值"或者其他接纳标准时,可以接纳数据进入缓存。如本文 所使用的,逻辑标识符的"访问度量"是指量化逻辑标识符的访问特性(例如,访问频率等) 的任何值。访问度量可以包括但不限于:指示在预定的时间间隔内访问逻辑标识符的二进 制值、一组有序的这种二进制值、一个或者多个计数器值等。如本文所使用的,"访问阈值" 是指一个或者多个预定的或者动态的阈值,以及"接纳标准"是指用于选择性地接纳数据进 入缓存的预定的或者动态的标准(例如,阈值)。
[0181] 在某些实施例中,可以接纳不符合接纳标准(例如,访问阈值)的数据作为"低价 值"数据进入缓存。如本文所使用的,"低价值"是指尽管不满足缓存接纳标准仍然可以接 纳进入缓存的数据。可以响应于满足较不严格的缓存接纳标准(例如,较低的访问阈值) 的访问度量而接纳低价值数据进入缓存。低价值的数据的接纳可以以有可用的缓存容量或 者其他性能参数为依据。在其他较高价值的数据(例如,满足接纳标准的数据)之前,可以 将低价值的数据从缓存中清理出去。因此,可以在缓存内标记低价值的数据;接纳低价值的 数据进入缓存可以包括:将数据识别为非易失性存储介质410上的"低价值"的数据和/或 其他元数据。指示可以包括如上文结合图8所述的持久性元数据。可选地或者另外地,所 述指示可以包括在易失性缓存中,和/或包括在缓存层440和/或VSL 430保持的存储元 数据中。
[0182] 图9A描述了访问元数据的一个例子。在图9A的例子中,访问元数据442包括访问 数据结构946,所述访问数据结构946包括多个条目948,每个条目包括逻辑地址空间(例 如,上文所述的逻辑地址空间432)中的各个逻辑标识符的访问特性。因此,在某些实施例 中,数据结构946可以表示后备存储器460的整个地址空间;数据结构946可以包括表示后 备存储器460的每个物理存储位置461的条目948。访问数据结构946的条目948结合在 一起可以对应于地址空间中的、包括"缓存的"和"没有缓存的"逻辑标识符在内的所有逻 辑标识符(和后备存储器460的物理存储位置461)。访问数据结构946可以是稀疏的,以 便根据需要创建条目948 (或者条目948的范围)。因此,可以从来不创建和/或分配表示 特定范围的逻辑地址空间的条目(例如,逻辑地址空间的尾部)。
[0183] 在某些实施例中,访问数据结构946可以包括位图(或者位阵列),其中,每个条 目948都包括一个位。位值可以表示在特定的时间间隔期间,是否发生了与条目948的逻 辑标识符相关的一个或者多个数据访问。在时间间隔期满后,可以"复位"数据结构946。 如本文所使用的,"复位"访问数据结构946是指将访问指示从访问数据结构946中清理出 去(例如,将条目948复位为"0"值)。因此,"1"值可以表示在时间间隔期间发生了一个 (或者多个)数据访问,而"〇"值可以表示在时间间隔期间没有发生数据访问。
[0184] 在另一个例子中,条目948可以包括确定时间间隔期间的访问请求的次数的多位 计数器。在时间间隔(例如,时钟扫描间隔)期满后可以复位(或者递减)计数器。因此, 计数器的值可以表示在时间间隔期间与条目948的逻辑标识符相关的访问的次数(或者频 率)。
[0185] 再次参考图4,缓存层440可以被配置为基于与数据相对应的逻辑标识符的访问 度量选择性地接纳数据进入缓存。如上所述,可以从访问元数据442获得访问度量。在某 些实施例中,访问度量可以包括按位指示,其指示在时间间隔期间是否访问了逻辑标识符 的数据。可选地,访问度量可以包括与逻辑标识符相关的访问次数。缓存层440可以将访 问度量与访问阈值进行比较,并且当访问度量满足访问阈值时,可以接纳数据进入缓存。所 述比较可以包括:确定对应于逻辑标识符的位值是否表示数据访问,和/或可以包括:将多 位计数器值与多位访问阈值进行比较。
[0186] 在某些实施例中,访问元数据442可以包括一组有序的访问数据结构946。图9B 描述了一组有序的访问数据结构946A-N,其包括"当前"访问数据结构946A和一个或者多 个"先前"访问数据结构946B-N。每个访问数据结构946A-N可以包括各自的条目948,如 上所述,所述条目948包括一个或者多个逻辑标识符的访问特性。
[0187] 可以响应于在当前时间间隔期间的数据访问而动态地更新当前访问数据结构 946A。一个或者多个先前访问数据结构946B-N可以包括先前时间间隔的访问特性,并且 可以在当前时间间隔期间不进行动态更新。在当前时间间隔期间期满时,访问数据结构 946A-N可以翻转;"复位"数据结构可以取代当前数据结构946A,可以将当前访问数据结构 946A指定为先前数据结构946B (例如,取代原来的946B),数据结构946B可以取代946C,以 此类推。最后,可以移除数据结构946N(或者复位并且指定为当前数据结构946A)。
[0188] 可以通过合并访问数据结构946A-946N的条目确定逻辑标识符的访问度量。在某 些实施例中,所述合并可以包括加法运算,例如,逻辑或(0R)运算,以便访问度量反映对数 据结构946A-N的任何访问。如果以时间间隔"T"更新访问数据结构,则逻辑或合并指示在 N*T时间间隔期间发生的任何访问。加法运算可以指示在N*T时间间隔期间的访问频率。
[0189] 在某些实施例中,合并可以包括两个或者更多个数据结构946A-N的条目948的按 位合并。合并可以包括任何合适的合并,包括但不限于:逻辑和(AND)、或(0R)、异或(X0R) 等。类似地,合并可以包括两个或者更多个数据结构946A-N的条目948的和或者积。在某 些实施例中,合并可以包括根据它们的新近程度的加权访问特性;最近的访问特性的权重 可以大于较老的访问特性的权重。因此,当确定逻辑标识符的访问度量时,赋予更多个最近 的条目(例如,访问数据结构946B-N的特性)的访问特性的权重可以大于较老的数据结构 946B-N的访问特性的权重。如下面的等式1所示,确定访问度量可以包括访问特性乘以新 近参数(例如,通过左移访问特性位或者计数器值):
[0190]

【权利要求】
1. 一种管理非易失性存储装置的缓存的方法,所述方法包括: 利用由所述非易失性存储装置的存储层保持的索引将数据缓存到非易失性存储装置, 所述索引将对应于后备存储器的逻辑地址空间的逻辑标识符与所述非易失性存储装置的 物理存储位置相关联; 保持与所述索引分离的访问元数据,以指示所述逻辑地址空间内的逻辑标识符的访问 特性; 响应于访问所述逻辑标识符的数据的请求,更新所述访问元数据中的逻辑标识符的访 问度量;以及 响应于满足访问阈值的访问度量,接纳与所述逻辑标识符相关的数据进入缓存。
2. 根据权利要求1所述的方法,其中,所述访问元数据指示整个所述逻辑地址空间的 逻辑地址的访问特性,所述逻辑地址包括不对应于接纳进入所述缓存的数据的逻辑地址。
3. 根据权利要求2所述的方法,其中,访问数据结构包括多个条目,每个条目指示一个 或者多个逻辑标识符在各个时间间隔期间的访问特性。
4. 根据权利要求3所述的方法,其中,每个条目包括下述内容之一: 位图的单个位,所述单个位指示对对应于所述条目的一个或者多个逻辑标识符的访 问,以及 计数器,所述计数器指示对对应于所述条目的一个或者多个逻辑标识符的访问。
5. 根据权利要求3所述的方法,其中,每个条目指示相应的多个逻辑标识符的访问特 性,以及其中根据用户偏好确定对应于每个条目的逻辑标识符的数量。
6. 根据权利要求3所述的方法,其中,每个访问数据结构条目指示对多个逻辑标识 符的访问,所述方法进一步包括:使用下述方式之一将逻辑标识符映射到访问数据结构条 目: 哈希映射,其通过哈希函数将多个逻辑标识符中的每个逻辑标识符映射到相应的访问 数据结构条目; 连续范围映射,其将逻辑标识符的连续地址范围映射到相应的访问数据结构条目,以 及 混合映射,其通过哈希函数将多个连续范围的逻辑标识符中的每个逻辑标识符映射到 相应的访问数据结构条目。
7. 根据权利要求1所述的方法,其中,所述访问元数据包括一组有序的访问数据结构, 每个访问数据结构在相应的时间间隔期间跟踪逻辑标识符访问,所述一组有序的访问数据 结构包括当前访问数据结构和一个或者多个先前访问数据结构,所述方法进一步包括: 通过合并所述一组有序的访问数据结构中的访问数据,确定所述逻辑标识符的访问度 量。
8. 根据权利要求1所述的方法,其中,所述访问元数据包括一组有序的访问数据结构, 每个访问数据结构在相应的时间间隔期间跟踪逻辑标识符访问,所述一组有序的访问数据 结构包括当前访问数据结构和一个或者多个先前访问数据结构,所述方法进一步包括: 更新所述当前访问数据结构以指示逻辑标识符访问请求; 不考虑逻辑标识符访问请求的指示,响应于时间间隔触发,生成新的访问数据结构;以 及 利用所述一组有序的访问数据结构确定所述逻辑标识符的访问度量。
9. 根据权利要求1所述的方法,进一步包括: 确定对访问所述逻辑标识符的请求的序列度量,其中所述序列度量指示所述请求是顺 序数据访问的一部分的可能性;以及 响应于指示非顺序数据访问的序列度量,接纳所述数据进入所述缓存。
10. 根据权利要求1所述的方法,其中,保持所述访问元数据包括:在所述逻辑地址空 间中保持按时间排序的访问请求记录,所述方法进一步包括: 基于所述按时间排序的访问请求记录,确定所述逻辑标识符的序列度量,其中,所述序 列度量指示所述访问请求是顺序数据访问的一部分的可能性;以及 响应于下述之一,接纳所述数据进入所述缓存: 指示非顺序数据访问的序列度量和满足访问阈值的访问度量; 指示非顺序数据访问的序列度量和不满足所述访问阈值的访问度量,以及 指示顺序数据访问的序列度量和满足访问阈值的访问度量。
11. 根据权利要求1所述的方法,进一步包括:响应于接纳所述数据进入所述缓存, 访问位于所述逻辑地址空间中的所述逻辑标识符的预定地址范围内的接近的逻辑标 识符的访问度量,以及 响应于满足缓存接纳标准的接近的逻辑标识符访问阈值的所述接近的逻辑标识符的 访问度量,接纳所述接近的逻辑标识符的数据。
12. 根据权利要求1所述的方法,进一步包括: 接纳所述数据进入所述缓存,并且响应于不满足缓存接纳标准的访问阈值但是满足所 述缓存接纳标准的较低的第二访问阈值的访问度量,将所述数据与低价值指示相关联;以 及 基于所述低价值指示,在其他数据在所述缓存中之前,将所述数据从所述缓存清理出 去。
13. 根据权利要求1所述的方法,其中,所述逻辑地址空间的逻辑容量超过所述非易失 性存储装置的物理存储容量。
14. 一种管理接纳数据进入缓存的设备,包括: 非易失性存储装置的存储层,其用于保持与后备存储器有关的存储元数据,所述存储 元数据包括将对应于所述后备存储器的逻辑地址空间的逻辑标识符与所述非易失性存储 装置的物理存储位置相关联的索引; 缓存层,其被配置为更新所述访问元数据以指示对所述逻辑地址空间内的所述逻辑标 识符的访问请求,其中,所述访问元数据与所述存储层的所述存储元数据分离,并且其中, 所述缓存层响应于与没有缓存在所述非易失性存储装置上的数据有关的请求,更新所述访 问元数据,以及 缓存接纳模块,其被配置为确定所述访问元数据确定逻辑标识符的访问度量,并且响 应于满足访问阈值的访问度量,接纳所述逻辑标识符的数据进入所述缓存。
15. 根据权利要求14所述的设备,其中,所述访问元数据包括一组有序的访问数据结 构,每个访问数据结构在相应的时间间隔期间跟踪逻辑标识符访问,所述一组有序的访问 数据结构包括当前访问数据结构和一个或者多个先前访问数据结构,其中,缓存层被配置 为: 更新所述当前访问数据结构以指示逻辑标识符访问请求; 不考虑逻辑标识符访问请求的指示,响应于时间间隔触发,生成新的访问数据结构;以 及 利用所述一组有序的访问数据结构确定所述逻辑标识符的访问度量。
16. 根据权利要求15所述的设备,其中,访问数据结构包括多个条目,每个条目指示一 个或者多个逻辑标识符在相应的时间间隔期间的访问特性,并且其中,每个条目包括下述 内容之一: 位图的单个位,所述单个位指示对对应于所述条目的一个或者多个逻辑标识符的访 问,以及 计数器,所述计数器指示对对应于所述条目的一个或者多个逻辑标识符的访问。
17. 根据权利要求15所述的设备,其中,访问数据结构包括多个条目,每个条目指示一 个或者多个逻辑标识符的访问特性,其中,每个条目指示相应的多个逻辑标识符的访问特 性,并且其中,所述缓存层被配置为使用下述方式之一将逻辑标识符映射到条目: 哈希映射,其通过哈希函数将多个逻辑标识符中的每个逻辑标识符映射到相应的访问 数据结构条目; 连续范围映射,其将逻辑标识符的连续地址范围映射到相应的访问数据结构条目,以 及 混合映射,其通过哈希函数将多个连续范围的逻辑标识符中的每个逻辑标识符映射到 相应的访问数据结构条目。
18. 根据权利要求14所述的设备,其中,所述缓存接纳模块被配置为确定访问所述逻 辑标识符的请求的序列度量,其中所述序列度量指示所述请求是顺序数据访问的一部分的 可能性;并且其中,所述缓存接纳层响应于指示非顺序数据访问的序列度量,接纳所述数据 进入所述缓存。
19. 一种计算机可读存储介质,其包括被配置为使计算装置执行管理非易失性存储装 置的缓存的方法的指令,所述方法包括: 利用由所述非易失性存储装置的存储层保持的索引将数据缓存到非易失性存储装置, 所述索引将对应于后备存储器的逻辑地址空间的逻辑标识符与所述非易失性存储装置的 物理存储位置相关联; 保持与所述索引分离的访问元数据,并且包括指示所述逻辑地址空间内的每个逻辑标 识符的访问特性的条目,所述逻辑标识符包括对应于没有缓存到所述非易失性存储装置上 的数据的逻辑标识符; 响应于访问所述逻辑标识符的数据的请求,更新所述访问元数据的条目以指示对逻辑 标识符的数据访问; 利用所述访问元数据中的所述逻辑标识符的条目确定所述逻辑标识符的访问度量,以 及 响应于满足访问阈值的访问度量,接纳与所述逻辑标识符相关的数据进入缓存。
20. 根据权利要求19所述的计算机可读存储介质,其中,所述访问元数据包括一组有 序的访问数据结构,每个访问数据结构包括多个条目,每个条目包括一个或者多个逻辑标 识符在相应的时间间隔期间的访问特性,所述一组有序的访问数据结构包括当前访问数据 结构和一个或者多个先前访问数据结构,所述方法进一步包括: 更新所述当前访问数据结构以指示逻辑标识符访问请求; 不考虑逻辑标识符访问请求的指示,响应于时间间隔触发,生成新的访问数据结构;以 及 利用所述一组有序的访问数据结构确定所述逻辑标识符的访问度量,其中,确定所述 访问度量包括根据所述条目的新近程度给多个条目中的每个条目加权。
21.根据权利要求20所述的计算机可读存储介质,进一步包括: 基于按时间排序的访问请求记录,确定所述逻辑标识符的序列度量,其中,所述序列度 量指示所述访问请求是顺序数据访问的一部分的可能性;以及 响应于下述之一,接纳所述数据进入所述缓存: 指示非顺序数据访问的序列度量和满足访问阈值的访问度量; 指示非顺序数据访问的序列度量和不满足所述访问阈值的访问度量,以及 指示顺序数据访问的序列度量和满足访问阈值的访问度量。
【文档编号】G06F12/08GK104303162SQ201280071235
【公开日】2015年1月21日 申请日期:2012年1月12日 优先权日:2012年1月12日
【发明者】N·塔拉伽拉, S·桑德拉拉曼 申请人:才智知识产权控股公司(2)
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1