用于有效地映射虚拟地址和物理地址的装置、系统和方法

文档序号:6593875阅读:370来源:国知局
专利名称:用于有效地映射虚拟地址和物理地址的装置、系统和方法
技术领域
本发明涉及数据存储,并且更具体地,涉及有效地映射数据存储设备中的虚拟地 址和物理地址。
背景技术
传统的数据存储设备(例如磁盘驱动器、光盘驱动器等)通常作为随机存取设备 运行以存储数据。随机存取通常能够在同一时间内存取序列中的任意元素。这不同于顺序 存取,在顺序存取中,数据被顺序地存储且被顺序地访问。例如,用于存储数据的磁带就是 一种顺序存取设备。存取一个数据元素可能耗费不同的时间,这是由于一个数据元素的位 置可能离读取头的位置近,而且必须使磁带前进或后退才能到达第二个数据元素,因此,存 取另一个数据元素可能消耗更多的时间。由于在随机存取设备中存取每个数据元素的时间 需要大约一致,因此,随机存取设备(如存储芯片、磁盘驱动器或固态存储器)作为随机存 取设备运行。由于数据存取的可预测性和效率,随机存取是可取的。通常,文件系统利用初级命令与随机存取存储设备通信。文件系统管理数据的位 置。初级命令通常包括命令中的物理地址和数据长度以存储或访问数据。随机存取存储设 备中的数据通常可以在读-修改-写操作中更新,其中在特定地址的数据被读取、修改,然 后被写入与其存储位置相同的位置。虽然随机存取设备的概念是可取的,但随机存取可能在某些类型的数据存储中产 生问题。例如,随机存取可能造成存储设备中的某些位置比其他位置使用得更多。就这方 面而言,随机存取可能在闪存中是有害的,这是因为闪存中的每个存储单元通常仅能使用 一定的次数,然后必须对其进行修复或者存储单元变得不可靠。随机存取也可导致存储设 备成为散存的存储设备,这可能增加存储存取时间。数据存储设备(例如闪存和其他固态存储器)的顺序存储可用于缓解与随机存取 有关的一些问题。当使用顺序存储时,通常期望具有一些类型的存储空间恢复(垃圾收集) 系统以合并有效数据并为数据的顺序存储释放存储区域。通常,存储空间恢复例程将取得 选定为恢复的区域中的有效数据。通常在处理选定区域之前,有效数据被移动到另一位置。一种识别有效数据的方法是在移动有效数据之前,搜索选定区域以识别有效数据 在选定区域中的位置。搜索用于将虚拟地址映射到物理地址的单个结构以识别存储在选定 区域中的每个数据段是繁琐且无效率的,这是因为大部分虚拟-物理索引被设计为基于可 能的虚拟标识符的范围或名字空间内的任一可能的虚拟标识符快速地识别物理地址。

发明内容
从上述讨论可知,显然存在对于有效地映射虚拟地址和物理地址的装置、系统和 方法的需要。有利地是,这种装置、系统和方法会提供一种有效方式以从虚拟标识符识别所 存储数据的物理地址,并且识别擦除区域中有效数据的量和擦除区域中有效数据的位置。响应于现有技术的现状,具体地,响应于现有技术中未被当前可用的存储设备所 完全解决的问题和需要,本发明被开发出来。因此,本发明被开发以提供一种用于有效地映 射虚拟地址和物理地址的装置、系统和方法,其克服了现有技术中的上述全部或大部分缺 点O有效地映射虚拟地址和物理地址的装置具有多个配置为功能性的执行下述必要 步骤的模块使用正向映射从虚拟地址识别物理地址、使用反向映射从物理地址识别虚拟 地址和使用反向映射识别擦除区域中的有效数据和无效数据。在所述的实施方式中,这些 模块包括正向映射模块、反向映射模块和存储空间恢复模块。正向映射模块使用正向映射以识别数据段的数据的一个或多个物理地址。从数据 段的一个或多个虚拟地址识别所述一个或多个物理地址。在指令到数据存储设备的存储请 求中识别数据段。正向映射是将一个或多个虚拟地址映射到存储在数据存储设备中的数据 的一个或多个物理地址的映射。一个或多个虚拟地址包括虚拟地址空间内的离散地址,其 中,虚拟地址稀疏地位于虚拟地址空间。反向映射模块使用反向映射以从物理地址确定数据段的虚拟地址。反向映射将一 个或多个物理地址映射到一个或多个虚拟地址。反向映射中的物理地址与正向映射关联。 一个或多个虚拟地址对应于与存储在数据存储设备中的数据有关的一个或多个数据段。反 向映射将数据存储设备映射到擦除区域,从而反向映射的一部分跨越数据存储设备的在存 储空间恢复操作中一起擦除的擦除区域。存储空间恢复操作恢复擦除区域以用于将来的数 据存储。存储空间恢复模块在恢复擦除区域的操作前使用反向映射识别擦除区域中的有效 数据。在恢复操作之前,识别的有效数据被移动到另一擦除区域。在一种实施方式中,一个或多个源参数与数据一起存储,源参数至少包括虚拟地 址和存储数据的数据长度,虚拟地址对应于和数据有关的数据段。在又一种实施方式中,该 装置包括映射重建模块,用于利用与数据一起存储的源参数重建正向映射和反向映射。在 另一种实施方式中,该装置包括检查点模块,用于存储与正向映射和反向映射相关的信息。 检查点与时间点有关。该信息足以将正向映射和反向映射恢复到与检查点有关的状态。在另一种实施方式中,该装置包括映射同步模块,用于通过顺序地应用源参数和 物理地址将正向映射和反向映射从与检查点有关的状态更新到当前状态。源参数与顺序地 存储在检查点之后的数据一起存储。物理地址源于数据存储设备上的数据的位置。在一种实施方式中,正向映射和反向映射独立于下述各项中的一个或多个组织 数据用于发送存储请求的请求设备的文件结构、名字空间和目录。在另一种实施方式中,存 储请求的数据段的虚拟地址包括文件名、对象名和/或块存储地址。逻辑块存储地址至少 包括物理地址和数据段的长度,在该物理地址处,发送存储请求的请求设备为存储设备准 备存储数据段。在另一种实施方式中,正向映射是第一正向映射,反向映射是第一反向映射,第一 正向映射和第一反向映射被存储为数据并且独立于由第一正向映射和第一反向映射所映射的数据存储。在该实施方式中,数据包括第一正向映射、第一反向映射和与第一正向映射 和第一反向映射一起存储的时间戳数据。在该实施方式中,第一正向映射和第一反向映射 的数据由第二正向映射和第二反向映射索引。在另一种实施方式中,该装置包括一个或多 个额外的正向和反向映射,其中每个额外的正向和反向映射被存储为数据并且由额外的正 向和反向映射索引。在一种实施方式中,正向映射包括用于存储在数据存储设备的有效数据的信息, 反向映射包括用于存储在数据存储设备上的有效数据和无效数据的信息。在另一种实施方 式中,该装置包括无效模块,用于在反向映射中标记数据的条目,该条目指示由其引用的数 据响应于导致数据被无效的操作而无效。在又一种实施方式中,存储空间恢复模块还包括通过扫描用于擦除区域的反向映 射确定擦除区域中无效数据的量,从而相对于擦除区域的存储容量确定无效数据的量。存 储空间恢复模块利用擦除区域中无效数据的量选择恢复的擦除区域。在又一种实施方式 中,存储空间恢复模块包括选择恢复的擦除区域、将选定的擦除区域的有效数据写入当前 正在写入数据的数据存储设备中的新位置、更新反向映射以指示写入新位置的有效数据在 选定的擦除区域中无效、以及基于写入新位置的有效数据更新正向映射和反向映射。在一种实施方式中,该装置仿真按存储请求所指令的那样存储数据的随机存取逻 辑块存储设备。在另一种实施方式中,正向映射包括B-树、内容可寻址存储器(CAM)、二进 制树和/或哈希表。在另一种实施方式中,该装置包括映射更新模块,用于响应于改变数据 存储设备的内容更新正向映射和/或反向映射。基于数据存储设备存储数据的位置,映射 更新模块从数据存储设备接收将所存储数据的物理地址链接到虚拟地址的信息。在一种实施方式中,该装置在基本上没有数据的情况下接收存储请求。在又一种 实施方式中,该装置初始化直接存储器存取(DMA)进程或远程直接存储器存取(RDMA)进程 以响应于存储请求将数据转移到数据存储设备。在另一种实施方式中,正向映射模块、反向 映射模块和/或存储空间恢复模块的至少一部分位于发送存储请求的请求设备、数据存储 设备、存储设备控制器或与请求设备、数据存储设备和存储设备控制器分离的计算设备内。本发明也提供了一种系统以有效地映射物理地址和虚拟地址,该系统可由数据存 储设备和控制数据存储设备上的数据存储的存储控制器实施。具体地,在一种实施方式中, 存储控制器包括正向映射模块、反向映射模块和存储空间恢复模块。正向映射模块使用正向映射以识别数据段的数据的一个或多个物理地址。从数据 段的一个或多个虚拟地址识别所述一个或多个物理地址。在指令到数据存储设备的存储请 求中识别数据段。正向映射是将一个或多个虚拟地址映射到存储在数据存储设备中的数据 的一个或多个物理地址的映射。一个或多个虚拟地址包括虚拟地址空间内的离散地址,其 中,虚拟地址稀疏地位于虚拟地址空间。反向映射模块使用反向映射以从物理地址确定数据段的虚拟地址。反向映射将一 个或多个物理地址映射到一个或多个虚拟地址。反向映射中的物理地址与正向映射关联。 一个或多个虚拟地址对应于与存储在数据存储设备中的数据有关的一个或多个数据段。反 向映射将数据存储设备映射到擦除区域,从而反向映射的一部分跨越数据存储设备的在存 储空间恢复操作中一起擦除的擦除区域。存储空间恢复操作恢复擦除区域以用于将来的数 据存储。存储空间恢复模块在恢复擦除区域的操作前使用反向映射识别擦除区域中的有效数据。在恢复操作之前,识别的有效数据被移动到另一擦除区域。在一种实施方式中,存储请求接收自客户端,该客户端通过计算机网络与存储控 制器通信。在另一种实施方式中,该系统包括服务器,其中存储控制器和/或数据存储设备 位于服务器内。在另一种实施方式中,存储设备是固态存储设备,其中数据段的数据存储在 固态存储器中。本发明也提供了一种有效地映射物理地址和虚拟地址的方法。在公开的实施方式 中,该方法包括执行上文中相对于所述装置和系统的功能所必须的步骤。在一种实施方式 中,该方法包括使用正向映射以识别数据段的数据的一个或多个物理地址。从数据段的一 个或多个虚拟地址识别所述一个或多个物理地址。在指令到数据存储设备的存储请求中识 别数据段。正向映射包括将一个或多个虚拟地址映射到存储在数据存储设备中的数据的一 个或多个物理地址的映射。一个或多个虚拟地址是虚拟地址空间内的离散地址,其中,虚拟 地址稀疏地位于虚拟地址空间。该方法包括使用反向映射以从物理地址确定数据段的虚拟地址。反向映射将一个 或多个物理地址映射到一个或多个虚拟地址。反向映射中的物理地址与正向映射关联。一 个或多个虚拟地址对应于与存储在数据存储设备中的数据有关的一个或多个数据段。反向 映射将数据存储设备映射到擦除区域,从而反向映射的一部分跨越数据存储设备的在存储 空间恢复操作中一起擦除的擦除区域。存储空间恢复操作恢复擦除区域以用于将来的数据 存储。该方法包括在恢复擦除区域的操作前使用反向映射识别擦除区域中的有效数据。在 恢复操作之前,识别的有效数据被移动到另一擦除区域。本说明书全文所提到的特征、优点或者类似措辞并不意味着可利用本发明实现的 所有的特征和优点应该或本来就包含在本发明的任一单独的实施方式中。更确切地,涉及 特征和优点的措辞被理解为意味着与实施方式一起描述的特定的特征、优点或者特点包 括在本发明的至少一种实施方式中。因此,在本说明书全文中,关于特征、优点和类似措辞 的讨论可(但未必)涉及同一种实施方式。此外,描述的本发明的特征、优点和特点可采用任何合适的方式与一个或多个实 施方式结合。相关领域的技术人员可意识到本发明可在不具备特定实施方式的一个或多个 具体特征或优点的情况下被实施。在其他例子中,可意识到附加特征和优点可出现在某些 实施方式中,而不是在本发明的所有实施方式中都出现。通过下面的说明和附加的权利要求,本发明的这些特征和优点将变得更加充分的 显而易见,或者可以通过按下文所阐述的本发明的实践而获悉。


为了更容易地理解本发明的优点,将参考附图中示出的具体实例方式详细说明上 文中简述的本发明的实施方式。应当理解,这些附图仅描绘了本发明的典型实施方式,因此 不能将其理解为对本发明的限制,将结合附图具体且详细地描述和解释本发明,附图中图1是示出了根据本发明的将存储请求转换为附加数据命令的系统的一种实施 方式的示意性框图;图2是示出了根据本发明的将存储请求转换为附加数据命令的装置的一种实施 方式的示意性框图3是示出了根据本发明的将存储请求转换为附加数据命令的替换装置的一种 实施方式的示意性框图;图4是示出了根据本发明的将存储请求转换为附加数据命令的方法的一种实施 方式的示意性流程图;图5是示出了根据本发明的将存储请求转换为附加数据命令的另一种方法的一 种实施方式的示意性流程图;图6是根据本发明的将存储请求转换为附加数据命令的实例的示意性框图;图7是根据本发明的用于有效地映射虚拟地址和物理地址的装置的一种实施方 式的示意性框图;图8是根据本发明的用于有效地映射虚拟地址和物理地址的装置的另一种实施 方式的示意性框图;图9是根据本发明的用于有效地映射虚拟地址和物理地址的方法的一种实施方 式的示意性流程图;图10是根据本发明的用于有效地映射虚拟地址和物理地址的方法的另一种实施 方式的示意性流程图;图11是根据本发明的正向映射和反向映射的实例的示意性框图;图12是示出了根据本发明的用于协调存储请求的装置的一种实施方式的示意性 框图;图13是示出了根据本发明的用于协调存储请求的装置的另一种实施方式的示意 性框图;图14是示出了根据本发明的用于协调存储请求的方法的一种实施方式的示意性 流程图;图15是示出了根据本发明的用于协调存储请求的方法的另一种实施方式的示意 性流程图;图16A是示出了根据本发明的用于协调存储请求的装置的实例的示意性框图的 第一部分;图16B是示出了根据本发明的用于协调存储请求的装置的实例的示意性框图的 第二部分;图16C是示出了根据本发明的用于协调存储请求的装置的实例的示意性框图的
第三部分。
具体实施例方式为了更显著地强调功能性单元运行的独立性,在本说明书中描述的许多功能性单 元已被标示为模块。例如,模块可作为硬件电路来实施,所述硬件电路包括自定义VLSI电 路、门阵列或成品半导体(例如逻辑芯片、晶体管或其他分立元件)。模块也可在可编程硬 件设备(如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备或类似设备)内实施。模块还可在由不同类型的处理器运行的软件中实施。例如,可执行代码的识别模 块可以包括一个或多个计算机指令物理块或逻辑块,该计算机指令被作为对象、程序或函 数来组织。然而,识别模块的可执行文件不必在物理上位于一起,但是可包括存储在不同位置的不同命令,当这些命令在逻辑上连接在一起时,所述命令包括所述模块并实现所述模 块的指定目标。当然,可执行代码的模块可以为一个或许多指令,并且甚至可以分布在若干不同 的代码段中、分布在不同的程序中并可分布在多个存储设备中。类似地,可以在此在模块内 识别并示出运算数据,并且可以以任何合适的形式体现所述运算数据并在任意合适类型的 数据结构中组织所述运算数据。所述运算数据可作为单数据集收集,或者可以分布在不同 的位置(包括不同的存储设备),并且可在系统或网络中至少部分地仅作为电信号存在。当 模块或模块的部分在软件中实施时,软件部分被存储在一个或多个计算机可读媒体上。本说明书全文所提到的“一种实施方式”、“实施方式”或类似的措辞意味着与实施 方式一起描述的特定的特征、结构或特点包括在本发明的至少一种实施方式中。因此,在本 说明书全文中,短语“在一种实施方式中”、“在实施方式中”及类似措辞的出现可(但未必 都)涉及同一实施方式。提及的计算机可读媒介可采取任何能够在数字处理装置上存储机器可读指令的 形式。计算机可读媒介可通过下述设备体现传输线、光盘、数字视频光盘、磁带、伯努利驱 动器、磁盘、穿孔卡、闪存、集成电路或其他数字处理装置存储设备。此外,描述的本发明的特征、结构或特点可以以任何合适的方式合并在一种或多 种实施方式中。在下文的说明中,提供了大量的具体细节以全面理解本发明的实施方式,所 述具体细节比如编程、软件模块、用户选择、网络事务、数据库查询、数据库结构、硬件模块、 硬件电路、硬件芯片等等的实例。然而,相关技术领域的技术人员可认识到本发明在可在 不具备一个或多个具体细节的情况下被实施,或者本发明可结合其他方法、组件、材料等实 施。在其他例子中,并没有显示或描述公知的结构、材料或操作以使本发明变得清晰。一般而言,此处所包括的示意性流程图作为逻辑流程图示出。同样的,描述的顺序 和所标记的步骤表明了所示出的方法的一种实施方式。可以设想在功能上、逻辑上或效果 上与所示方法的一个或多个步骤或其部分相同的其他步骤和方法。此外,所用的格式和符 号是用于解释方法的逻辑步骤并且不应理解为是对该方法的限制。尽管在流程图中可使用 不同的箭头类型和直线类型,但是不应将其理解为对相应方法的范围的限制。事实上,一些 箭头或其他连接符可用于仅指示方法的逻辑流程。例如,箭头可指示在所示方法所列举的 步骤之间的不明确的时间阶段的等待或监视期。此外,特定方法的顺序可以(但未必)严 格遵照所示出的相应步骤的顺序。图1是示出了根据本发明的将存储请求转换为附加数据命令并有效地映射物理 地址和虚拟地址的系统100的一种实施方式的示意性框图。系统100包括存储设备102,存 储设备102包括存储控制器104和数据存储设备106。存储设备102位于通过计算机网络 112连接到一个或多个客户端110的服务器108内。在一种实施方式中,系统100包括具有存储控制器104和数据存储设备106的存 储设备102。存储控制器104和数据存储设备106可被包括在同一箱体中,该同一箱体为存 储设备102。在另一种实施方式中,存储控制器104和数据存储设备106是分离的。存储控 制器104通常控制对数据存储设备106的数据存储访问。在一种实施方式中,数据存储设 备106能够使得对数据存储设备106上的所有数据的访问次数基本上相当。例如,数据存 储设备106可以是固态存储设备,例如闪存、纳米随机存取存储器(nano RAM或NRAM)、磁阻
10RAM(MRAM)、动态RAM(DRAM)、相变RAM(PRAM)等。数据存储设备106也以是硬盘驱动器、光 盘(CD)驱动器、光驱动器和类似设备。尽管在图1中数据存储设备106被示为单个存储设备,但数据存储设备106可以 包括两个或多个存储设备。数据存储设备106可被配置为独立驱动器冗余阵列(RAID)、磁 盘簇(JBOD)和类似设备。数据存储设备106可与一个或多个数据存储设备106(例如固态 存储器)一起配置为高性能、短期存储器,也可与一个或多个数据存储设备106(例如硬盘 驱动器)一起配置为低性能、长期存储器。在这种实施方式中,存储控制器104可管理不同 类型的数据存储设备106。本领域技术人员会意识到其他类型和配置的数据存储设备106。存储控制器104可控制一个或多个数据存储设备106而且可以是RAID控制器、用 于存储区域网络(SAN)的控制器等等。存储控制器104可包括一个或多个子控制器。存储 控制器104可与数据存储设备106集成或分离,并且存储控制器104可以集成在一起或者 是分布式的。例如,存储控制器104的一部分可以是主控制器,而存储控制器104其他部分 可以是子控制器或从控制器。主控制器可以是与轮流控制数据存储设备106的其他子控制 器通信的设备,或者可以是控制从控制器和数据存储设备106的主控制器。本领域技术人 员会认识到具有其他形式和功能的存储控制器104。在一种实施方式中,存储设备102包括在服务器108中。在不同的实施方式中,存 储控制器104或数据存储设备106或二者都可位于服务器108的外部。服务器108可连接 到存储控制器104,或者存储控制器104可通过系统总线连接到数据存储设备106,系统总 线例如外围组件互连快速(PCI-e)总线、串行高级技术附件(串行ΑΤΑ)总线或类似总线。 在另一种实施方式中,固态存储设备102位于服务器108或存储设备102外部,并可以通 过通用串行总线(USB)、电气和电子工程师学会(IEEE) 1394总线(Fireffire)等连接。在 其他实施方式中,存储设备102连接到服务器108,或者存储控制器104利用外围组件互连 (PCI)快速总线使用外部电子或光总线扩展或联网方案连接到数据存储设备106,联网方 案例如以太网、光纤通道、无限带宽、或PCI快速高级交换(PCIe-AS)及其类似。本领域技 术人员会认识到其他各种可能的连接方法。替换地,服务器108也可以是个人计算机、膝上型计算机、主计算机、工作站、电子 设备等。服务器108可包括客户端110或通过计算机网络112连接到客户端110。系统100 可包括任意数量的计算机、客户端110、计算机网络112或其他电子设备,只要系统100能够 将存储请求传输到存储设备102。客户端110可以是运行在服务器108或另一台计算机或 电子设备上的程序。客户端110也可以是个人计算机、膝上型计算机、主计算机、工作站、电 子设备等。本领域技术人员会认识到能够将存储请求发送到存储设备102的系统100的其 他组件和配置。图2示出了根据本发明的将存储请求转换为附加数据命令的装置200的一种实施 方式的示意性框图。装置200包括存储请求接收器模块202、翻译模块204和映射模块206, 下文将描述这些模块。在图2中,装置200被示出为位于存储控制器104中,但模块202、 204,206中的全部或部分可位于存储控制器104的外部而且可分布在系统100的不同组件中。装置200包括从请求设备接收存储请求的存储请求接收器模块202。在一种实施 方式中,请求设备是服务器108。在另一种实施方式中,请求设备是客户端110。请求设备可以是能够发送存储请求的任何设备。存储请求包括将文件或对象的数据段存储在数据存储设备106上的请求。存储请 求可以是对象请求、文件请求、逻辑块存储请求及类似请求。存储请求包括数据段的一个或 多个源参数。源参数包括文件或对象的虚拟地址,数据段的数据来源于所述虚拟地址。通 常,虚拟地址是文件或对象的标识符。虚拟地址可以是连接到存储设备102的文件系统已 知的文件名、对象名或其他标识符。在逻辑地址与逻辑地址空间和虚拟地址与虚拟地址空间之间做出区别。在此文本 中,虚拟地址空间拟包含间接编址的最大可能范围。如本文所用的,虚拟地址空间可同时包 括一个或多个虚拟地址空间、一个或多个逻辑地址空间、一个或多个存储空间、一个或多 个逻辑块地址空间、一个或多个混合块地址空间等等。例如,客户端可以运行多个虚拟操作系统。在这种实施方式中,每个虚拟操作系统 可具有虚拟存储空间。每一个虚拟存储空间可以根据设备的虚拟地址空间和虚拟-物理 映射被映射到存储在存储设备中的数据。在另一个实例中,若干客户端中的对象可以以多 对一的关系独立地映射到相同的存储数据,该相同的存储数据称为具有对客户端的唯一虚 拟地址的共享数据。尽管此处的实例示出了一对一的关系,但方法、装置和系统将支持多对 一、一对多、甚至是多对多的虚拟-物理的地址映射。通过支持识别、地址、长度和元数据转换中的广泛间接性,虚拟-物理映射方法将 支持稀疏编址(物理地址空间的过量供应)、瘦供给(thinprovisioning)、虚拟分区和数据 转换(例如压缩、加密)。此处,作为一种约定,虚拟ID唯一地标识在客户端的虚拟空间内存储的数据实 体。虚拟地址更具体地编址虚拟实体的数据。例如,虚拟地址可包括虚拟ID和在数据集内 的偏移量。在另一实例中,虚拟地址可包括虚拟ID和虚拟实体内的索引,其中索引可以是 非统一的(例如,长度不同)记录结构中的记录。在一种实施方式中,装置200仿真逻辑块存储设备,源参数包括一个或多个逻辑 块地址,其中,请求设备通过存储请求请求数据段以将其存储。在该实施方式中,虚拟地址 可包括逻辑块地址。例如,如果存储请求是逻辑块存储请求,请求设备可指定数据段将要存 储在数据存储设备106中的位置。逻辑块地址可包括诸如RAID群组号、数据存储设备标识 符、分区、柱面号、扇区、偏移量等的信息。本领域技术人员会认识到可包括在逻辑块地址中 的其他元素。存储请求可包括将数据段存储在不止一个位置上的请求,或者存储请求可包括将 数据段的某些部分存储在不止一个位置上的请求,从而存储请求可包括不止一个逻辑块地 址。当存储请求包括逻辑块地址时,存储请求通常也包括对应于一个或多个逻辑块地址的 一个或多个偏移量和数据长度。偏移量和数据长度可暗示逻辑块是否具有固定尺寸。通 常,偏移量是指数据段开始进入文件或对象有多远,通常从文件或对象的形头起算。数据长 度通常包括存储设备将有多大容量被与逻辑块地址关联的数据段或数据段的部分占据。通 常,将以可被存储控制器104和数据存储设备106识别的一些单位表示偏移量和数据长度。 例如,偏移量和数据长度可以表示为字节、块、扇区或其他用于分割数据存储设备106的单 位。本领域技术人员会认识到用于全部或部分数据段的偏移量和数据长度的其他表示方 法。
系统100包括将存储请求翻译为一条或多条存储命令的翻译模块204,其中至少 一条存储命令是附加数据存储命令。每条附加数据存储命令指令数据存储设备106将创建 自数据段的数据和一个或多个源参数存储在一个或多个附加点上。源参数与数据一起存 储,而且至少一个源参数是虚拟地址。优选地,数据存储设备106将数据存储为数据包。数据包包括数据段的数据和数 据包包头。在一种实施方式中,数据包包头包括源参数。在另一种实施方式中,源参数与数 据同时存储。例如,数据可顺序地存储在数据存储设备的一个位置上的附加点中,而源参数 同时顺序地存储在数据存储设备中的另一位置中。在该实施方式中,源参数和数据存储的 顺序可用于在读操作或数据和源参数被检索的其他操作期间配对数据和源参数。在一种实施方式中,数据存储设备106通过下述操作顺序地存储数据(或数据 包)将数据存储在页、分区或其他指定区域中;将附加点移动到紧随先前存储的数据末端 的下一个可用地址;将数据存储在附加点,再次将附加点移动到紧随先前存储的数据末端 的下一个可用地址等等。数据存储在页、分区等中,直到页或分区满为止,然后附加点移动, 数据存储在另一页、分区等等。附加点可以响应于具体请求由存储设备102独立地移动。顺序存储数据对于固态存储设备来说是尤其有益的,这是因为其甚至允许分布式 的数据以防止出现比其他地址写入更频繁的热点或热地址。由于顺序存储数据省去了搜 寻时间、省去了读-修改-写操作和相关擦除操作并由此增加了固态存储设备的数据可靠 性和有效寿命,因此,顺序存储数据对于固态存储设备来说是尤其有益。由于常规固态存储 设备对存储在固态存储设备中任意位置的数据的读取访问时间基本上相同,固态存储设备 中的顺序存储也通常不会不利地影响读取访问时间。这种特性允许数据存储设备106仿真 随机存取设备以有效地消除由于写入搜寻次数而产生的恢复时间,并增加了固态存储设备 106的可靠性和有效寿命,而不会不利地影响读取性能。顺序存储对于数据存储设备106也可具有其他好处。顺序存储相对于存取时间 的益处在下述文献中有全面的描述题为"Apparatus, System, andMethod for Managing Commands of Solid-State Storage Using Bank Interleave" W ^ H # ^lJ Φ it ^ 11/952,095 ;禾口题为“Apparatus, System, and Method for StorageSpace Recovery In Solid-State Storage”的美国专利申请号11/952,101 (下文中的“存储空间恢复申请”), 两项申请均由David Flyrm等人于2007年12月6日提交,通过引用将所述文献并入本文。一个明显益处是通过顺序地存储数据以及将源参数与数据一起(在包头或同 时)存储,数据存储设备106成为了日志存储设备。通常,日志存储设备记录数据存储的序 列或顺序,从而如果第一数据包在第二数据包之后存储,这种存储顺序是已知的并且可以 是确定的。在一种实施方式中,将要存储数据的附加点独立于环境。鉴于数据被顺序地存储, 附加点可由存储设备保持,从而与存储请求一起接收的数据可以存储在数据存储日志中的 下一个可用的物理地址。对于该附加点来说,没有外部环境。这意味着,数据并不根据与客 户端的明确或隐藏关系存储在设备的不同物理区域中。例如,第一客户端可利用第一分区 访问设备,而第二客户端利用第二分区访问设备。在虚拟编址方案中,这些分区是严格的逻 辑构造。在两个不同的分区中用于两个客户端的数据仍然被顺序地附加。这样,设备不限 制开放文件的数量,并由此不限制能够同时访问设备的客户端的数量。额外益处是存储空间的使用效率最优,而且自然地支持提供增加容量使用率(如瘦供给)的存储方法。通常,附加点被设置为紧随先前存储的数据或数据包之后的地址,但在其他实施 方式中,附加点可以设置在页、擦除块、分区等的起始地址上,可以设置在紧随不可用地址 的块之后,等等。在一种实施方式中,数据存储设备106保持附加点的地址,翻译模块204 仅创建指令数据存储设备106将数据存储在附加点上的附加数据存储命令。一旦存储了数 据,数据存储设备106然后向映射模块206或另一设备或模块报告数据存储的物理地址。在 另一种实施方式中,翻译模块204得知或保持附加点在数据存储设备106中的物理地址并 且利用附加点的物理地址创建附加数据存储命令。在一种实施方式中,表示在当前擦除区域被写满之后将要被写入的下一擦除区域 (或擦除块)的附加点或擦除区域指针可预先排队且由数据存储设备106或翻译模块204 从队列中取出。在另一种实施方式中,附加点(擦除区域指针)根据设定的模式从子区域 移动到子区域。设定的模式可包括区域序列信息。附加数据存储命令通常是将数据存储在附加点的命令。数据创建自数据段,通常, 数据段的数据跨越数据段。翻译模块204可创建一个或多个附加数据存储命令。例如,如 果数据段分解而且数据的不止一个部分存储在非连续位置,可能会需要不止一个的附加数 据存储命令。在另一种实施方式中,单个附加数据存储命令能够将数据段存储在多个、非连 续位置。数据段的数据可来自不同的源。在一种实施方式中,数据是来自新的先前并没有 存储在数据存储设备106上的文件的数据。在另一种实施方式中,数据段的数据已从数据 存储设备106中读取,而且已在将数据再次作为数据包存储在数据存储设备106中之前被 修正。在另一种实施方式中,数据段的数据来自在存储恢复(垃圾收集)操作中恢复的另 一擦除区域(例如擦除块)、页、分区等。在该实施方式中,数据可以是在恢复擦除区域以用 于将来的数据存储之前从选定的擦除区域移动而来的有效数据。在另一种实施方式中,数 据是索引数据或映射数据,索引数据或映射数据被存储用来保护索引或映射。本领域技术 人员会认识到可位于由存储请求接收器模块202接收的数据段中的其他数据。在不同的实施方式中,翻译模块204创建与存储请求有关的其他命令。例如,翻译 模块204可创建集附加点命令、读取命令、擦除命令、复位命令、移动命令、同步命令、清洗 命令、读取控制登记命令、修正控制登记命令、程序页命令、在擦除块上指令的擦除命令、转 移命令列表命令、请求状态命令及类似命令。通常,其他命令增补附加数据存储命令以服务 存储请求。本领域技术人员会认识到其他可以由翻译模块204创建以服务存储请求的相关 命令和命令序列。在一种实施方式中,存储请求接收器模块202所接收的存储请求是在基本上没有 数据的情况下接收的。在这种情况下,存储请求是请求转移数据的请求,并且实质上不包括 数据。在另一种实施方式中,附加数据存储命令在基本上没有数据的情况下被传输到数据 存储设备106。在这种情况下,附加数据存储命令是转移数据的命令,并且实质上不包括数 据。在又一种实施方式中,源参数包括主机或客户端110内的一个或多个物理存储地址,作 为存储请求的结果,数据段从该物理存储地址被读取。在这种实施方式中,翻译模块204创 建的存储请求或命令(例如附加数据存储命令)初始化或请求直接存储器存取(DMA)或远 程直接存储器存取(RDMA)进程以将数据段的数据转移到数据存储设备106。例如,DMA进程可由附加数据存储命令初始化为从客户端110到数据存储设备106内的某个位置的DMA 数据。本领域技术人员会意识到初始化或请求DMA或RDMA进程的其他方法。在典型的DMA或RDMA进程中,数据存储设备106在写入操作中从主机的存储器中 取出数据并在读取操作中将数据推入主机。这样做是有利的,因为主机不需要知道数据将 要被存储在数据存储设备10的哪个位置。主机可以仅告知存储设备102取出将要被写入 的数据的位置或者数据将要被存储以供读取的位置。装置200包括映射模块206,映射模块206将数据段的一个或多个源参数映射到数 据存储设备106中的一个或多个位置,其中数据存储设备106附加了数据段的数据和源参 数。源参数可包括与数据段、设备标识符、分区标识符、数据段的一个或多个数据包的长度、 存储请求之前或之后数据段在主机的存储器中所处的一个或多个存储位置、一个或多个存 储位置中的一个或多个长度的数据、数据段的属性、数据段的元数据、数据段的控制参数等 相关联的虚拟标识符。有利地,数据段的源参数到存储数据段的数据的物理位置之间的映射允许装置 200利用数据存储设备106仿真随机存取设备,数据在数据存储设备106顺序地存储。这 样是有利的,因为具有装置200的存储设备102或存储控制器104能够连接成随机存取设 备并且能够接收对象请求、文件请求和逻辑块存储请求,而不会对这些请求予以区分。装置 200平等地处理来自不同请求的数据,即实质上以与虚拟地址相同的方式映射在存储请求 中接收到的逻辑块地址。换言之,在逻辑块存储请求中接收的逻辑块地址、数据长度等可以 成为将要被映射到数据请求的数据在数据存储设备106中的存储位置的物理地址的虚拟 地址。图3是示出了根据本发明的将存储请求转换为附加数据命令的替换装置300的一 种实施方式的示意性框图。装置300包括存储请求接收器模块202、翻译模块204和映射模 块206,这些模块基本上类似于上文中相对于图2的装置200描述的模块。装置300包括存 储响应接收器模块302、响应传输模块304、压缩模块306、索引重建模块308、命令重新排序 模块310、请求重新排序模块312和垃圾收集模块314,下文将描述这些模块。装置300在图 3中示为位于存储控制器104中,但模块202、204、206、302-314中的一部分可以位于存储 控制器104的外部而且可分布在系统100的不同元件中。此外,装置300的模块202-206、 302-314可独立于客户端110运行。在一种实施方式中,装置300包括从数据存储设备106接收一个或多个存储命令 响应的存储响应接收器模块302。存储命令响应包括数据存储设备106附加数据段的数据 的一个或多个位置。在这种实施方式中,数据存储设备106存储数据的位置对于装置300 来说可以是未知的,直到数据存储设备106响应并指示数据附加的位置。当直到数据存储 设备106存储数据之后数据存储设备106附加数据的物理位置才是已知的时,映射模块206 从数据存储设备106(通常来自于一个或多个存储命令响应)接收数据存储设备106附加 数据段的数据的一个或多个位置。在另一种实施方式中,如上所述,翻译模块204跟踪或管 理数据段的数据存储的物理地址,映射模块206可从翻译模块204接收数据存储的位置的 物理地址。在另一种实施方式中,装置300包括将存储请求响应发到请求设备的响应传输模 块304。存储请求响应包括关于存储请求的执行的信息。例如,存储请求响应可指示存储请
15求已成功执行或其他状态信息。在另一种实施方式中,存储请求响应包括指示数据和相关 联的源参数所存储的位置。如果装置300正在仿真随机存取设备,这种实施方式可以是不 可取的。在一种实施方式中,响应传输模块304在存储响应接收器模块302接收存储命令 响应之后发送存储请求响应,该存储命令响应指示数据段的所有数据和相关联的源参数已 成功存储在数据存储设备106上。在另一种实施方式中,响应传输模块304独立于存储命 令响应的接收而发送存储请求响应。本领域技术人员会意识到在存储请求中发送的其他信 息和发送响应的时机。在一种实施方式中,装置300包括在存储在数据存储设备106上之前压缩附加数 据存储命令的数据以形成数据的压缩模块306。通常,压缩模块306改变数据段的部分数据 (或数据包)的数据长度。这影响了数据存储的位置和后续的附加点。在这种情况下,每 个附加点可以是未知的,直到压缩之后。当使用压缩时,数据存储设备106或压缩模块306 下游的一些模块通常跟踪附加点和数据存储设备106上的数据的物理位置,并且等待直到 数据被压缩以确定数据(或数据包)的一部分和后续的附加点的数据长度。一旦得知附加 点且压缩了数据,数据长度和位置(可以是物理地址的形式)可以被回报给映射模块206。 在一种实施方式中,压缩模块306将压缩信息与所压缩的数据一起存储,通常存储在用于 数据的数据包头中。本领域技术人员会认识到在数据存储设备106存储之前的压缩的其他 特点和结果。在另一种实施方式中,装置300包括索引重建模块308,索引重建模块308利用一 个或多个源参数和数据段的数据在数据存储设备106上的物理位置重建映射模块206为 数据段创建的映射。为了提升存取速度,索引通常存储在快速、非易失性存储器中(例如 DRAM),快速、非易失性存储器容易由于电力故障、系统复位等丢失。将源参数与数据一起存 储在顺序存储设备在顺序日志内创建了非易失性数据记录,索引重建模块308利用顺序日 志重新创建源参数和物理地址以及数据长度之间的索引映射。源参数可以存储在包头、数据包内的特定位置或者存储在数据包的尾端。通常,源 参数存储在数据包的包头中。数据长度通常存储在数据包头内,从而如果索引或映射不可 用,也可以顺序地搜索数据。在一种实施方式中,索引重建模块308在数据存储设备106的 整个区域(例如页或擦除块)中跟踪,以重建包括用于数据段的映射的索引。有利地是,数据在数据存储设备106上的物理存储位置和与数据一起存储的源参 数包括主要的虚拟-物理映射。映射模块206所创建的映射包括次要虚拟-物理。次要虚 拟-物理映射通常存储在RAM中,从而如果由于失去电力、发生故障或者其他原因,映射模 块206所创建的映射失效时,主要虚拟-物理映射可用于重建次要虚拟-物理映射。例如,索引重建模块308在数据存储设备106中查看位于数据的页的起始处的数 据包头。索引重建模块308读取第一数据包的物理地址,然后读取包头中的源参数(包括 数据长度)。然后,索引重建模块308将数据包中的源参数映射到数据包的物理地址和数据 长度。索引重建模块308随后利用数据长度移动到下一数据包。索引重建模块308然后重 复重建在页中的所有数据包中跟踪的进程以构建次要虚拟-物理映射。因此,数据存储设 备106是可用于重建索引的顺序日志,该索引包括物理地址和源参数(例如虚拟标识符、偏 移量、逻辑块地址、源物理长度等)之间的映射。在一种实施方式中,索引被周期性地检查,或者在特定的时间点或以特定的状态存储在非易失性存储器中。每页何时被数据填充的顺序由带内保持,并且该顺序与检查点 相互联系。如果索引不可用,对应于最近的检查点的最近索引可被检索。随后,可通过重放 始于在检查点之后保存数据包的位置的日志来将索引提到当前。索引重建模块308可以通 过下述方法同步从存储在检查点之后的数据包到最新存储的数据包顺序地在数据包中跟 踪以将索引更新到当前状态。有利地是,索引重建模块308允许有效和快速地恢复被检查 的索引。在一种实施方式中,装置300包括用于修正两个或多个未完成的附加数据存储命 令的执行序列的命令重新排序模块310。命令重新排序模块310以一种更有效的方式有利 于序列命令。在一种实施方式中,读取命令可被推迟,直到同一数据段的写入命令完成。在 另一种实施方式中,支持多通道的存储设备102可允许当第一通道繁忙时其预定的命令推 迟,并允许其他通道的其他命令继续执行,直到第一通道可用。在另一种实施方式中,当存 储请求接收器模块202接收两个或多个存储请求时,装置300包括重新排列服务存储请求 的顺序的请求重新排序模块312。命令重新排序模块310和请求重新排序模块312以一种 更有效的方式有利于序列命令和请求。在另一种实施方式中,装置300包括垃圾收集模块314,垃圾收集模块314在将存 储区域返回给数据存储设备106的可用空间的池以用于后续的数据存储之前,从数据存储 设备106的被标识为恢复的存储区域移动有效数据,并从存储区域中擦除无效数据。在该 实施方式中,映射模块206将数据存储设备106中的一个或多个位置的有效数据的源参数 的映射更新为数据存储设备106附加有效数据和关联的源参数的新位置。在一种实施方式 中,可按与其他存储请求相同的方式从选定为恢复的区域中移动有效数据。图4是示出了根据本发明的将存储请求转换为附加数据命令的方法400的一种实 施方式的示意性流程图。方法400开始,在步骤402,存储请求接收器模块202从请求设备 (例如客户端110或服务器108)接收存储请求。存储请求包括将文件或对象的数据段存储 在数据存储设备106上的请求。存储请求可包括一个或多个用于数据段的源参数,数据段 至少包括一个或多个逻辑块地址(在该地址处,存储请求请求存储数据段)和一个或多个 相应于一个或多个逻辑块地址的数据长度。在步骤404,翻译模块204将存储请求翻译为一条或多条存储命令。至少一条存储 命令是附加数据存储命令。每条附加数据存储命令指令数据存储设备106将数据段的数据 存储在一个或多个附加点上。附加点是数据存储设备106中的位置,其是数据存储设备106 上最新存储的数据段之后的下一个地址。如果翻译模块204将数据段分割为不止一个段, 则通常不止一个数据附加命令被创建。如果源自数据段的数据不适于页、擦除块等的末端 的附加点,这样做可能是需要的。第二附加点可被设置在另一页、擦除块等的起始位置处。在步骤406,映射模块206将数据段的一个或多个源参数映射为数据存储设备106 的一个或多个位置,在该位置处,数据存储设备106附加数据段的数据,方法400结束。通 常,映射是允许将来存取数据的索引的一部分。通过将数据的物理位置和数据长度映射到 源参数,装置200能够仿真随机存取设备,同时将数据顺序地存储在数据存储设备106上。图5是示出了根据本发明的将存储请求转换为附加数据命令的另一种方法500的 一种实施方式的示意性流程图。方法500开始,在步骤502,存储请求接收器模块202从请 求设备(例如客户端110或服务器108)接收存储请求。在步骤504,翻译模块204将存储请求翻译为一条或多条存储命令,其中至少一条存储命令是附加数据存储命令。同样地,每 条附加数据存储命令指令数据存储设备106将数据段的数据存储在一个或多个附加点上。在步骤506,压缩模块306将关于数据段的一条或多条附加数据存储命令的数据 压缩成压缩数据,并且在步骤508,数据存储设备106响应于附加数据存储命令存储压缩数 据。在步骤510,存储响应接收器模块302从数据存储设备106接收一个或多个存储命令 响应。存储命令响应包括数据存储设备106附加数据段的数据的一个或多个位置。在步骤 512,基于作为存储命令响应的一部分接收的存储位置,映射模块206将数据段的一个或多 个源参数映射到数据存储设备106中的一个或多个位置,在这些位置,数据存储设备106附 加数据段的数据,方法500结束。通常,压缩数据使得在存储数据之后将源参数映射到存储 位置成为必须,这是因为压缩通常会改变数据的数据长度。图6是根据本发明的将存储请求转换为附加数据命令的实例600的示意性框图。 实例600仅展示了用于将存储请求转换为附加数据存储命令的装置200、装置300的一种 实施方式,并不试图以任何方式成为限制。本领域技术人员会认识到,有不同于图6的实例 600的许多方法实施本发明。实例600可表示请求设备指令存储设备102将数据段存储在特定物理地址处的逻 辑块存储请求。请求设备(如客户端110或服务器10 初始化存储请求以从源数据存储 设备写入数据。来自源数据存储设备的数据602的一部分与存储在数据602的一部分内的 数据段606 —起被描述。在这种情况下,数据段606拟被存储于存储设备102的扇区1、偏 移量5和数据长度为8的物理地址上。在一种实施方式中,请求设备制定存储请求608并 将存储请求608发送到存储设备102,存储请求608包括具有源参数的包头,源参数包括逻 辑块地址和数据长度。为简便起见,实例600假设数据段606的数据未被压缩。在实例600中,数据段 606的数据长度为8,并且在当前页616内有用于数据包的空间,用于长度为5的数据包的 数据正在被存储在当前页616中。在这个例子中,翻译模块204确定数据段606不适于当 前数据所存储的当前页616的末端并从数据段606创建两条附加数据存储命令614以存储 两个数据包。数据1610和数据沈12。数据当前所存储的页616包括有效数据618。在其他页中可包括有效或无效数据。 一条附加数据存储命令614将数据1610存储在附加点1620中,附加点1620紧随数据最新 存储的位置622。数据包数据1610随后存储在当前页616的末端,如拟4所示。第二附加数据存储命令614将数据沈12存储在数据将要被存储的下一页6 上。 在一种实施方式中,下一页6 位于不同于数据1610所存储的页616的擦除块中。在这种 实施方式中,存储在附加点1620的数据可流到下一页,而不需要必须在下一页的起始处设 置新的附加点,除非下一页6 位于另一擦除块中。在另一种实施方式中,下一页6 是邻 近数据1610所存储的页616的页,或者在某种程序上是逻辑上的下一页,但是新的附加点 2630需要位于下一页拟6的起始处。本领域技术人员会认识到何时第二附加点630被要求 继续存储数据。下一页拟6不包括有效数据628,这是由于下一页626已被擦除或存储空间 恢复进程已经确定下一页626中不再有有效数据。第二附加数据存储命令614将数据包数 M 2612存储在附加点2630上,如632所示。该实例600表明了数据段606分离的情况,数据段606分离是由于创建自数据段
18606的数据包610、612落在了页616的边界上,在其他情况下,数据段606的数据可存储在 一起或者可以分离为三个或更多个数据包。在其他情况下,压缩模块306将数据段606的 数据压缩以形成一个或多个数据包610、612。图7是根据本发明的用于有效地映射虚拟地址和物理地址的装置700的一种实施 方式的示意性框图。装置700包括正向映射模块702、反向映射模块704和存储空间恢复 模块706,下文将描述这些模块。正向映射模块702、反向映射模块704和存储空间恢复模 块706中的一个或多个的至少一部分位于下述设备的一个或多个中发送存储请求的请求 设备、数据存储设备106、存储控制器104、以及与请求设备、数据存储设备106和存储控制 器104分离的计算设备。在一种实施方式中,正向映射模块702和反向映射模块704与映射模块206结合 起来工作。正向映射模块702和反向映射模块704可以是映射模块206的一部分,或者与 映射模块206分离但一起工作。装置700包括使用正向映射以识别数据段的数据的一个或多个物理地址的正向 映射模块702。通过数据段的一个或多个虚拟地址识别物理地址,虚拟地址在发送到数据存 储设备106的存储请求中识别。例如,存储请求可包括读取存储在数据存储设备106中的 数据的请求。读取数据的存储请求包括与存储在数据存储设备106上的数据相关联的虚拟 地址或虚拟标识符。读取请求可包括文件的虚拟地址,数据段源于该文件,这可以解释为, 读取请求是读取与虚拟地址相关联的整个数据段的请求。在另一实例中,读取请求包括读取请求中所请求的数据的虚拟地址以及偏移量和 虚拟地址。例如,如果数据段是20个块,读取请求可包括16块的偏移量(即,始于20个块 中的第16个块)和5的数据长度,从而读取请求读取数据段的最后5个块。读取请求也可 在请求中包括偏移量和数据长度以读取整个数据段或从数据段的起始处读取。其他请求也 可包括在存储请求中,例如状态请求。存储请求的其他类型和其他形式也被考虑在本发明 的范围内并且能够被本领域技术人员所认识到。装置700包括正向映射,该正向映射将一个或多个虚拟地址映射到存储在数据存 储设备106中的数据的一个或多个物理地址。虚拟地址对应于与存储在数据存储设备106 中的数据有关的一个或多个数据段。通常,一个或多个虚拟地址包括虚拟地址空间内的离 散地址,其中虚拟地址通常稀疏地位于虚拟地址空间。对于数据段的虚拟地址来说,数据长 度信息也可与虚拟地址关联且也可以包括在正向映射中。通常,数据长度对应于数据段的 大小。结合虚拟地址和与虚拟地址有关的数据长度信息可用于帮助读取数据段内的特定部 分。通常,用于识别存储的数据的虚拟地址表示可能位于名字空间或可能的虚拟地址 范围内的极少量虚拟地址。搜索这种稀疏构成的空间可能是繁琐的。出于这个原因,正向 映射通常是有助于快速遍历正向映射以基于虚拟地址找出物理地址的数据结构。例如,正 向映射可包括B-树、内容可寻址存储器(CAM)、二进制树、哈希表或有助于快速搜索稀疏构 成的空间或范围的其他数据结构。通过使用快速搜索稀疏构成的名字空间的正向映射,装 置700提供了从虚拟地址确定一个或多个物理地址的有效方式。当正向映射可被优化(或至少被设计)以快速地从虚拟地址确定物理地址时,通 常,不必为了在数据存储设备106的特定区域内定位所有数据而优化正向。出于该原因,装置700包括使用反向映射以从物理地址确定数据段的虚拟地址的反向映射模块704。反 向映射用于将一个或多个物理地址映射到一个或多个虚拟地址,并且能够被反向映射模块 704或其他进程使用以从物理地址确定虚拟地址。反向映射是有利地将数据存储设备106 映射到擦除区域,从而反向映射的一部分跨越数据存储设备106的在存储空间恢复操作中 一起擦除的擦除区域。存储空间恢复操作(或垃圾收集操作)恢复擦除区域以用于进一步 的数据存储。通过利用擦除区域组织反向映射,存储空间恢复模块706能够有效地识别用 于存储空间恢复的擦除区域并识别有效数据。下文将更详细地描述存储空间恢复模块706。反向映射中的物理地址与正向映射关联或链接到正向映射,从而如果在正向映射 中虚拟地址A映射到物理地址B,则在反向映射中,物理地址B映射到虚拟地址A。在一种 实施方式中,正向映射包括链接到反向映射中的条目的物理地址。在另一种实施方式中,正 向映射包括指向反向映射中的物理地址的指针或一些其他的中间链表、表等。本领域技术 人员会认识到将物理地址链接到正向映射和反向映射的其他方法。在一种实施方式中,反向映射包括一个或多个源参数。源参数通常与存储请求一 起被接收并至少包括一个或多个虚拟地址。源参数也可包括与数据段的数据相关联的数据 长度,数据段与存储请求一起被接收。在另一种实施方式中,反向映射不包括虚拟地址或数 据长度形式的源参数,且源参数与存储在数据存储设备106上的数据段的数据一起存储。 在该实施方式中,源参数可从反向映射中的引到与数据一起存储的源参数的物理地址被找 出。换言之,反向映射可使用主要虚拟-物理映射,而不使用次要逻辑-物理映射。将源参数与数据一起存储在顺序存储设备中是有利的,这是因为存储在数据存储 设备106中的数据成为了能够被回放以重建正向和反向映射的日志。这是由于以下事实 与存储请求被接收的时间相匹配的顺序存储数据,并由此,源数据执行双重职能;重建正向 和反向映射,并从物理地址确定虚拟地址。装置700包括存储空间恢复模块706,存储空间恢复模块706在恢复擦除区域的操 作之前利用反向映射识别擦除区域中的有效数据。在恢复操作之前,所识别的有效数据被 移动到另一个擦除区域。通过利用擦除区域组织反向映射,存储空间恢复模块706能够扫 描反向映射中对应于擦除区域的那部分以快速地识别有效数据或确定擦除区域中的有效 数据的数量。擦除区域可包括一起擦除的擦除块、固定数量的页等。可组织反向映射,从而 一旦扫描到特定擦除区域的条目,就得知了擦除区域的内容。通过利用擦除区域组织反向映射,相比于搜索B-树、二进制树或其他用于虚 拟-物理地址搜索的类似结构,搜索擦除区域的内容更加有效。搜索B-树、二进制树等形 式的正向映射是繁琐的,这是因为B-树、二进制树等必须频繁地被全面搜索以识别擦除区 域的所有有效数据。反向可包括表、数据库或其他允许进入擦除区域的将要被存储的数据 以有助于擦除区域的数据的操作的结构。在一种实施方式中,正向映射和反向映射独立于组织数据用于发送存储请求的请 求设备的文件结构、名字空间、目录等,请求设备例如运行在服务器108或客户端110中的 文件服务器或客户端。通过维持与请求设备的任何文件服务器分离的正向映射和反向映 射,装置700能够仿真像存储请求所请求的那样存储数据的随机存取、逻辑块存储设备。正向映射和反向映射的使用允许装置700看起来像是将数据存储在存储请求所 指令的特定位置,而实际上将数据顺序地存储在数据存储设备106。有利地是,装置700通过仿真逻辑块存储而实际上顺序地存储数据,克服了随机存储对固态存储器(例如闪存) 所产生的问题。装置700也允许灵活性,这是由于一个存储请求可以是逻辑块存储请求,而 第二存储请求可以是对象存储请求、文件存储请求等。保持请求设备对文件结构、名字空间 等的独立性在装置700可以服务的存储请求的类型方面提供了极大的灵活性。图8是根据本发明的用于有效地映射虚拟地址和物理地址的装置800的另一种实 施方式的示意性框图。装置800包括正向映射模块702、反向映射模块704和存储空间恢复 模块706,这些模块与上文中相对于图7的装置200描述的基本相同。装置800还包括映射 重建模块802、检查点模块804、映射同步模块806、无效模块808和映射更新模块810,将在 下文中描述这些模块。装置800包括映射重建模块802,映射重建模块802利用与数据一起存储的源参 数重建正向映射和反向映射。当数据在数据存储设备106上顺序地存储时,通过跟踪擦除 区域或擦除块在数据存储设备106中填充顺序和将源参数与数据一起存储,数据存储设备 106成为顺序日志。映射重建模块802通过顺序地读取存储在数据存储设备106上的数据 包回放日志。每个物理地址和数据包长度与每个数据包中的源参数成对,以重建正向和反 向映射。在另一种实施方式中,装置800包括检查点模块804,检查点模块804存储与正向 映射和反向映射相关的信息,其中检查点是与数据存储设备的时间点或状态点有关的检查 点。存储的信息足以将正向映射和反向映射恢复到相对于检查点的状态。例如,存储的信 息可包括将正向和反向映射连同一些指示状态或时间检查点的标识符存储在非易失性存 储器中,例如存储在数据存储设备中。例如,时间戳可以与检查点信息一起存储。然后,时间戳可以与数据存储设备106 中位置相互关联,其中数据包当前在该位置正在被存储在检查点中。在另一实例中,状态信 息与检查点信息一起存储,状态点信息例如数据存储设备106正在存储数据的位置。本领 域技术人员会认识到可由检查点模块804存储以将正向和反向映射恢复为检查点的其他 检查点信息。在另一种实施方式中,装置800包括映射同步模块806,映射同步模块806通过顺 序地应用源参数和物理地址将正向映射和反向映射从相对于检查点的状态更新到当前状 态。应用的源参数与顺序存储在检查点之后的数据一起存储。物理地址源于数据存储设备 106上的数据的位置。有利地是,映射同步模块806从检查点(而不是从起始处开始恢复)将正向和反 向映射恢复到当前状态,并回放数据存储设备106的所有内容。映射同步模块806使用检 查点到达紧随检查点之后存储的数据包,然后从该点到当前状态(在该状态下,数据包当 前正被存储在数据存储设备106上)回放数据包。映射同步模块806通常比映射重建模块 802消耗更少的时间来恢复正向和反向映射。在一种实施方式中,正向和反向映射存储在数据存储设备106上,而正向和反向 映射的另一个集被创建以映射存储的正向和反向映射。例如,数据包可存储在第一存储通 道中,而用于存储的数据包的正向和反向映射可作为数据存储在第二存储通道中;第二存 储通道上的用于数据的正向和反向映射可以作为数据存储在第三存储通道上,依此类推。 这种递归的进程可根据需要为额外的正向和反向映射继续。存储通道可以位于单个数据存储设备106或位于分离的数据存储设备106。装置800包括无效模块808,无效模块808在反向映射中标记数据的条目,该条目 指示由其引用的数据响应于导致数据被无效的操作而无效。无效模块808可作为删除请 求、读-修改-写请求及类似请求的结果标记条目无效。反向映射包括一些类型的无效标 记或标签,无效标记或标签可由无效模块808改变以指示与反向映射中的条目关联的数据 是无效的。例如,反向映射可包括一个由无效模块808在数据无效时设定的位。在一种实施方式中,反向映射包括用于存储在数据存储设备106的有效数据和无 效数据的信息,正向映射包括用于存储在数据存储设备106上的有效数据的信息。由于反 向映射对于存储空间恢复操作来说是有用的,指示擦除块中的哪些数据为无效的信息包括 在反向映射中。通过在反向映射中维持指示无效数据的信息,在一种实施方式中,正向映射 仅需要维持有关于存储在数据存储设备106上的有效数据的信息,由此提升了正向查找的 效率和速度。随后,存储空间恢复模块706可使用无效标记通过下述方法确定擦除区域中的无 效数据的数量扫描用于擦除区域的反向映射以相对于擦除区域的存储容量确定无效数据 的数量。然后,存储空间恢复模块706可使用擦除区域中的无效数据的确定数量来选择恢 复的擦除区域。通过扫描若干擦除区域甚至是全部可用的擦除区域,存储空间恢复模块706 可以使用选择标准(例如擦除区域中无效数据的最高量)以选择恢复的擦除区域。在一种实施方式中,一旦擦除区域被选定为恢复,存储空间恢复模块706可随后 将有效数据从选定的擦除区域写入数据存储设备106中的新位置。通常,该新位置位于当 前正在顺序地存储数据的擦除区域的页中。存储空间恢复模块706可利用数据管道写入有 效数据,正如由David Flyrm等人于2007年12月6日提交的申请号为11,952,091,题为 "Apparatus, System, and Methodfor Managing Data Using a Data Pipeline,,美国专利 申请中所述的,通过引用将该文献并入本文中。在一种实施方式中,存储空间恢复模块706还更新反向映射以指示写入新位置的 有效数据在选定的擦除区域中为无效,并且基于写入新位置的有效数据更新正向和反向映 射。在另一种实施方式中,存储空间恢复模块706与映射更新模块810(下文将对其描述) 协同作用以更新正向和反向映射。在优选实施方式中,存储空间恢复模块706相对于与存储请求和其他命令相关联 的数据存储和检索自主地运行。包括在存储空间恢复模块706中的存储空间恢复操作在上 文中引用的存储空间恢复申请有更详细的描述。在一种实施方式中,装置800包括映射更新模块810,映射更新模块810响应于数 据存储设备106被改变的内容更新正向映射和/或反向映射。在又一种实施方式中,基于 数据存储设备存储数据的位置,映射更新模块810从数据存储设备接收将所存储数据的物 理地址链接到虚拟地址的信息。在该实施方式中,存储数据包的位置可以是不可用的,直到 数据存储设备106存储了数据包。例如,来自数据段的数据被压缩以形成数据包,每个数据包的大小可以是未知的, 直到压缩之后。数据存储设备106顺序地存储数据,一旦数据包被压缩和存储,附加被设定 到存储的数据包之后的位置,下一数据包被存储。一旦得知附加点,数据存储设备106随后 发回对应于存储下一数据包的附加点的物理地址的报告。映射更新模块810使用所报告的存储的数据包的物理地址和关联的数据长度更新正向和反向映射。本领域技术人员会认识 到映射更新模块810的其他实施方式以基于存储在数据存储设备106上的数据的物理地址 和关联的数据长度更新正向和反向映射。图9是根据本发明的用于有效地映射虚拟地址和物理地址的方法900的一种实施 方式的示意性流程图。方法900开始,在步骤902,正向映射模块702使用正向映射识别数 据段的数据的一个或多个物理地址。从数据段的一个或多个虚拟地址识别物理地址,在指 令数据存储设备106的存储请求中识别数据段。正向映射包括一个或多个虚拟地址到数据 存储设备106中存储的数据的一个或多个物理地址之间的映射。虚拟地址是虚拟地址空间 内的离散地址,其中虚拟地址稀疏地位于虚拟地址空间。在步骤904,反向映射模块704使用反向映射从物理地址确定数据段的虚拟地址。 反向映射将一个或多个物理地址映射到一个或多个虚拟地址。反向映射中的物理地址也利 用指针、链接等与正向映射相关联。反向映射中的虚拟地址对应于与存储在数据存储设备 106上的数据相关的一个或多个数据段。反向映射也将数据存储设备映射到擦除区域,从而 反向映射的一部分跨越擦除区域。数据存储设备106的擦除区域在存储空间恢复操作中被 一起擦除。存储空间恢复操为将来存储数据恢复擦除区域。在步骤906,存储空间恢复模块706在恢复擦除区域的操作之前使用反向映射识 别擦除区域中的有效数据,方法900结束。存储空间恢复模块706或其他与存储空间恢复 关联的模块在恢复操作之前将识别的有效数据移动到另一擦除区域。注意到方法900的步 骤902、904、906平行示出,这是因为步骤902、904、906可以以任意顺序独立地实施。图10是根据本发明的用于有效地映射虚拟地址和物理地址的方法1000的另一种 实施方式的示意性流程图。方法1000开始,在步骤1002,存储空间恢复模块706通过下述 方法确定擦除区域中的有效数据的数量扫描用于擦除区域的反向映射以确定有效数据相 对于擦除区域的存储容量的数量。在步骤1004,存储空间恢复模块706确定是否要计算另 一擦除区域。如果在步骤1004,存储空间恢复模块706确定要计算另一擦除区域,存储空间 恢复模块706为下一擦除区域确定有效数据的量。如果在步骤1004,存储空间恢复模块706确定不计算另一擦除区域,则在步骤 1006,存储空间恢复模块706通过利用选择标准选择恢复的擦除区域,选择标准可包括利 用擦除区域中的无效数据的数量。在步骤1008,存储空间恢复模块706识别选定的擦除区 域中的有效数据并在步骤1010中,将有效数据移动到当前写入数据的擦除区域中。在步骤 1012,映射更新模块810随后更新正向和反向映射以表明有效数据已被写入数据存储设备 106中的另一位置。在一种实施方式中,在步骤1014,存储空间恢复模块706擦除选定的擦除区域并 将选定的存储区域标记为可用于数据存储,方法1000结束。在另一种实施方式中,一旦存 储空间恢复模块706将选定的擦除区域中的所有有效数据写入另一位置,在步骤1014,存 储空间恢复模块706将选定的存储区域标记为可用于数据存储,而不需要擦除。图11是根据本发明的正向映射和反向映射的实例的示意性框图。通常,装置700 和800接收存储请求,例如读取和编址的存储请求。例如,装置700和800可接收逻辑块存 储请求1102以开始读取读取地址182并读取3个块。通常,正向映射1104将逻辑块地址存 储为与其他虚拟地址在一起的虚拟地址,从而正向映射模块702使用正向映射1104从存储请求1102的值为182的虚拟地址识别物理地址。在该实例中,为简便起见,仅示出了数字 的虚拟地址,但本领域技术人员会认识到正向映射1104中可使用和表示的任意虚拟地址。 在其他实施方式中,正向映射1104可包括字母-数字字符、十六进制字符及类似字符。在该实例中,正向映射1104是简单的B-树。在其他实施方式中,正向映射1104 可以是内容可寻址存储器(CAM)、二进制树、哈希表或本领域内技术人员所知的其他数据结 构。在该实施方式中,B-树包括可包括两个虚拟地址的节点(例如根节点1108)。每个虚 拟地址可以是值域。例如,虚拟地址可以是具有值域(例如偏移量和长度)的虚拟标识符 的形式,或者可表示利用第一和最后地址或位置的值域。单个虚拟地址包括在特定节点(例如根节点1108)中时,如果被搜索的虚拟地址 1106小于节点的虚拟地址,搜索会继续沿着定向边1110往下到达节点1108的左边。如果 被搜索的虚拟地址1106与当前节点1108匹配(即,位于在节点中识别的值域内),搜索停 止,并且在当前节点1108的指针、链接、物理地址等被识别。如果被搜索的虚拟地址1106大 于当前节点1108的值域,搜索会继续沿着定向边1112往下到达当前节点1108的右边。当 节点包括两个虚拟地址,并且被搜索的虚拟地址1106落入节点的所列的虚拟地址之间时, 搜索继续沿着中间定向边(未示出)往下到达具有落入当前节点1108的两个虚拟地址之 间的虚拟地址的节点。搜索继续沿着B-树往下进行,直到定位了期望的虚拟地址或者确定 了 B-树中不存在所搜索的虚拟地址1106。在图11所示出的实例中,正向映射模块702从根节点1108开始搜索值为182的 虚拟地址1106。由于搜索的虚拟地址1106小于根节点的虚拟地址(2005-212),正向映射 模块702向下沿着定向边1110往下搜索到达下一节点1114的左边。搜索的值为182的虚 拟地址1106大于存储在下一节点1114的虚拟地址(072-083),所以正向映射模块702向下 沿着定向边1116从节点1114的右边往下搜索到达下一节点1118。在该实例中,下一节点 1118包括178-192的虚拟地址,从而所搜索的值为182的虚拟地址1106与节点1118的值 为178-192的虚拟地址匹配,这是因为所搜索的值为182的虚拟地址1106落入到节点1118 的值域178-192内。一旦正向映射模块702确定了正向映射1104中的匹配,正向映射模块702将在节 点1118内找到的或与节点1118链接的物理地址返回。在所述实例中,由正向映射模块702 识别为包含所搜索的虚拟地址1106的节点1118包括映射到反向映射1122中的条目1120 的链接“f”。在所述实施方式中,对于反向映射1122中的每个条目1120(表示为表中的行)而 言,反向映射1122包括条目ID 1124、物理地址1126、与存储在数据存储设备106的物理地 址11 上的数据(在这种情况下,数据被压缩)相关联的数据长度1128、有效标签1130、 虚拟地址1132(可选)、与虚拟地址1132相关联的数据长度1134(可选)和其他杂项数据 1136。反向映射1122被组织到擦除块(擦除区域)中。在该实例中,对应于选定的节点 1118的条目1120位于擦除块η 1138中。擦除块η 1138在擦除块η_11140之后,擦除块η 1138之后是擦除块n+11142(擦除块η-1和擦除块η+1中的内容未示出)。擦除块可以是 包括预定数量的页的一些擦除区域。擦除区域是数据存储设备106上在存储恢复操作中被 一起擦除的区域。条目ID IlM被示出为是反向映射1122的一部分,条目ID IlM可以是地址、虚拟链接或将反向映射1122中的条目链接到正向映射1104中的节点的其他手段。物理地址 1126是数据存储设备106中对应于所搜索的虚拟地址1106的数据所驻留的地址。与物理 地址11 关联的数据长度11 识别存储在物理地址11 上的数据包的长度。(为简便起 见,物理地址11 和数据长度11 可被一起称为目标参数1144,虚拟地址1132和关联的 数据长度可被称为源参数1146)。在这个实例中,目标参数1144的数据长度1120不同于源 参数1146的数据长度1134,在一种实施方式中,在存储之前压缩存储在数据存储设备106 上的数据包。对于与条目1120关联的数据,数据可被高度压缩,从64个块压缩成1个块。有效标签1130指示映射到条目1120的数据是否有效。在这种情况下,与条目1120 关联的数据是有效的,在图11中,其在条目1120的行中被表示为“Y”。通常,反向映射1122 既跟踪有效数据又跟踪无效数据,正向映射1104跟踪有效数据。在该实例中,条目“c”l 148 表示与条目1148关联的数据无效。注意到正向映射1104不包括虚拟地址。通常,反向映射 1122保持无效数据的条目,从而能够在存储恢复操作中快速地区别有效数据和无效数据。为了方便,所述反向映射1122包括源参数1146,但反向映射1122可以(但未必) 包括源参数1146。例如,如果源参数1146与数据一起存储(可能位于存储数据的包头), 反向映射1122可通过包括与数据关联的物理地址11 间接地识别虚拟地址,而可以从存 储的数据中识别源参数1146。本领域技术人员会认识到何时将源参数1146存储在反向映 射1122是有利的。反向映射1122也可包括其他杂项数据1136,例如文件名、对象名、源数据等。本 领域技术人员会认识到在反向映射1122中有用的其他信息。尽管物理地址11 在反向映 射1122中示出,但在其他实施方式中,物理地址11 或其他目标参数1144可被包括在其 他位置中,例如可被包括下述位置正向映射1104、中间表或数据结构等等。通常,反向映射1122由擦除块或擦除区域设置,从而遍历与擦除块(如擦除块η 1138)关联的映射的一部分允许存储空间恢复模块706识别擦除块1138中的有效数据并计 算擦除块1138中有效数据的数量(或相反地,无效数据的量)。由于索引可被优化用于搜 索和存储恢复操作,将索引设置到正向映射1104和反向映射1122中是有利的,其中正向映 射1104能够被快速地搜索以从虚拟地址1106识别物理地址11 ,反向映射1122能够被快 速地搜索以识别擦除块1138中的有效数据及其数量。本领域技术人员会认识到具有正向 映射1104和反向映射1122的索引的其他好处。图12是示出了根据本发明的用于协调存储请求的装置1200的一种实施方式的示 意性框图。装置1200包括具有附加/无效模块1202和重组模块1204的存储控制器104, 这将在下文描述。附加/无效模块1202和重组模块1204中的一个或多个的至少一部分位 于下述设备中的一个或多个中发送存储请求的请求设备、数据存储设备106、存储控制器 104和与请求设备、数据存储设备106和存储控制器104分离的计算设备。装置1200包括附加/无效模块1202,附加/无效模块1202响应于第一存储请求 的接收生成第一附加数据存储命令,并响应于第二存储请求的接收生成第二附加数据存储 命令。从一个或多个请求设备接收第一和第二存储请求。请求设备可以是服务器108或客 户端110,客户端110可以位于服务器108上,或者通过计算机网络112与服务器108通信。第一存储请求包括用第一数据覆盖数据段的现有数据的请求。数据段存储在数据 存储设备106上。第二存储请求包括用第二数据覆盖相同数据段的现有数据的请求。第一和第二数据包括将以相同的偏移量存储在数据段内的重叠数据的至少一部分,在第一存储 请求之后接收第二存储请求。附加/无效模块1202还响应于第一存储请求通过将数据段的数据标记为无效来 更新索引。标记为无效的数据是正被第一数据替换的数据。附加/无效模块1202也响应于 第二存储请求通过将数据段的数据标记为无效来更新索引,其中,标记为无效的数据是正 被第二数据替换的数据。在一种实施方式中,附加/无效模块1202通过更新反向映射1122 来更新索引。在一种实施方式中,附加/无效模块1202更新反向映射1122以指示数据段 无效。在另一种实施方式中,附加/无效模块1202仅将对应于第一数据或第二数据的数据 标记为无效。这可能需要修正正向映射1104和反向映射1122,这将在下文中详细描述。在另一种实施方式中,将数据段的数据标记为无效可包括生成表,该表指示数据 段的正被第一数据和第二数据替换的部分是无效的,该表还指示数据段中未被替换的部分 仍然是有效的。该表可被重组模块1204在更新索引的过程中使用,而不需要将整个数据段 标记为无效。装置1200包括重组模块1204,重组模块1204基于第一数据更新索引并基于第二 数据更新索引,其中,组织被更新的索引以指示第二数据比第一数据更符合当前情况。在基 于第一数据更新索引(在基于第二数据更新索引之前)之时或基于第二数据更新索引(在 基于第一数据更新索引之前)之时保持索引的这种组织。在一种实施方式中,组织索引以指示对于重叠数据来说第二数据比第一数据更符 合当前情况包括在用于重叠数据的索引中保持指针、链接等,不考虑更新的顺序,重叠数据 对应于第二数据。例如,如果源数据段包括由3’的第一数据和3”的第二数据覆盖的块3, 在更新之后,不论索引是否在第一数据之前用第二数据更新,索引都指向3”,反之亦然。在 下文对图16的描述中提供了进一步的解释。通常,组织索引以指示第二数据比第一数据更符合当前情况可包括利用第二数据 更新索引中映射到重叠数据的一部分,以及甚至在重组模块1204基于第二数据(在基于第 一数据更新索引之前)更新索引的情况下,保留到第二数据的映射。当附加/无效模块1202更新索引时,附加/无效模块1202阻止通过另一进程访 问索引以确保数据完整性。例如,如果附加/无效模块1202正在基于第一数据更新索引, 附加/无效模块1202阻止重组模块1204或附加/无效模块1202的另一例程基于第二数 据更新索引。通过在索引更新时阻止对索引的访问(即锁定索引),装置1200支持多处理 器或多线程运行的装置的模块1202和1204的多重运行。注意到尽管上文中讨论了两个存 储请求,本发明可同样地应用到同时处理三个或更多个存储请求的情形。图13是示出了根据本发明的用于协调存储请求的装置1300的另一种实施方式的 示意性框图。装置1300包括附加/无效模块1202和重组模块1204,这两个模块基本上类似 于结合图12的装置1200所描述的。装置1300还包括数据位置模块1302、读取模块1304、 读取延迟模块1306、序列编号模块1308,将在下文中描述这些模块。图示中,装置1300的 模块1202、1204、1302-1308位于存储控制器104中,但模块1202、1204、1302-1308的全部 或部分可包括在数据存储设备106、客户端110、服务器108或其他设备或其他位置中。在一种实施方式中,装置1300包括数据位置模块1302,数据位置更新模块1302利 用数据存储设备106存储第一数据的第一物理地址更新索引,还利用数据存储设备106存储第二数据的第二物理地址更新索引。装置1300接收数据存储设备106存储第一数据和 从数据存储设备106接收第二数据的物理位置。如上所述,数据存储设备106顺序地存储 数据,为给定的数据包存储数据的位置可以是未知的,直到存储了先前的数据包。组织所更新的索引以指示第二物理位置比第一物理位置更符合当前情况,而不考 虑索引是基于第一物理位置被更新(在基于第二物理位置更新之前),还是基于第二物理 位置被更新(在基于第一物理位置更新之前)。例如,如果第一数据的重叠部分响应于第一 存储请求存储在地址1中,而第二数据的重叠部分存储地址2中,则数据位置模块1302为 索引中相对于重叠数据的部分将地址2存储在索引中。如果在为第一数据更新之前,为第 二数据更新索引,则索引为重叠数据维持地址2,而不是用地址1替换地址2。数据位置更新模块1302阻止通过数据位置模块1302或其他模块(例如附加/无 效模块1202或重组模块1204)的另一例程访问索引,直到数据位置模块1302完成更新索 引。在数据位置模块1302更新索引之时阻止对索引的访问增加了数据的可靠性。通常,在重组模块1204处理存储请求之前,附加/无效模块1202处理特定存储请 求,并且在数据位置模块1302处理存储请求之前,重组模块1204处理存储请求。然而,一 旦确定两个存储请求到达的顺序,附加/无效模块1202的例程处理第二存储请求可发生在 附加/无效模块1202的另一例程处理第一存储请求之前。同样地,重组模块1204处理第 二存储请求可发生在附加/无效模块1202或重组模块1204的另一例程处理第一存储请求
> . 、r -类似地,数据位置模块1302的例程处理第二存储请求可发生在附加/无效模块 1202、重组模块1204或数据位置模块1302的另一例程处理第一存储请求之前。本发明的这 种特征允许异步和独立的多处理器和/或多线程地处理存储请求。在模块1202、1204、1302 的另一例程更新索引和基于到达的顺序而不是处理的顺序组织索引时,阻止对模块1202、 1204和1302的访问有助于通过多处理器或多线程并行地处理存储请求。装置1300包括反向的读取模块1304,读取模块1304响应于包括读取请求的存储 请求读取数据段的至少一部分。读取请求必须与导致修正数据段的存储请求协调,从而装 置1300也包括读取延迟模块1306,读取延迟模块1306推迟服务所请求的读取操作,直到第 一存储请求由附加/无效模块1202、重组模块1204和数据位置更新模块1302服务。读取 延迟模块1306通过在更新数据段的内容时或在更新映射到数据段的索引时阻止读取操作 保持数据的完整性。在一种实施方式中,当在请求覆盖数据段的至少一部分的第一存储请求之后,但 在同样请求覆盖数据的至少一部分的第二存储请求之前接收到读取数据段的读取请求时, 读取延迟模块1306推迟服务读取请求,直到第一和第二存储请求都已由附加/无效模块 1202、重组模块1204和数据位置更新模块1302服务。在这种实施方式中,读取延迟模块 1306允许基于第二数据存储请求更新数据段,从而读取模块1304将读取数据段的最新版 本。在一种实施方式中,装置1300包括序列编号模块1308,序列编号模块1308将序列 号与存储请求关联,其中分配的序列号表示装置1300接收存储请求的顺序。序列号有助于 组织索引,从而索引反映出基于第二存储请求的更新发生在基于第一存储请求的更新之 前。在这种实施方式中,重组模块1204组织索引以利用分配给第一存储请求和第二存储请求中的每一个的序列号指示第二数据比第一数据更符合当前情况。同样地,数据位置模块 1302也组织索引以指示第二数据比第一数据更符合当前情况。序列号可以是时间戳、连续 的数字或其他任何可被用于识别一个序列号先于另一个序列号的机制。本领域技术人员会 认识到序列号的其他形式。在一种实施方式中,在更新索引时,附加/无效模块1202、重组模块1204或数据位 置模块1302不阻止访问整个索引。索引可被分割成两个或多个区域。例如,一个区域可涉 及数据存储设备106的一个区域,而索引的另一个区域可涉及数据存储设备106的另一个 区域。在该实施方式中,当服务涉及索引的第一区域的存储请求时,附加/无效模块1202、 重组模块1204或数据位置模块1302的额外的例程可服务涉及第二区域的第二存储请求。 在另一种实施方式中,索引可被分割以创建多个可独立运行的虚拟地址区域。索引的区域 可以是分支、次分支,甚至是节点,只要在更新区域时限制对区域的访问不影响同时更新的 其他分区的数据完整性。在一种实施方式中,第一和第二存储请求与将要替换数据段的至少一部分的数据 一起接收。在另一种实施方式中,同时接收第一和第二存储请求中的一个或两个,而没有数 据。此外,可将相应的附加数据存储请求在没有数据的情况下发送到数据存储设备106。例 如,存储请求可不包括数据且可以初始化直接存储器存取(DMA)进程和远程直接存储器存 取(RDMA)进程以将数据段的数据转移到数据存储设备106。同样地,发送到数据存储设备 106的附加数据存储命令可指令数据存储设备106建立DMA或RDMA进程以转移数据。装 置1200、1300具有足够的灵活性以处理具有数据一个存储请求、是恢复进程的一部分的另 一存储请求和建立DMA和RDMA操作的又一存储请求。本发明公开了附加/无效模块1202、重组模块1204和数据位置更新模块1302的 例程是如何处理大约在同一时间接收到的影响单个数据段的请求,本领域技术人员会认识 到附加/无效模块1202、重组模块1204、数据位置更新模块1302可处理其他影响单个数据 段的不同部分的多种存储请求,也可处理影响两个或多个分离的数据段的存储请求。图14是示出了根据本发明的用于协调存储请求的方法1400的一种实施方式的示 意性流程图。方法1400开始,在步骤1402,装置1200接收第一存储请求。在步骤1404,装 置1200接收第二存储请求。第一和第二存储请求通过覆盖数据段的至少一部分影响单个 数据段。此外,第一和第二数据请求覆盖数据段为第一和第二存储请求所共有的至少一个 重叠部分。在步骤1406,附加/无效模块1202的例程生成第一附加数据存储命令以用第一数 据覆盖数据段的至少一部分。在步骤1408,附加/无效模块1202的例程还生成第二附加数 据存储命令以用第二数据覆盖数据段的至少一部分。在步骤1410,附加/无效模块1202的 正在服务第一数据请求的例程通过无效数据段中被第一数据替换的数据更新索引。在步骤 1412,附加/无效模块1202的正在服务第二数据请求的例程通过无效数据段中被第二数据 替换的数据也更新索引。在步骤1414,重组模块1204的例程基于第一数据更新索引。在步骤1416,重组模 块1204的例程还基于第二数据更新索引,方法1400结束。当附加/无效模块1202或重组 模块1204的任意例程更新索引时,模块1202、1204的其他例程被阻止访问索引。与附加/无效模块1202和重组模块1204的例程有关的步骤1406-1416的顺序仅仅是一种实施方式。步骤1406-1416的其他顺序是可能的而且是本发明的重要特征,只要 在重组模块1204服务第一存储请求之前,附加/无效模块1202服务第一存储请求,而且在 重组模块1204服务第二存储请求之前,附加/无效模块1202服务第二存储请求。例如,附 加/无效模块1202的例程和重组模块1204的例程可以在附加/无效模块1202的另一例 程服务第一存储请求之前服务第二存储请求。在下文中,相对于图16所示出的实例更详细 地论述了服务存储请求的可能顺序。图15是示出了根据本发明的用于协调存储请求的方法1500的一种实施方式的示 意性流程图。方法1500是为协调上述的客户端110、存储控制器104或装置1200、1300的 其他位置以及数据存储设备106中的存储请求而采取的步骤的实例。注意到方法1500描 述了三个设备中的动作,方法1500不意图暗示本发明需要跨越不止一个设备,也不意图暗 示模块必须按图12和13所示定位。本发明可以在存储控制器104或与数据存储设备106的存储控制器104通信的其 他单个设备中实施,也可包括客户端110、服务器108等中的驱动器的一部分。通常,客户端 110和数据存储设备106中所示的动作独立于本发明,而且仅被用于展示一般在客户端110 和数据存储设备106中发生了什么以发送存储请求和响应于存储请求而存储数据。尽管方法1500描绘了单个客户端110,但通常,具有多个客户端110,而且每个客 户端110通过存储控制器104的一个或多个的例程访问数据存储设备106。在步骤1502, 客户端110初始化客户端之间的锁之时,方法1500开始,该锁与其他客户端110协调数据 的写入,从而使得图示的客户端110是在特定时间发送具有写入请求的存储请求的唯一客 户端110。写入请求可以是写入新数据的请求,或者是替换或修正现有数据段的请求。在服 务写入新数据的写入请求时阻止对索引的访问是重要的,因此本发明在下述情况下特别有 用替换或修正现有数据段以确保在出现两个或多个修正/替换相同数据段的请求时的数 据完整性。在该实施方式中,一旦客户端之间的锁就位以确保来自不止一个客户端110的 写入请求的同步性,则在步骤1504,客户端110将写入请求发送到存储控制器104。在另一 种实施方式中,未利用客户端之间的同步性,而且存储请求没有预定的顺序。在所述的实施 方式中,写入请求基本不具有数据并初始化DMA进程以将数据从客户端110或其他位置转 移到数据存储设备106。在步骤1506,附加/无效模块1202随后通过“锁定”索引阻止对索引的多重访问。 在步骤1508,序列模块1308随后获取序列号并将序列号与写入请求关联。在步骤1510,附 加/无效模块1202基于写入请求创建附加数据存储命令。附加数据存储命令包括分配的 序列号并涉及数据段中由写入请求要求覆盖的数据。然后,在步骤1511,附加/无效模块 1202或存储控制器104内的其他模块将附加数据存储命令和序列号一起发送到数据存储 设备106。附加数据存储命令包括初始化DMA进程的命令,以将数据从客户端110或其他位 置转移到数据存储设备106。此外,在步骤1512,附加/无效模块1202通过将现有数据标记为无效更新索引。 现有数据是数据段的一部分的数据,并且将要被写入请求中引用的数据替换。随后,在步骤 1514,附加/无效模块1202释放索引中的块,从而使得可以服务其他写入请求。此外,在步 骤1515,客户端110解锁写入请求的发送,从而另一客户端110能够将写入请求发送给存储 控制器104。在一种实施方式中,附加/无效模块1202暂时地无效整个数据段,直到索引被更新。在索引被更新之后,数据段的未被写入请求影响的部分被标记为有效。在另一种实 施方式中,附加/无效模块1202仅无效索引的与被覆盖的数据相关联的部分。注意到并行地示出了创建附加数据存储命令(步骤1510)和无效数据(步骤 1513)。在另一种实施方式中,在无效数据(步骤151 和在索引中释放锁(步骤1514)之 后,附加/无效模块1202创建附加数据存储命令(步骤1510)。在优选实施方式中,数据存 储设备106以序列号的顺序存储数据包。在一种实施方式中,通过将序列号与附加数据存 储命令关联(步骤1511),附加/无效模块1202可独立于无效数据(步骤151 和解锁索 引(步骤151 创建附加数据存储命令(步骤1510)。一旦数据存储设备106接收到附加命令和序列号,在步骤1516,数据存储设备106 初始化DMA进程以将与写入请求关联的数据转移到数据存储设备106。在步骤1518,数据 存储设备106还阻止读取将要被存储的该数据并在步骤1520处理接收的数据。处理数据 可能包括在首部加包头、压缩数据、加密数据、创建纠错码(ECC)等。尽管只示出了单重DMA 转移,但处理也可包括多重DMA转移。随后,数据存储设备106完成用于与序列号关联的附 加数据存储命令的DMA,然后在步骤15M,数据存储设备106完成附加数据存储命令。在其他实施方式中,除创建附加数据存储命令之外,附加/无效模块1202还创建 与写入请求关联的其他命令,并将命令与序列号关联。然后,存储控制器104发送命令,其 中序列号附加到每个命令上。随后在步骤15M中,数据存储设备106完成与序列号关联的 所有命令。本领域技术人员会认识到可生成用于服务写入请求的、与写入请求相关联的其 他命令。一旦数据存储设备106处理了通过DMA接收的数据(步骤1520),数据存储设备 106存储数据(步骤1526)并解除对读取数据的阻止(步骤15 )。注意到数据的存储(步 骤1526)是可能比其他进程消耗更多时间的进程。在优选实施方式中,存储控制器104在 数据被存储时将处理许多其他存储请求。在附加/无效模块1202解锁索引(步骤1514)之后,重组模块1204锁定索引(步 骤1530)并在步骤1532中基于请求写入的数据相对于从客户端110接收的写入请求更新 索引。随后在步骤1534,重组模块1204解锁索引。一旦被解锁,索引可被附加/无效模块 1202和重组模块1204的其他例程访问。在一种实施方式中,作为对附加/无效模块1202 解锁索引(步骤1514)和重组模块1204重新锁定索引(步骤1530)的替代,索引在附加/ 无效模块1202的无效过程和重组模块1204的索引更新过程中保持锁定状态。一旦在步骤15M中,数据存储设备106完成与序列号关联的命令,则在步骤1536 中,数据存储设备106发送数据存储设备106存储关联的数据(步骤15 )的一个或多个 物理地址。在一种实施方式中,一起发送命令完成15M与序列号1536。在优选实施方式 中,与命令完成15M —起被发送的序列号1536与最初发送给数据存储设备106的序列号 1511相同。在步骤1538中,数据位置模块1302锁定索引并在步骤1540中更新索引以指向 数据存储设备106在步骤15 中存储数据的位置。在该实施方式中,附加/无效模块1202 清除关联的数据段的无效标志。在另一种实施方式中,附加/无效模块1202无效与写入请 求相关联的整个数据段,而数据位置模块1302清除数据中未受写入请求影响的无效标志。 随后在步骤1542中,数据位置模块1302解锁索引,在步骤1544中,存储控制器104完成写 入请求并将确认发送到客户端110。然后在步骤1546中,客户端110接收并处理确认,方法 1500结束。
在一种实施方式中,每次索引被锁定(步骤1506、1530、1538),整个索引被锁定。 在另一种实施方式中,仅索引的一个部分被锁定。例如,分支可以被锁定,或者甚至是对应 于数据段的节点被锁定。图16(包括图16A、16B和16C)是示出了根据本发明的用于协调存储请求的装置 1200、1300的实例1600的示意性框图。在实例1600中,原始状态的数据段1602被假定为 基于先前的存储数据段的写入请求而存储在数据存储设备106上。同样在该实例中,装置 1200、1300从两个客户端110接收两个存储请求客户端A发送请求1而客户端B发送请 求2。两个存储请求都试图覆盖数据段的一部分。来自客户端A的请求1的接收早于来自 客户端B的请求2的接收。接收请求的时间序列1604被示为表示如果存储控制器104将数据存储设备106 仿真为随机存储设备,客户端110如何感知到对数据段的改变。数据段的原始状态1602包 括五个标号为1-5的块。原始状态1602的块被示为不具有断面线。客户端A发送与修正 块2和块3的第一数据相关联的请求1。第一数据1606分别将块2和块3中的新数据示出 为2’和3’。具有第一数据1606的块被示为具有水平断面线。客户端A发送与修正块3和 块4的第二数据相关联的请求2。第二数据1608分别将块3和块4中的新数据示出为3” 和4”。具有第二数据1608的块被示为具有从左上到右下的斜断面线。最终状态1610被示 出,其中,第一数据和第二数据覆盖块2、3和4。特别值得注意地是,在最终状态1610中,块3包括第二数据3”。这是由于请求2 在请求1之后到达。由于对于请求1来说,请求2在时间上居第二位,所以请求2被认为是 比请求1更符合当前情况。实例1600描述了为数据段更新索引的若干情况,从而索引的最 终状态在每种情况下都是一样的,而且第二数据比第一数据更符合当前情况。在实例1600中,一旦接收了数据,则将其在三个步骤内处理。首先,附加/无效模 块1202的例程无效数据段中将要被写入请求的数据替换的数据。其次,索引被假设为具有 B-树、二进制树或类似结构形式的正向映射1104,重组模块1204的例程通过重组树更新索 引。最后,数据位置模块1302使用数据存储设备106存储数据的一个或多个位置更新索引。 例如,数据位置模块1302可更新反向映射1122。用于请求A的这三个动作被示为Al、A2、 A3。用于请求B的这三个动作被示为B1、B2、B3。在另一种实施方式中,步骤Al和A2可结 合成单个步骤。类似的,A2和A3可以结合。重新布置和结合步骤或步骤中执行的进程符 合本发明的广泛范围。实例1600描述了 10个不同序列(Sl-SlO)的树基于与请求A和请求B相关联的 动作的不同组合而更新树的状态。注意到全部10个可能的序列的最终状态是一样的,这正 是所期望的结果。序列Sl-Sio全部开始于步骤Al。这假设在请求1被接收之后,附加/无 效模块1202马上为来自客户端A的请求1分配序列号并无效数据。在另一种实施方式中, 分配序列号和无效数据是分开进行的。在这种实施方式中,来自客户端A的请求1的接收 早于来自客户端B的请求2的接收,附加/无效模块1202的一个或多个例程最初基于到达 的顺序将序列号分配给每个请求,由于每个请求具有分配的序列号,可推迟在步骤Al中为 无效数据而进行的处理,可首先处理Bl以无效数据。在这种情况下,Bl先于Al (未示出) 的额外序列的最终状态将与序列Sl-SlO所示出的最终状态相同。第一序列Sl描述了树中表示数据段的块1-5的节点的原始状态。(注意到表示
31原始状态的节点不具有断面线以与在图的上部示出的块的原始状态相匹配)。节点示出了 1-5 (1 5)的范围,对应于处于原始状态1602的块1-5。序列Sl的第一步是为了使附加/无 效模块1202无效数据段的节点。这在步骤Al中描述,其中节点被示出为无效,并且节点下 的字母A指示请求A正在被服务以无效数据。无效的范围以从右上到左下的断面线示出, 节点下的字母指示哪个请求无效数据。为简便起见,注意到在实例1600示出的序列Sl-SlO中,整个范围1_5被示为无 效。然而,在优选实施方式中,只有被请求影响的块才被无效。在无效进程期间,附加/无 效模块1202锁定索引的全部或部分。如A2所示,序列Sl的第二步是为了使重组模块1204重组树以分裂块2和3,这将 指向2’和3’。在这个步骤中,块1、4和5的锁被释放,且数据在原始状态下保持可为读取 进行访问。块2和3在树的中间节点中被示为无效。如A3所示,序列Sl的第三步是为了 使数据位置模块1302基于块2’和3’存储在数据存储设备106的位置而更新树。这被描 述为显示新块2’和3’的中间节点和具有水平断面线的节点,具有水平断面线的节点对应 于在步骤A3结束时块的最终状态,如上述的完成客户端A的更新1606。这可以通过将正向 映射1104的节点中的指针更新为指向反向映射1122中的一个或多个条目来实现,其中,反 向映射1122中的条目具有第一数据的物理地址。在这种情况下,反向映射1122具有用于 2,和3,的物理地址。如Bl所示,序列Sl的第四步是为了使附加/无效模块1202的例程无效树中将要 被第二数据3”和4”覆盖的节点。在这种情况下,第二节点O’ 3’)和第三节点(4:5)被 影响,所以这两个节点被描述为无效(从右到左的断面线)。如B2所示,序列Sl的第五步 是为了使重组模块1204重组这两个节点以形成指向2’的节点、指向3” 4”的节点和指向 块5的节点。指向3” 4”的节点被示为无效。如B3所示,序列Sl的第六步对应于数据位置模块1302的例程利用数据存储设备 106存储块3”和4”的位置的物理地址信息更新索引。此时,表示3”和4”的节点被示为处 于最终状态,并用从左到右的断面线表示。步骤B3表明树中表示处于最终状态的块1-5的 部分,其中块1和5未被修正。块2表明,其已被第一数据2’更新,块3和4表明,它们已 被第二数据3”和4”更新。注意到块3恰当地与第二数据3”一起示出,不管处理的顺序如 何,描述的全部序列Sl-SlO的最终状态都是一样的。序列S2与序列Sl相同,除了交换步骤A3和Bl的处理顺序。在步骤Bi,服务请求 B的重组模块1204的例程无效指向块3和4的两个节点。在步骤A3,服务请求A的数据位 置模块1302的例程利用2’和3’存储的位置更新索引,但第二节点O” 3”)和第三节点 (4:5)保持无效,这是因为服务请求B的重组模块1204的例程还未从第二和第三节点中分 离出3和4。一旦重组模块1204重组了节点以包括指向3” 4”且离开指向2’的节点和指 向5的节点,指向2’和5的节点处于最终状态。在步骤B3(与序列Sl的步骤B3相同)之 后,序列S2的节点处于最终状态并与序列Sl的最终状态相匹配。图16B和图16C中示出的序列S3-S10完成类似序列Sl和S2的过程和分析,除 了将步骤重新排序。注意在在所有的序列Sl-Sio中,最终状态都是相同的。有利地是,本 发明允许多处理器或多线程操作以访问存储在公共数据存储设备106上的相同数据段或 在数据存储设备106的阵列中被条带化的数据段。有利地是,本发明允许多处理器或多线程操作以使完成服务多重服务请求的时间不同,而同时保持数据的完整性。尽管示出了两 个存储请求,但本发明也可应用到当前访问相同数据段的三个或更多个同时的存储请求。 本领域技术人员会认识到本发明的其他好处和实施装置1200、1300的模块1202、1204、 1302-1308其他方法。 本发明可采用其他指定形式实施而不脱离本发明的宗旨或本质特点。描述的实施 方式在各个方面被视为仅仅是示例性而不是限制性的。因此,本发明的范围由附属的权利 要求确定,而不是由上述说明书确定。在本发明的权利要求的含义和等同范围内的所有改 变被包含在本发明的保护范围内。
权利要求
1.一种用于有效地映射物理地址和虚拟地址的装置,该装置包括正向映射模块,用于使用正向映射以识别数据段的数据的一个或多个物理地址,所述 一个或多个物理地址从数据段的一个或多个虚拟地址识别,所述数据段在指令到数据存储 设备的存储请求中识别,正向映射包括将一个或多个虚拟地址映射到存储在数据存储设备 中的数据的一个或多个物理地址的映射,该一个或多个虚拟地址包括虚拟地址空间内的离 散地址,其中,虚拟地址稀疏地位于虚拟地址空间;反向映射模块,用于使用反向映射以从物理地址确定数据段的虚拟地址,其中,反向映 射将一个或多个物理地址映射到一个或多个虚拟地址,反向映射中的物理地址与正向映射 关联,该一个或多个虚拟地址对应于与存储在数据存储设备中的数据有关的一个或多个数 据段,反向映射将数据存储设备映射到擦除区域,从而反向映射的一部分跨越数据存储设 备的在存储空间恢复操作中一起擦除的擦除区域,存储空间恢复操作恢复擦除区域以用于 将来的数据存储;及存储空间恢复模块,用于在恢复擦除区域的操作前使用反向映射识别擦除区域中的有 效数据,在恢复操作之前,识别的有效数据被移动到另一擦除区域。
2.如权利要求1所述的装置,其中,一个或多个源参数与数据一起存储,源参数至少包 括虚拟地址和存储数据的数据长度,虚拟地址对应于和数据有关的数据段。
3.如权利要求2所述的装置,还包括映射重建模块,用于利用与数据一起存储的源参 数重建正向映射和反向映射。
4.如权利要求3所述的装置,还包括检查点模块,用于存储与正向映射和反向映射相 关的信息,检查点与时间点有关,该信息足以将正向映射和反向映射恢复到与检查点有关 的状态。
5.如权利要求4所述的装置,还包括映射同步模块,用于通过顺序地应用源参数和物 理地址将正向映射和反向映射从与检查点有关的状态更新到当前状态,源参数与顺序地存 储在检查点之后的数据一起存储,物理地址源于数据存储设备上的数据的位置。
6.如权利要求1所述的装置,其中,正向映射和反向映射独立于下述各项中的一个或 多个组织数据用于发送存储请求的请求设备的文件结构、名字空间和目录。
7.如权利要求1所述的装置,其中,存储请求的数据段的虚拟地址包括文件名、对象名 和块存储地址中的一个或多个,块存储地址至少包括物理地址和数据段的长度,在该物理 地址处,发送存储请求的请求设备为存储设备准备存储数据段。
8.如权利要求1所述的装置,其中,正向映射和反向映射包括第一正向映射和第一反 向映射,其中第一正向映射和第一反向映射被存储为数据并且独立于由第一正向映射和第 一反向映射所映射的数据存储,数据包括第一正向映射、第一反向映射和与第一正向映射 和第一反向映射一起存储的时间戳数据,第一正向映射和第一反向映射的数据由第二正向 映射和第二反向映射索引。
9.如权利要求8所述的装置,还包括一个或多个额外的正向和反向映射,每个额外的 正向和反向映射被存储为数据并且由额外的正向和反向映射索引。
10.如权利要求1所述的装置,其中,正向映射包括用于存储在数据存储设备的有效数 据的信息,反向映射包括用于存储在数据存储设备上的有效数据和无效数据的信息。
11.如权利要求1所述的装置,还包括无效模块,用于在反向映射中标记数据的条目,该条目指示由其引用的数据响应于导致数据被无效的操作而无效。
12.如权利要求11所述的装置,其中,存储空间恢复模块还包括通过扫描用于擦除区 域的反向映射确定擦除区域中无效数据的量,从而相对于擦除区域的存储容量确定无效数 据的量,存储空间恢复模块利用擦除区域中无效数据的量选择恢复的擦除区域。
13.如权利要求12所述的装置,其中,存储空间恢复模块还包括选择恢复的擦除区域、 将选定的擦除区域的有效数据写入当前正在写入数据的数据存储设备中的新位置、更新反 向映射以指示写入新位置的有效数据在选定的擦除区域中无效、以及基于写入新位置的有 效数据更新正向映射和反向映射。
14.如权利要求1所述的装置,其中,该装置按存储请求所指令的那样仿真存储数据的 随机存取块存储设备。
15.如权利要求1所述的装置,其中,正向映射包括下述各项中的一种或多种B-树、内 容可寻址存储器(CAM)、二进制树和哈希表。
16.如权利要求1所述的装置,还包括映射更新模块,用于响应于改变数据存储设备的 内容更新正向映射和反向映射中的一个或多个,映射更新模块基于数据存储设备存储数据 的位置从数据存储设备接收将存储数据的物理地址链接到虚拟地址的信息。
17.如权利要求1所述的装置,其中,该装置在基本上没有数据的情况下接收存储请求。
18.如权利要求17所述的装置,其中,该装置初始化直接存储器存取(DMA)进程或远程 直接存储器存取(RDMA)进程以响应于存储请求将数据转移到数据存储设备。
19.如权利要求1所述的装置,其中,正向映射模块、反向映射模块和存储空间恢复模 块中的一个或多个的至少一部分位于下述设备中的一个或多个内发送存储请求的请求设 备、数据存储设备、存储设备控制器以及与请求设备、数据存储设备和存储设备控制器分离 的计算设备。
20.一种用于有效地映射物理地址和虚拟地址的系统,该系统包括数据存储设备;和控制数据存储设备上的数据存储的存储控制器,该存储控制器包括正向映射模块,用于使用正向映射以识别数据段的数据的一个或多个物理地址,所述 一个或多个物理地址从数据段的一个或多个虚拟地址识别,所述数据段在指令到数据存储 设备的存储请求中识别,正向映射包括将一个或多个虚拟地址映射到存储在数据存储设备 中的数据的一个或多个物理地址的映射,该一个或多个虚拟地址包括虚拟地址空间内的离 散地址,其中,虚拟地址稀疏地位于虚拟地址空间;反向映射模块,用于使用反向映射以从物理地址确定数据段的虚拟地址,其中,反向映 射将一个或多个物理地址映射到一个或多个虚拟地址,反向映射中的物理地址与正向映射 关联,一个或多个虚拟地址对应于与存储在数据存储设备中的数据有关的一个或多个数据 段,反向映射将数据存储设备映射到擦除区域,从而反向映射的一部分跨越数据存储设备 的在存储空间恢复操作中一起擦除的擦除区域,存储空间恢复操作恢复擦除区域以用于将 来的数据存储;及存储空间恢复模块,用于在恢复擦除区域的操作前使用反向映射识别擦除区域中的有 效数据,在恢复操作之前,识别的有效数据被移动到另一擦除区域。
21.如权利要求20所述的系统,其中,存储请求接收自客户端,该客户端通过计算机网 络与存储控制器通信。
22.如权利要求20所述的系统,还包括服务器,其中存储控制器和数据存储设备中的 一个或多个位于服务器内。
23.如权利要求20所述的系统,其中,存储设备包括固态存储设备,其中数据段的数据 存储在固态存储器中。
24.一种包括计算机可读媒体的计算机程序制品,该计算机可读媒体具有计算机可用 的程序代码,可执行该程序代码以实现有效地映射物理地址和虚拟地址的操作,该计算机 程序制品的操作包括使用正向映射以识别数据段的数据的一个或多个物理地址,所述一个或多个物理地址 从数据段的一个或多个虚拟地址识别,所述数据段在指令到数据存储设备的存储请求中识 别,正向映射包括将一个或多个虚拟地址映射到存储在数据存储设备中的数据的一个或多 个物理地址的映射,该一个或多个虚拟地址包括虚拟地址空间内的离散地址,其中,虚拟地 址稀疏地位于虚拟地址空间;使用反向映射以从物理地址确定数据段的虚拟地址,其中,反向映射将一个或多个物 理地址映射到一个或多个虚拟地址,反向映射中的物理地址与正向映射关联,该一个或多 个虚拟地址对应于与存储在数据存储设备中的数据有关的一个或多个数据段,反向映射将 数据存储设备映射到擦除区域,从而反向映射的一部分跨越数据存储设备的在存储空间恢 复操作中一起擦除的擦除区域,存储空间恢复操作恢复擦除区域以用于将来的数据存储; 及在恢复擦除区域的操作前使用反向映射识别擦除区域中的有效数据,在恢复操作之 前,识别的有效数据被移动到另一擦除区域。
全文摘要
本发明公开了一种用于有效地映射虚拟地址和物理地址的装置、系统和方法。正向映射模块702使用正向映射1104从虚拟地址1106识别数据段的数据的物理地址1126。虚拟地址1106包括稀疏地位于虚拟地址空间内的离散地址。反向映射模块704使用反向映射1122以从物理地址1126确定数据段的虚拟地址1106。反向映射1122将数据存储设备106映射到擦除区域,从而反向映射1122的一部分跨越数据存储设备106的在存储空间恢复操作中一起擦除的擦除区域。存储空间恢复模块706在恢复擦除区域的操作之前使用反向映射1122识别擦除区域中的有效数据。
文档编号G06F12/02GK102084330SQ200980121088
公开日2011年6月1日 申请日期2009年4月4日 优先权日2008年4月6日
发明者乔纳森·撒切尔, 大卫·弗林, 大卫·阿特金森, 约翰·斯特拉瑟, 迈克尔·扎佩 申请人:乔纳森·撒切尔, 大卫·弗林, 大卫·阿特金森, 弗森-艾奥公司, 约翰·斯特拉瑟, 迈克尔·扎佩
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1