CN105339907A - 非易失性存储器系统中的同步镜像 - Google Patents
非易失性存储器系统中的同步镜像 Download PDFInfo
- Publication number
- CN105339907A CN105339907A CN201480022652.3A CN201480022652A CN105339907A CN 105339907 A CN105339907 A CN 105339907A CN 201480022652 A CN201480022652 A CN 201480022652A CN 105339907 A CN105339907 A CN 105339907A
- Authority
- CN
- China
- Prior art keywords
- data
- write
- storage block
- paragraph
- memory device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2056—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
- G06F11/2058—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring using more than 2 mirrored copies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/108—Parity data distribution in semiconductor storages, e.g. in SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
- G06F11/1451—Management of the data involved in backup or backup restore by selection of backup contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2056—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
- G06F11/2071—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring using a plurality of controllers
- G06F11/2076—Synchronous techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2056—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
- G06F11/2082—Data synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
接收第一数据以存储在第一不对称存储设备中。把第一写入阶段识别为当前写入阶段。包括在第一不对称存储设备中的第一段被识别为可用于写入数据的下一段。把第一数据写入第一段。存储与第一段有关的信息连同指示第一段在第一写入阶段被写入的信息。接收第二数据以存储在不对称存储器中。包括在第一不对称存储设备中的第二段被识别为可用于写入数据的下一段。把第二数据写入第二段。与存储与第二段和第二存储块有关的信息连同指示第二段在第二写入阶段被写入的信息。
Description
相关申请的交叉引用
本申请要求2013年3月15日提交的US13/842,079的优先权,其全部内容在此引入以供参考。
技术领域
本文献通常涉及非易失性存储器系统。
背景技术
计算机系统通常使用存储器模块来存储数据。一些存储器模块由包括非易失性存储器,诸如闪存的存储卡实现。
发明内容
本公开内容描述用于通过跟踪最近写入存储段的序号,在非易失性存储设备中执行同步镜像的方法、系统和设备。在一些实现中,主存储设备定期地与用于同步镜像的辅助存储设备共享最近写入的存储段的序号。所共享的信息在辅助存储设备中存储为逻辑结构,称为标记。当辅助存储设备从崩溃恢复时,恢复存储设备已知的标记与可用在主存储设备的最近更新段的信息比较来确定自辅助存储设备崩溃以来,在主存储设备更新的存储块。
在一个方面,接收第一数据使得存储在第一不对称存储设备中,其中,不对称存储设备中读操作的延迟(latency)不同于写操作的延迟。将第一写入阶段识别为当前写入阶段。将包括在第一不对称存储设备中的第一段识别为可用于写入数据的下一段,其中,段包括不对称存储设备中的物理存储位置的逻辑映射并且与在单一操作中被擦除的物理存储位置的一部分有关。将第一数据写入第一段,其中,第一数据被写入包括在第一段中的下一可用于写入数据的第一存储块。与把第一数据写入第一段中的下一可用存储块相关,存储与第一段和第一存储块有关的信息连同指示第一段和存储块在第一写入阶段被写入的信息。
接收第二数据以使得存储在不对称存储器中。识别第一写入阶段已经完成并且第二写入阶段是当前写入阶段。将包括在第一不对称存储设备中的第二段识别为可用于写入数据的下一段。将第二数据写入第二段,其中,数据被写入包括在第二段中的下一可用于写入数据的第二存储块。与把第二数据写入第二段中的下一可用存储块相关,存储与第二段和第二存储块有关的信息连同指示第二段和第二存储块在第二写入阶段被写入的信息。
实现可以包括下述特征的一个或多个。可以从同步镜像模块接收关于最近被填充数据的段的信息的请求。响应请求,可以确定第一写入阶段和第二写入阶段的哪一个已经完成以及哪一个是当前写入阶段。基于确定第一写入阶段已经完成而且第二写入阶段是当前写入阶段,可以检索所存储的与第一段和第一存储块有关的信息。可以将与第一段和第一存储块有关的信息连同指示第一段和第一存储块在第一写入阶段被写入的信息发送到同步镜像模块。
同步镜像模块可以发送关于最近被填充数据的段的信息的第一查询。响应第一查询,可以接收与第一段和第一存储块有关的信息。可以将与第一段和第一存储块有关的信息连同指示第一段和第一存储块在第一写入阶段被写入的信息发送到第二不对称存储设备。第二不对称存储设备可以被配置成与第一不对称存储设备类似地存储数据,并且通过网络连接,连接到第一不对称存储设备。与第一段和第一存储块有关的信息被存储在第二不对称存储设备中,作为不同于配置用于存储数据的存储位置的第一存储位置中的第一标记。
同步镜像模块可以发送关于最近被填充数据的段的信息的第二查询,其中,在发送第一查询之后发送第二查询。响应第一查询,接收与第二段和第二存储块有关的信息。可以与将与第二段和第二存储块有关的信息连同指示第二段和第二存储块在第二写入阶段被写入的信息发送到第二不对称存储设备。与第二段和第二存储块有关的信息被存储在第二不对称存储设备中,作为不同于配置用于存储数据的存储位置的第二存储位置中的第二标记。
发送第一查询或第二查询可以包括由同步镜像模块确定是否已经达到用于查询有关最近填充数据的段的信息的阈值。基于确定已经达到阈值,可以发送第一查询或第二查询。
指示第一段和第一存储块在第一写入阶段被写入的信息可以连同第一标记一起,存储在第二不对称存储设备中,以及指示第二段和第二存储块在第二写入阶段被写入的信息可以连同第二标记一起,存储在第二不对称存储设备中。可以从由随机存取存储器(RAM)和非易失性不对称存储器组成的组,选择第一和第二存储位置。
可以在同步镜像模块处并且从第二不对称存储器接收包括第一标记的副本的消息。消息可以指示第二不对称存储设备已经从故障恢复。基于接收到消息,可以发送关于最近被填充数据的段的信息的新查询。响应新查询,可以接收与新段和新存储块有关的信息,其中,在第一写入阶段期间写入新段。可以将从所接收的第一标记的副本提取的与第一段和第一存储块有关的信息和与新段和新存储块有关的信息比较,当在第一写入阶段或第二写入阶段中写入数据时,执行这种比较。基于比较,可以识别存储在第一不对称存储设备中但未存储在第二不对称存储设备中的数据。可以将所识别的数据发送到第二不对称存储设备。
从第二不对称存储设备接收的第一标记的副本可以包括指示第一段和第一存储块在第一写入阶段被写入的信息。发送新查询可以包括发送有关在第一写入阶段中最近被填充数据的段的信息的新查询。
与写入第一段和第一存储块的数据相比,可以在较晚的时间,将数据写入新段和新存储块。识别存储在第一不对称存储设备中但未存储在第二不对称存储设备中的数据可以包括基于与第一段和第一存储块有关的信息和与新段和新存储块有关的信息的比较,识别自第一标记被发送到第二不对称存储设备以来并且在第二不对称存储设备接收第一标记的副本前,已经在第一不对称存储设备中写入的物理存储块。可以使用与第一不对称存储设备有关的转换表,执行对应于所识别的物理存储块的第一不对称存储设备中的逻辑存储块的查找,可以确定逻辑存储块是否保存有效数据。基于逻辑存储块保存有效数据的确定,可以将所识别的物理存储块和相应的逻辑存储块发送到第二不对称存储设备。
物理存储块可以包括写入页。不对称存储设备中,转换表提供段和写入页与逻辑存储块的映射。选择第一段和第二段中的一个或多个,用于在第一写入阶段和第二写入阶段中存储数据。
与第一段和第一存储块有关的信息可以包括与第一段有关的第一序号和与第一段中的第一块有关的第二序号。第二序号是从第一段中的初始块的偏移量。
第一和第二不对称存储设备的每一个包括基于闪存的系统。
另一方面,接收第一数据以存储在第一不对称存储设备中,其中,不对称存储设备中读操作的延迟不同于写操作的延迟。将包括在第一不对称存储设备中的第一段识别为可用于写入数据的下一段,其中,第一段作为第一段组的一部分被写入,以及其中,段包括不对称存储设备中的物理存储位置的逻辑映射并且与在单一操作中被擦除的物理存储位置的一部分有关。将第一数据写入第一段,其中,第一数据被写入包括在第一段中的下一可用于写入数据的第一存储块。与将第一数据写入第一段中的下一可用存储块相关,存储与第一段和第一存储块有关的信息。
接收用于存储在不对称存储器中的第二数据。确定第一段被该第一段中存储的数据充满。基于第一段被充满的确定,选择第一不对称存储设备中的第二段组,其中,将数据交替写入第一段组和第二段组。将包括在第二段组中的第二段识别为可用于写入数据的下一段。将第二数据写入第二段,其中,数据被写入包括在第二段中的下一可用于写入数据的第二存储块。与将第二数据写入第二段中的下一可用存储块相关,存储与第二段和第二存储块有关的信息。
实现可以包括下述特征的一个或多个。可以从同步镜像模块接收有关最近被填充数据的段的信息的请求。响应请求,可以确定第一段和第二段中的哪一个最近填充数据。基于第一段最近被填充数据的确定,可以检索与第一段和第一存储块有关的所存储的信息。可以将与第一段和第一存储块有关的信息发送到同步镜像模块。
同步镜像模块可以将第一数据和第二数据发送到第二不对称存储设备,其中,第二不对称存储设备被配置成与第一不对称存储设备类似地存储数据,以及其中,通过网络连接,连接第一不对称存储设备和第二不对称存储设备。同步镜像模块可以确定是否已经达到用于查询有关最近填充数据的段的信息的阈值。基于确定已经达到阈值,可以发送有关最近被填充数据的段的信息的请求。响应请求,可以接收与第一段和第一存储块有关的信息。可以将与第一段和第一存储块有关的信息发送到第二不对称存储设备。与第一段和第一存储块有关的信息可以被存储在第二不对称存储设备中,作为与被配置用于存储数据的存储位置不同的存储位置中的第一标记。
可以在同步镜像模块处并且从第二不对称存储器接收包括第一标记的副本的消息。消息指示第二不对称存储设备已经从故障恢复。基于接收到消息,可以发送有关最近被填充数据的段的信息的新请求。可以响应新请求,接收与新段和新存储块有关的信息,其中,新段包括在第一段组中。可以将从所接收的第一标记的副本提取的、与第一段和第一存储块有关的信息和与新段和新存储块有关的信息比较。当将数据写入包括在第二段组中的段时,可以执行该比较。基于比较,可以识别存储在第一不对称存储设备的第一段组中但未存储在第二不对称存储设备中的数据。可以将所识别的数据发送到第二不对称存储设备。
与写入第一段和第一存储块的数据相比,可以在较晚的时间,将数据写入新段和新存储块。识别存储在第一不对称存储设备的第一段组中但未存储在第二不对称存储设备中的数据可以包括基于与第一段和第一存储块有关的信息和与新段和新存储块有关的信息的比较,识别自第一标记被发送到第二不对称存储设备以来并且在第二不对称存储设备接收第一标记的副本前,包括在已经在第一不对称存储设备中写入的第一段组中的段的存储块。可以使用与第一不对称存储设备有关的转换表,执行对应于所识别的第一段组中的存储块的第一不对称存储设备中的物理存储块的查找。可以确定物理存储位置是否保存有效数据。可以从物理存储位置检索有效数据。
存储块可以包括写入页。不对称存储设备中,转换表提供段和写入页与物理存储位置的映射。可以仅当包括在最近存储数据的第一段组中的段被充满时,才将数据存储在包括在第二段组中的段中。
与第一段和第一存储块有关的信息可以包括与第一段有关的第一序号和与第一段中的第一块有关的第二序号。第二序号是从第一段中的初始块的偏移量。
另一方面,接收用于在第一不对称存储设备中存储的第一数据,其中,不对称存储设备中读操作的延迟不同于写操作的延迟。将包括在第一不对称存储设备中的第一段识别为可用于写入数据的下一段。段包括不对称存储设备中的物理存储位置的逻辑映射并且与在单一操作中被擦除的物理存储位置的一部分有关。
将第一数据写入第一段,其中,第一数据被写入包括在第一段中的下一可用于写入数据的第一存储块。与将第一数据写入第一段中的下一可用存储块相关,存储与第一段和第一存储块有关的信息。
具体实现可以包括下述特征的一个或多个。可以从同步镜像模块接收有关最近被填充数据的段的信息的请求。响应请求,可以检索所存储的与第一段和第一存储块有关的信息。可以将与第一段和第一存储块有关的信息发送到同步镜像模块。
同步镜像模块可以发送有关最近被填充数据的段的信息的第一查询。响应第一查询,可以接收与第一段和第一存储块有关的信息。可以将与第一段和第一存储块有关的信息发送到第二不对称存储设备。第二不对称存储设备可以被配置成存储与第一不对称存储设备类似的数据,并且通过网络连接,连接到第一不对称存储设备。与第一段和第一存储块有关的信息被存储在第二不对称存储设备中,作为第一存储位置中的第一标记。
发送第一查询可以包括由同步镜像模块确定是否已经达到用于查询有关最近填充数据的段的信息的阈值。基于确定已经达到阈值,可以发送第一查询。
第一和第二不对称存储设备的每一个包括基于闪存的系统。
可以在同步镜像模块处并且从第二不对称存储器接收包括第一标记的副本的消息。消息可以指示第二不对称存储设备已经从故障恢复。基于接收到消息,可以发送有关最近被填充数据的段的信息的新查询。响应新查询,可以接收与新段和新存储块有关的信息。可以将从所接收的第一标记的副本提取的、与第一段和第一存储块有关的信息和与新段和新存储块有关的信息比较。基于比较,可以识别存储在第一不对称存储设备中但未存储在第二不对称存储设备中的数据。可以将所识别的数据发送到第二不对称存储设备。
与写入第一段和第一存储块的数据相比,可以在较晚的时间,将数据写入新段和新存储块。识别存储在第一不对称存储设备中但未存储在第二不对称存储设备中的数据可以包括基于与第一段和第一存储块有关的信息和与新段和新存储块有关的信息的比较,识别自第一标记被发送到第二不对称存储设备以来并且在第二不对称存储设备接收第一标记的副本前,已经在第一不对称存储设备中写入的物理存储块。可以使用与第一不对称存储设备有关的转换表,查找对应于所识别的物理存储块的第一不对称存储设备中的逻辑存储块。可以确定逻辑存储块是否保存有效数据。基于逻辑存储块保存有效数据的确定,可以将所识别的物理存储块和相应的逻辑存储块发送到第二不对称存储设备。
物理存储块可以包括写入页。不对称存储设备中,转换表提供段和写入页与逻辑存储块的映射。与第一段和第一存储块有关的信息可以包括与第一段有关的第一序号,以及与第一段中的第一块有关的第二序号。第二序号可以是与第一段中的初始块的偏移量。
实现上述技术包括一个或多个方法、计算机程序产品和系统。在非瞬态机器可读介质中适当地实现计算机程序产品并且包括可由一个或多个处理器执行的指令。指令被配置成使一个或多个处理器执行上述动作。
系统包括一个或多个处理器和可由一个或多个处理器执行的、在非瞬态机器可读介质中实现的指令。指令当被执行时,被配置成使一个或多个处理器执行上述动作。系统还包括被配置成执行上述动作的一个或多个模块。模块可以与可由一个或多个处理器执行的、在非瞬态机器可读介质中实现的指令有关。
在下述附图和描述中阐述了在本说明书中所述的主题的一个或多个方面的细节。从说明书、附图和权利要求,本主题的其他特征、方面和优点将是显而易见的。
附图说明
图1示例将闪存用于存储数据的系统的实例。
图2A-2B示例包括闪存晶片(dice)的存储设备的实例。
图3示例在闪存晶片中存储的存储页面的实例。
图4示例在闪存晶片组上分布的数据分条中,冗余地存储数据的一组闪存晶片的实例。
图5使用段序号,执行同步镜像的存储器服务器的实例。
图6示例可以用于将数据写入存储器服务器的存储块的示例性过程。
图7示例可以用于识别实现同步镜像的存储器服务器中的活动闪存段的示例性过程。
图8示例可以用于执行使用基于闪存存储的主动和被动存储器服务器之间的同步镜像的示例性过程。
不同图中相同的参考符号表示相同的元件。
具体实施方式
计算机系统通常包括用在数据和指令的存储中的存储器模块。存储器模块包括通常用于在处理期间,临时数据存储的易失性存储器和用于长期数据存储的磁存储盘的动态随机存取存储器(DRAM)集成电路(ICs)。在一些计算机系统中,除或替代DRAM和磁存储盘,非易失性随机存取存储器(NVRAM)系统用于数据存储。NVRAM可以被配置成提供具有可与DRAM相比的存取粒度的高性能读访问。同时,NVRAM可以提供可与磁存储盘相比的大的非易失性存储容量,同时提供利用与磁存储盘更少物理空间的高密度存储。此外,NVRAM会消耗比DRAM和磁存储盘更少的功率。计算机系统的NVRAM实现其中,包括闪存,诸如NAND闪存和NOR闪存,以及相变存储器。
在一些实现中,闪存设备包括在其上贴作为集成电路存储器芯片的闪存晶片的一个或多个存储卡。在该上下文中,存储器晶片可以表示或称为存储器芯片,以及可以互换地使用两个术语“晶片”或“芯片”。闪存设备可以表示或称为在其上贴闪存晶片的一个存储卡,以及可以互换地使用术语“闪存设备”、“闪存卡”“存储器设备”和“存储卡”。
大规模处理数据的一些计算机系统,诸如企业计算机系统或服务器群可以使用大量存储器。这些系统可以使用托管多个存储卡的存储器设备,每一卡上具有大量闪存晶片或芯片。计算机系统可以实现如数据分条、数据镜像和奇偶编码(类似独立磁盘冗余阵列)以便提供性能改进和数据可靠性。
在某种意义上,数据分条(datastriping)可以指逻辑地拆分顺序数据,例如文件,使得从不同物理存储设备如安装在存储卡上的不同闪存晶片来存储和访问顺序逻辑段的管理和访问。由此通过分条创建的数据的每一逻辑部分称为数据分条。
数据镜像(datamirroring)是将逻辑存储器卷实时复制到单独的物理存储器以确保连续可用性。镜像卷是单独卷副本的完整逻辑表示。用在闪存设备中的一种数据镜像是同步镜像,其中,用在主存储器设备中的一种数据镜像是同步镜像,其中,在一个或多个辅助存储器设备中克隆或复制在主存储器设备中存储的数据。在一些实现中,使用两个服务器系统或多服务器系统,实现同步镜像,当正在位于服务器的一个中的存储卡中进行写入时,将正在写入的数据发送到网络链路上的第二服务器,其中,在相对于第二服务器上的存储卡,相同操作被执行,使得如果第一服务器故障,第二服务器能接管并且恢复操作,而不丢失任何正在进行的写入。两个服务器上的写入操作同时发生。
在同步镜像系统中,主存储器设备可以称为主动服务器,而辅助存储器设备可以称为被动服务器。主动和被动服务器上的逻辑相对于主动服务器的本地存储和被动服务器的远程存储,协调用于存储应用数据的写入操作。该系统必须相对于主动服务器的本地存储以及被动服务器的远程存储,等待写入操作完成。仅当操作均完成时,向发布应用或操作系统确认写入操作。由于同步镜像,存储器写入操作看来花费更长时间,因为在本地存储和远程存储上执行写入操作。
故障可能发生在同步镜像系统中并且能采用许多形式。例如,主动服务器中的本地存储元件可能崩溃,但与被动服务器的网络连接可用,因为是被动服务器和远程存储元件。作为另一例子,网络连接可能故障,使得仅在主动服务器的本地存储上,而不在被动服务器的远程存储上执行写入操作。或者,可以在网络上传输写入操作,但在由远程端接收操作前,被动服务器崩溃。
同步镜像系统应当能重新创建当崩溃发生并且已经替换故障的存储器设备或已经重启服务器后,主动和被动服务器上的存储元件继续同步的状态。在该上下文中,处于同步是指当在主动和被动服务器上查询对应于存储器块的特定逻辑块地址时,应用或操作系统在主动和被动服务器中均能有效地获得相同数据内容,由该系统提供的保证。与设备故障或其他灾难情形无关,必须保证该特性。
在一些传统存储器系统中,通过在从崩溃恢复时,执行完全同步操作,保持主动和被动服务器之间的同步。在完全同步操作中,系统假定就当服务器的至少一个在停止后重启时的它们的状态而言,主动和被动服务器完全不同。系统使用一些适当的机制,将服务器中的一个确定为对应于新的主动服务器,然后,将存储器的所有内容从主动服务器复制到被动服务器。
例如,在崩溃发生前,两个服务器在同步模式中工作很长一段时间的情况下,完全同步操作会效率低。系统会花费几秒来从那一崩溃恢复,此时,系统确定在新确定的被动服务器上,在崩溃前的时段中发生的所有写入均丢失。因此,必须将一些信息从新主动服务器传送到被动服务器来使两端回到同步。这导致高故障时间,在许多情况下是不可接受的。
一些存储器系统执行部分同步或增量再同步来避免完全同步的缺点。部分同步或增量再同步的目的是使在崩溃或一些其他运转中断发生期间,处于风险的、主动和被动服务器中存储的数据同步。例如,存储器系统可以具有每秒约千兆字节的输入/输出(I/O)速率,并且如果约一秒不同步,那么首先,应当通过发送约1千兆字节的数据,使同步镜像的两侧再同步,该1千兆字节数据是因为在那1秒期间的中间,崩溃发生而可能处于危险的数据。
在部分同步中,当主动和被动服务器在中断后重新建立连接时,两端查询彼此来确定在连接的另一端未发现的连接的一端上,哪些存储器块已经改变。在一些存储器系统中,通过使用灾难恢复日志(DRL)实现部分同步。在这些系统中,除将数据写入存储器块外,在主动节点维护基于日志的结构,记录有关将更新的主动存储站点上的存储器块的信息,并且当在该连接的两端均完成更新时,由另一符号继续。例如,写入I/O操作可能对应于逻辑块地址(LBA)X的数据。因此,系统将在以基于日志方式维护的元数据结构中产生正更新LBAX的条目,然后,系统将在对应于LBAX的物理存储器位置执行操作,在从连接的主动和被动端接收到已经更新LBAX的确认后,系统记录已经在连接的两端更新LBAX。因此,仅当已经返回两个副本时,才移除对应于正被更新的LBA的元数据结构中的条目。
当在实现DRL的系统中执行部分同步时,系统搜索DRL并且检查表示存在已经启动的写入,但没有写入已经完成的日志的另一表示的条目。对所有这些条目,可能必须再同步相应的数据。
在同步镜像系统中,当被动服务器未响应或已知不活动时的情形可能出现。这可能是例如当已经破坏主动服务器和被动服务器之间的连接时,或因为被动服务器已经崩溃的情形。在这些情况下,主动服务器可能已知被动服务器不活动或不再在线。系统可以通过使用除DRL外的第二数据结构,可以称为非复制写入日志来处理这些情形。
非复制写入日志维护有关被动服务器未知的主动服务器的所存储的块的信息,因为这些块在被动服务器停机时写入。因此,当被动服务器恢复时,主动端能使用非复制写入日志来再现所有非复制写入来快速地确定将写入被动端的块。
在一些实现中,通过将非复制写入日志与DRL结合实现优化。这些系统将非复制写入识别为未从被动服务器接收第二符号的那些写入操作。
在一些其他实现中,通过在DRL的预测和主动存储DRL的方式之间折衷,执行优化。例如,可以以4千字节(KB)的粒度执行写入操作,但可以以兆字节的粒度将信息存储在DRL中。因此,与以4KB的粒度将信息记录在DRL中的实现相比,对存储器执行的相同写入操作量相比,对兆字节粒度,使DRL的条目数少约256倍,写入DRL的开销相当小,以DRL中记录的信息更不准确为代价。当系统从崩溃恢复时,系统将必须传送至少兆字节的数据来使两端回到同步,因为在DRL中不能获得更细粒度信息。
由于包含在执行日志写入中的延迟,使用灾难恢复日志和/或非复制写入日志可能增加在实现同步镜像的存储器系统中,执行写入操作的开销。不使用灾难恢复日志和/或非复制写入日志,可以用来设计提供部分同步的存储器系统。在一些实现中,可以通过使用存在于用于各种其他用途的存储器系统中的数据结构,诸如由闪存转换层提供的数据结构,实现这种存储器系统。
在一些实现中,数据以日志方式写入闪存设备,即,可以按顺序设置存储器块,使得通过读取与存储器块有关的序号,确定特定存储器块早于还是晚于另一存储器块被写入。作为按顺序写入存储器块的逻辑设置类似日志结构,使得该数据结构可用在提供类似于由使用DRL和非复制写入日志的存储器设备中,灾难恢复日志和非复制写入日志提供的信息的信息的闪存管理层中。因为闪存管理层提供类似信息,不需要在运行时维护另外的灾难恢复日志或另外的非复制写入日志。
通常,闪存卡被组织成多个组件(package),并且组件包括多个闪存晶片(dice)。闪存晶片由多个晶片平面组成。晶片平面是闪存厂家能以并行方式,在同一闪存晶片内复制相同存储区和控制电路以便驱动性能的有效方式。
晶片平面包括多个擦除块。擦除块是能一次擦除的闪存的最小物理单元。每一擦除块包括多个写入页,其中,写入页是为执行存储器写入操作,一次可以访问的闪存晶片的最小物理部分。取决于存储器设备的技术,写入页的大小可以是每设备8、16或32KB。反过来,写入页可以由若干读取页组成。
对包括性能、冗余度和可靠性的各种考虑,闪存管理逻辑可以将一组闪存晶片聚合成RAID结构。当执行写入操作时,将应用数据写入或“分条”到分布在闪存晶片组上的写入页。例如,在一个分条方案中,可以将应用数据写入RAID分条中的8个闪存晶片的每一个中的写入页,其中,写入页的大小为8KB。因此,实际上,能写入RAID分条闪存设备的最小单位可以是约8×8KB,即,64KB更大。
在一些实现中,可以将闪存设备的物理区逻辑地识别为闪存段,也称为段。闪存段是一个或多个擦除块乘以RAID分条的宽度的总计。例如,段可以跨RAID分条中的每一闪存晶片中的两个擦除块。擦除块的大小可以是约2MB以及RAID分条可以包括8个闪存晶片。因此,段的大小为约32MB。
在一些实现中,闪存段是擦除和管理闪存设备的区域的粒度。当接收新应用数据时,闪存设备写入一个物理块,然后,下一物理块,接着下一物理块,直到填满存储器设备的一些部分为止,然后,存储器管理在闪存晶片的先前填充的部分上执行无用单元收集。
当在闪存晶片的一部分上执行无用单元收集时,系统重新定位该部分中的有效数据,擦除相关块并且将存储器部分再投入服务,使得能接收新写入。该段是闪存管理层擦除闪存晶片部分的最小单元。尽管在擦除块级擦除物理闪存,闪存管理层使用段,因为一次允许擦除一个以上擦除块。
因此,闪存管理层与包括被配置成管理闪存设备,诸如闪存晶片中的物理位置的硬件和软件逻辑的集合的闪存转换层同步,并且通过较高级应用和操作系统,连接物理存储器。在一些实现中,闪存管理层包括用于管理闪存晶片的主控制器,以及若干从控制器,每一个与闪存晶片的子集有关。
闪存管理层还包括嵌入闪存设备中的软件(即固件),诸如闪存转换表。DRAM页或文件系统块在闪存晶片设备中被管理的粒度统称为转换单元,其是专用于用于闪存设备的闪存管理层的实现的逻辑结构。转换表将逻辑块地址(LBA)映射到物理块号(PBN),表示物理闪存位置。闪存管理层内部在保存转换表,通常以固定块粒度,即,固定大小的LBAs被映射到固定大小的PBNs。转换的固定粒度称为转换单位。通过从应用或操作系统选择与预期数据访问大小一样大小的转换单位,能使整个系统更有效。在将数据存储在闪存设备中的应用和操作系统级,数据访问的自然块大小落在几种类别中,一种共同大小为4KB。因此,在一些实现中,将转换单位配置成大小为4KB。
在一些实现中,可以将头信息与一个段关联。头信息可以是序号。例如,闪存晶片可以管理为段号1、段号2、段号3等等。通过将序号与每一段关联,闪存管理能将每一段与其启动的时间顺序关联以便接收新写入。因此,取决于写入页属于哪一段,闪存管理可以确定在具有较高序号的段中的写入页前,写入具有较低序列号的段中的写入页。这产生有关何时写入的、闪存晶片中的写入页的时间顺序,在前称为以日志方式写入的闪存设备,因为日志通常按从开始日志的顺序写入。
在一个时间点,完全写入闪存设备中的一些段,存在活动写入的一些段,以及存在处于空白状态并且还完全未写入的一些段。存储器系统中的活动段的序号或序号的集合可以视为标记在存储器设备中最近存储的应用数据,因为活动段是正活动写入其写入页的段。
闪存设备可以包括为管理同步镜像操作而配置的更高级逻辑模块。例如,主动和被动服务器可以包括管理两端之间的数据镜像和当服务器中的一个从故障模式恢复时,数据的部分同步的更高级软件驱动。更高级软件驱动可以与闪存管理层交互,用于管理同步镜像操作。
某些时候,更高级软件驱动在闪存管理模块查询有关活动段的信息。查询的触发器可以基于时间,例如,可以定期地进行查询。或者,查询的触发器可以基于已经写入的物理存储器的总量。例如,查询可以基于自上次查询以来写入的段的阈值数。
基于来自更高级软件驱动的查询,闪存管理层确定最近写入段的序号和在那一时间点,例如时间T1,段内的存储块。闪存管理层将信息发送到更高级软件驱动。在更多时间流逝后,新写入进入系统并且存储在闪存的区域中。在时间T2,闪存管理层从更高级软件驱动获得新查询,因此,在时间T2,发送有关最近写入段/段内的存储块的信息。
通过检查对应于两个不同时间点的序号,更高级软件驱动能确定在时间T1未写入但在时间T2写入的段和存储块,具体地,写入页包括在时间间隔T2-T1执行的写入操作。
例如,在时间T1,闪存设备具有发送到更高级软件驱动的编号为37的一个活动段。在时间T2,活动段的序号为42。通过读取对应于T2和T1的序号,更高级软件驱动能确定在时间间隔T2-T1期间,已经完全写入段37,38,39,40和41,并且部分写入段42。闪存管理能确定段37,38,39,40和41所处的闪存晶片中的物理位置,因为在间隔T2-T1期间,仅包括在段37,38,39,40和41中的存储块会改变。
因此,通过跟踪与活动段有关的序号,闪存管理层和更高级软件驱动可以获得与由灾难恢复日志和未提交写入日志的组合提供的信息相同的信息,因为序号识别在指定时间间隔期间已经改变的闪存块。
在下述章节中,描述方法、系统和设备,用于使用与闪存段有关的序号,闪存设备的同步镜像。为该论述目的,可以同义地使用术语“闪存晶片”、“闪存芯片”和“闪存”。可以同义地使用术语“主动服务器”、“本地存储元件”和“本地端”。类似地,可以同义地使用“被动服务器”、“远程存储元件”和“远程端”。此外,尽管参考闪存设备描述剩余章节,但在此所述的技术可以同样地适用于具有不对称行为方面的其他形式的存储器设备。例如,相变存储器设备可以被配置成采用这些操作。
图1示例将闪存用于存储数据的系统100的实例。系统100可以使用与闪存段相关联的序号,实现用于闪存设备的数据的同步镜像的技术。
系统100包括由网络104互连的一个或多个计算机子系统102。计算机子系统102包括一个或多个服务器,诸如106A、106B、106C至106D。
每一计算机子系统102可以是宿有服务器阵列的服务器机架。这可以是例如当系统100是服务器农场(serverfarm)或用于企业的后端处理中心时的情形。计算机子系统可以共处于一个物理位置,诸如在数据中心中,或地理上分布它们。
计算机子系统102经可以包括电路交换数据网、分组交换数据网或能传送数据的任何其他网络,诸如基于网际(IP)或基于不对称传输模式(ATM)网络,包括有线或无线网络的网络104,相互和与远程计算机通信。网络104可以是局域网(LAN)或广域网(WAN)。网络104可以包括互联网、模拟或数字有线和无线网(诸如IEEE802.11网、公共交换电话网(PSTN)、综合业务数字网(ISDN)和数字用户线路(xDSL)、第三代(3G)或第四代(4G)移动通讯网、有线以太网、专用网,诸如内联网和/或用于传送数据的任何其他传输或隧道机制,或这些网络的任何适当组合。此外,网络104可以被配置成处理安全通信,诸如安全超文本传输协议通信(HTTPS)或虚拟专用网(VPN),使得计算机子系统102之间的连接可以是安全连接,诸如使用VPN或HTTPS。然而,在其他实现中,连接可以是非安全连接。
每一服务器106A、106B、106C或106N是包括用于存储数据的存储器模块的计算设备,诸如硬驱动和闪存。闪存可以是以附贴多个闪存芯片的存储卡的形式。闪存卡可以被组织成多个存储器组件或晶片组件,也简称为组件(package)。组件是包括闪存晶片的多芯片模块。每一闪存晶片可以由包括构成存储数据的存储器单元的块的闪存平面组成。在一些实现中,两个平面的晶片具有两个不同的子区域,每一子区域具有其自己的存储器阵列和接口电路。晶片具有将指令发送到一个平面或另一个(在一些情况下,发送到两个平面)的解复用结构。存储器单元可以是存储对应于在特定存储器单元中存储的数据的值的二进制位(比特)的单层单元(SLCs)。或者,存储器单元可以是多层单元(MLC),被配置成存储对应于在与特定存储器单元有关的逻辑写入页位置中的数据的值的若干比特。
每一服务器可以包括连接到服务器中的主板的这些闪存卡的多个实例(例如,高达16至24),产生可以在用于较小存储卡或系统的0.5太字节(TB)到用于较大存储卡的约100TB容量的范围中改变的总闪存容量。从闪存卡的观点看,包括存储卡的服务器可以看作用于存储器的主机系统。因此,基于上述示例性图,主机系统的总容量范围可以从0.5TB至100TB乘以系统中的卡的数量。
在一些实现中,一些服务器106A、106B、106C或106N可以被配置成主动服务器或被动服务器,用于同步镜像设置。例如,服务器106A可以是经网络104,连接到远程计算机子系统102的被动服务器的主动服务器,或连接到一个或多个远程计算机子系统102的若干被动服务器。作为另一实例,服务器106A可以是连接到作为同一子系统102中的被动服务器的服务器106C,或作为被动服务器的若干服务器,诸如106B和106C的主动服务器。
如前所述,闪存是以NVRAM的形式,其是一种随机存取存储器,当断电时,保存其信息(因此是非易失性的)。这是与DRAM和静态随机存取存储器(SRAM)相比,两者均只有供电时才保存数据。NVRAM具有不对称属性,其中,构成操作,诸如存储器读取、写入或擦除相互相差一个或以上数量级。例如,当在DRAM中执行操作时,在相同数量级内执行存储器读取,相比较,更慢地执行存储器写入操作,以及擦除操作甚至具有更大限制。此外,某些类型的NVRAM模块可以具有有限多个写入。这是例如由于存在于一些类型的NVRAM信息存储机制的物理特性的情形,允许编程和/或擦除每一NVRAM物理单元有限多次。不同类型的NVRAM可以具有不同的模拟属性(基本“噪声媒介”特性),取决于基本物理机制和存储器单元的密度。
每一服务器还包括用于处理在存储器模块中存储的数据的处理器。在一些实现中,处理器存在于主机系统中,例如,耦接存储卡的服务器的主板中。在这些实现中,可以由主机系统执行闪存的管理。在一些其他实现中,一个或多个处理器可以嵌入闪存卡中。在这些实现中,可以由嵌入存储卡本身中的处理器,或嵌入存储卡中的处理器和主机系统中的处理器的一些适当组合,执行闪存的管理。
处理器可以被配置成执行在闪存或其他地方,诸如在只读存储器(ROM)中存储的指令。指令可以包括用于处理数据、用于以闪存芯片的子区的粒度执行数据分条,用于通过动态地重新分条包括退化区的闪存芯片的区段,由退化的存储器区段恢复数据分条的指令。
每一服务器还可以包括在处理操作期间,临时存储数据的DRAM。此外,每一服务器包括用于与相同计算机子系统102,或其他计算机子系统或远程服务器中的其他服务器通信的网络接口。
图2A-2B示例包括闪存晶片的存储器设备200的实例。存储器设备200可以包括在例如系统100的服务器中,诸如服务器106A、106B、106C和106D中的一个。然而,存储器设备200还可以包括在其他系统中。
图2A示出从一侧看到的存储器设备200的示意图。如所示,作为存储卡的存储器设备200包括带有主机边缘连接器204的基板202。主控制器206安装在基板202上。在基板202上还安装一个或多个存储器组件,诸如组件212-232。
基板202是印刷电路板(PCB),包括一层或多层印刷电路板走线,用于互连存储器设备200的各个部件,包括主控制器206和不同组件212-232。基板202可以是允许存储卡200包括在服务器,诸如106A、106B、106C或106N的底板内的形状因子。在一些实现中,基板202可以被配置成支撑可以用来扩展存储卡200的存储器容量的子板。例如,基板202可以包括可以耦接子板的插座。子板可以包括与组件212-232类似的多个存储器组件,由此增加存储卡200的总存储容量。
主机边缘连接器204适于耦接到安装在主机系统的主板的插座。例如,连接器204可以将存储卡200耦接到包括在服务器106A、106B、106C或106N的任何一个中的主板。连接器204是被配置成用于在存储卡200和主机系统之间传送数据的计算机数据总线连接器。例如,连接器204可以是外围组件互连(PCI)总线、PCI扩展(PCI-X)总线、PCIExpress(PCIe)计算机扩展总线或一些其他适当的连接器。
主控制器206是被配置成管理包括在存储卡200中的闪存芯片中的数据的存储和检索的处理设备。在一些实现中,存储卡200包括多个主控制器206。在一些实现中,主控制器206管理包括在组件212-232并且通过多个主-从存储器总线通道,耦接到主控制器206的一个或多个从控制器。在一些其他实现中,从控制器包括在与主控制器相同的逻辑单元(诸如组件)中,同时保持主从控制器之间的逻辑差异。在其他实现中,主控制器206管理组件212-232外部的一个或多个从控制器。例如,从控制器位于主控制器和闪存晶片之间。主控制器通过主从存储器总线通道,与从控制器通信。反过来,每一从控制器使用例如单独的通道控制器,与闪存晶片的子集通信来控制每一晶片。
由基板202的走线形成的主机总线通道可以将主控制器206耦接到主机边缘连接器204,用于与主机系统通信。一个或多个从控制器适合于提供对包括在组件中的闪存的透明访问。主控制器206和从控制器提供对主机系统中的处理器的闪存的本地访问。
组件212-232的每一个包括在其上安装多个封装的闪存芯片的矩形印刷电路板。闪存芯片可以包括NAND闪存晶片、NOR闪存晶片或任何其他适当的非易失性存储器。在一些实现中,组件212-232的每一个可以具有存储卡200能识别的不同类型的闪存,使得能对指定类型的存储器,定制读取操作、写入操作和/或擦除或维护操作。
在一些实现中,每一组件包括8个NAND闪存晶片,基于除其他参数外的电子布线和来自组件的引线输出,以4对排列。一对中的两个晶片可以称为彼此的同胞(sibling)。将组件配置成对每一对,每次晶片中的一个可以主动执行输入/输出(I/O)操作,即使从闪存操作的观点看,两个晶片均视为活动。因此,在组件中,4个晶片可以同时执行输入/输出(I/O)操作,而所有8个晶片主动执行闪存操作。
在上述实现中,除所示的12个组件212-232外,存储卡200包括安装在基板202的背面上的12个附加的组件,产生安装在基板202上的总共24个组件。另外,存储卡200包括子板,24个组件安装在子板上。因此,在一些实现中,存储卡200中的总组件数为48。对每个组件8个晶片,上述结构产生存储卡200中的总共384个闪存晶片。
在另外的实现中,组件212-232的数量可以不同于12,例如,几十个组件,以及存储卡200可以包括安装在基板202的背面的另外的数10个组件,产生除24以外的数量的每板的组件总数。通过每卡多个板,诸如一个或多个子板,存储卡中的组件的总数可以是数十或数百,导致数百或数千晶片。
除图2A所示的特征外,存储卡200可以包括安装在基板202的一个或多个嵌入式处理器、ROM、DRAM和另外的NVRAM。ROM可以被配置成存储用于存储卡200的启动指令。DRAM可以被配置成向嵌入式处理器提供暂存存储器并且存储转换结构(例如,将逻辑地址映射到物理地址的转换表)来访问闪存芯片中的数据。NVRAM可以包括可以定期更新的用于存储卡200的固件指令。固件指令驱动和控制主控制器206和从控制器来执行读、写、擦除或维护操作来通过组件212-232的闪存芯片访问数据。嵌入式处理器执行控制和控制主从存储器控制器的固件指令来访问数据和读、写和维护DRAM中的转换结构。
嵌入式处理器可以进一步耦接到主存储器控制器206和边缘连接器204来相互通信。嵌入式处理器也可以在边缘连接器204上,与主机系统中的主机处理器通信来从主机应用或主机操作系统软件接收读写操作请求来访问存储卡200中的闪存晶片中的数据。
如上所述,每一存储卡200可以具有两种逻辑控制器,即,处理主机级交互的主控制器和处理闪存级交互的从控制器。主控制器和从控制器可以使用标准协议,或外围硬件接口或两者的任何适当组合通信。在一些实现中,使用基板上的物理设备上的引脚和走线,实现该接口。在主控制器和从控制器均处于相同物理设备的其他实现中,可以使用物理设备上的内部设备逻辑,实现该接口。
在一些实现中,存储卡200可以利用两个物理设备,分别实现一个主控制器和若干从控制器。主控制器中的一个可以在计算设备的主板上的PCI扩展槽上的“基板”上,而其他主控制器可以在位于基板上的扩展槽上的“子板”上。可以通过基板的主控制器,路由主机和子板的主控制器之间的通信。在这些实现中,两个主控制器之间的通信可以通过PCIe的标准接口。专用的硬件接口也是可行的。
主控制器和从控制器协调它们各自的动作来实现闪存系统的数据路径。在该上下文中,也可以称为数据平面的数据路径表示主从控制器本身不确定哪些闪存位置包含在存储器操作中。相反,由系统的控制路径或控制平面执行该确定。主从控制器从“控制路径”接收指令来执行闪存级操作并且相对于特定主机DRAM资源执行这些操作。
可以通过可以实现为由与控制器有关的主机处理器或嵌入式处理器执行的固件指令的驱动软件,实现系统的控制路径。在一些实现中,每卡有单一驱动程序,而在其他实现中,每一存储卡可以有若干驱动程序。驱动软件指令可以使每一从控制器与主控制器无关的通信。
在一些实现中,驱动软件运行在主计算设备上,作为设备驱动程序。设备驱动程序使用标准的PCIe指令-在标准术语中,后者可以称为“存储器映射I/O”(MIMO)指令(在处理器级加载/存储指令,除被路由到适当的设备而不是DRAM外),与存储卡上的主控制器通信。反过来,驱动程序使用标准的基于主机的应用编程接口(APIs)和机制(例如系统调用),从主机中央处理单元(CPU)应用和操作系统(例如文件系统组件)接收请求。
在一些其他实现中,驱动软件运行在与基板主控制器耦接的嵌入式处理器上。在这些实现中,术语“固件”通常用来表示驱动软件。在其他的实现中,驱动功能性可以以拆分/并行方式,运行在与一个或多个主控制器有关的1个以上嵌入式处理器上。在固件运行在一个或多个嵌入式处理器上的情况下,应用/操作系统请求使用相同的PCIe存储器映射I/O指令,使用例如安装在主计算机上的中间(单独的最小)软件驱动,被传送到固件。
如上所述,主控制器、从控制器和驱动软件的组合可以称为闪存转换层或闪存管理层。闪存管理层管理闪存晶片,例如使用闪存转换表,将逻辑存储器块映射到闪存晶片中的物理位置。闪存管理层还使闪存晶片与更高级应用,诸如同步镜像模块以及操作系统连接。
图2B示例示出包括在作为组件212-232的子集的组件212、214和232中的闪存晶片的存储卡200的示意图。组件212包括闪存晶片212A…212N,组件214包括闪存晶片214A…214N以及组件232包括闪存晶片232A…232N。晶片212A…212N的每一个分别包括从控制器,诸如212A(i)…212N(i)和存储器块212A(ii)…212N(ii)。晶片214A…214N的每一个分别包括从控制器,诸如214A(i)…214N(i)和存储器块214A(ii)…214N(ii)。类似地,晶片232A…232N的每一个包括各自的从控制器232A(i)…232N(i)和各自的存储器块232A(ii)…232N(ii)。
尽管图2B示出从控制器212A(i)…212N(i)、214A(i)…214N(i)和232A(i)…232N(i)安装到组件212-232并且耦接在主控制器206和多个闪存晶片之间,但在一些其他实现中,从控制器212A(i)…212N(i)、214A(i)…214N(i)和232A(i)…232N(i)可以安装到基板202并且耦接在主控制器206和组件212-232中的各自的闪存晶片之间。在其他实现中,从控制器212A(i)…212N(i)、214A(i)…214N(i)和232A(i)…232N(i)一起安装在具有主控制器206的集成电路组件中,并且耦接在主控制器206和组件212-232中的各自的闪存晶片之间。
每一从控制器被配置成提供对各自的晶片的透明访问。如上所述,所有从控制器通过可以实现为基板202上的PCB走线的多个主从存储器总线通道,均连接到主控制器206。主控制器206本地地控制闪存晶片来获得与包括在组件212-232中的闪存晶片的可预测带宽和延迟性能。发生在闪存晶片212A…212N、214A…214N或232A…232N上的所有操作(例如读、写、擦除、控制操作,诸如复位等等)对主控制器206(或在其控制下)完全可见。组件中的晶片的活动晶片的闪存接口通过各自的从存储器控制器到达主控制器206。例如,晶片212A的闪存接口通过从控制器212A(i)到达主控制器206。
主控制器206能直接执行由闪存晶片212A…212N、214A…214N或232A…232N支持的每一操作。从控制器可以执行协议转换,但不丢弃/截取来自主控制器的请求(不包含相关的闪存晶片)。然而,从控制器不自动地启动任何闪存操作。
每一从控制器212A(i)…212N(i)、214A(i)…214N(i)和232A(i)…232N(i)被配置成仲裁分别由多个闪存晶片212A…212N、214A…214N或232A…232N共用的存储器总线通道。每一从控制器能缓存和多路复用主控制器206和多个闪存晶片之间的信号。此外,每一从控制器能将可预测的非易失性存储器操作的序列组合成复合操作来提高闪存晶片的控制带宽。
访问闪存晶片212A…212N、214A…214N或232A…232N中的数据的粒度可以称为存储器块或存储器页。例如,闪存晶片212A包括在图2B中,由212A(ii)共同表示的多个存储器块。存储器块的大小可以基于使用的闪存的类型而改变。例如,对NAND闪存晶片和NOR闪存晶片,存储器块的大小可以不同。在NAND闪存设备中,在SLC和MLC型的NAND闪存之间大小不同。由不同工艺生成的NAND闪存也可以具有不同大小(例如,34nmNAND闪存对25nmNAND闪存)。此外,存储器块的大小可以基于在闪存设备上执行的操作类型而改变。例如,对NAND闪存设备,数据可以以写入页为单位写入到存储器设备。写入页的大小可以小,约几千字节(例如,在4KB-16KB的范围中)。
在一些实现中,可以以通常大于写入页的大小的擦除块为单位(约几兆字节),从NAND闪存设备擦除数据,以及一个擦除块可以包括多个写入页。只要将数据写入一写入页,在新数据写入该写入页前,必须擦除与该写入页有关的整个擦除块。在一些其他实现中,如上所述,可以以闪存段为单位,擦除数据。闪存段是由分布在RAID分条中的闪存晶片上的多个擦除块组成的、映射到闪存卡200的物理区的逻辑结构。
图3示例存储在闪存晶片中的存储器页300的实例。闪存芯片可以是封装在存储卡200中的212A…212N、214A…214N或232A…232N中的一个。然而,闪存芯片还可以实现在其他存储器卡或系统中。
存储器页300包括数据部302和纠错码(ECC)部304。数据部302包括存储数据的存储单元302a-302h。存储器页具有由306表示的页起始地址。
数据部大小可以取决于特定NVRAM设计和结构而改变。在所示的实施例中,数据部302具有4KB的大小。可以使用用于数据部的其他大小(例如,8KB或16KB)。
如图3所示,存储器页300具有由0至7表示的从页起始地址306的偏移地址,允许存储器单元302a-302h的每一个的大小为512字节。在一些实现中,存储器单元302a-302h的每一个可以对应于写入页,而数据部302可以对应于擦除块。因此,在这些实现中,数据部302包括写入页302a-302h。
ECC的大小随基本NVRAM实现而改变。对数据部302为4KB的结构,ECC部304为128字节。在其他实现中,ECC部的大小可以更高(诸如在500字节的范围中)来满足更大尺寸的数据部的更高媒体错误率(例如,对当代闪存设备,诸如MLC型存储器)。
ECC部304用来存储用于在302a-302h中存储的数据的纠错的ECC数据。对每一512字节单元302a-302h,可以生成纠错码。可以使用纠错码,检测程序写入错误或闪存读取错误。当ECC用来校正误码的先验预期阈值时,当误码数超出先验阈值时或由于存储设备,诸如包括存储器页300的闪存晶片的完全故障,可以使用冗余数据存储来恢复数据。
在一些实现中,数据可以存储在分别具有一个或多个连续偏移量地址、存储器页上的一个或多个512字节区域中。存储数据的区域可以称为存储器块。例如,采用单一偏移量地址允许512字节数据块存储在存储器页300的单元302a-302h的一个上。在这种情况下,通过512字节数据块的区域,一致地写入RAID组。这是例如具有分散在实现4KB存储器页,诸如页300的8个闪存晶片上的7个数据分条和1个奇偶分条的情形。在这种结构中,每一晶片看见用于相同存储器页内的每一分条的512字节区域。
在一些其他实现中,可以使用一对偏移地址(例如偏移地址6和7)来允许把1KB的数据块存储在存储器页300的区域中。在这种情况下,通过1KB的数据块的区域,写入在这种情况下的RAID组。这是具有分散在4KB的存储器页,诸如存储器页300的四个闪存设备上的3个数据分条和1个奇偶分条的情形。
在一些实现中,在主机系统上操作的软件驱动或嵌入式固件可以累积数据、计算奇偶和存储数据和奇偶信息,作为跨闪存晶片的分条。可以由主处理器,例如基于主机软件驱动或嵌入式固件的指令,执行奇偶计算。在其他实现中,操作在存储卡200上的软件驱动可以累积数据并且启动主控制器206的指令。然后,主控制器206能负责计算整个闪存晶片的奇偶信息和存储数据和奇偶分条。
存储卡200可以包括若干这种RAID组。例如,参考具有每组件8个晶片的48组件的存储卡200的实现,存储卡200可以包括24个RAID组,16晶片位于每一组中的2个组件中。
图4示例冗余地将数据存储在分布在闪存晶片组上的数据分条中的一组闪存晶片400的实例。闪存晶片可以安装在存储卡200上。例如,闪存晶片可以是封装在存储卡200中的212A…212N,214A…214N或232A…232N。因此,下述章节描述如由系统100中的卡200实现的闪存晶片组400。然而,闪存晶片组400也可以由其他存储卡和系统实现。
组400示例RAID已知闪存布局的一种实现。组400包括N个闪存晶片402A、402B、402C至402N,统称为402A…402N。跨统称为404A…404M的M个数据分条404A和404B至404M中的闪存晶片402A…402N,存储数据页。每一分条包括N个数据块,诸如用于数据分条404A的A0…AN、用于数据分条404B的B0…BN和用于数据分条404M的M0…MN。还跨闪存晶片402A…402N存储奇偶分条406。奇偶分条由奇偶块PA-PM和单一元数据奇偶块PN组成。RAID分条中的一个或多个数据块集合在一起来形成闪存段,诸如段408。
应该理解,除所示的结构外,还可以使用不同结构。例如,可以使用分组多个数据分条上的奇偶信息的奇偶分条的不同编码。类似地,奇偶信息可以存储为单个数据分条的一部分,而不是存储在单独的仅奇偶的分条中。
闪存晶片402A…402N可以与闪存晶片212A…212N,214A…214N或232A…232N相同。每一数据块的大小可以取决于所使用的闪存晶片的数量以及数据分条的数量。每一数据块可以具有与写入页,或擦除块相同的大小,或存储器的一些其他适当的大小单位。
对每一数据分条,通过计算包括在闪存晶片中存储的数据分条中的数据块的奇偶,生成相应的奇偶块。例如,可以基于数据块A0…AN,计算PA。元数据奇偶块PN是由先前生成的多个奇偶块计算的奇偶。因此,基于奇偶块PA…PN,计算PN。
在一些实现中,奇偶分条中的奇偶块和元数据奇偶块有选择地存储在不同闪存晶片中,使得响应故障、移除和替换闪存晶片,能恢复数据。例如,对数据分条A,数据块A0存储在闪存晶片402A中、数据块A1存储在闪存晶片402B中、数据块A2存储在闪存晶片402C中以及数据块AN存储在闪存晶片402N中。
奇偶块和元奇偶块能任意地存储在闪存晶片402A…402N上,假定它们的位置已知。例如,如所示,奇偶分条406中的PA块存储在闪存晶片402A中,PB奇偶块存储在闪存晶片402B中,PC奇偶块存储在闪存晶片402C中,以及奇偶分条406的元奇偶块PN存储在闪存晶片402N中。在另一实现中,元奇偶块可以存储在闪存晶片402A中,PA奇偶块存储在闪存晶片402B中,PB奇偶块存储在闪存晶片402C中,以及PC奇偶块存储在闪存晶片402N中。
如所示,对每一闪存写入页,将M数据分条和一个奇偶分条写在N个闪存晶片402A-402N上。跨不同闪存晶片中的多个写入页、擦除块或一些其他适当的存储单元,分条数据和奇偶。对每一构成闪存晶片,将数据分条和奇偶分条写入一个或一对写入页、擦除块或一些其他适当存储单元内的不同偏移量。奇偶块PA是判定数据分条404A的奇偶的结果。奇偶块PB是判定数据分条404B的奇偶的结果。奇偶块PM是判定数据分条404M的奇偶的结果。PN表示在闪存晶片402N中存储的奇偶元数据块,其值为奇偶数据块PA至PM的奇偶。
系统可以被配置成响应“数据块”的相对大小和使用相对于对系统的影响的特定数据块大小。数据块可以具有等于擦除块的大小,或与存储器有关的大小的一些其他适当单位。例如,A0…AN的每一个可以对应于各个闪存晶片402A-402N中的擦除块。在这些情况下,与分条404A有关的数据可以分别写入闪存晶片402A至402N中的擦除块A0至AN。
如上所述,在分条中,可以以擦除块的粒度,或与存储器有关的大小的一些其他适当单位,将数据冗余地存储在不同闪存晶片中。例如,在闪存晶片的不同组中,复制按等于擦除块的大小的数据块,在404A中分条的数据。在一些实现中,使用奇偶编码,诸如XOR编码,如上所述,冗余地存储数据。在一些其他实现中,可以使用镜像复制数据,而在一些其他实现中,可以使用奇偶编码和镜像的一些适当组合和/或一些其他适当的机制存储数据。
在一种结构中,可以将数据分条的数据块写入8个闪存晶片。参考具有按4对设置的8个晶片的闪存晶片组件的实例,每一对的一个晶片在用于I/O操作的指定时间活动,上述结构可以包括来自一个组件,诸如212的4个活动(从I/O操作观点看)晶片,以及来自另一组件,诸如214的4个活动晶片。写入组件中的4个活动晶片的数据块可以在各个组件的其他4个同胞晶片中被复制。以这种方式,可以将数据分条且复制来提供象RAID的可靠性。在一些实现中,取决于诸如从控制器的结构和相对于存储晶片的数量的通道的因素,可以使用其他结构。例如,可以在8个不同组件的8个不同晶片上连同奇偶编码,分条数据块来提供在丢失任何单个晶片或组件的情况下,重构数据块的能力。
包含在以上述方式存储和复制数据中的闪存晶片组构成RAID组。如上所述,RAID组,也简称为RAID对在闪存晶片402A…402N中的数据提供数据可靠性。在本上下文中,RAID组与对RAID组中的每一闪存晶片,在同一存储地址偏移量对齐的擦除块的集合有关。在上述实例中,RAID组构成跨越2个组件的16个闪存晶片。RAID组具有“宽度”8,即,数据分条中的数据块跨8个闪存晶片存储并且在8个其他闪存晶片中被复制。
段408包括RAID组中的每一闪存晶片中的一个或多个擦除块。例如,数据块A0...AN的每一个可以是如上所述的擦除块。段408可以由擦除块A0…AN组成,如所示。在另一结构中,段408可以由每一闪存晶片中的两个擦除块组成,诸如晶片402A中的A0和B0,晶片402B中的A1和B1等等。将数据按段的顺序,有顺序地写入闪存晶片402A…402N。以包括在段内的擦除块中的写入页的粒度,将数据写入段。因此,在将对应于擦除块的写入页写入下一更高段前,首先填充对应于段408中的擦除块的写入页。
当将数据写入段时,闪存管理层跟踪活动段,即,当前被写入的段。在一些实现中,闪存管理层还跟踪当前写入的活动段内的写入页和/或擦除块。
为管理与被动服务器的同步镜像操作而配置的更高级软件驱动在特定时间点,在闪存管理层中查询有关活动段的信息。在接收到查询时,闪存管理层确定最近填充的段的序号,以及最近写入的段内的存储块的数量。闪存管理层将信息发送到更高级软件驱动。反过来,更高级软件驱动将段的序号和段内的存储块转发到将信息存储在作为由被动服务器的更高级软件驱动维护的数据结构的“标记”中的被动服务器。在一些实现中,主动服务器可以从被动服务器接收向主动服务器表示远程端已经接收到更新信息的确认。
图5示例使用段序号,执行同步镜像的存储器服务器500的实例。存储器服务器500可以是同步镜像设置中的主动服务器或被动服务器。存储器服务器500将可以与包括在系统100中的存储卡200类似的存储卡501包括为存储元件。存储卡501包括分别通过从控制器514、516、51J和51K,管理闪存晶片504、506、50J和50K(“J”和“K”是整数)的主控制器502。闪存晶片504包括多个擦除块,诸如504a、504b、504c、504x、504y和504z。类似地,闪存晶片506包括多个擦除块,诸如506a、506b、506c、506x、506y和506z,闪存晶片50J包括多个擦除块,诸如50Ja、50Jb、50Jc、50Jx、50Jy和50Jz,以及闪存晶片50K包括多个擦除块,诸如50Ka、50Kb、50Kc、50Kx、50Ky和50Kz。
闪存晶片504、506、50J和50K是其中包括段522、524和52M的RAID分条的一部分。每一闪存晶片中的擦除块被分成不同段。例如,在闪存晶片504中,擦除块504a和504x位于段522中,擦除块504b和504y位于段524中,以及擦除块504c和504z位于段52M中。对每一段,存储卡501存储段的段号,以及最近写入的该段内的擦除块。在一些实现中,存储卡501可以将信息存储在闪存晶片中。例如,用于段522的段序号可以存储为闪存晶片504中的522a,而用于段524的段序号可以存储为闪存晶片506中的524a。在一些其他实现中,除闪存晶片外,存储卡501可以将段信息存储在例如片上RAM中。
存储卡501包括闪存转换表530。闪存转换表530将逻辑块地址(LBA)映射到表示数据存储的一个或多个闪存晶片中的物理位置的物理块号(PBN)。在一些实现中,转换表可以是不同于闪存晶片504…50K的动态RAM(DRAM)结构。然而,在其他实现中,转换表可以存储在一个或多个闪存晶片的专用部分或在一些其他适当位置中。
主控制器502、从控制器514,516,51J和51K以及闪存转换表530一起构成用于存储卡501的闪存管理层。在同步镜像设置中,存储器服务器500为被动服务器的实现中,存储卡501使用标记,诸如标记A542和标记B544,存储从主动服务器接收的有关活动段的信息。标记可以存储在单独的存储器结构540,例如RAM中。此外,或替代地,标记也可以存储在闪存晶片中。
存储器服务器500包括作为管理用于与存储器服务器500有关的存储元件,例如存储卡501的镜像操作的更高级软件驱动的同步镜像模块550。同步镜像模块550实现为存储卡501外部,存储器服务器500中的更高级软件的一部分。
尽管图5示出了三个段522、524和52M,但存储卡501中的段的总数可以是大于所示的3个的不同数量。此外,尽管将段示为构成闪存晶片504、506、50J和50K的一部分,但段可以包括未示出的其他闪存晶片的部分。段中的每一闪存晶片的擦除块的数量可以不同于所示的数量。例如,在一些实现中,每一闪存晶片,每段可以包括仅一个擦除块。在一些其他实现中,不同段可以包括不同多个擦除块。
闪存晶片504、506、50J和50K可以属于同一组件,或它们可以属于不同组件。如上所述,在一些实现中,从控制器514、516、51J和51K可以分别安装到与闪存晶片504、506、50J和50K有关的组件并且耦接在主控制器502和各自的闪存晶片之间。在一些其他实现中,从控制器514、516、51J和51K可以分别安装到基板501并且耦接在主控制器502和相关组件的闪存晶片之间。在其他实现中,从控制器514、516、51J和51K与主控制器502一起安装在集成电路组件中并且耦接在主控制器502和闪存晶片之间。
如上所述,在一些实现中,闪存管理层将新数据项以类似于写入日志的方式,写入闪存晶片504、506、50J和50K。闪存管理层以擦除块的粒度,将存储卡501上的每一闪存晶片上的总存储分成离散单元并且将RAID组中的擦除块的集合组织成顺序段。例如,对宽度8(即,RAID组中有8个闪存晶片)和2兆字节(MB)的擦除块(例如,504a或504b)大小的RAID组,段(例如,522或524)可以是大小2擦除块×8宽度×2MB/擦除块,即32MB。因此,存储卡501的总存储,约兆兆字节可以被组织成约数十兆字节的多段。
当闪存管理层从高级应用或操作系统接收写操作时,识别当前活动段,将与写操作有关的数据写入活动段中的下一可用位置,并且在闪存转换表中产生LBAX(例如,对应于擦除块504a中的写入页)现在已经写入对应于活动段Z(例如,段522)的物理位置Y(例如,在闪存晶片504中)的条目。因此,闪存管理层由应用数据,以日志方式填充段并且以日志方式填充闪存转换表中的条目。考虑到相继的写入1,接着是写入3,再接下来是写入3的三次写入,用于写入1、2和3的数据将以日志方式出现在段中,并且用于写入1、2和3的转换条目将以日志方式出现在闪存转换表中。
当空间不再可用于将新数据写入映射到当前段的物理闪存晶片中时,认为由数据充满当前段。闪存管理层将另一段标记为活动,然后有效地执行如在上述章节中描述的相同操作。在一些实现中,由于效率原因,可以有1个以上活动段。闪存管理层将写请求路由到活动段中的一个。
当为了存储数据而激活段时,闪存管理层使序号与段关联。在一些实现中,序号是正好在当前激活段前被写入的段后的下一较高序号。在一些其他实现中,序号是以降序,使得与段有关的序号是正好在当前激活段前被写入的段后的下一较低序号。
在一些实现中,段的序号可以与相应段有关地记录在物理闪存中。例如,用于段522的序号可以记录在闪存晶片504的部分522a中,而用于段524的序号可以记录在闪存晶片506的部分524a中。在一些其他实现中,段的序号可以记录在除闪存晶片外的单独存储器中,诸如RAM中。或者,段的序号可以记录在闪存晶片(例如,522a或524a)和单独的RAM中。
在一些实现中,对活动段,连同段的序号,闪存管理层将下一可用闪存块(例如写入页)的序号记录在物理闪存晶片(例如522a或524a)的主动段内或单独的存储器中(例如RAM),或两者中。段内的闪存块的序号可以记录为与段内的第一存储块的偏移量。例如,如果在段中包括的擦除块内有4096个写入页,可以将写入页顺序地标记为0-4095,0是段中的第一写入页的编号。
闪存管理层分开记录主动段的信息,使得与非主动段相分离地跟踪主动段。例如,闪存管理层可以将记录保持在存储主动段的序号的DRAM中。因此,当新段变为主动时,更新在用于主动段的DRAM记录中存储的序号。
同步镜像模块550在各时间点,在闪存管理层中查询有关主动段的信息。响应该查询,闪存管理层可以发送活动段的序号,以及表示活动段内的下一可用闪存块的序号的活动段内的偏移量。
在同步镜像设置中,同步镜像模块550将活动段的序号连同活动段内的下一可用闪存块的序号转发到被动服务器。被动服务器将从活动端接收的信息存储在称为标记的数据结构中。例如,如果存储器服务器500是被动服务器,那么存储器服务器500将提供有关活动段的序号的信息的标记542和下一可用闪存块的序号存储在活动端的活动段内。如所示,标记542包括主动服务器上的活动段的序号和块号。每次主动服务器上可能有两个活动段。因此,标记542可以存储有关两个活动段的序号的信息,并且对每一活动段,段内的下一可用闪存块的序号。
在一些实现中,被动服务器可以存储1个以上的标记。例如,如果存储器服务器500是被动服务器,那么,存储器服务器500可以存储两个标记542和544,如所示。这在下述章节中所述的两级标记方案中很有用。在这些实现中,两个标记542和544的每一个提供有关所有活动段的序号的信息,并且对每一活动段,对应于与各个标记有关的写入页、主动服务器的活动段内的下一可用闪存块的序号。
标记可以看作与闪存管理层中相关联的元数据。在一些实现中,标记可以存储在与物理闪存分开的存储器中,诸如RAM540中。在一些其他实现中,标记可以存储在物理闪存中,例如,作为闪存晶片504、506、50J或50K的已知部分中的数据结构。在其他实现中,标记可以存储在物理闪存和分开的存储器,诸如RAM中。
当主动服务器上的同步镜像模块发送有关主动服务器上的活动段的更新信息时,在被动服务器上定期地更新标记542和/或544。在一些实现中,由被动服务器上的同步镜像模块来管理标记,而在一些其他实现中,由被动服务器上的闪存管理层管理标记。在其他实现中,由被动服务器上的同步镜像模块和闪存管理层的适当组合来管理标记。
标记等效于将位置记录在逻辑日志中。给出逻辑日志中的两个位置,能确定写在该两个位置之间的日志中的条目。因此,给定两个标记,同步镜像模块能识别哪些是在两个标记之间发生的时间段之间被写入的闪存块(例如写入页)。已知写入的物理闪存块,同步镜像模块能在闪存管理层中查询有关对应于所确定的物理块的逻辑存储块的信息。
闪存管理层使用闪存转换表530,保持逻辑存储块和被写入的物理存储块之间的映射。基于来自标记的信息,同步镜像模块询问逆向问题,即,给定被写入的物理闪存块,什么是该物理闪存块对应的逻辑存储块。
在一些实现中,使用有关主动服务器的活动段的信息和在被动服务器中存储的标记,可以再现灾难恢复日志和非复制写入日志的功能性。主动服务器上的同步镜像模块550定期地(例如每隔几秒)在主动服务器上的闪存管理层中查询当前活动段的序号和活动段内的下一可用存储块的偏移量。在同步镜像设置中,同步镜像模块550将信息发送到连接的另一端的被动服务器。被动服务器将所接收的信息记录为从主动服务器接收的最近标记值。
当同步镜像系统从崩溃恢复时,主动和被动服务器就双方已经看到的最近标记达成一致。在一些实现中,被动服务器上的同步镜像模块将崩溃前,被动服务器已经接收的最近标记发送到主动服务器。主动服务器上的同步镜像模块在主动服务器上的闪存管理层查询活动段的序号。
同步镜像模块将从闪存管理层检索的活动段的序号与在从被动服务器接收的标记中表示的段的序号比较。序号之间的差异对应于已经发生在主动服务器、但在被动服务器还未复制的所有写入。因此,主动服务器实际上具有灾难恢复日志信息。
主动服务器上的同步镜像模块查询闪存管理层来校验对应于上述识别的写入的物理闪存块继续表示有效逻辑块。即,物理闪存块包括由相应的逻辑块准确映射的数据。由于例如物理闪存块被擦除和/或新数据还未写入,但未更新先前映射到该物理块的逻辑块的情形可能发生,因此执行该校验。
如果同步镜像模块校验对应于所识别的写入的物理闪存块继续表示有效逻辑块,那么同步镜像模块检索这些写入和对应于所识别的写入的逻辑存储块并且将它们发送到被动服务器。另一方面,如果同步镜像模块确定对应于所识别的写入的一个或多个物理闪存块不再表示有效逻辑块,那么同步镜像模块不发送相关写入或不正确的逻辑存储块。在这些情况下,同步镜像模块检索剩余写入和相应和逻辑存储块(继续有效)并且将它们发送到被动服务器。
当主动服务器上的同步镜像模块将主动段序号信息发送到被动服务器上时,系统必须确保没有在发送信息前开始但在传送信息后才结束的写操作。这可以看作出现在标记的两侧不能操作的校正所需的“写屏障”,因为标记用作同步装置。
考虑在主动服务器上的同步镜像模块550在闪存管理层中查询活动段的信息前发出的两个用户写入,但在从闪存管理层发送信息时,两个用户写入还未完成。关于将两个用户写入和活动段信息传送到被动服务器的顺序,排序可不同于主动服务器上的排序是可能的。写入中的一个可能实际上发生在被动节点上接收活动段信息前,而另一写入可能发生在之后。因为主动服务器和被动服务器的顺序可能存在冲突,同步镜像设置可能不正确,因为主动服务器上的同步镜像模块可能将两个写入解释为记录在被动服务器上,而实际上,可能仅一个写入被记录。当利用被动服务器所存储的标记执行恢复时,因为在检索活动段信息前,执行主动服务器上的第二写入,作为恢复过程的一部分,第二写入将不传送到被动服务器。同步镜像系统将不知道遗失写操作。因此,对正确的使用基于标记方案的同步镜像,在活动段的检索标记信息前后,应当严格地排序写操作,以便消除与检索标记信息同时发生的写入,消除可能发生的冲突。
在上述章节中所述的实现中,当收集和传送序号信息时,通过停止I/O操作,可以实现写屏障。同步镜像系统确保在从闪存管理层检索有关活动段的信息前,系统中的所有写操作必须完成。在系统中不允许新写入,直到已经检索到标记信息,然后,恢复写操作为止。然而,在执行I/O操作的上下文中,在系统中会产生“打嗝”。停止、等待写入完成并且防止进行新写入直到由闪存管理层返回信息为止会增加响应时间。例如,如果每隔2秒,采集对应于活动段的信息,那么当不执行I/O操作时,会有几毫秒的时间。
在一些实现中,也可使用称为红黑标记方案的两级标记模式来实现写屏障,而不产生打嗝。在这些实现中,按阶段执行主动服务器上的写操作,主动服务器上的写事务被分类成两种类型之一,为示例目的,可以称为红阶段(或红写入阶段)和黑阶段(或黑写入阶段)。
按红阶段、紧接着黑阶段、再接着红阶段等等这样的顺序,在主动服务器上执行写操作。当在红阶段中执行写操作时,闪存管理层检索关于最后黑阶段中活动的段的信息。当对黑阶段执行写操作时,闪存管理层检索关于对应于最后红阶段的活动段的信息。因此,同步镜像系统覆盖进入系统的段信息检索和新写操作。
在一些实现中,当在黑阶段完成写操作时,闪存管理层检索黑阶段中活动的段的序号(以及写入的活动段内的存储块的序号)并且将它们存储在用于活动段的DRAM记录中,并指示对应于黑阶段中的活动段来存储序号。类似地,在红阶段的写操作期间,闪存管理层可以将活动段的序号存储DRAM记录中,并指示对应于红阶段中的活动段来存储序号。例如,如果存储器服务器500表示主动服务器,段522可以是黑阶段中的活动段。因此,闪存管理层将段522的序号和刚写入的段522内的存储块存储在DRAM中,指出序号与黑阶段有关。在下一红阶段,可以写入段522和524。闪存管理层将段522和524的序号存储在DRAM记录中(连同各个段内的存储块的序号一起),指出序号与红阶段有关。
在一些实现中,闪存管理层可以保持对应于不同阶段的分开的DRAM记录。在这些实现中,可以使用第一DRAM记录来存储对应于黑阶段中的活动段的段号,而可以使用第二DRAM记录来存储对应于红阶段中的活动段的段号等等。
由闪存管理层检索的主动段的信息提供的属性是直到表示的最后一阶段为止,该信息是准确的。对检索信息时执行的当前写操作,该信息可能不准确。
在检索对应于黑阶段的活动段的信息的同时,当执行对应于红阶段的写操作时,为了检索黑阶段活动段信息,红阶段写操作不必停止。对应于红阶段的写操作可以继续。然而,在检索黑阶段活动段信息前,对应于黑阶段的所有在前写操作应当完成,并且直到黑阶段活动段信息的检索已经完成,黑阶段中的新写操作才开始。
通过分类写操作并且在不同时间的不同阶段写入活动段,实现同步镜像操作的流水线。通过两个标记一起工作,将写入分成阶段,并且检索对应于最后完成阶段的段和块序号,解决写屏障。
应注意到发送到两级标记方案中的被动服务器的信息包括对应于在最后写入阶段中写入的所有活动段的序号。段可以包括在当前写阶段中活动的一些段。
在被动服务器上,从主动服务器接收的序号信息存储为标记。在利用两级标记方案的实现中,被动服务器可以存储多个标记。例如,存储器服务器500,当表示被动服务器时,可以存储标记542和544。标记542可以包括对应于黑阶段中的活动段的序号,而标记544可以包括对应于红阶段中的活动段的序号。
在一些实现中,被动服务器可以存储识别与标记有关的写入阶段的信息。在上述实例中,被动服务器可以存储作为与黑阶段有关的标记542和作为与红阶段有关的标记544的信息。
在两级标记方案的一些实现中,当在崩溃恢复期间,被动服务器将标记发送到主动服务器时,被动服务器发送对应于从主动服务器接收的信息的倒数第二标记。这样做来确保在由于先前所述的写屏障问题的部分再同步期间,不丢失数据,因为被动服务器的倒数第二标记对应于主动服务器的在前写入阶段。
例如,主动服务器在当红写入阶段活动时,发送与黑写入阶段中的活动段有关的序号。序号存储在被动服务器的标记542中。在后续时间,主动服务器发送在被动服务器的标记544中存储的、与红写入阶段中的活动段有关的序号。被动服务器在存储标记544后经历故障。因此,当被动服务器再次可操作时,在被动服务器存储的最后一个标记为544,而倒数第二标记为542。在恢复操作期间,被动服务器将在标记542中存储的序号发送到主动服务器。
在两级标记实现中,当在崩溃恢复后,将序号发送到主动服务器,用于部分再同步时,被动服务器还可以指定相关写阶段。在这些实现中,主动服务器中的同步镜像模块550可以基于从被动服务器接收的标记信息,指定对应于当向闪存管理层发送主动段的查询时,所查找到的主动段信息的写入阶段。闪存管理层因此通过对应于所查询的写入阶段的最近活动段的序号来响应。
主动服务器中的同步镜像模块550将从闪存管理层检索的最近的主动段的序号与从被动服务器接收的标记中包括的序号比较。从闪存管理层返回的序号与来自被动服务器的标记中所提及的序号之间的差异指出自对应于在来自被动服务器的标记中提及的序号的段被发送到被动服务器以来,已经在主动服务器执行的写操作。由于故障,可能在被动服务器并未执行所确定的写操作。上文中假定,与时间上较前写入的段的序号相比,时间上较后写入的段的序号更高。
只要确定由于故障写操作还未写入被动服务器,同步镜像模块550可以查询闪存管理层来确认对应于上述识别的写操作的物理闪存块来继续表示有效逻辑块,如上所述。
如果同步镜像模块550核实对应于所识别的写入的物理闪存块继续表示有效逻辑块,那么,同步镜像模块检索该写入和对应于所识别的写入的逻辑存储块并且将它们发送到被动服务器。另一方面,如果同步镜像模块550确定对应于所识别的写入的一个或多个物理闪存块不再表示有效逻辑块,那么,同步镜像模块不发送相关写入或不正确的逻辑存储块。在这些情况下,同步镜像模块检索剩余写入和相应的逻辑存储块(继续有效)并且将它们发送到被动服务器。
应注意,在一些实现中,当主动服务器从被动服务器接收指示与标记有关的写阶段的标记时,主动服务器可以执行对应于所指示的写阶段的新的写操作。例如,主动服务器从被动服务器接收具有指示在黑写阶段写入包括在标记542中的序号的信息的标记542。在主动服务器接收标记542时,主动服务器可以在黑写阶段的新周期中,执行新的写操作。
在一些其他实现中,当主动服务器从被动服务器接收指示与该标记有关的写阶段的标记时,主动服务器可以执行对应于不同写阶段的新的写操作。例如,主动服务器从被动服务器接收具有指示在黑写阶段写入包括在标记542中的序号的信息的标记542。在主动服务器接收标记542时,主动服务器可以在红写阶段的周期中,执行新的写操作。
尽管参考红黑阶段,在上述章节中描述了两级标记方案,但应该理解,赋予写阶段的颜色仅用于示例目的,不涉及实现的功能性。其他颜色,或不同于颜色的一些其他适当的识别信息可以分配给不同类别和阶段,而不改变所述的实现。
此外,尽管上述章节描述了二级标记方案的概念,但实现同样可适用于采用不同于上述的二维的多级标记方案的系统。在这些情况下,可以有多个写阶段,不同标记与每一写阶段有关。
在一些实现中,同步镜像系统可以使用这样的二级标记方案,其中将段分类到两个阶段之一,诸如蓝阶段和绿阶段中的一个,并且在不同阶段,将写操作写入不同主动段。当在蓝阶段有效时对称接收写操作时,同步镜像模块在与蓝阶段相关联的活动段上执行写操作。当在绿阶段接收写操作时,同步镜像模块在与蓝阶段相关联的活动段不同的、与绿阶段相关联的活动段上执行写操作。
不同标记可以与不同阶段有关,并且当它们相应的阶段活动时,可以独立地更新标记。例如,如上所述,存在用于蓝阶段的标记和用于绿阶段的不同标记。
上述实现可以扩展到以参考上述蓝绿阶段描述的类似的方式,将段分类成若干种类的一种的多级标记方案。在这些情况下,不同标记可以与不同阶段的每一个有关,以及标记可以存储对应于它们各自的阶段中的活动段的信息。然而,在一些情况下,关于不同阶段,标记可能是不可知的。在这些实现中,每一标记可以存储对应于所有阶段中的活动段的信息。
在上述章节中所述的实现,使用标记的概念来提供同步镜像,以使存储器写操作更有效。例如,消除与写入灾难恢复日志和/或非复制写入日志有关的延迟。实现性能的一致性,与写操作实际上是顺序还是随机无关。通过依赖于闪存管理层的内部而不是另外的灾难恢复日志或非复制写入日志,由于工作量之间几乎无变化,可以获得更鲁棒性能。
在采用灾难恢复日志的实现中,增加另外的写放大组件,是指被处理来写入一定量数据的另外的存储器。因此,如果闪存的几何结构相对于闪存介质,允许有限写入,灾难恢复日志会减少闪存介质数据写入的寿命。例如,假定完成4KB写的工作量,对每4KB写入,执行一个灾难恢复日志写入来打开该写入,执行4KB写入,然后另一灾难恢复日志写入来关闭该写入,系统有效地引入3X的写放大。因此,与用于非同步镜像方式的情形相比,闪存设备可以支持其寿命上的数据写入的数量的全部的1/3。
因此,如果能避免由于灾难恢复日志的另外的写入,与另外的情形相比,可以由那一存储元件实现更长寿命(例如,在上述例子中,3倍以上)。将标记的概念用于同步镜像这是可能的。因此,使用标记的同步镜像提供在不同工作量上更可预测的更高性能、更高耐久性和性能。
图6示例可以用于将数据写入存储器服务器中的存储块的示例性过程600。例如,可以通过存储器服务器500,在同步镜像实现中,由主动服务器实现过程600。因此,下述章节将过程600描述为由包括主控制器502、从控制器514,516,51J,51K和闪存转换表530的存储卡501中的闪存管理层执行。然而,过程600还可以由其他系统和系统结构执行。
过程600接收用于写入到存储器的应用数据(602)。例如,存储器服务器500可以从更高级应用或操作系统接收写操作。写操作可以包括要存储在与存储器服务器500有关的永久存储器——诸如存储卡501中的闪存晶片504、506、50J或51K——中的数据。
识别当前阶段和活动段(604)。例如,存储器服务器500可以实现用于将数据存储在存储卡501中的二级标记方案。因此,在接收写操作时,存储卡501中的闪存管理层确定二阶段,红阶段或黑阶段中的哪一阶段目前对写入数据有效。闪存管理层还通过例如从在DRAM中保持的记录查找活动段的序号来确定在当前写入阶段中数据要写入的活动段。
闪存管理层确定活动段是否已满(606)。例如,闪存管理层校验用于当前阶段的活动段中的所有写入页是否由数据填充。
如果确定活动段未满,闪存管理层将应用数据写入活动段中的下一可用块(608)。例如,活动段可以是524。闪存管理层可以确定段524内的下一可用写入页并且将应用数据存储在下一可用写入页中。因此,即使将段描述为分布在RAID分条中的闪存晶片上的擦除块的集合,但以段内的写入页的粒度写入数据。如上所述,每一擦除块包括多个写入页。
在写入活动段中的下一可用块后,闪存管理层利用下一块的序号,更新对应于活动段的信息(610)。例如,闪存管理层可以存储刚写入的写入页后,在活动段中可用的下一写入页的序号。可以将该信息存储为保持活动段的序号的DRAM记录的一部分。然后,闪存管理层从更高层接收下一应用数据并继续将该数据存储在物理存储器中。
另一方面,如果确定活动段满,闪存管理层识别新段并且将应用数据写入新段中的第一可用块(612)。例如,闪存管理层可以确定在活动段中没有可用空间。因此,闪存管理层将可用于写入的下一段识别为用于存储数据的新段,并且将序号与新识别的段关联。由于顺序地使用段,与刚变满的段的序号相比,与新段有关的序号是下一较高编号。在识别新段时,闪存管理层将应用数据写入新段中的第一写入页。
闪存管理层存储活动段的序号和下一块(614)。例如,当选择下一可用段以写入,闪存管理层将新选择的段识别为新活动段,并且将新活动段的序号存储在跟踪活动段的内部数据结构中,诸如保持活动段的序号的DRAM记录。
在一些实现中,闪存管理层还存储刚写该写入页后,可用在活动段中的下一写入页的序号。然后,闪存管理层从更高层接收下一应用数据并且继续将数据存储在物理存储器中。
图7示例可以用于识别实现同步镜像的存储器服务器中的活动闪存段的示例性过程700。例如通过存储器服务器500,在同步镜像实现中,可以由主动服务器执行过程700。因此,下述章节描述如由包括主控制器502、从控制器514,516,51J,51K和闪存转换表530的存储卡501中的闪存管理层执行的过程700。然而,过程700还可以由其他系统和系统结构执行。
主动服务器可以与过程600同时执行过程700。例如,可以使用过程700来检索二级标记方案中,对应于在前阶段(诸如黑阶段)的活动段的信息,而同时执行过程600来将数据存储在当前阶段(诸如红阶段)的活动段中。
当从同步镜像模块接收到查询时,执行过程700(702)。例如,存储器服务器500可以是同步镜像实现中的主动服务器。主动服务器中的闪存管理层,诸如存储卡501中的闪存管理层可以从同步镜像模块550接收用于活动段的信息的查询。
闪存管理层识别当前阶段和在前阶段(704)。例如,在从存储器服务器500接收到查询后,存储卡501中的闪存管理层确定二级标记方案中的两阶段中的哪一个是当前写入阶段,以及相应地在前一周期中哪一阶段被写入。闪存管理层可以确定红阶段是当前活动的,因此,在前一循环中被写入黑阶段。
闪存管理层检索对应于在前阶段的活动段的序号(706)。如前所述,在二级标记方案中,有关被发送到同步镜像模块的活动段的信息对应于前一写入阶段中更新的信息。例如,如果红阶段是当前活动的,闪存管理层例如从存储有关活动段的信息的DRAM记录检索当黑阶段是活动时的前一周期中被写入的活动段的序号。与对应于在前阶段的活动段的序号一起,闪存管理层检索表示活动段内的下一可用存储块的活动段内的偏移量。
在一些实现中,可以从闪存晶片中的它们的存储位置,检索序号。例如,如果522对应于在前一阶段中被写入的活动段,闪存管理层从闪存504中的位置522a检索有关522的信息。
闪存管理层将所检索的序号发送到同步镜像模块(710)。例如,闪存管理层将对应于前一阶段的活动段的所检索的序号发送到同步镜像模块550。在一些实现中,闪存管理层还发送表示各个段内的下一可用存储块的对应于前一阶段的活动段内的偏移量。然而,在其他实现中,闪存管理层仅发送活动段的序号。因此,同步镜像模块550具有有关最近被写入主动服务器中的存储元件的哪一部分的信息。
图8示例可以用于执行使用基于闪存的存储的主动和被动服务器之间的同步镜像的示例性过程800。例如,通过表示同步镜像设置中的主动服务器的存储器服务器500,在同步镜像实现中,由主动服务器执行过程800。因此,下述章节将过程800描述为通过与包括主控制器502、从控制器514,516,51J,51K和闪存转换表530的存储卡501中的闪存管理层交互,由存储器服务器500中的同步镜像模块550执行。然而,过程800还可以由其他系统和系统结构执行。
作为过程800的一部分,同步镜像模块将应用数据发送到主动服务器(802)。例如,存储器服务器500可以从更高级应用,诸如用户应用和/或操作系统,接收写操作。存储器服务器500使用存储卡501上的闪存管理层,将与写操作一起接收的数据写入本地存储元件,诸如存储卡501。同时,存储器服务器500中的同步镜像模块550将包括该数据的写操作发送到镜像写入存储卡501的数据的被动服务器。
在一些实现中,仅当存储器服务器500是同步镜像结构中的主动服务器时,同步镜像模块550才将写操作发送到被动服务器。在一些实现中,同步镜像结构可以包括与配置为主动服务器的存储器服务器500分开的多个被动服务器。在这些实现中,同步镜像模块550可以将写操作发送到一个或多个被动服务器。
同步镜像模块定期地将有关活动段的信息发送到被动服务器(804)。例如,同步镜像模块550在本地存储元件(即,存储卡501)上的闪存管理层上查询有关最近写入的闪存段的信息。可以以一定时间间隔,定期地进行查询。或者,当将写操作的某一阈值数发送到被动服务器时,可以进行查询。或者,当写入本地存储元件上的物理存储器的某一阈值容量时,可以进行查询。例如,当填满存储卡501上的闪存晶片的可用容量的某一百分比(诸如5%)时,可以进行查询。同步镜像模块550可以跟踪存储卡501的可用容量来进行查询。
基于查询,同步镜像模块550从闪存管理层接收有关活动段的信息,如上所述。信息可以包括活动段的序号和对应于活动段中的下一可用存储块的段内的偏移量。在一些实现中,可以有多个活动段并且从闪存管理层接收的信息可以包括序号和对应于所有活动段的偏移量。同步镜像模块550将有关活动段的信息发送到镜像在存储器服务器500中存储的数据的被动服务器。
在使用多级标记方案,诸如上述二级红黑标记方案的实现中,同步镜像模块550还可以将有关对应于活动段的写入阶段的信息发送到被动服务器,如上所述。例如,当发送在黑阶段中写入的活动段的序号时,同步镜像模块550还发送指示写入阶段是黑阶段的信息。
同步镜像模块从被动服务器接收恢复消息(806)。例如,镜像在主动服务器500中存储的数据的被动服务器由于某些原因故障。当被动服务器从故障恢复时,被动服务器可以将恢复消息发送到主动服务器500来执行在停止被动服务器的时间段期间已经在活动段写入的数据的部分再同步。由主动服务器500中的同步镜像模块550处理恢复消息。
同步镜像模块从恢复消息提取标记信息(808)。例如,在从故障状况恢复时,被动服务器检索从活动端接收的最后标记,并且将最后标记发送到主动服务器500,作为恢复消息的一部分。主动服务器500中的同步镜像模块550通过处理恢复消息,读取标记信息。
同步镜像模块从闪存管理层检索有关当前活动段的信息(810)。例如,为确定自被动服务器故障以来更新的闪存块,同步镜像模块550将查询发送到本地存储元件,即,存储卡501中的闪存管理层。闪存管理层通过有关闪存管理层接收到查询时活动的一个或多个段的信息响应。同步镜像模块能从闪存管理层确定最近更新的一个或多个段,以及该段内的一个或多个存储块。
在利用二级标记方案的实现中,从被动服务器接收的标记包括有关标记相关的写入阶段的信息(例如,标记是与红阶段还是黑阶段相关)。在这些情况下,被动服务器存储对应于两个写入阶段的两个标记。当将标记发送到主动服务器用于数据恢复时,被动服务器发送所接收的倒数第二标记。如上所述,发送倒数第二标记以确保在部分再同步期间,不会由于写屏障而丢失数据,因为由被动服务器接收的倒数第二标记对应于主动服务器的在前写入阶段。
同步镜像模块通过将所检索的信息与所提取的标记信息比较,确定还未镜像到被动服务器的所存储的存储块(812)。例如,同步镜像模块550可以基于从主动服务器接收的标记提取的信息,确定由被动服务器存储的最后一段的序号。同步镜像模块550还由本地存储元件的闪存管理层发送的信息,确定已经写入本地存储器的最近段的序号。两个序号的差异给出已经写入本地存储器但还未存储在被动服务器中的段。因此,在这些段中存储的数据未被镜像到被动服务器,例如,因为通过主动服务器上的同步镜像模块550,在相应的写操作被发送到被动服务器时,被动服务器已经故障。
同步镜像模块从转换表查找对应于所确定的物理块的逻辑存储块(814)。例如,确定已经写入本地存储器但未存储在被动服务器中的段提供有关存储卡501中的物理存储器的信息。同步镜像模块550可以查询存储卡501上的闪存管理层来将物理存储块映射到逻辑存储块,其可以是与被动服务器故障时错过的写操作有关的逻辑存储块。闪存管理层可以使用闪存转换表530,查找对应于物理存储块的逻辑存储块,并且将有关逻辑存储块的信息发送到同步镜像模块550。
同步镜像模块将对应于逻辑存储块的应用数据发送到被动服务器(818)。例如,同步镜像模块550可以由物理存储块确定在存储卡501中存储但未存储在被动服务器中的原始应用数据。在从闪存管理层接收有关逻辑存储块的信息后,同步镜像模块550还获得物理存储块到逻辑存储块的映射。因此,同步镜像模块550可以将逻辑存储块和应用数据发送到被动服务器。
被动服务器将应用数据存储在其本地物理存储器中,并且使用所接收的有关逻辑存储块的信息来确定存储应用数据的物理存储块与逻辑块的相同映射。以这种方式,在恢复阶段期间,可以镜像当被动服务器故障时丢失的数据。因此,不使用灾难恢复日志和非复制写入日志,可以实现部分再同步。
可以在数字电子电路、集成电路、专用ASICS(专用集成电路)、计算机硬件、固件、软件和/或其组合中实现在此所述的系统和技术的各种实现。这些各种实现能包括以包括至少一个可编程处理器的可编程系统上可执行和/或可解释的一个或多个计算机程序的实现,所述至少一个可编程处理器可以是专用或通用目的,被耦接来接收来自存储系统、至少一个输入设备和至少一个输出设备的数据和指令,并且发送数据和指令给存储系统、至少一个输入设备和至少一个输出设备。
这些计算机程序(也被称为程序、软件、软件应用或代码)包括用于可编程处理器的机器指令,并且可以以高级过程和/或面向对象的编程语言和/或汇编/机器语言实现。如在此所使用的,术语“机器可读介质”、“计算机可读介质”是指用来向可编程处理器提供机器指令和/或数据的任何计算机程序产品、装置和/或设备(例如,磁盘、光盘、存储器、可编程逻辑器件(PLD)),包括将机器指令接收为机器可读信号的机器可读介质。术语“机器可读信号”是指用来向可编程处理器提供机器指令和/或数据的任何信号。
用于执行指令的程序的适当处理器举例来说,包括通用和专用微处理器,以及单一处理器或任何类型的计算机的一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的元件可以包括用于执行指令的处理器和用于存储指令和数据的一个或多个存储器。通常,计算机还将包括或可操作地耦接来与用于存储数据文件的一个或多个大容量存储设备通信,这些设备包括磁盘,诸如内部硬盘和可移动盘、磁光盘和光盘。适合于有形地实现计算机程序指令和数据的存储设备包括所有形式的非易失性存储器,举例来说,包括半导体存储设备,诸如EPROM、EEPROM和闪存设备;磁盘,诸如内部硬盘或可移动盘;磁光盘;以及CD-ROM和DVD-ROM盘。处理器和存储器可以由ASICs(专用集成电路)补充或者或包含在专用逻辑电路中。
为了提供与用户的交互,在此所述的系统和技术能在计算机上实现,该计算机具有用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器)和用户能将输入提供给计算机的键盘以及指向设备(例如,鼠标或跟踪球)。其它类型的设备也能用来提供与用户的交互;例如,向用户提供的反馈能是任何形式的感官反馈(例如,视觉反馈、听觉反馈或触觉反馈);并且,能以任何形式,包括声音、语音或触觉输入,接收来自用户的输入。
在此所述的系统和技术能在计算机系统中实现,该计算机系统包括后端部件(例如,数据服务器),或者包括中间件部件(例如,应用服务器),或者包括前端部件(例如,具有用户能与在此所述的系统和技术的实现交互的图形用户界面或Web浏览器的客户端计算机),或者包括这种后端部件、中间件部件或前端部件的任何组合。系统的部件能由任何形式或媒介的数字数据通信(例如,通信网络)互连。通信网络的例子包括局域网(“LAN”)、广域网(“WAN”)和互联网。
计算系统能包括客户端和服务器。客户端和服务器通常相互远离并且通常通过通信网络交互。借助于在各个计算机上运行的且相互之间具有客户端-服务器关系的计算机程序,发生客户端和服务器的关联。
已经描述大量的实现方式。但是,将理解到可以在不背离本发明的精神和范围的情况下进行各种修改。例如,就消息传递和映射应用,已经描述了本公开内容的大部分内容,但也可以提出其他形式的图形应用,诸如交互式节目指南、网页导航和缩放以及其他这些应用。
此外,图中图示的逻辑流不要求所示的特定顺序,或按顺序来实现所需结果。此外,也可以提供其他步骤,或可以从所述的流程删除步骤,以及可以从所述的系统添加或删除其他部件。因此,其他实施例在下述权利要求的范围内。
Claims (32)
1.一种方法,包括:
接收第一数据以存储在第一不对称存储设备中,其中,不对称存储设备中读操作的延迟不同于写操作的延迟;
识别第一写入阶段作为当前写入阶段;
识别包括在所述第一不对称存储设备中的第一段作为可用于写入数据的下一段,其中,段包括不对称存储设备中的物理存储位置的逻辑映射并且与在单一操作中被擦除的物理存储位置的一部分有关;
把所述第一数据写入所述第一段,其中,所述第一数据被写入所述第一段中包括的下一可用于写入数据的第一存储块;
与把所述第一数据写入所述第一段中的下一可用存储块相关,存储与所述第一段和所述第一存储块有关的信息连同指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息;
接收第二数据以存储在所述不对称存储器中;
识别所述第一写入阶段已经完成并且所述第二写入阶段是当前写入阶段;
识别包括在所述第一不对称存储设备中的第二段作为可用于写入数据的下一段;
把所述第二数据写入所述第二段,其中,所述数据被写入所述第二段中包括的下一可用于写入数据的第二存储块;以及
与把所述第二数据写入所述第二段中的下一可用存储块相关,存储与所述第二段和所述第二存储块有关的信息连同指示所述第二段和所述第二存储块在所述第二写入阶段被写入的信息。
2.如权利要求1所述的方法,包括:
从同步镜像模块接收关于最近被填充数据的段的信息的请求;
响应所述请求,确定第一写入阶段和所述写入阶段的哪一个已经完成以及哪一个是当前写入阶段;
基于确定所述第一写入阶段已经完成而且所述第二写入阶段是当前写入阶段,检索所存储的与所述第一段和所述第一存储块有关的信息;以及
向所述同步镜像模块发送与所述第一段和所述第一存储块有关的信息连同指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息。
3.如权利要求2所述的方法,包括:
由所述同步镜像模块发送关于最近被填充数据的段的信息的第一查询;
响应所述第一查询,接收与所述第一段和所述第一存储块有关的信息;
向第二不对称存储设备发送与所述第一段和所述第一存储块有关的信息连同指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息,所述第二不对称存储设备被配置成与所述第一不对称存储设备类似地存储数据,并且通过网络连接被连接到所述第一不对称存储设备,其中,与所述第一段和所述第一存储块有关的信息被存储在所述第二不对称存储设备中,作为与被配置用于存储数据的存储位置不同的第一存储位置中的第一标记;
由所述同步镜像模块发送关于最近被填充数据的段的信息的第二查询,其中,在发送所述第一查询后,发送所述第二查询;
响应所述第一查询,接收与所述第二段和所述第二存储块有关的信息;以及
向所述第二不对称存储设备发送与所述第二段和所述第二存储块有关的信息连同指示所述第二段和所述第二存储块在所述第二写入阶段被写入的信息,其中,与所述第二段和所述第二存储块有关的信息被存储在所述第二不对称存储设备中,作为与被配置用于存储数据的存储位置不同的第二存储位置中的第二标记。
4.如权利要求3所述的方法,其中,发送所述第一查询或所述第二查询包括:
由所述同步镜像模块确定是否已经达到用于查询关于最近被填充数据的段的信息的阈值;以及
基于确定已经达到阈值,发送所述第一查询或所述第二查询。
5.如权利要求3所述的方法,其中,指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息连同所述第一标记一起存储在所述第二不对称存储设备中,以及指示所述第二段和所述第二存储块在所述第二写入阶段被写入的信息连同所述第二标记一起存储在所述第二不对称存储设备中。
6.如权利要求3所述的方法,其中,从由随机存取存储器(RAM)和非易失性不对称存储器组成的组,选择所述第一存储位置和第二存储位置。
7.如权利要求3所述的方法,包括:
在所述同步镜像模块处并且从所述第二不对称存储器,接收包括所述第一标记的副本的消息,所述消息指示所述第二不对称存储设备已经从故障恢复;
基于接收所述消息,发送关于最近被填充数据的段的信息的新查询;
响应所述新查询,接收与新段和新存储块有关的信息,其中,在所述第一写入阶段期间,写入所述新段;
把从所接收的第一标记的副本提取的与所述第一段和所述第一存储块有关的信息同与所述新段和所述新存储块有关的信息比较,当在所述第一写入阶段或所述第二写入阶段中写入数据时,执行所述比较;
基于所述比较,识别存储在所述第一不对称存储设备中但未存储在所述第二不对称存储设备中的数据;以及
把所识别的数据发送到所述第二不对称存储设备。
8.如权利要求7所述的方法,其中,从所述第二不对称存储设备接收的所述第一标记的副本包括指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息,以及
其中,发送所述新查询包括发送关于在所述第一写入阶段中最近被填充数据的段的信息的新查询。
9.如权利要求7所述的方法,其中,与写入所述第一段和所述第一存储块的数据相比,在较晚的时间把数据写入所述新段和所述新存储块,以及其中,识别存储在所述第一不对称存储设备中但未存储在所述第二不对称存储设备中的数据包括:
基于与所述第一段和所述第一存储块有关的信息同与所述新段和所述新存储块有关的信息的比较,识别自所述第一标记被发送到所述第二不对称存储设备以来并且在所述第二不对称存储设备接收所述第一标记的副本前,已经在所述第一不对称存储设备中写入的物理存储块;
使用与所述第一不对称存储设备有关的转换表,执行对应于所识别的物理存储块的所述第一不对称存储设备中的逻辑存储块的查找;
确定所述逻辑存储块是否保存有效数据;以及
基于所述逻辑存储块保存有效数据的确定,把所识别的物理存储块和相应的逻辑存储块发送到所述第二不对称存储设备。
10.如权利要求9所述的方法,其中,物理存储块包括写入页,其中,在不对称存储设备中,所述转换表提供段和写入页与逻辑存储块的映射。
11.如权利要求1所述的方法,其中,选择所述第一段和所述第二段中的一个或多个,用于在所述第一写入阶段和所述第二写入阶段中存储数据。
12.如权利要求1所述的方法,其中,与所述第一段和所述第一存储块有关的信息包括与所述第一段有关的第一序号和与所述第一段中的第一块有关的第二序号,其中,所述第二序号是从所述第一段中的初始块的偏移量。
13.如权利要求1所述的方法,其中,所述第一不对称存储设备和第二不对称存储设备的每一个包括基于闪存的系统。
14.一种系统,包括:
处理器;以及
存储所述处理器可执行的指令的非瞬态机器可读介质,所述指令被配置成当被执行时使所述处理器执行下述操作:
接收第一数据以存储在第一不对称存储设备中,其中,不对称存储设备中读操作的延迟不同于写操作的延迟;
识别第一写入阶段作为当前写入阶段;
识别包括在所述第一不对称存储设备中的第一段作为可用于写入数据的下一段,其中,段包括不对称存储设备中的物理存储位置的逻辑映射并且与在单一操作中被擦除的物理存储位置的一部分有关;
把所述第一数据写入所述第一段,其中,所述第一数据被写入所述第一段中包括的下一可用于写入数据的第一存储块;
与把所述第一数据写入所述第一段中的下一可用存储块相关,存储与所述第一段和所述第一存储块有关的信息连同指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息;
接收第二数据以存储在所述不对称存储器中;
识别所述第一写入阶段已经完成并且所述第二写入阶段是当前写入阶段;
识别包括在所述第一不对称存储设备中的第二段作为可用于写入数据的下一段;
把所述第二数据写入所述第二段,其中,所述数据被写入所述第二段中包括的下一可用于写入数据的第二存储块;以及
与把所述第二数据写入所述第二段中的下一可用存储块相关,存储与所述第二段和所述第二存储块有关的信息连同指示所述第二段和所述第二存储块在所述第二写入阶段被写入的信息。
15.如权利要求14所述的系统,包括被配置成使处理器执行包括下述的操作的指令:
从同步镜像模块接收关于最近被填充数据的段的信息的请求;
响应所述请求,确定第一写入阶段和所述写入阶段的哪一个已经完成以及哪一个是当前写入阶段;
基于确定所述第一写入阶段已经完成而且所述第二写入阶段是当前写入阶段,检索所存储的与所述第一段和所述第一存储块有关的信息;以及
向所述同步镜像模块发送与所述第一段和所述第一存储块有关的信息连同指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息。
16.如权利要求15所述的系统,包括被配置成使处理器执行包括下述的操作的指令:
由所述同步镜像模块发送关于最近被填充数据的段的信息的第一查询;
响应所述第一查询,接收与所述第一段和所述第一存储块有关的信息;
向第二不对称存储设备发送与所述第一段和所述第一存储块有关的信息连同指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息,所述第二不对称存储设备被配置成与所述第一不对称存储设备类似地存储数据,并且通过网络连接被连接到所述第一不对称存储设备,其中,与所述第一段和所述第一存储块有关的信息被存储在所述第二不对称存储设备中,作为与被配置用于存储数据的存储位置不同的第一存储位置中的第一标记;
由所述同步镜像模块发送关于最近被填充数据的段的信息的第二查询,其中,在发送所述第一查询后,发送所述第二查询;
响应所述第一查询,接收与所述第二段和所述第二存储块有关的信息;以及
向所述第二不对称存储设备发送与所述第二段和所述第二存储块有关的信息连同指示所述第二段和所述第二存储块在所述第二写入阶段被写入的信息,其中,与所述第二段和所述第二存储块有关的信息被存储在所述第二不对称存储设备中,作为与被配置用于存储数据的存储位置不同的第二存储位置中的第二标记。
17.如权利要求15所述的系统,其中,指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息连同所述第一标记一起存储在所述第二不对称存储设备中,以及指示所述第二段和所述第二存储块在所述第二写入阶段被写入的信息连同所述第二标记一起存储在所述第二不对称存储设备中。
18.如权利要求15所述的系统,被配置成使处理器执行包括下述的操作的指令:
在所述同步镜像模块处并且从所述第二不对称存储器,接收包括所述第一标记的副本的消息,所述消息指示所述第二不对称存储设备已经从故障恢复;
基于接收所述消息,发送关于最近被填充数据的段的信息的新查询;
响应所述新查询,接收与新段和新存储块有关的信息,其中,在所述第一写入阶段期间,写入所述新段;
把从所接收的第一标记的副本提取的与所述第一段和所述第一存储块有关的信息同与所述新段和所述新存储块有关的信息比较,当在所述第一写入阶段或所述第二写入阶段中写入数据时,执行所述比较;
基于所述比较,识别存储在所述第一不对称存储设备中但未存储在所述第二不对称存储设备中的数据;以及
把所识别的数据发送到所述第二不对称存储设备。
19.如权利要求18所述的系统,其中,从所述第二不对称存储设备接收的所述第一标记的副本包括指示所述第一段和所述第一存储块在所述第一写入阶段被写入的信息,以及
其中,被配置成使所述处理器执行包括发送所述新查询的操作的指令包括被配置成使所述处理器执行包括如下操作的指令:发送关于在所述第一写入阶段中最近被填充数据的段的信息的新查询。
20.如权利要求18所述的系统,其中,与写入所述第一段和所述第一存储块的数据相比,在较晚的时间,把数据写入所述新段和所述新存储块,以及其中,被配置成使处理器执行包括识别存储在所述第一不对称存储设备中但未存储在所述第二不对称存储设备中的数据的操作的指令包括被配置成使所述处理器执行包括下述的操作的指令:
基于与所述第一段和所述第一存储块有关的信息同与所述新段和所述新存储块有关的信息的比较,识别自所述第一标记被发送到所述第二不对称存储设备以来并且在从所述第二不对称存储设备接收所述第一标记的副本前,已经在所述第一不对称存储设备中写入的物理存储块;
使用与所述第一不对称存储设备有关的转换表,执行对应于所识别的物理存储块的所述第一不对称存储设备中的逻辑存储块的查找;
确定所述逻辑存储块是否保存有效数据;以及
基于所述逻辑存储块保存有效数据的确定,把所识别的物理存储块和相应的逻辑存储块发送到所述第二不对称存储设备。
21.如权利要求20所述的系统,其中,物理存储块包括写入页,其中,在不对称存储设备中,所述转换表提供段和写入页与逻辑存储块的映射。
22.如权利要求14所述的系统,其中,选择所述第一段和所述第二段中的一个或多个,用于在所述第一写入阶段和所述第二写入阶段中存储数据。
23.如权利要求14所述的系统,其中,与所述第一段和所述第一存储块有关的信息包括与所述第一段有关的第一序号和与所述第一段中的第一块有关的第二序号,其中,所述第二序号是从所述第一段中的初始块的偏移量。
24.一种方法,包括:
接收第一数据以存储在第一不对称存储设备中,其中,不对称存储设备中读操作的延迟不同于写操作的延迟;
识别包括在所述第一不对称存储设备中的第一段作为可用于写入数据的下一段,其中,所述第一段作为第一段组的一部分被写入,以及其中,段包括不对称存储设备中的物理存储位置的逻辑映射并且与在单一操作中被擦除的物理存储位置的一部分有关;
把所述第一数据写入所述第一段,其中,所述第一数据被写入所述第一段中包括的下一可用于写入数据的第一存储块;
与把所述第一数据写入所述第一段中的下一可用存储块相关,存储与所述第一段和所述第一存储块有关的信息;
接收第二数据以存储在所述不对称存储器中;
确定所述第一段被所述第一段中存储的数据充满;
基于所述第一段被充满的确定,选择所述第一不对称存储设备中的第二段组,其中,与所述第一段组交替地,把数据写入所述第二段组;
识别包括在所述第二段组中的第二段作为可用于写入数据的下一段;
把所述第二数据写入所述第二段,其中,所述数据被写入所述第二段中包括的下一可用于写入数据的第二存储块;以及
与把所述第二数据写入所述第二段中的下一可用存储块相关,存储与所述第二段和所述第二存储块有关的信息。
25.如权利要求24所述的方法,包括:
从同步镜像模块接收关于最近被填充数据的段的信息的请求;
响应所述请求,确定所述第一段和所述第二段中的哪一个最近被填充数据;
基于所述第一段最近被填充数据的确定,检索所存储的与所述第一段和所述第一存储块有关的信息;以及
把与所述第一段和所述第一存储块有关的信息发送到所述同步镜像模块。
26.如权利要求25所述的方法,包括:
由所述同步镜像模块把所述第一数据和所述第二数据发送到第二不对称存储设备,其中,所述第二不对称存储设备被配置成与所述第一不对称存储设备类似地存储数据,以及其中,通过网络连接,所述第一不对称存储设备和所述第二不对称存储设备被连接;
由所述同步镜像模块确定是否已经达到用于查询有关最近被填充数据的段的信息的阈值;以及
基于确定已经达到阈值,发送关于最近被填充数据的段的信息的请求;
响应所述请求,接收与所述第一段和所述第一存储块有关的信息;
把与所述第一段和所述第一存储块有关的信息发送到第二不对称存储设备。
27.如权利要求26所述的方法,其中,与所述第一段和所述第一存储块有关的信息被存储在所述第二不对称存储设备中,作为与被配置用于存储数据的存储位置不同的存储位置中的第一标记。
28.如权利要求26所述的方法,包括:
在所述同步镜像模块处并且从所述第二不对称存储器接收包括所述第一标记的副本的消息,所述消息指示所述第二不对称存储设备已经从故障恢复;
基于接收所述消息,发送关于最近被填充数据的段的信息的新请求;
响应所述新请求,接收与新段和新存储块有关的信息,其中,所述新段包括在所述第一段组中;
把从所接收的第一标记的副本提取的与所述第一段和所述第一存储块有关的信息同与所述新段和所述新存储块有关的信息比较,当把数据写入包括在所述第二段组中的段时,执行所述比较;
基于所述比较,识别存储在所述第一不对称存储设备的第一段组中但未存储在所述第二不对称存储设备中的数据;以及
把所识别的数据发送到所述第二不对称存储设备。
29.如权利要求28所述的方法,其中,与写入所述第一段和所述第一存储块的数据相比,在较晚的时间把数据写入所述新段和所述新存储块,以及其中,识别存储在所述第一不对称存储设备的第一段组中但未存储在所述第二不对称存储设备中的数据包括:
基于与所述第一段和所述第一存储块有关的信息同与所述新段和所述新存储块有关的信息的比较,识别自所述第一标记被发送到所述第二不对称存储设备以来并且在所述第二不对称存储设备接收所述第一标记的副本前,已经在所述第一不对称存储设备中写入的第一段组中包括的段中的存储块;
使用与所述第一不对称存储设备有关的转换表,执行对应于所识别的所述第一段组中的存储块的所述第一不对称存储设备中的物理存储块的查找;
确定所述物理存储位置是否保存有效数据;以及
从所述物理存储位置检索所述有效数据。
30.如权利要求29所述的方法,其中,存储块包括写入页,其中,在不对称存储设备中,所述转换表提供段和写入页与物理存储位置的映射。
31.如权利要求24所述的方法,其中,仅当包括在最近存储数据的第一段组中的段被充满时,才把数据存储在所述第二段组中包括的段中。
32.如权利要求24所述的方法,其中,与所述第一段和所述第一存储块有关的信息包括与所述第一段有关的第一序号和与所述第一段中的第一块有关的第二序号,其中,所述第二序号是从所述第一段中的初始块的偏移量。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/842,079 | 2013-03-15 | ||
US13/842,079 US9135164B2 (en) | 2013-03-15 | 2013-03-15 | Synchronous mirroring in non-volatile memory systems |
PCT/US2014/026773 WO2014151986A1 (en) | 2013-03-15 | 2014-03-13 | Synchronous mirroring in non-volatile memory systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105339907A true CN105339907A (zh) | 2016-02-17 |
CN105339907B CN105339907B (zh) | 2019-02-22 |
Family
ID=51533820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480022652.3A Active CN105339907B (zh) | 2013-03-15 | 2014-03-13 | 非易失性存储器系统中的同步镜像 |
Country Status (8)
Country | Link |
---|---|
US (2) | US9135164B2 (zh) |
EP (1) | EP2972889A4 (zh) |
JP (2) | JP6144819B2 (zh) |
KR (1) | KR101758544B1 (zh) |
CN (1) | CN105339907B (zh) |
AU (1) | AU2014236657B2 (zh) |
CA (1) | CA2905355C (zh) |
WO (1) | WO2014151986A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121663A (zh) * | 2016-11-29 | 2018-06-05 | 群联电子股份有限公司 | 数据存储方法、存储器存储装置及存储器控制电路单元 |
CN108986863A (zh) * | 2017-05-30 | 2018-12-11 | 希捷科技有限公司 | 具有可重写原地存储器的数据存储设备 |
CN109284202A (zh) * | 2017-07-19 | 2019-01-29 | 爱思开海力士有限公司 | 控制器及其操作方法 |
CN112328512A (zh) * | 2020-09-22 | 2021-02-05 | 北京计算机技术及应用研究所 | 一种应用于多控存储系统的缓存同步系统及方法 |
CN112466338A (zh) * | 2019-09-06 | 2021-03-09 | 株式会社东芝 | 磁盘装置以及伺服读取处理方法 |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9842660B1 (en) | 2012-12-28 | 2017-12-12 | Virident Systems, Llc | System and method to improve enterprise reliability through tracking I/O performance metrics in non-volatile random access memory |
US9286002B1 (en) | 2012-12-28 | 2016-03-15 | Virident Systems Inc. | Dynamic restriping in nonvolatile memory systems |
US10073626B2 (en) | 2013-03-15 | 2018-09-11 | Virident Systems, Llc | Managing the write performance of an asymmetric memory system |
US9135164B2 (en) | 2013-03-15 | 2015-09-15 | Virident Systems Inc. | Synchronous mirroring in non-volatile memory systems |
US9021188B1 (en) * | 2013-03-15 | 2015-04-28 | Virident Systems Inc. | Small block write operations in non-volatile memory systems |
CN103577338B (zh) * | 2013-11-14 | 2016-06-29 | 华为技术有限公司 | 一种回收垃圾数据的方法及存储设备 |
US20150205541A1 (en) * | 2014-01-20 | 2015-07-23 | Samya Systems, Inc. | High-capacity solid state disk drives |
US9715345B2 (en) * | 2014-04-25 | 2017-07-25 | Micron Technology, Inc. | Apparatuses and methods for memory management |
US10430472B2 (en) * | 2015-02-26 | 2019-10-01 | Cavium, Llc | Apparatus and method for collecting responses to a plurality of parallel lookup queries from a flow of packets at a network switch |
US9558344B2 (en) * | 2015-03-18 | 2017-01-31 | International Business Machines Corporation | Proximity based authentication for striped data |
US9658794B2 (en) * | 2015-05-08 | 2017-05-23 | Sonicwall Inc. | Two stage memory allocation using a cache |
KR102367982B1 (ko) | 2015-06-22 | 2022-02-25 | 삼성전자주식회사 | 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템 |
US10180885B2 (en) * | 2015-11-10 | 2019-01-15 | Netapp, Inc. | Prioritized data recovery from an object storage service and concurrent data backup |
CN108701071B (zh) * | 2015-12-16 | 2021-11-16 | 起元技术有限责任公司 | 高吞吐量、高可靠性的数据处理系统 |
KR102105478B1 (ko) | 2015-12-16 | 2020-04-28 | 아브 이니티오 테크놀로지 엘엘시 | 고 쓰루풋, 고 신뢰성의 데이터 처리 시스템 |
US10185658B2 (en) | 2016-02-23 | 2019-01-22 | Sandisk Technologies Llc | Efficient implementation of optimized host-based garbage collection strategies using xcopy and multiple logical stripes |
US10289340B2 (en) * | 2016-02-23 | 2019-05-14 | Sandisk Technologies Llc | Coalescing metadata and data writes via write serialization with device-level address remapping |
KR102593362B1 (ko) * | 2016-04-27 | 2023-10-25 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
KR20180062246A (ko) * | 2016-11-30 | 2018-06-08 | 삼성전자주식회사 | 재분배기를 포함하는 메모리 시스템 |
US9747158B1 (en) * | 2017-01-13 | 2017-08-29 | Pure Storage, Inc. | Intelligent refresh of 3D NAND |
KR102479483B1 (ko) * | 2017-10-19 | 2022-12-21 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 이의 동작 방법 |
CN108415512B (zh) * | 2018-03-06 | 2020-05-19 | 三星半导体(中国)研究开发有限公司 | 具有近场通信功能的可穿戴设备以及近场通信控制系统 |
CN110096237B (zh) * | 2019-04-30 | 2022-02-08 | 北京百度网讯科技有限公司 | 副本处理方法及节点、存储系统、服务器、可读介质 |
US11615029B2 (en) * | 2019-12-30 | 2023-03-28 | Micron Technology, Inc. | Full multi-plane operation enablement |
KR20210131058A (ko) * | 2020-04-23 | 2021-11-02 | 에스케이하이닉스 주식회사 | 메모리 시스템 내 데이터를 보호하는 장치 및 방법 |
US11593309B2 (en) * | 2020-11-05 | 2023-02-28 | International Business Machines Corporation | Reliable delivery of event notifications from a distributed file system |
US20210191811A1 (en) * | 2020-12-23 | 2021-06-24 | Intel Corporation | Memory striping approach that interleaves sub protected data words |
US20230376228A1 (en) * | 2022-05-17 | 2023-11-23 | Micron Technology, Inc. | Techniques for sequential access operations |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050022051A1 (en) * | 2002-09-18 | 2005-01-27 | Netezza Corporation | Disk mirror architecture for database appliance with locally balanced regeneration |
CN100573476C (zh) * | 2005-09-25 | 2009-12-23 | 深圳市朗科科技股份有限公司 | 闪存介质数据管理方法 |
US7930513B2 (en) * | 2006-11-04 | 2011-04-19 | Virident Systems Inc. | Writing to asymmetric memory |
US20120198138A1 (en) * | 2007-10-19 | 2012-08-02 | Virident Systems Inc. | Managing Memory Systems Containing Components with Asymmetric Characteristics |
US20130019057A1 (en) * | 2011-07-15 | 2013-01-17 | Violin Memory, Inc. | Flash disk array and controller |
Family Cites Families (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3363240A (en) * | 1964-06-22 | 1968-01-09 | Burroughs Corp | Solid state electron emissive memory and display apparatus and method |
US5276835A (en) | 1990-12-14 | 1994-01-04 | International Business Machines Corporation | Non-blocking serialization for caching data in a shared cache |
US5734861A (en) | 1995-12-12 | 1998-03-31 | International Business Machines Corporation | Log-structured disk array with garbage collection regrouping of tracks to preserve seek affinity |
US5787466A (en) | 1996-05-01 | 1998-07-28 | Sun Microsystems, Inc. | Multi-tier cache and method for implementing such a system |
US6018779A (en) | 1997-12-15 | 2000-01-25 | Emc Corporation | System for encapsulating a plurality of selected commands within a single command and transmitting the single command to a remote device over a communication link therewith |
WO2001097030A1 (en) * | 2000-06-05 | 2001-12-20 | Miralink Corporation | Flexible remote data mirroring |
US6895490B1 (en) | 2001-04-09 | 2005-05-17 | Matrix Semiconductor, Inc. | Method for making a write-once memory device read compatible with a write-many file system |
US6785169B1 (en) * | 2002-04-05 | 2004-08-31 | T-Ram, Inc. | Memory cell error recovery |
US6940777B2 (en) * | 2002-10-31 | 2005-09-06 | Renesas Technology Corp. | Semiconductor device and semiconductor memory device provided with internal current setting adjustment circuit |
US7158402B2 (en) * | 2003-08-06 | 2007-01-02 | Texas Instruments Incorporated | Asymmetric static random access memory device having reduced bit line leakage |
JP2005115562A (ja) * | 2003-10-06 | 2005-04-28 | Media Logic:Kk | フラッシュrom制御装置 |
US7139864B2 (en) | 2003-12-30 | 2006-11-21 | Sandisk Corporation | Non-volatile memory and method with block management system |
JP4582297B2 (ja) | 2004-06-25 | 2010-11-17 | 日本電気株式会社 | レプリケーションシステム、装置、方法、およびプログラム |
JP2006107151A (ja) | 2004-10-06 | 2006-04-20 | Hitachi Ltd | ストレージシステム及びストレージシステムの通信パス制御方法 |
US7613870B2 (en) | 2004-11-18 | 2009-11-03 | International Business Machines Corporation | Efficient memory usage in systems including volatile and high-density memories |
US7363421B2 (en) | 2005-01-13 | 2008-04-22 | Stmicroelectronics S.R.L. | Optimizing write/erase operations in memory devices |
US8452929B2 (en) | 2005-04-21 | 2013-05-28 | Violin Memory Inc. | Method and system for storage of data in non-volatile media |
JP2006338370A (ja) * | 2005-06-02 | 2006-12-14 | Toshiba Corp | メモリシステム |
US7370143B1 (en) | 2005-06-20 | 2008-05-06 | Network Appliance, Inc. | Controlling write request access to a non-volatile log |
US8060718B2 (en) | 2006-06-20 | 2011-11-15 | International Business Machines | Updating a memory to maintain even wear |
JP2008015769A (ja) * | 2006-07-05 | 2008-01-24 | Hitachi Ltd | ストレージシステム及び書き込み分散方法 |
US8489817B2 (en) | 2007-12-06 | 2013-07-16 | Fusion-Io, Inc. | Apparatus, system, and method for caching data |
WO2008105098A1 (ja) * | 2007-02-28 | 2008-09-04 | Fujitsu Limited | メモリミラー化制御方法 |
WO2009079478A1 (en) * | 2007-12-14 | 2009-06-25 | Virident Systems, Inc. | Distributing metadata across multiple different disruption regions within an asymmetric memory system |
US7978516B2 (en) | 2007-12-27 | 2011-07-12 | Pliant Technology, Inc. | Flash memory controller having reduced pinout |
US7971093B1 (en) | 2008-01-16 | 2011-06-28 | Network Appliance, Inc. | Apparatus and method to proactively address hard disk drive inefficiency and failure |
US8275945B2 (en) | 2008-02-05 | 2012-09-25 | Spansion Llc | Mitigation of flash memory latency and bandwidth limitations via a write activity log and buffer |
TW200935422A (en) | 2008-02-05 | 2009-08-16 | Phison Electronics Corp | Flash memory data writing method and controller thereof |
US8762661B2 (en) | 2008-09-18 | 2014-06-24 | Seagate Technology Llc | System and method of managing metadata |
JP2010092200A (ja) * | 2008-10-07 | 2010-04-22 | Tdk Corp | メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法 |
US8266408B2 (en) * | 2009-03-17 | 2012-09-11 | Memoir Systems, Inc. | System and method for storing data in a virtualized high speed memory system |
US8566508B2 (en) | 2009-04-08 | 2013-10-22 | Google Inc. | RAID configuration in a flash memory data storage device |
US8688896B2 (en) | 2009-05-21 | 2014-04-01 | Panasonic Corporation | High speed writing mode in memory controller, nonvolatile storage device, accessing device, nonvolatile storage system, and method and program for writing data |
KR101638061B1 (ko) | 2009-10-27 | 2016-07-08 | 삼성전자주식회사 | 플래시 메모리 시스템 및 그것의 플래시 조각 모음 방법 |
TWI421870B (zh) | 2009-10-30 | 2014-01-01 | Phison Electronics Corp | 用於快閃記憶體的資料寫入方法及其控制器與儲存系統 |
US8285918B2 (en) | 2009-12-11 | 2012-10-09 | Nimble Storage, Inc. | Flash memory cache for data storage device |
US8621145B1 (en) | 2010-01-29 | 2013-12-31 | Netapp, Inc. | Concurrent content management and wear optimization for a non-volatile solid-state cache |
US8239617B1 (en) | 2010-02-12 | 2012-08-07 | Emc Corporation | Enterprise data storage system using multi-level cell flash memory |
US8650446B2 (en) | 2010-03-24 | 2014-02-11 | Apple Inc. | Management of a non-volatile memory based on test quality |
US8499227B2 (en) | 2010-09-23 | 2013-07-30 | Micron Technology, Inc. | Memory quality monitor based compensation method and apparatus |
JP5752267B2 (ja) | 2011-01-11 | 2015-07-22 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー.Hewlett‐Packard Development Company, L.P. | 同時要求スケジューリング |
US9213594B2 (en) | 2011-01-19 | 2015-12-15 | Intelligent Intellectual Property Holdings 2 Llc | Apparatus, system, and method for managing out-of-service conditions |
US8957458B2 (en) * | 2011-03-24 | 2015-02-17 | Zeno Semiconductor, Inc. | Asymmetric semiconductor memory device having electrically floating body transistor |
US8583868B2 (en) | 2011-08-29 | 2013-11-12 | International Business Machines | Storage system cache using flash memory with direct block access |
US8627021B2 (en) | 2011-08-31 | 2014-01-07 | Qualcomm Incorporated | Method and apparatus for load-based prefetch access |
US8874828B2 (en) | 2012-05-02 | 2014-10-28 | Apple Inc. | Systems and methods for providing early hinting to nonvolatile memory charge pumps |
WO2014015409A1 (en) | 2012-07-24 | 2014-01-30 | Institute Of Computer Science Of The Foundation For Research And Technology - Hellas (Ics-Forth) | System and method for implementing ssd-based i/o caches |
US20140068182A1 (en) | 2012-09-04 | 2014-03-06 | Drobo, Inc. | Storage Virtualization In A Block-Level Storage System |
US9280497B2 (en) | 2012-12-21 | 2016-03-08 | Dell Products Lp | Systems and methods for support of non-volatile memory on a DDR memory channel |
US9135164B2 (en) | 2013-03-15 | 2015-09-15 | Virident Systems Inc. | Synchronous mirroring in non-volatile memory systems |
US9122588B1 (en) | 2013-03-15 | 2015-09-01 | Virident Systems Inc. | Managing asymmetric memory system as a cache device |
US10073626B2 (en) | 2013-03-15 | 2018-09-11 | Virident Systems, Llc | Managing the write performance of an asymmetric memory system |
-
2013
- 2013-03-15 US US13/842,079 patent/US9135164B2/en not_active Expired - Fee Related
-
2014
- 2014-03-13 KR KR1020157029461A patent/KR101758544B1/ko active IP Right Grant
- 2014-03-13 EP EP14768560.6A patent/EP2972889A4/en not_active Withdrawn
- 2014-03-13 WO PCT/US2014/026773 patent/WO2014151986A1/en active Application Filing
- 2014-03-13 CN CN201480022652.3A patent/CN105339907B/zh active Active
- 2014-03-13 JP JP2016502240A patent/JP6144819B2/ja active Active
- 2014-03-13 CA CA2905355A patent/CA2905355C/en active Active
- 2014-03-13 AU AU2014236657A patent/AU2014236657B2/en active Active
-
2015
- 2015-09-11 US US14/851,120 patent/US9734027B2/en active Active
-
2017
- 2017-02-08 JP JP2017021554A patent/JP6294518B2/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050022051A1 (en) * | 2002-09-18 | 2005-01-27 | Netezza Corporation | Disk mirror architecture for database appliance with locally balanced regeneration |
CN100573476C (zh) * | 2005-09-25 | 2009-12-23 | 深圳市朗科科技股份有限公司 | 闪存介质数据管理方法 |
US7930513B2 (en) * | 2006-11-04 | 2011-04-19 | Virident Systems Inc. | Writing to asymmetric memory |
US20120198138A1 (en) * | 2007-10-19 | 2012-08-02 | Virident Systems Inc. | Managing Memory Systems Containing Components with Asymmetric Characteristics |
US20130019057A1 (en) * | 2011-07-15 | 2013-01-17 | Violin Memory, Inc. | Flash disk array and controller |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121663A (zh) * | 2016-11-29 | 2018-06-05 | 群联电子股份有限公司 | 数据存储方法、存储器存储装置及存储器控制电路单元 |
CN108986863A (zh) * | 2017-05-30 | 2018-12-11 | 希捷科技有限公司 | 具有可重写原地存储器的数据存储设备 |
CN109284202A (zh) * | 2017-07-19 | 2019-01-29 | 爱思开海力士有限公司 | 控制器及其操作方法 |
CN112466338A (zh) * | 2019-09-06 | 2021-03-09 | 株式会社东芝 | 磁盘装置以及伺服读取处理方法 |
CN112466338B (zh) * | 2019-09-06 | 2022-01-28 | 株式会社东芝 | 磁盘装置以及伺服读取处理方法 |
CN112328512A (zh) * | 2020-09-22 | 2021-02-05 | 北京计算机技术及应用研究所 | 一种应用于多控存储系统的缓存同步系统及方法 |
CN112328512B (zh) * | 2020-09-22 | 2023-07-28 | 北京计算机技术及应用研究所 | 一种应用于多控存储系统的缓存同步系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2972889A1 (en) | 2016-01-20 |
KR101758544B1 (ko) | 2017-07-14 |
JP6294518B2 (ja) | 2018-03-14 |
KR20160003657A (ko) | 2016-01-11 |
US9135164B2 (en) | 2015-09-15 |
CA2905355A1 (en) | 2014-09-25 |
CN105339907B (zh) | 2019-02-22 |
CA2905355C (en) | 2018-02-27 |
AU2014236657A1 (en) | 2015-10-08 |
US20160004612A1 (en) | 2016-01-07 |
JP2016512365A (ja) | 2016-04-25 |
US20140281138A1 (en) | 2014-09-18 |
JP6144819B2 (ja) | 2017-06-07 |
EP2972889A4 (en) | 2016-11-30 |
AU2014236657B2 (en) | 2017-11-02 |
US9734027B2 (en) | 2017-08-15 |
JP2017102964A (ja) | 2017-06-08 |
WO2014151986A1 (en) | 2014-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105339907A (zh) | 非易失性存储器系统中的同步镜像 | |
US11960777B2 (en) | Utilizing multiple redundancy schemes within a unified storage element | |
US10789020B2 (en) | Recovering data within a unified storage element | |
US11481121B2 (en) | Physical media aware spacially coupled journaling and replay | |
US20180088857A1 (en) | Method and system for managing storage system | |
US11907410B2 (en) | Method and device for managing storage system | |
CN105009085A (zh) | 信息处理系统、控制程序以及信息处理设备 | |
US8275959B2 (en) | Failover control of dual controllers in a redundant data storage system | |
US10489289B1 (en) | Physical media aware spacially coupled journaling and trim | |
CN103617097B (zh) | 文件恢复方法及装置 | |
US11507283B1 (en) | Enabling host computer systems to access logical volumes by dynamic updates to data structure rules | |
CN113377569A (zh) | 用于恢复数据的方法、设备和计算机程序产品 | |
US6976146B1 (en) | System and method for emulating block appended checksums on storage devices by sector stealing | |
US20230229363A1 (en) | Tiering Valid Data after a Disaster Recovery Operation | |
US11163642B2 (en) | Methods, devices and computer readable medium for managing a redundant array of independent disks | |
US20200363958A1 (en) | Efficient recovery of resilient spaces | |
CN113168288A (zh) | 在由主机管理的闪存转换层中报告和处置闪存编程失败的系统和方法 | |
CN103098034A (zh) | 用于条件和原子存储操作的装置、系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: American California Applicant after: Varey Dent Systems Co., Ltd. Address before: American California Applicant before: VIRIDENT SYSTEMS INC |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200730 Address after: California, USA Patentee after: Western Digital Technologies, Inc. Address before: California, USA Patentee before: VIRIDENT SYSTEMS Inc. |
|
TR01 | Transfer of patent right |