CN103262054B - 用于自动提交存储器的装置、系统和方法 - Google Patents

用于自动提交存储器的装置、系统和方法 Download PDF

Info

Publication number
CN103262054B
CN103262054B CN201180059862.6A CN201180059862A CN103262054B CN 103262054 B CN103262054 B CN 103262054B CN 201180059862 A CN201180059862 A CN 201180059862A CN 103262054 B CN103262054 B CN 103262054B
Authority
CN
China
Prior art keywords
data
memory
buffer zone
write
module
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.)
Active
Application number
CN201180059862.6A
Other languages
English (en)
Other versions
CN103262054A (zh
Inventor
大卫·弗林
大卫·内兰斯
约翰·斯特拉瑟
詹姆斯·G·彼得森
罗伯特·威普弗尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Technologies LLC
Original Assignee
SanDisk Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SanDisk Corp filed Critical SanDisk Corp
Publication of CN103262054A publication Critical patent/CN103262054A/zh
Application granted granted Critical
Publication of CN103262054B publication Critical patent/CN103262054B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/30Means for acting in the event of power-supply failure or interruption, e.g. power-supply fluctuations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1441Resetting or repowering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error 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/2015Redundant power supplies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3034Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a storage system, e.g. DASD based or network based
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3058Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data

Abstract

本发明提供了一种自动提交存储器,所述自动提交存储器能够实施预配置的被触发提交动作来响应故障条件,例如电力丧失、无效关机、故障等。计算设备可使用存储器访问语义(使用存储器映射机制等)访问所述自动提交存储器,从而绕过了虚拟存储器操作中通常所需的系统调用。由于所述自动提交存储器被预配置为在故障情况下提交其上存储的数据,因此所述自动提交存储器的用户可以将这些存储器语义操作视为即时提交。由于从写入-提交路径中取出了提交数据的操作,因此可以显著提高受限于写入-提交的应用的性能。

Description

用于自动提交存储器的装置、系统和方法
技术领域
本发明涉及自动提交存储器,更具体地讲,涉及使自动提交存储器暴露于应用程序和/或操作系统。
背景技术
性能基于写入-提交延迟的应用通常试图通过利用虚拟存储器系统(例如,使用存储器备份的文件)来缩短这一延迟。写入-提交延迟可以包括相对快速的存储器语义写入,后跟有速度慢很多的操作来将数据提交至持久性存储器。写入提交延迟可以包括多个因素,所述因素包括对持久性存储器的访问时间、系统调用开销(例如,RAM地址之间的转换、备份存储LBA等)等。
发明内容
呈现用于在计算设备的易失性存储器地址空间中即时提交存储器语义操作的方法。该方法可以包括:将主机的存储器地址范围映射到包括存储控制器的非易失性存储设备的隔离区域中的易失性自动提交缓冲区,所述存储控制器被配置为独立于主机计算设备将所述自动提交缓冲区的数据存储在所述非易失性存储设备的非易失性存储介质上。该方法还可以包括:装备所述自动提交缓冲区以响应于触发事件而与逻辑标识符相关联地将数据存储在所述非易失性存储介质上,所述逻辑标识符与所述自动提交缓冲区的用户相关联。该方法还可以包括:在被映射的存储器地址范围中为来自所述用户的存储器操作提供服务。
呈现用于在计算设备的易失性存储器地址空间中即时提交存储器语义操作的装置。在一个实例中,隔离区域包括:映射到主机的存储器地址范围的易失性自动提交缓冲区。隔离区域可以包括:提交模块,所述提交模块被配置为响应于触发事件,将所述易失性自动提交缓冲区的数据连同与所述自动提交缓冲区的用户相关联的逻辑标识符一起存储到非易失性存储设备的非易失性存储介质。隔离区域还可以包括:备用电源,所述备用电源被配置为独立于所述主机向所述易失性自动提交缓冲区、提交模块和非易失性存储设备提供电力。
呈现用于在计算设备的易失性存储器地址空间中即时提交存储器语义操作的系统。在一个实例中,自动提交存储器包括:映射到主机的存储器地址范围的易失性自动提交缓冲区。自动提交存储器可以包括:非易失性存储设备,所述非易失性存储设备包括非易失性存储介质。自动提交存储器还可以包括:提交模块,所述提交模块被配置为响应于触发事件,将所述易失性自动提交缓冲区的数据连同与所述自动提交缓冲区的用户相关联的逻辑标识符一起存储到非易失性存储设备的非易失性存储介质。备用电源可以被配置独立于所述主机为向所述易失性自动提交缓冲区、提交模块和非易失性存储设备提供电力。
附图说明
为了更容易地理解本发明的优点,将通过参考附图中示出的具体实施例来呈现对上文简要描述的本发明的更具体描述。应当了解到这些附图仅描述本发明的典型实施例,因此不应当被认为对其范围进行限制,将通过使用附图以附加的特定性和详尽对本发明进行描述和说明,其中:
图1为一示意性框图,示出了包括具有电源管理装置的存储设备的系统的一个实施例,所述电源管理装置使得能够在出现意外电源故障时实现改进的数据处理;
图2为一示意性框图,示出了数据存储设备的固态存储设备控制器的一个实施例;
图3为一示意性框图,示出了数据存储设备中具有写入数据流水线和读取数据流水线的固态存储控制器的一个实施例;
图4为一示意性框图,示出了固态存储控制器中的存储体交错控制器的一个实施例;
图5A为一示意性框图,示出了电源管理装置的一个实施例;
图5B为与数据损坏相关的时间线的一个例子;
图6为一示意性框图,示出了电源管理装置和电源管理装置与之相互作用的非易失性存储器的一个实施例;
图7为一示意性框图,示出了写入数据流水线的一个实施例;
图8为一示意性流程图,示出了在出现意外电源故障时实现改进的数据处理的方法的一个实施例;
图9为一示意性流程图,示出了在出现意外电源故障时实现改进的数据处理的方法的另一个实施例;
图10为自动提交存储器的一个实施例的框图;
图11为自动提交存储器的另一个实施例的框图;
图12为一种包括多个自动提交存储器的系统的框图;
图13为利用提交管理装置实施的一种自动提交存储器的框图;
图14为具有写入数据流水线的自动提交存储器的另一个实施例的框图;
图15为包括自动提交存储器的系统的另一个实施例的框图;
图16为用于提供自动提交存储器的方法的一个实施例的流程图;
图17为用于提供自动提交存储器的方法的另一个实施例的流程图;和
图18为用于提供自动提交存储器的方法的另一个实施例的流程图。
具体实施方式
本说明书范围内对特征、优点或类似语言的提及并不意味着本发明可实现的所有特征和优点出现在或应出现在本发明的任何单一实施例中。相反,涉及特征和优点的语言被理解为表示结合实施例所述的特定特征、优点或特性包括在本发明的至少一个实施例中。因此,本说明书范围内对特征和优点的讨论以及类似语言可以但并不一定是指相同实施例。
此外,本发明的所述特征、优点和特性可采用任何合适的方式结合在一个或多个实施例中。相关领域中技术熟练的人员将认识到,可在没有具体实施例的特定特征或优点中一个或多个的情况下实施本发明。在其他情况下,在某些实施例中可识别可能不存在于本发明所有实施例中的额外特征和优点。通过下列描述和附属权利要求,本发明的这些特征和优点将变得更加显而易见,或者可通过下文中示出的本发明实践来了解。
本说明书中所述的功能单元中的多个已被标记为模块,以便更具体地强调其实施非依赖性。例如,模块可被实现为硬件电路(包括自定义VLSI电路或门阵列)、半导体成品(例如逻辑芯片)、晶体管或其他离散组件。模块也可在可编程硬件设备中实施,例如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等。
模块也可在用于由各种类型处理器执行的软件中实施。可执行代码的标识出的一个模块例如可包括计算机指令的一个或多个物理块或逻辑块,其可例如被组织为对象、过程或功能。然而,标识出的一个模块的可执行文件无需物理地定位在一起,而是可包括存储在不同位置的分散指令,所述指令在逻辑地接合在一起时包含该模块并且实现该模块的所述用途。
实际上,可执行代码的模块可为单一指令,也可为多个指令,并且甚至可分布在若干不同代码段上、不同程序中以及若干存储器设备上。相似地,操作数据在本文中可以在模块内被标识并示出,并且可采用任何合适的形式体现并在任何合适类型的数据结构内组织。操作数据可作为单一数据集进行收集,或可在不同位置上(包括在不同存储设备上)分布,并且可至少部分地仅仅作为系统或网路上的电子信号而存在。如果模块或模块部分以软件实现,则软件部分被储存在一个或多个计算机可读介质上。
本说明书范围内对“一个实施例”、“某个实施例”或类似语言的提及表示结合该实施例所述的特定特征、结构或特性被包括在本发明的至少一个实施例中。因此,本说明书范围内出现的短语“在一个实施例中”、“在某个实施例中”和类似语言可以但并不一定全部意指同一实施例。
所述的计算机可读介质可采用能够在数字处理装置上储存机器可读指令的任何形式。可通过光盘、数字视盘(DVD)、磁带、伯努利驱动器、磁盘、穿孔卡、闪存、集成电路或其他数字处理装置存储器设备来实现计算机可读介质。
此外,本发明的所述功能、结构或特性可采用任何合适的形式结合在一个或多个实施例中。在以下描述中,提供了许多特定细节,例如编程、软件模块、用户选择、网络交易、数据库查询、数据库结构、硬件模块、硬件电路、硬件芯片等的示例,以提供对本发明实施例的透彻理解。然而,相关领域中技术熟练的人员将认识到,可在不具有这些特定细节中一项或多项的情况下实践本发明,或者可以用其他方法、组件、材料等等实践本发明。在其他情况下,未示出或详细描述公知的结构、材料或操作以避免使本发明的各方面晦涩难懂。
本文包括的示意性流程图被一般性地示出为逻辑流程图。照这样,所描述的顺序和所标记的步骤表征所提出的方法的一个实施例。可以想到在功能、逻辑或效果方面与图示方法的一个或多个步骤或者其部分等同的其他步骤和方法。另外,提供所利用的格式和符号是为了解释方法的逻辑步骤,它们不应被理解为限制方法的范围。尽管在流程图中可能利用了各种箭头类型和线条类型,但不应将它们理解为限制对应方法的范围。实际上,一些箭头或其他连接器可用于仅指示方法的逻辑流。例如,箭头可指示所描述方法的所枚举的各步骤之间的未指定持续时间的等待或监控期。另外,一特定方法进行的顺序可严格遵守所示对应步骤的顺序,也可不严格遵守该顺序。
电力降低管理
图1描述了在出现电源故障、电力降低或其他电力丧失时实现改进的数据管理的系统100的一个实施例。在所描述的实施例中,系统100包括主机计算设备114和存储设备102。主机114可为计算机,例如服务器、笔记本电脑、台式机或本领域已知的其他计算设备。主机114通常包括组件,例如存储器、处理器、总线和本领域中技术人员已知的其他组件。
主机114将数据存储在存储设备102中并且通过通信连接(未示出)与存储设备102进行数据通信。存储设备102可位于主机114内部也可位于主机114外部。通信连接可为总线、网络或允许在主机114和存储设备102之间传输数据的其他连接方式。在一个实施例中,存储设备102通过PCI连接(例如PCIexpress(“PCI-e”))连接到主机114。存储设备102可为插入到主机114上PCI-e连接内的卡。
存储设备102还具有将存储设备102与主电源连接的主电源连接130,所述主电源为存储设备102提供执行数据存储操作(例如读取、写入、擦除等)所需的电力。在正常工作条件下,存储设备102经过主电源连接130从主电源接收必要的电力。在某些实施例(例如图1中示出的实施例)中,主电源连接130将存储设备102连接到主机114,并且主机114用作为存储设备102供电的主电源。在某些实施例中,上述主电源连接130和通信连接为主机114和存储设备102之间同一物理连接的一部分。例如,存储设备102可通过PCI连接接收电力。
在其他实施例中,存储设备102可通过主电源连接130连接到外部电源。例如,主电源连接130可将存储设备102与作为功率转换器(通常被称为变压器)的主电源连接在一起。本领域中的技术人员将会知道,存储设备102可用于接收电力的方式有多种,并且有多种设备可充当存储设备102的主电源。
存储设备102为主机114提供非易失性存储。图1示出了存储设备102,包括写入数据流水线(pipeline)106、读取数据流水线108、非易失性存储器110、存储控制器104、电源管理装置122和备用电源124。存储设备102可包含其他组件,为了提供更为简单的存储设备102视图而未示出这些组件。
非易失性存储器110对数据进行存储,使得数据即使当存储设备102未接通电源时也能保留。非易失性存储器110的例子包括固态存储器(例如闪存)、硬盘、磁带或其他。存储设备102还包括存储控制器104,其对数据在非易失性存储器110中的存储和检索进行协调。存储控制器104可使用一个或多个索引来定位和检索数据,并且对存储在存储设备102中的数据执行其他操作。例如,存储控制器104可包括用于执行数据梳理操作(例如垃圾收集)的梳理器。
如图所示,在某些实施例中,存储设备102实施写入数据流水线106和读取数据流水线108,下文参照图3对其例子进行更详细描述。写入数据流水线106可在数据被从主机114传输到非易失性存储器110内时对数据执行某些操作。这些操作可包括例如纠错码(ECC)生成、加密、压缩和其他。读取数据流水线108可对正从非易失性存储器110读出并发送到主机114的数据执行类似的和可能相反的操作。
存储设备102还包括备用电源124,该备用电源在发生完全或部分电力中断而导致存储设备102无法经过主电源连接130接收到足够电力时提供电力。电力中断为意外导致存储设备102停止经过主电源连接130接收电力或导致存储设备102经过主电源连接130接收的电力显著降低的任何事件。在一个实施例中,电力的显著降低包括电力降到预定阈值之下。在另一个实施例中,预定阈值被选择为允许来自主电源连接130的电力水平正常波动。例如,输送到主机114和存储设备102可能出现停机的建筑物的电力。用户操作(例如不正确地关闭向存储设备102供电的主机114)、主电源连接130中的故障或主电源中的故障可能导致存储设备102停止接收电力。许多各种各样的电力中断可能导致存储设备102出现意外电力丧失。
备用电源124可包括一个或多个电池、一个或多个电容器、电容器组、通向电源的单独连接等。在一个实施例中,在来自主电源连接130的电力出现电力中断或其他降低期间,备用电源124向存储设备102提供电力至少持续电力保持时间那么久。在另一个实施例中,备用电源124提供的电力保持时间长到足以使得存储设备102能将不在非易失性存储器110中的数据转入非易失性存储器110内。因此,存储设备102能在电力缺乏导致存储设备102停止工作之前保留未永久性存储在存储设备102中的数据。在某些具体实施中,备用电源124可包括能够提供预定电力保持时间的尽可能小电容器,以节约空间、降低成本并简化存储设备102。在一个实施例中,使用一个或多个电容器组来实施备用电源124,因为与用于提供备用电源的其他可选方案相比,电容器一般更为可靠,需要更少维护,并且具有更长寿命。
在一个实施例中,备用电源124为在来自主电源连接130的电力出现部分或完全丧失时自动向存储设备102提供电力的电路的一部分。相似地,可将系统100配置为在部分或完全电力丧失期间自动从备用电源124接受或接收电力。例如,在一个实施例中,备用电源124可与主电源连接130并行地电连接到存储设备102,以使得主电源连接130在正常工作期间为备用电源124充电,并且备用电源124响应于电力丧失而自动向存储设备102提供电力。在一个实施例中,系统100还包括在备用电源124和主电源连接130之间的二极管或其他反向电流保护,以防止备用电源124的电流到达主电源连接130。在另一个实施例中,电源管理装置122可响应于主电源来源130的电力降低而使用开关等来启用备用电源124或者将备用电源124连接到存储设备102。
尚未处于非易失性存储器110中的数据的例子可包括当数据移动通过写入数据流水线106时可保持在易失性存储器中的数据。如果在掉电期间丢失写入数据流水线106中的数据(即没有被写入非易失性存储器110中或以其他方式永久性存储),可能发生损坏和数据丢失。
在某些实施例中,在存储设备102接收到要存储在非易失性存储器110中的数据之后的某一时刻,存储设备102向主机114发送确认。写入数据流水线106或其子组件可生成该确认。有利的是,存储设备102在接收到数据之后尽快发送确认。
在某些实施例中,写入数据流水线106在数据被实际存储在非易失性存储器110中之前发送确认。例如,写入数据流水线106可在数据仍在通过写入数据流水线106至非易失性存储器110的途中时发送确认。在这样的实施例中,非常期望在备用电源124丢失足够电力之前,存储设备102将存储控制器104已针对其发送了确认的所有数据转入非易失性存储器110,以防止数据损坏并且保持所发送确认的完整性。
此外,在某些实施例中,由于电力中断,可能损坏写入数据流水线106内的一些数据。电力中断可包括电源故障以及所供应的电力水平的意外变化。电力水平的意外变化可能将位于存储设备102中但尚未处于非易失性存储器110中的数据置于风险中。甚至可能在电源管理装置122知道(或被通知)发生了电力中断之前就开始出现数据损坏。
例如,PCI-e规范指出,如果发信号通知电力中断,则应当假定数据在某些情况下已损坏并且未进行存储。对于使用其他连接类型连接到主机114的存储设备102,可能发生类似的可能损坏,所述其他连接类型例如为PCI、串行高级技术附件(“串行ATA”或“SATA”)、并行ATA(“PATA”)、小型计算机系统接口(“SCSI”)、IEEE1394(“FireWire”)、光纤通道、通用串行总线(“USB”)、PCIe-AS等。发生电力中断时(意味着可假定从该时刻至当前时刻所接收到的数据已损坏)可能出现复杂情况,经过一段时间,感测到中断并且发信号通知,电源管理装置122接收到该信号并且知道电力中断。从发生电力中断到电源管理装置122发现电力中断之间的延迟可允许损坏数据进入写入数据流水线106。在某些实施例中,这个损坏数据应被标识并且不应将被存储至非易失性存储器110。作为另外一种选择,可如下所述地将损坏数据存储在非易失性存储器110中并且将其标记为损坏。为了描述简便起见,标识损坏数据并且不将该数据存储至非易失性存储器110将主要用于描述本文中的功能和特征。此外,主机114应当知道该数据未被存储,或者作为另外一种选择,不确认完整性存疑的数据直至可验证数据完整性。因此,不应当确认损坏数据。
存储设备102还包括电源管理装置122。在某些实施例中,电源管理装置122被实现为存储控制器104的一部分。电源管理装置122可例如是软件驱动程序或者被实现在存储设备102的固件中。在其他实施例中,可部分地在软件驱动程序中并且部分地在存储控制器104中等来实施电源管理装置122。在一个实施例中,在存储设备102上实现电源管理装置122的至少一部分,作为存储控制器104的一部分等,以使得在部分或完全电力丧失期间,即使主机114不再运行,电源管理装置122也利用来自备用电源124的电力继续运行。
在一个实施例中,电源管理装置122响应于来自主电源连接130的电力降低,在存储设备102中启动电力丧失模式。在一个实施例中,在电力丧失模式期间,电源管理装置122将尚未存储在非易失性存储器110中的存储设备102中的数据转入非易失性存储器110内。在特定实施例中,电源管理装置122将已得到确认并且位于存储设备102中尚未存储在非易失性存储器110中的数据转入非易失性存储器110。如下所述,在某些实施例中,电源管理装置122可调整存储设备102上数据操作的执行,以确保在备用电源124失去完成必要操作的足够电力之前(即在备用电源124提供的电力保持时间期间)必要操作已完成。
在某些实施例中,必要操作包括针对已被确认为已经存储的数据的那些操作,例如已确认的写入操作。在其他实施例中,必要操作包括针对已被确认为已经存储并且擦除的数据的那些操作。在其他实施例中,必要操作包括针对已被确认为已经存储、读取并且擦除的数据的那些操作。电源管理装置122还可终止非必要操作,以确保那些非必要操作不会不必要地消耗电力和/或不阻碍必要操作的执行;例如,电源管理装置122可终止擦除操作、读取操作、未确认的写入操作等等。
在一个实施例中,终止非必要操作将保存来自备用电源124的电力,从而允许备用电源124提供电力保持时间。在另一个实施例中,电源管理装置122在电力丧失模式期间禁止或以其他方式关闭存储设备102的一个或多个子组件的工作,以节省来自备用电源124的电力。例如,在多个实施例中,电源管理装置122可禁止读取数据流水线108的工作、读取直接存储器访问(“DMA”)引擎和/或与非必要操作关联的存储设备102的其他子组件。
电源管理装置122还可负责确定电力中断损坏什么数据,防止损坏数据被存储在非易失性存储器110中,以及确保主机114知道损坏数据从未被实际存储在存储设备102上。这就阻止了由于电力中断引起存储设备102中的数据损坏。
在一个实施例中,系统100包括多个存储设备102。在一个实施例中,电源管理装置122管理这多个存储设备102中每个存储设备102的电力丧失模式,从而为这多个存储设备102提供系统范围的电力丧失模式。在另一个实施例中,这多个存储设备102中每个存储设备102包括单独的电源管理装置122,这单独的电源管理装置针对每个单独存储设备102管理单独的电力丧失模式。在一个实施例中,电源管理装置122可禁止或以其他方式关闭所述多个存储设备102中一个或多个存储设备102,以将来自备用电源124的电力保存用于在一个或多个其他存储设备102上执行必要操作。
在一个实施例中,系统100包括用于在主机114和这多个存储设备102之间提供电连接的一个或多个适配器。在多个实施例中,适配器可包括接收单个存储设备102的插槽或端口、接收两个或更多个存储设备102的扩展卡或子卡等。例如,在一个实施例中,这多个存储设备102可各自连接到主机114的分开的端口或插槽。在另一个示例性实施例中,一个或多个适配器,例如子卡等,可电连接到主机114(即,连接到主机114的一个或多个插槽或端口)并且一个或多个适配器可各自提供用于两个或更多个存储设备102的连接。
在一个实施例中,系统100包括电路板,例如母板等等,其接收两个或多个适配器,例如子卡等等,并且每个适配器接收两个或更多个存储设备102。在再一个实施例中,使用电路板的PCI-e插槽将适配器连接到电路板,并且使用适配器的PCI-e插槽将存储设备102连接到适配器。在另一个实施例中,每个存储设备102包括非易失性固态存储的双列直插式存储器模块(“DIMM”),例如闪存等。在一个实施例中,电路板、适配器和存储设备102可位于主机114外部,并且可包括单独的主电源连接130。例如,电路板、适配器和存储设备102可封装在具有供电单元(“PSU”)的外部壳体中,并且可利用外部总线(例如eSATA、eSATAp、SCSI、FireWire、光纤通道、USB、PCIe-AS等)与主机114连通。在另一个实施例中,电路板可为主机114的母板,适配器和存储设备102可为主机114的内部存储器。
根据本公开,本领域中的技术人员将会认识到用于系统100中的适配器和存储设备102的多个配置。例如,每个适配器可接收两个存储设备102、四个存储设备102或任意数量的存储设备。相似地,系统100可包括一个适配器、两个适配器、三个适配器、四个适配器或所支持的任意数量的适配器。在一个示例性实施例中,系统100包括两个适配器并且每个适配器接收四个存储设备102,总计八个存储设备102。
在一个实施例中,备用电源124向多个存储设备102中的每一个提供电力。例如,备用电源124可被设置在主电路板或母板上的电路中,并且可向若干适配器提供电力。在另一个实施例中,系统100包括多个备用电源,每个备用电源向多个存储设备102的一个子集提供电力。例如,在一个实施例中,每个适配器可包括用于适配器的存储设备102的备用电源124。在另一个实施例中,每个存储设备102可包括用于该存储设备102的备用电源124。根据本公开,本领域中的技术人员将会认识到用于向多个存储设备102提供电力的备用电源124的不同布置方式。
图2为一示意性框图,示出了根据本发明的固态存储设备控制器202的一个实施例200,所述控制器包括固态存储设备102中的写入数据流水线106和读取数据流水线108。固态存储设备控制器202可包括多个固态存储控制器0到N104a-n,每一个控制固态存储介质110。在所描述的实施例中,示出了两个固态控制器:固态控制器0104a和固态存储控制器N104n,并且每一个控制各自的固态存储介质110a-n。在所描述的实施例中,固态存储控制器0104a控制数据信道,以使得连接的固态存储介质110a存储数据。固态存储控制器N104n控制与所存储的数据关联的索引元数据信道,并且关联的固态存储介质110n存储索引元数据。在一替代实施例中,固态存储设备控制器202包括具有单个固态存储介质110a的单个固态控制器104a。在另一个实施例中,存在多个固态存储控制器104a到n和关联的固态存储介质110a到n。在一个实施例中,连接到其关联固态存储介质110a到110n-1的一个或多个固态控制器104a到104n-1控制数据,而连接到其关联固态存储介质110n的至少一个固态存储控制器104n控制索引元数据。
在一个实施例中,至少一个固态控制器104为现场可编程门阵列(“FPGA”)并且控制器功能被编程到FPGA内。在一个具体实施例中,FPGA为FPGA。在另一个实施例中,固态存储控制器104包括专门设计为固态存储控制器104的组件,例如专用集成电路(“ASIC”)或自定义逻辑解决方案。每个固态存储控制器104通常包括写入数据流水线106和读取数据流水线108,结合图3对它们进行进一步描述。在另一个实施例中,至少一个固态存储控制器104由FPGA、ASIC和自定义逻辑组件的组合组成。
固态存储
固态存储介质110为非易失性固态存储器元件216、218、220的阵列,这些元件被布置成存储体214,并且可通过双向存储器输入/输出(“I/O”)总线210并行地访问它们。在一个实施例中,存储器I/O总线210能够在任何一个时刻进行单向通信。例如,当数据正在被写入到固态存储介质110时,无法从固态存储介质110读取数据。在另一个实施例中,数据可同时沿两个方向流动。然而,在此对于数据总线所使用的双向是指在某一时刻只能沿一个方向具有数据流动的数据通道,但当在该双向数据总线上沿一个方向的数据流动停止时,数据可在该双向数据总线上沿相反方向流动。
固态存储器元件(如,SSS0.0216a)通常被构造为电路板上的芯片(一个或多个裸片的封装)或裸片。如所示出的那样,固态存储器元件(如,216a)独立或半独立于其他固态存储器元件(如,218a)工作,即使这多个元件被一起封装在一个芯片封装中、一个芯片封装堆栈中或某个其他封装元件中。如所示出的那样,一行固态存储器元件216a、216b、216m被指定为一个存储体214。如所示出的那样,在一个固态存储介质110中可存在nxm固态存储器元件216、218、220阵列形式的“n”个存储体214a-n,每个存储体中有“m”个固态存储器元件216a-m、218a-m、220a-m。当然,不同实施例可包括不同数值的n和m。在一个实施例中,固态存储介质110a包括八个存储体214,每个存储体214中有二十个固态存储器元件216a-216m。在一个实施例中,固态存储介质110a包括八个存储体214,每个存储体214中有二十四个固态存储器元件216a-216m。除了nxm个存储器元件216a-216m、218a-218m、220a-220m之外,还可并行于一行或多行的其他固态存储器元件216a、216b、216m寻址和运行一个或多个附加的列(P)。在一个实施例中,添加的P列针对ECC块(即ECC代码字)的跨越特定存储体的m个存储器元件的部分存储奇偶校验数据。在一个实施例中,每个固态存储器元件216、218、220由单层单元(“SLC”)设备构成。在另一个实施例中,每个固态存储器元件216、218、220由多层单元(“MLC”)设备构成。
在一个实施例中,共享存储器I/O总线210a上一公用线211的固态存储器元件(如,216b、218b、220b)被封装在一起。在一个实施例中,固态存储器元件216、218、220可对于每个封装具有一个或多个裸片,其中一个或多个封装垂直堆叠,并且可独立访问每个裸片。在另一个实施例中,固态存储器元件(如,SSS0.0216a)可对于每个裸片具有一个或多个虚拟裸片,对于每个封装具有一个或多个裸片,一个或多个封装垂直堆叠,并且可独立访问每个虚拟裸片。在另一个实施例中,固态存储器元件SSS0.0216a可对于每个裸片具有一个或多个虚拟裸片,对于每个封装具有一个或多个裸片,其中这一个或多个裸片中的一些或全部垂直堆叠,并且可独立访问每个虚拟裸片。
在一个实施例中,将两个裸片垂直堆叠,其中每一组有四个堆叠,以形成八个存储器元件(如,SSS0.0-SSS8.0)216a、218a...220a,每个存储器元件位于单独的存储体214a、214b...214n中。在另一个实施例中,24个存储器元件(如,SSS0.0-SSS0.24)216a、216b、...216m形成一个逻辑存储体214a,以使得这八个逻辑存储体中的每一个均具有24个存储器元件(如,SSS0.0-SSS8.24)216、218、220。数据被发送到固态存储介质110,通过存储器I/O总线210发送到某组存储器元件(SSS0.0-SSS8.0)216a、218a、220a中的所有存储器元件。使用存储控制总线212a来选择特定存储体(如,存储体0214a),以使得经过连接到所有存储体214的存储器I/O总线210接收的数据仅写入所选存储体214a。
在一个实施例中,存储器I/O总线210由一根或多根独立的I/O总线(“IIOBa-m”,包括210a.a-m...210n.a-m)构成,其中每列中的固态存储器元件共享并行连接到每个固态存储器元件216、218、220的独立I/O总线中的一者。例如,存储器I/O总线210a中的一根独立I/O总线210a.a可物理地连接到每个存储体214a-n的第一固态存储器元件216a、218a、220a。存储器I/O总线210b的第二独立I/O总线210a.b可物理地连接到每个存储体214a-n的第二固态存储器元件216b、218b、220b。可同时和/或并行地访问存储体214a(如图2所示的一行固态存储器元件)中的每个固态存储器元件216a、216b、216m。在一个实施例中,其中固态存储器元件216、218、220包括堆叠的裸片封装,特定堆叠中的所有封装均物理地连接到同一根独立I/O总线。如本文所用,“同时”还包括几乎同时的访问,其中以稍微不同的间隔访问设备来避免切换噪音。在本上下文中使用“同时”以与其中逐个单独发送命令和/或数据的顺序或串行访问区分开。
通常,使用存储控制总线212来独立选择存储体214a-n。在一个实施例中,使用芯片启用或芯片选择来选择存储体214。在芯片选择和芯片启用两者均可用的情况下,存储控制总线212可选择封装堆叠内的一个封装。在其他实施例中,存储控制总线212使用其他命令来单个选择封装堆叠内的一个封装。也可通过在存储器I/O总线210和存储控制总线212上传输的控制信号和地址信息的组合来选择固态存储器元件216、218、220。
在一个实施例中,将每个固态存储器元件216、218、220分成擦除块并且将每个擦除块分成页面。固态存储器元件216、218、220上的擦除快可被称为物理擦除块或“PEB”。一个典型页面为2048字节(“2kB”)。在一个例子中,固态存储器元件(如,SSS0.0)包括两个寄存器并且可对两个页面进行编程,使得双寄存器固态存储器元件216、218、220的容量为4kB。20个固态存储器元件216a、216b、216m的存储体214于是将具有80kB容量的以出自存储器I/O总线210的独立I/O总线的相同地址访问的页面。
固态存储器元件216a、216b、...216m的存储体214中的这一组80kB的页面可被称为逻辑页或虚拟页。相似地,存储体214a的每个存储器元件216a、216b、...216m的擦除块可被集合以形成逻辑擦除块(其也可被称为虚拟擦除块)。在一个实施例中,在固态存储器元件内接收到擦除命令时,固态存储器元件内页面擦除块就被擦除。虽然预计随着技术进步,固态存储器元件216、218、220内擦除块、页面、平面或其他逻辑和物理部分的大小和数目预期会随时间推移而发生更改,但是预期与新配置一致的多个实施例是可能的并且与本文的总体描述相一致。
通常,当数据包被写入固态存储器元件216内的特定位置时,其中数据包是要被写入特定存储体的特定存储器元件的特定物理擦除块所特有的特定页面内的一位置,在存储器I/O总线210上发送物理地址并且随后是数据包。物理地址包含固态存储器元件216的足够信息以将数据包导向至页面内的指定位置。由于一列存储器元件(如,SSS0.0-SSSN.0216a、218a、...220a)中的所有存储器元件连接到存储器I/O总线210a的同一独立I/O总线(如,210.a.a),从而到达正确页面并且避免将数据包写入至该列存储器元件(SSS0.0-SSSN.0216a、218a、...220a)中类似寻址的页面,因此由存储控制总线212a选择包括具有该数据包要被写入到的正确页面的固态存储器元件SSS0.0216a的存储体214a,并且取消选择固态存储器110a的其他存储体214b...214n。
相似地,满足存储器I/O总线210上的读取命令需要存储控制总线212上的信号来选择单个存储体214a和该存储体214a内的合适页面。在一个实施例中,读取命令读取整个页面,并且因为在存储体214a中并行存在多个固态存储器元件216a、216b、...216m,因此以读取命令读取整个逻辑页。然而,读取命令可分成子命令,这一点将在下面相对于存储体交错来进行说明。相似地,在写入操作中,可将整个逻辑页写入到存储体214a的固态存储器元件216a、216b、...216m。
可经由存储器I/O总线210发出擦除块擦除命令以将擦除块擦除,其中用特定擦除块地址来擦除特定擦除块。通常,存储控制器104a可经由存储器I/O总线210的并行路径(独立的I/O总线210a-n.a-m)发送擦除块擦除命令以擦除逻辑擦除块,每个命令均具有特定擦除块地址以擦除特定擦除块。同时,在存储控制总线212上选择特定存储体(如,存储体0214a),以防止擦除未选存储体(如,存储体1-N214b-n)中相似寻址的擦除块。作为另外一种选择,在存储控制总线212上不选择特定存储体(如,存储体0214a)(或选择全部存储体),以使得能够并行地擦除全部存储体(存储体1-N214b-n)中的相似寻址的擦除块。也可使用存储器I/O总线210和存储控制总线212的组合来将其他命令发送到特定位置。本领域中的技术人员将想到其他方式来使用双向存储器I/O总线210和存储控制总线212选择特定存储位置。
在一个实施例中,数据包被顺序地写入固态存储介质110。例如,存储控制器104a将数据包流式传送到存储器元件216的存储体214a的存储器写入缓冲区,并且当缓冲区变满时,数据包被编程至指定的逻辑页。存储控制器104a随后用数据包重新填充存储器写入缓冲区,并且当缓冲区变满时,将数据包写入下一逻辑页。下一逻辑页可位于同一存储体214a中或另一个存储体(如,214b)中。该过程以逐个逻辑块的方式继续,通常直至逻辑擦除块被填充。在另一个实施例中,随着该过程的继续,可跨逻辑擦除块边界地以逐个逻辑擦除块的方式继续进行流式传送。
在读取、修改、写入操作中,与所请求数据关联的数据包被定位并且在读取操作中被读取。已被修改的修改后的被请求数据的数据段不被写入其从中被读取的位置。相反,修改后的数据段再次被转换成数据包,并且随后顺序地被写入到当前正被写入的逻辑页中的下一可用位置。相应数据包的索引条目被修改以指向包含修改后数据段的数据包。未经修改的同一被请求数据关联的数据包的索引中的条目将包括指向未修改数据包的原始位置的指针。因此,如果保留原始被请求数据,例如以保留被请求数据的前一版本,则原始被请求数据将在索引中具有指向初始写入的所有数据包的指针。新的被请求数据在索引中将具有指向原始数据包中一些的指针和指向当前正被写入的逻辑页中的修改后数据包的指针。
在复制操作中,索引包括映射到存储在固态存储介质110中的多个数据包的原始被请求数据的条目。在制作副本时,创建被请求数据的新副本并且在索引中创建新条目,将被请求数据的新副本映射到原始数据包。被请求数据的新副本也被写入到固态存储介质110中,并且将其位置映射到索引中的新条目。如果在原始被请求数据中已经进行了尚未传送到被请求数据的副本的更改并且索引丢失或损坏,则可使用被请求数据包的新副本来识别所涉及的原始被请求数据内的数据包。
有利地是,顺序写入数据包会促进对固态存储介质110的更平均的使用,并且允许固态存储设备控制器202对固态存储介质110中各个逻辑页的存储热点和级别使用情况进行监控。顺序写入数据包还有利于强大有效的垃圾收集系统,其在下面有详细描述。本领域中的技术人员可认识到顺序存储数据包的其他好处。
固态存储设备控制器
在多个实施例中,固态存储设备控制器202还包括数据总线204、局部总线206、缓存控制器208、缓冲区0-N222a-n、主控制器224、直接存储器访问(“DMA”)控制器226、存储器控制器228、动态存储器阵列230、静态随机存储器阵列232、管理控制器234、管理总线236、到系统总线240的网桥238和杂项逻辑242,下面对所述全部进行了描述。在其他实施例中,系统总线240连接到一个或多个网络接口卡(“NIC”)244,其中一些可包括远程DMA(“RDMA”)控制器246)、一个或多个中央处理单元(“CPU”)248、一个或多个外部存储器控制器250和关联的外部存储器阵列252、一个或多个存储控制器254、对等控制器256和应用专用处理器258,下面对所述全部进行了描述。连接到系统总线240的组件244至258可位于主机计算系统114中或可为其他设备。
通常,固态存储控制器104通过存储器I/O总线210将数据传送到固态存储介质110。在一典型实施例中,其中固态存储器被布置成存储体214并且每个存储体214包括并行访问的多个存储器元件216a、216b、216m,存储器I/O总线210为总线阵列,对于跨存储体214的每列存储器元件216、218、220有一根总线。如本文所用,术语“存储器I/O总线”可以是指一根存储器I/O总线210,也可以是指独立数据总线的阵列,其中阵列的各根数据总线相对于彼此独立地传送不同数据。在一个实施例中,访问一列存储器元件(如,216a、218a、220a)的每根存储器I/O总线210可包括在一列存储器元件216a、218a、220a中访问的存储部分(如,擦除块)的逻辑到物理的映射。如果第一存储部分发生故障、局部发生故障、无法访问或具有某种其他问题,则该映射(或坏块重新映射)允许将映射到存储部分的物理地址的逻辑地址重新映射到另一存储部分。
数据也可通过系统总线240、网桥238、局部总线206、缓冲区222并且最终经过数据总线204从请求设备155传送到固态存储器总线104。数据总线204通常连接到利用缓冲区控制器208控制的一个或多个缓冲区222a-n。缓冲区控制器208通常控制数据从局部总线206到缓冲区222、以及通过数据总线204到流水线输入缓冲区306和输出缓冲区330的传送。缓冲区控制器208通常控制来自请求设备的数据可以如何被临时存储在缓冲区222中以及随后被传输到数据总线204上,或反之亦然,以解决不同时钟域的问题,从而防止数据冲突等等。缓冲区控制器208通常与主控制器224结合工作以协调数据流。随着数据到达,数据将到达系统总线240,透过网桥238传输到局部总线206。
通常,数据从局部总线206如主控制器224和缓冲控制器208所导向的那样被传送到一个或多个数据缓冲区222。数据随后从缓冲区222流出到数据总线204,穿过固态控制器104,到达固态存储介质110(例如NAND闪存或其他存储介质)。在一个实施例中,数据和与数据一同到达的相关联的带外元数据(“元数据”)使用一个或多个数据信道进行通信,所述数据信道包括一个或多个固态存储控制器104a-104n-1和关联的固态存储介质110a-110n-1,而至少一个信道(固态存储控制器104n、固态存储介质110n)为带内元数据(例如索引信息和固态存储设备102内部生成的其他元数据)专用。
局部总线206通常为双向总线或总线集,其允许在固态存储设备控制器202内部的设备之间以及固态存储设备102内部的设备与连接到系统总线240的设备244-258之间进行数据和命令通信。网桥238可促进局部总线206与系统总线240之间的通信。本领域中的技术人员将认识到其他实施例,例如总线240、206、204、210和网桥238的环结构或交换式星形构形以及功能。
系统总线240通常为其中安装或连接有固态存储设备102的主机计算系统114或其他设备的总线。在一个实施例中,系统总线240可为PCI-e总线、串行高级技术附件(“串行ATA”)总线、并行ATA等。在另一个实施例中,系统总线240为外部总线,例如小型计算机系统接口(“SCSI”)、FireWire、光纤信道、USB、PCIe-AS等等。固态存储设备102可被封装以内部安装至某设备或作为外部连接设备。
固态存储设备控制器202包括主控制器224,其控制固态存储设备102内的更高级别功能。在多个实施例中,主控制器224通过解释对象请求和其他请求来控制数据流,引导索引创建以将与数据关联的对象标识符映射到相关联数据的物理位置,从而协调DMA请求等。本文所述的功能中许多都完全或部分由主控制器224进行控制。
在一个实施例中,主控制器224使用嵌入式控制器。在另一个实施例中,主控制器224使用局部存储器,例如动态存储器阵列230(动态随机访问存储器“DRAM”)、静态存储器阵列232(静态随机访问存储器“SRAM”)等。在一个实施例中,利用主控制器224来控制局部存储器。在另一个实施例中,主控制器224经由存储器控制器228访问局部存储器。在另一个实施例中,主控制器224运行Linux服务器并且可支持各种通用服务器接口,例如万维网、超文本标记语言(“HTML”)等。在另一个实施例中,主控制器224使用纳米处理器。可使用可编程逻辑或标准逻辑,或上面所列控制器类型的任何组合来构造主控制器224。本领域中的技术人员将认识到主控制器224的多个实施例。
在一个实施例中,其中存储设备/固态存储设备控制器202管理多个数据存储设备/固态存储介质110a-n,主控制器224在内部控制器(例如固态存储控制器104a-n)之间划分工作量。例如,主控制器224可划分要写入到数据存储设备(如,固态存储介质110a-n)的对象,以使得对象的一部分被存储在附接的数据存储设备的每一个上。该特征为性能增强,允许更快地存储和访问对象。在一个实施例中,利用FPGA来实施主控制器224。在另一个实施例中,可通过管理总线236、经过网络连接到NIC244的系统总线240或连接到系统总线240的其他设备来更新主控制器224内的固件。
在一个实施例中,管理对象的主控制器224模拟块存储,使得主机计算系统114或连接到存储设备/固态存储设备102的其他设备将存储设备/固态存储设备102视为块存储设备,并且向存储设备/固态存储设备102中的特定物理地址发送数据。主控制器224随后分割这些块并且按照处理对象的方式存储数据块。主控制器224随后将块以及与块一起发送的物理地址映射到主控制器224所确定的实际位置。将映射存储在对象索引中。通常,针对块模拟,在计算机(例如主机计算系统114)或者希望使用存储设备/固态存储设备102作为块存储设备的其他设备的驱动程序中提供块设备应用程序接口(“API”)。
在另一个实施例中,主控制器224与NIC控制器244和嵌入的RDMA控制器246协调以传递数据和命令集的即时RDMA传输。可将NIC控制器244隐藏在非透明端口后面以使得能够使用自定义驱动程序。另外,主机计算系统114上的驱动程序可通过使用标准堆栈API并且结合NIC244操作的I/O存储器驱动程序访问计算机网络116。
在一个实施例中,主控制器224也为独立磁盘冗余阵列(“RAID”)控制器。如果数据存储设备/固态存储设备102与一个或多个其他数据存储设备/固态存储设备102联网,则主控制器224可为用于单级RAID、多级RAID、渐进RAID等的RAID控制器。主控制器224还允许一些对象被存储在RAID阵列中而其他对象在没有RIAD的情况下被存储。在另一个实施例中,主控制器224可为分布式RAID控制器元件。在另一个实施例中,主控制器224可包括多个RAID、分布式RAID和其他地方所述的其他功能。在一个实施例中,主控制器224控制数据以RAID状结构的存储,其中奇偶校验信息被存储在逻辑页的一个或多个存储器元件216、218、220中,其中奇偶校验信息保护存储在同一逻辑页的其他存储器元件216、218、220中的数据。
在一个实施例中,主控制器224与单一或冗余的网络管理器(如,交换机)协调以建立路由,平衡带宽利用率、进行故障解决等。在另一个实施例中,主控制器224与集成的应用专用逻辑(经由局部总线206)和相关联的驱动程序软件协调。在另一个实施例中,主控制器224与附接的应用专用处理器258或逻辑(经由外部系统总线240)以及相关联的驱动程序软件协调。在另一个实施例中,主控制器224与远程应用专用逻辑(通过计算机网络116)和相关联的驱动程序软件协调。在另一个实施例中,主控制器224与局部总线206或外部总线附接的硬盘驱动器(“HDD”)存储控制器协调。
在一个实施例中,主控制器224与一个或多个存储控制器254通信,其中存储设备/固态存储设备102可看起来是通过SCSI总线、互联网SCSI(“iSCSI”)、光纤信道等连接的存储设备。而存储设备/固态存储设备102可自主管理对象并且可看起来是对象文件系统或分布式对象文件系统。也可通过对等控制器256和/或应用专用处理器258对主控制器224进行访问。
在另一个实施例中,主控制器224与自主集成管理控制器协调以周期性地验证FPGA代码和/或控制器软件,在运行(重置)时验证FPGA代码和/或在电源开启(重置)时验证控制器软件,支持外部重置请求,支持由于监视程序超时引起的重置请求,并且支持电压、电流、功率、温度和其他环境测量和阈值中断的设置。在另一个实施例中,主控制器224管理垃圾收集以释放擦除块进行重新使用。在另一个实施例中,主控制器224管理耗损均衡。在另一个实施例中,主控制器224允许将数据存储设备/固态存储设备102分成多个逻辑设备并且允许基于分区的介质加密。在另一个实施例中,主控制器224支持具有高级多位ECC校正的固态存储控制器104。本领域中的技术人员可认识到存储控制器202中(或更具体地讲固态存储设备102中)主控制器224的其他特征和功能。
在一个实施例中,固态存储设备控制器202包括存储器控制器228,该存储器控制器控制动态随机存储器阵列230和/或静态随机存储器阵列232。如上所述,存储器控制器228可为独立的或与主控制器224集成。存储器控制器228通常对某种类型的易失性存储器进行控制,例如DRAM(动态随机存储器阵列230)和SRAM(静态随机存储器阵列232)。在其他例子中,存储器控制器228还对其他存储器类型进行控制,例如电可擦可编程只读存储器(“EEPROM”)等。在其他实施例中,存储器控制器228控制两个或更多个存储器类型,并且存储控制器228可包括不止一个控制器。通常,存储控制器228控制尽可能多的SRAM232并且通过DRAM230对SRAM232进行补充。
在一个实施例中,对象索引被存储在存储器230、232中,并且随后被周期性地卸载至固态存储介质110n或其他非易失性存储器的通道。本领域中的技术人员可认识到存储控制器228、动态存储器阵列230和静态存储器阵列232的其他用途和配置。
在一个实施例中,固态存储设备控制器202包括DMA控制器226,该控制器对存储设备/固态存储设备102与一个或多个外部存储控制器250和相关联的外部存储器阵列252和CPU248之间的DMA操作进行控制。注意,外部存储控制器250和外部存储器阵列252被称为是外部的,因为它们位于存储器设备/固态存储设备102的外部。此外,DMA控制器226也可控制通过NIC244和相关联的RDMA控制器246与请求设备进行的RDMA操作。
在一个实施例中,固态存储设备控制器202包括连接到管理总线236的管理控制器234。通常,管理控制器234对存储设备/固态存储设备102的环境指标和状态进行管理。管理控制器234可通过管理总线236监控设备温度、风扇速度、电源设置等。管理控制器234可支持对可擦除可编程只读存储器(“EEPROM”)的读取和编程以存储FPGA代码和控制器软件。通常,管理总线236连接到存储设备/固态存储设备102内的各种组件。管理控制器234可经过局部总线206传送警告、中断等,或可包括与系统总线240或其他总线的单独连接。在一个实施例中,管理总线236为集成电路间(“I2C”)总线。本领域中的技术人员可认识到通过管理总线236连接到存储设备/固态存储设备102的组件的管理控制器234的其他相关功能和使用。
在一个实施例中,固态存储设备控制器202包括可针对具体应用自定义的杂项逻辑242。通常,在使用FPGA或其他配置控制器对固态设备控制器202或主控制器224进行配置的情况下,可根据特定应用、顾客需求、存储需求等而包括自定义逻辑。
数据流水线
图3为示意性框图,示出了根据本发明的具有固态存储设备102中写入数据流水线106和读取数据流水线108的固态存储控制器104的一个实施例300。实施例300包括数据总线204、局部总线206和缓冲区控制208,它们与结合图2的固态存储设备控制器202所述的那些基本上类似。写入数据流水线106包括打包器302和纠错码(“ECC”)生成器304。在另一个实施例中,写入数据流水线106包括输入缓冲区306、写入同步缓冲区308、写入程序模块310、压缩模块312、加密模块314、垃圾收集器旁路316(其中一部分在读取数据流水线108内)、介质加密模块318和写入缓冲区320。读取数据流水线108包括读取同步缓冲区328、ECC校正模块322、拆包器324、校准模块326和输出缓冲区330。在其他实施例中,读取数据流水线108可包括介质解密模块332、垃圾收集器旁路316的一部分、解密模块334、解压缩模块336和读取程序模块338。固态存储控制器104还可包括控制和状态寄存器340和控制队列342、存储体交错控制器344、同步缓冲区346、存储总线控制器348和复用器(“MUX”)350。固态控制器104以及关联的写入数据流水线106和读取数据流水线108的组件在下面有所描述。在其他实施例中,可使用同步的固态存储介质110,并且可以不需要同步缓冲区308、328。
写入数据流水线
写入数据流水线106包括打包器302,其直接地或通过另一写入数据流水线106阶段间接地接收要写入到固态存储的数据或元数据段,并且创建一个或多个针对固态存储介质110设定大小的数据包。数据或元数据段通常为数据结构的一部分,例如对象,但也可包括整个数据结构。在另一个实施例中,数据段为数据块的一部分,但也可包括整个数据块。通常,从计算机(例如主机114)或其他计算机或设备接收数据集(例如数据结构),并且将该数据集以流式传送至固态存储设备102的数据段的形式传输至固态存储设备102。数据段也可具有另一个名称,例如数据包裹,但如本文所引用,包括数据结构或数据块的全部或一部分。
每个数据结构被存储为一个或多个数据包。每个数据结构可具有一个或多个容器数据包。每个数据包包含头。头可包括头类型字段。类型字段可包括数据、属性、元数据、数据段分隔符(多数据包)、数据结构、数据链接等等。头还可包括有关数据包大小的信息,例如数据包中包括的数据字节数。可按数据包类型建立数据包的长度。头可包括建立数据包与数据结构之间关系的信息。其中一个例子可能为使用数据包头中的偏移量来标识数据结构内数据段的位置。本领域中的技术人员可认识到可包括在由打包器302添加到数据的头中的其他信息和可添加到数据包的其他信息。
每个数据包包括头和来自数据或元数据段的可能数据。每个数据包的头包括相关信息以将数据包与数据包所属的数据结构关联。例如,头可包括对象标识符或其他数据结构标识符以及指示形成数据包的数据段、对象、数据结构或数据块的偏移量。头还可包括被存储总线控制器348用来存储数据包的逻辑地址。头还可包括关于数据包大小的信息,例如数据包中所包括的字节数。头还可包括序列号,其标识在重新构造数据段或数据结构时,数据段相对于数据结构内的其他数据包所属的位置。头可包括头类型字段。类型字段可包括数据、数据结构属性、元数据、数据段分隔符(多数据包)、数据结构类型、数据结构链接等。本领域中的技术人员将认识到可被包括在由打包器302添加到数据或元数据的头中的其他信息和可添加到数据包的其他信息。
写入数据流水线106包括针对从打包器302所接收的一个或多个数据包生成一个或多个纠错码(“ECC”)的ECC生成器304。ECC生成器304通常使用纠错算法来生成与这一个或多个数据包一起存储的ECC校验位。ECC生成器304所生成的ECC代码和与该ECC代码关联的这一个或多个数据包一起构成ECC块。与这一个或多个数据包一起存储的ECC数据被用于检测和校正通过传输和存储引入到数据中的错误。在一个实施例中,数据包以长度为N的未编码块被流式传送到ECC生成器304内。长度为S的并发位被计算、附加并输出为长度为N+S的编码块。N和S的值取决于ECC算法的特性,ECC算法被选择来实现特定性能、效率和稳健性指标。在一个实施例中,ECC块与数据包之间没有固定关系;数据包可包括不止一个ECC块;ECC块可包括不止一个数据包;并且第一数据包可在ECC块内的任何位置终止,第二数据包可在同一ECC块内在第一数据包终止之后开始。在一个实施例中,未对ECC算法进行动态修改。在一个实施例中,与数据包一起存储的ECC数据足够稳健以校正两个以上的位中的错误。
有利地是,使用允许不止一位校正或甚至双位校正的稳健ECC算法可延长固态存储介质110的寿命。例如,如果将闪存用作固态存储介质110中的存储介质,则每个擦除循环可无错误地对闪存进行大约100,000次的写入。可使用稳健ECC算法来扩大该使用限制。由于固态存储设备102上具有ECC生成器304和对应的ECC校正模块322,因此固态存储设备102可内部地校正错误,并且与使用稳健性较差的ECC算法(例如单位校正)相比具有更长的使用寿命。然而,在其他实施例中,ECC生成器304可使用稳健性较差的算法并且可矫正单位或双位错误。在另一个实施例中,固态存储设备110可包括可靠性较差的存储,例如多层单元(“MLC”)闪存,以增加容量,该存储在没有更稳健的ECC算法的情况下可能不具有足够的可靠性。
在一个实施例中,写入流水线106包括输入缓冲区306,其接收要写入固态存储介质110的数据段并且存储传入的数据段,直至写入数据流水线106的下一个阶段,例如打包器302(或更复杂写入数据流水线106的其他阶段)准备好对下一个数据段进行处理。输入缓冲区306通常允许由写入数据流水线106利用适当大小的数据缓冲区接收和处理数据段的速率之间存在差异。输入缓冲区306还允许数据总线204以比写入数据流水线106能支持的速率大的速率将数据传输到写入数据流水线106,以便提高数据总线204的工作效率。通常,当写入数据流水线106不包括输入缓冲区306时,在其他位置执行缓冲功能,例如在固态存储设备102中但在写入数据流水线106外,在主机114中,例如在网络接口卡(“NIC”)内,或在另一个设备上,例如当使用远程直接存储器访问(“RDMA”)时。
在另一个实施例中,写入数据流水线106还包括写入同步缓冲区308,该缓冲区用以在将从ECC生成器304接收的数据包写入到固态存储介质110之前对该数据包进行缓存。写入同步缓冲区308位于局部时钟域和固态存储时钟域之间的边界处,并且提供缓存以解决时钟域差异的问题。在其他实施例中,可使用同步的固态存储介质110并且可取消同步缓冲区308、328。
在一个实施例中,写入数据流水线106还包括介质加密模块318,该模块直接地或间接地从打包器302接收一个或多个数据包,并且在将数据包发送到ECC生成器304之前使用固态存储设备102独有的加密密钥对这一个或多个数据包进行加密。通常,对整个数据包进行加密,包括头。在另一个实施例中,不对头进行加密。在本文档中,加密密钥被理解为表示从固态存储控制器104外部管理的保密加密密钥。
介质加密模块318和对应的介质解密模块332为存储在固态存储介质110中的数据提供安全级别。例如,在由介质加密模块318对数据加密的情况下,如果固态存储介质110连接到另一固态存储控制器104、固态存储设备102或服务器,则在不进行大量工作的前提下,不使用在将数据写入到固态存储介质110的过程中所用的相同加密密钥通常将无法读取固态存储介质110的内容。
在一典型的实施例中,固态存储设备102不将加密密钥存储在非易失性存储器中,并且不允许对加密密钥进行任何外部访问。加密密钥在初始化期间被提供给固态存储控制器104。固态存储设备102可使用和存储与加密密钥结合使用的非保密加密随机数。可与每个数据包一起存储不同的加密随机数。出于改善加密算法保护的目的,可在具有独特加密随机数的多个数据包之间分割数据段。
可从主机114、服务器、密钥管理器或对固态存储控制器104要使用的加密密钥进行管理的其他设备接收加密密钥。在另一个实施例中,固态存储介质110可具有两个或更多个分区,并且固态存储控制器104的作用方式如同其为两个或更多个固态存储控制器104,每一个均在固态存储介质110内的单个分区上工作。在本实施例中,对于每个分区可使用独特的介质加密密钥。
在另一个实施例中,写入数据流水线106还包括加密模块314,该加密模块在将直接或间接从输入缓冲区306接收到的数据或元数据段发送至打包程序302之前对该数据段进行加密,其中利用与数据段一起接收的加密密钥对数据段进行加密。加密模块314用来对数据加密的加密密钥对于存储在固态存储设备102内的所有数据可能不是通用的,但可能基于每数据结构有所变化并且如下所述结合数据段接收而被接收。例如,用于要被加密模块314加密的数据段的加密密钥可与该数据段一起被接收,或可作为针对数据段所属的数据结构的写命令的一部分被接收。固态存储设备102可使用和存储与加密密钥结合使用的每个数据结构包中的非保密加密随机数。可与每个数据包一起存储不同的加密随机数。出于改善加密算法保护的目的,可在具有独特加密随机数的多个数据包之间分割数据段。
可从主机114、另一台计算机、密钥管理器或保持要用于对数据段加密的加密密钥的其他设备接收加密密钥。在一个实施例中,加密密钥被从固态存储设备102、主机114、计算机或能够执行工业标准方法来安全传输和保护私有密钥和公开密钥的其他外部代理中的一者传输到固态存储控制器104。
在一个实施例中,加密模块314使用与第一数据包一起接收到的第一加密密钥对该数据包加密,并且使用与第二数据包一起接收到的第二加密密钥对第二数据包加密。在另一个实施例中,加密模块314使用与第一数据包一起接收到的第一加密密钥对该数据包加密,并且将第二数据包在不加密的情况下传递到下一阶段。有利地是,包括在固态存储设备102的写入数据流水线106中的加密模块314允许逐个数据结构或逐个段地进行数据加密,而没有单个文件系统或其他外部系统来跟踪用于存储对应数据结构或数据段的不同加密密钥。每个请求设备155或相关密钥管理器对用于仅对请求设备155发送的数据结构或数据段进行加密的加密密钥进行独立管理。
在一个实施例中,加密模块314可利用固态存储设备102独有的加密密钥对这一个或多个数据包进行加密。加密模块314可独立地执行该介质加密,或在上述加密之外进行该介质加密。通常,对整个数据包进行加密,包括头。在另一个实施例中,不对头进行加密。由加密模块314进行的介质加密为存储在固态存储介质110中的数据提供安全级别。例如,在使用特定固态存储设备102特有的介质加密对数据加密的情况下,如果固态存储介质110连接到其他固态存储控制器104、固态存储设备102或主机114,则在不进行大量工作的前提下,不使用在将数据写入到固态存储介质110的过程中所用的相同加密密钥通常将无法读取固态存储介质110的内容。
在另一个实施例中,写入数据流水线106包括压缩模块312,该模块在将数据段发送到打包器302之前为元数据段压缩数据。压缩模块312通常利用本领域中的技术人员已知的压缩例程对数据或元数据段进行压缩以减小段的存储大小。例如,如果数据段包括512个0组成的字符串,则压缩模块312可用指示512个0的代码或令牌替换这512个0,其中与512个0所占用的空间相比这个代码要紧凑得多。
在一个实施例中,压缩模块312用第一压缩例程对第一段进行压缩并且在不进行压缩的情况下传递第二段。在另一个实施例中,压缩模块312用第一压缩例程对第一段进行压缩并且用第二压缩例程对第二段进行压缩。在固态存储设备102内具有该灵活性是有利的,使得将数据写入到固态存储设备102的主机114或其他设备可各自指定压缩例程,或使得一个可指定压缩例程而另一个不指定任何压缩。压缩例程的选择也可以每个数据结构类型或数据结构类别为基础根据默认设置来进行选择。例如,特定数据结构的第一数据结构也许能够覆写默认压缩例程设置,相同数据结构类别和数据结构类型的第二数据结构可使用默认压缩例程,相同数据结构类别和数据结构类型的第三数据结构可不使用任何压缩。
在一个实施例中,写入数据流水线106包括垃圾收集器旁路316,该旁路作为垃圾收集系统中数据旁路的一部分而从读取数据流水线108接收数据段。垃圾收集系统通常标记不再有效的数据包,通常是因为该数据包被标记为删除或已经过修改并且修改后的数据被存储在其他位置。在某一时刻,垃圾收集系统确定可恢复存储器的特定区段。这个确定可能是由于缺乏可用存储容量、标记为无效的数据百分比达到阈值、有效数据的合并、存储器该区段的错误检测率达到阈值或基于数据分配提升性能等。垃圾收集算法可对许多因素进行考虑以确定何时恢复存储器区段。
一旦存储器的区段被标记为了恢复,就必须重定位该区段中的有效数据包。垃圾收集器旁路316允许将数据包读取到读取数据流水线108内,并且随后直接传输到写入数据流水线106而不被路由到固态存储控制器104之外。在一个实施例中,垃圾收集器旁路316为在固态存储设备102内工作的自主垃圾收集器系统的一部分。这就允许固态存储设备102对数据进行管理,以使得数据系统性地分布在整个固态存储介质110范围内,从而提高性能、数据可靠性并且避免固态存储介质110的任何一个位置或区域的过度使用或未充分利用,并且延长固态存储介质110的使用寿命。
垃圾收集器旁路316对将段插入到写入数据流水线106内与主机114或其他设备正写入的其他段进行协调。在所展示的实施例中,垃圾收集器旁路316位于写入数据流水线106中的打包器302之前并且在读取数据流水线108中的拆包器324之后,但也可位于读取和写入数据流水线106、108中的其他位置。可在写入流水线108的清除过程中使用垃圾收集器旁路316来填充逻辑页的其余部分,以便提高固态存储介质110内的存储效率,并且从而降低垃圾收集的频率。
在一个实施例中,写入数据流水线106包括针对有效写入操作缓冲数据的写入缓冲区320。通常,写入缓冲区320包括足够容量用于数据包来填充固态存储介质110内的至少一个逻辑页。这就允许写入操作来不间断地将数据的整个页面发送到固态存储介质110。通过将写入数据流水线106的写入缓冲区320和读取数据流水线108内的缓冲区大小调整为相同容量或大于固态存储介质110内的存储写入缓冲区,写入和读取数据将更加有效,这是因为可生成单个写命令代替多个命令来将数据的完整逻辑页发送到固态存储介质110。
在写入缓冲区320被填充时,固态存储介质110可被用于其他读取操作。这是有利的,因为在数据被写入到存储写入缓冲区和数据流入到存储写入缓冲区停顿时,具有较小写入缓冲区或不具有写入缓冲区的其他固态设备可占用固态存储。读取操作将被阻止,直至整个存储写入缓冲区被填充和编程。用于不具有写入缓冲区或小型写入缓冲区的系统的另一个方法为清除未满的存储写入缓冲区以使得能够读取。这也是低效的,因为填充页面需要多个写入/程序循环。
对于具有大小设定成大于逻辑页的写入缓冲区320的所展示的实施例而言,包括多个子命令的单个写入命令于是可跟随有单个程序命令,以将来自每个固态存储器元件216、218、220中存储写入缓冲区的数据的页面传输到每个固态存储器元件216、218、220内的指定页。这项技术具有消除部分页编程和在缓冲区填满时为读取和其他命令释放目标存储体的优点,部分页编程被认为会降低数据可靠性和耐久性。
在一个实施例中,写入缓冲区320为交替缓冲区,其中缓冲区的一侧已填满并且随后被指定为在交替缓冲区的另一侧正在被填充的同时在适当时刻进行传输。在另一个实施例中,写入缓冲区320包括容量大于数据段的逻辑页的先进先出(“FIFO”)寄存器。本领域中的技术人员将会认识到其他写入缓冲区320配置,所述配置允许数据的逻辑页在将数据写入到固态存储介质110之前被存储。
在另一个实施例中,写入缓冲区320的大小被设定成小于逻辑页,以使得可将小于一个页面的信息写入到固态存储介质110中的存储写入缓冲区。在该实施例中,为了防止写入数据流水线106中的停顿阻碍读取操作,使用垃圾收集系统对需要从一个位置移至另一位置的数据进行排队,作为垃圾收集进程的一部分。对于写入数据流水线106中的数据停顿,可通过垃圾收集器旁路316将数据馈送至写入缓冲区320并且随后到达固态存储介质110中的存储写入缓冲区以在对数据进行编程之前填充逻辑页的页面。这样,写入数据流水线106中的数据停顿将不会阻挡从固态存储设备102的读取。
在另一个实施例中,写入数据流水线106包括写入数据流水线106内具有一个或多个用户可定义功能的写入程序模块310。写入程序模块310允许用户自定义写入数据流水线106。用户可根据特定数据要求或应用来自定义写入数据流水线106。在固态存储控制器104为FPGA的情况下,用户可相对容易地用自定义命令和函数对写入数据流水线106进行编程。用户也可使用写入程序模块310来包括利用ASIC的自定义功能,然而,自定义ASIC可能比使用FPGA更困难。写入程序模块310可包括缓冲区和旁路机制以允许第一数据段在写入程序模块310中执行,而第二数据段可继续通过写入数据流水线106。在另一个实施例中,写入程序模块310可包括可通过软件编程的处理器核心。
注意,写入程序模块310被示于输入缓冲区306和压缩模块312之间,然而,写入程序模块310可位于写入数据流水线106中的任何位置,并且可分布在多个阶段302至320中。此外,可有多个写入程序模块310分布在独立编程和工作的多个状态302至320中。此外,可更改阶段302至320的顺序。本领域中的技术人员将认识到根据特定用户需求对阶段302至320的顺序的可行更改。
读取数据流水线
读取数据流水线108包括ECC校正模块322,该模块通过使用与所请求数据包的每个ECC块一起存储的ECC,确定从固态存储介质110接收到的所请求数据包的ECC块中是否存在数据错误。如果存在任何错误并且使用ECC能对错误进行校正,则ECC校正模块322随后对所请求的数据包中的任何错误进行校正。例如,如果ECC能检测六个位中的错误但仅能校正三位错误,则ECC校正模块322将对具有多达三位错误的所请求数据包的ECC块进行校正。ECC校正模块322通过以下方式对错误的位进行校正:将错误的位更改为正确的1或0状态,以使得所请求的数据包与其被写入到固态存储介质110并且为数据包生成ECC时相同。
如果ECC校正模块322确定所请求的数据包包含的错误位多于ECC可校正的数目,则ECC校正模块322无法校正所请求数据包的受损ECC块中的错误并且发送中断。在一个实施例中,ECC校正模块322通过指示所请求数据包存在错误的消息发送中断。该消息可包括关于ECC校正模块322无法校正错误或者可暗指ECC校正模块322无法校正错误的信息。在另一个实施例中,ECC校正模块322将所请求数据包的受损ECC块与中断和/或消息一起发送。
在一个实施例中,无法被ECC校正模块322校正的所请求数据包的受损ECC块或受损ECC块的一部分被主控制器224读取、校正并且返回到ECC校正模块322,以供读取数据流水线108进行进一步处理。在一个实施例中,所请求数据包的受损ECC块或受损ECC块的一部分被发送到请求该数据的设备。请求设备155可校正ECC块或使用另一个副本(例如备份或镜像副本)替换该数据,并且随后可使用所请求数据包的替换数据或将其返回至读取数据流水线108。请求设备155可使用发生错误的所请求数据包中的头信息来标识替换受损的被请求数据包或替换该数据包所属的数据结构所需要的数据。在另一个实施例中,固态存储控制器104使用某种类型的RAID存储数据并且能够恢复受损数据。在另一个实施例中,ECC校正模块322发送中断和/或消息,并且接收设备使与所请求数据包关联的读取操作失败。本领域中的技术人员将会认识到由于ECC校正模块322确定所请求数据包的一个或多个ECC块损坏并且ECC校正模块322无法校正错误而采用的其他选项和操作。
读取数据流水线108包括拆包器324,该拆包器直接或间接地从ECC校正模块322接收所请求数据包的ECC块,并且检查和移除一个或多个数据包头。拆包器324可通过检查头内的数据包标识符、数据长度、数据位置等对数据包头进行验证。在一个实施例中,头包括散列代码,该代码可用于验证传送至读取数据流水线108的数据包是否为所请求的数据包。拆包器324还从所请求的数据包中移除由打包器302添加的头。拆包器324可不对某些数据包进行操作,而是将这些数据包不做修改地转发。其中一个例子可以是在需要头信息来用于索引重建的重新生成过程中请求的容器标签。另外的例子包括预定用于固态存储设备102内的各种类型数据包的传输。在另一个实施例中,拆包器324操作可取决于数据包类型。
读取数据流水线108包括校准模块326,该模块从拆包器324接收数据并且移除不需要的数据。在一个实施例中,发送到固态存储介质110的读取命令检索数据包。请求数据的设备可能不需要所检索到的数据包内的所有数据,并且校准模块326移除不需要的数据。如果检索到的页内的所有数据为被请求的数据,则校准模块326不移除任何数据。
校准模块326将数据重新格式化为与请求数据段的设备相容的形式的数据结构的数据段,然后使数据段转发至下一阶段。通常,由于数据被读取数据流水线108处理,所以数据段或数据包的大小在各个阶段发生更改。校准模块326使用接收到的数据来将数据格式化为适于发送到请求设备155并且结合以形成响应的数据段。例如,来自第一数据包一部分的数据可与来自第二数据包一部分的数据结合。如果数据段大于请求设备155请求的数据,则校准模块326可放弃不需要的数据。
在一个实施例中,读取数据流水线108包括读取同步缓冲区328,该缓冲区对从固态存储介质110读取的一个或多个被请求数据包在被读取数据流水线108处理之前进行缓存。读取同步缓冲区328位于固态存储时钟域和局部总线时钟域之间的边界处,并且提供缓存来解决时钟域差异的问题。
在另一个实施例中,读取数据流水线108包括输出缓冲区330,该缓冲区从校准模块326接收所请求数据包并且在传输到请求设备155之前对数据包进行存储。输出缓冲区330解决从读取数据流水线108的阶段接收数据段时与数据段被传输到固态存储控制器104的其他部分或传输到请求设备155时之间的差异的问题。输出缓冲区330还允许数据总线204以比写入数据流水线108能支持的速率大的速率从读取数据流水线108接收数据,以便提高数据总线204的工作效率。
在一个实施例中,读取数据流水线108包括介质解密模块332,该模块从ECC校正模块322接收一个或多个加密的被请求数据包,并且在将这一个或多个被请求数据包发送到拆包器324之前利用固态存储设备102独有的加密密钥对这一个或多个被请求的数据包进行解密。通常,介质解密模块332用来对数据进行解密的加密密钥与介质加密模块318所用的加密密钥相同。在另一个实施例中,固态存储介质110可具有两个或更多个分区,并且固态存储控制器104的作用方式如同是两个或更多个固态存储控制器104那样,其中每一个固态存储控制器对固态存储介质110内的单个分区进行操作。在本实施例中,每个分区可使用独特的介质加密密钥。
在另一个实施例中,读取数据流水线108包括解密模块334,该模块解密由拆包器324格式化的数据段,然后再将此数据段发送到输出缓冲区330。可以利用随读取请求一起接收到的加密密钥来解密数据段,该读取请求启动对读取同步缓冲区328所接收到的被请求数据包的检索。解密模块334可以使用随对第一数据包的读取请求一起接收到的加密密钥对第一数据包进行解密,然后可以使用不同的加密密钥解密第二数据包或者可以将第二数据包传输到读取数据流水线108的下一阶段而不进行解密。当数据包与非保密的加密随机数一起被存储时,该随机数与加密密钥共同用于解密该数据包。加密密钥可以从主机114、计算机、密钥管理器或其他管理加密密钥的设备获取,以由固态存储控制器104使用。
在另一个实施例中,读取数据流水线108包括解压缩模块336,该模块解压缩由拆包器324格式化的数据段。在一个实施例中,解压缩模块336使用存储在数据包头和容器标签二者或其中之一中的压缩信息来选择与压缩模块312用来压缩数据的例程互补的例程。在另一个实施例中,解压缩模块336所使用的解压缩例程由请求被解压缩的数据段的设备指定。在另一个实施例中,解压缩模块336在每个数据结构类型或数据结构类别的基础上根据默认设置选择解压缩例程。第一对象的第一数据包可以能够覆写默认解压缩例程,相同数据结构类别和数据结构类型的第二数据结构的第二数据包可以使用默认解压缩例程,相同数据结构类别和数据结构类型的第三数据结构的第三数据包可以不使用解压缩。
在另一个实施例中,读取数据流水线108包括读取程序模块338,该模块包括读取数据流水线108中的一个或多个用户能定义的功能。读取程序模块338具有与写入程序模块310相似的特性,并且允许用户向读取数据流水线108提供定制功能。读取程序模块338可以如图3中所示的那样定位,可以位于读取数据流水线108中的其他位置,或者可以包括在读取数据流水线108中多个位置上的多个部分。此外,在读取数据流水线108中的多个位置上可以有独立运行的多个读取程序模块338。本领域中的技术人员将认识到读取数据流水线108中读取程序模块338的其他形式。对于写入数据流水线106,可以重新安排读取数据流水线108的不同阶段,并且本领域中的技术人员将认识到读取数据流水线108中阶段的其他顺序。
固态存储控制器104包括控制和状态寄存器340以及相应的控制队列342。控制和状态寄存器340和控制队列342有利于与写入和读取数据流水线106、108中处理的数据相关联的控制和排序命令以及子命令。例如,打包器302中的数据段可以具有在与ECC生成器304关联的控制队列342中的一个或多个相应的控制命令或指令。在对数据段进行拆包时,这些指令或命令中的一些可以在打包器302中被执行。在由该数据段创建的新形成的数据包被传递到下一阶段时,其他命令或指令可以通过控制和状态寄存器340被传递到下一控制队列342。
对于被转发到写入数据流水线106的数据包,命令或指令可以同时加载到控制队列342中,其中每个流水线阶段在该阶段执行各自的数据包时抽取相应的命令或指令。相似地,对于被从读取数据流水线108请求的数据包,命令或指令可以同时加载到控制队列342,其中每个流水线阶段在该阶段执行各自的数据包时抽取相应的命令或指令。本领域中的技术人员将认识到控制和状态寄存器340和控制队列342的其他特性和功能。
固态存储控制器104和/或固态存储设备102还可包括存储体交错控制器344、同步缓冲区346、存储总线控制器348和复用器(“MUX”)350,这些内容将在与图4相关的说明中进行描述
存储体交错
图4是一示意性框图,示出了根据本发明的固态存储控制器104中存储体交错控制器344的一个实施例400。存储体交错控制器344通过MUX350、存储总线控制器348和同步缓冲区346连接到控制和状态寄存器340,并且连接到存储器I/O总线210和存储控制总线212,如下所述。存储体交错控制器344包括读代理402、写代理404、擦除代理406、管理代理408、用于固态存储介质110中存储体214的读队列410a-n、写队列412a-n、擦除队列414a-n和管理队列416a-n、存储体控制器418a-n、总线仲裁器420和状态MUX422,如下所述。存储总线控制器348包括具有重新映射模块430的映射模块424、状态捕获模块426和NAND总线控制器428,如下所述。
存储体交错控制器344将一个或多个命令引导到存储体交错控制器104中的两个或更多个队列,并在固态存储介质110的存储体214中协调存储在队列中的命令的执行,使得第一类型的命令在一个存储体214a上执行,而第二类型的命令在第二存储体214b上执行。这一个或多个命令按照命令类型区分为队列。固态存储介质110的每个存储体214在存储体交错控制器344中都有一组相应的队列,每组队列都包括针对每种命令类型的一个队列。
存储体交错控制器344在固态存储介质110的存储体214之间协调队列中所存储的命令的执行。例如,第一类型的命令在一个存储体214a上执行,而第二类型的命令在第二存储体214b上执行。通常,命令类型和队列类型包括读和写命令以及队列410、412,但也可包括特定于存储介质的其他命令和队列。例如,在图4中所展示的实施例中,包括擦除和管理队列414、416,并且它们适用于闪存、NRAM、MRAM、DRAM、PRAM等。
对于其他类型的固态存储介质110,在不脱离本发明范围的情况下,可以包括其他类型的命令和相应的队列。FPGA固态存储控制器104的灵活特质允许存储介质存在灵活性。如果闪存更改为另一固态存储类型,则可更改存储体交错控制器344、存储总线控制器348和MUX350以适应介质类型,而不会显著影响数据流水线106、108和其他固态存储控制器104功能。
在图4描述的实施例中,对于每个存储体214,存储体交错控制器344包括读队列410,其用于从固态存储介质110读取数据;写队列412,其用于将命令写入固态存储介质110;擦除队列414,其用于擦除固态存储器中的擦除块;以及管理队列416,其用于管理命令。存储体交错控制器344还包括相应的读、写、擦除和管理代理402、404、406、408。在另一个实施例中,对于发送到没有存储体交错控制器344的固态存储介质110的存储体214的数据,控制和状态寄存器340和控制队列342或类似的组件对命令进行排队。
在一个实施例中,代理402、404、406、408将为特定存储体214a指定的相应类型的命令引导到存储体214a的正确队列。例如,读代理402可以接收用于存储体-1214b的读命令,并将读命令引导到存储体-1读取队列410b。写代理404可以接收将数据写入固态存储介质110的存储体-0214a中某个位置的写命令,然后将写命令发送到存储体-0写队列412a。相似地,擦除代理406可以接收用于擦除存储体-1214b中数据块的擦除命令,然后将擦除命令传输到存储体-1擦除队列414b。管理代理408通常接收管理命令、状态请求等等,例如重置命令或对存储体214的配置寄存器进行读取的请求,例如存储体-0214a。管理代理408将管理命令发送到存储体-0管理队列416a。
代理402、404、406、408通常还监控队列410、412、414、416的状态,并在队列410、412、414、416已满、将满、无法工作等情况下发送状态、中断或其他消息。在一个实施例中,代理402、404、406、408接收命令并生成相应的子命令。在一个实施例中,代理402、404、406、408通过控制和状态寄存器340接收命令,并生成相应子命令,该相应子命令被转发到队列410、412、414、416。本领域的技术人员将认识到代理402、404、406、408的其他功能。
队列410、412、414、416通常接收命令并存储命令,直至被要求将命令发送到固态存储器存储体214。在一典型实施例中,队列410、412、414、416为先进先出(“FIFO”)寄存器或者与FIFO运行类似的组件。在另一个实施例中,队列410、412、414、416按照与数据匹配的顺序、重要性顺序或其他标准来存储命令。
存储体控制器418通常接收来自队列410、412、414、416的命令,并生成适当的子命令。例如,存储体-0写队列412a可以接收将数据包页面写入存储体-0214a的命令。存储体-0控制器418a可以在适当的时间接收写命令,并可以针对要写入存储体-0214a中页面的存储在写入缓冲区320中的每个数据包生成一个或多个写子命令。例如,存储体-0控制器418a可以生成命令,以验证存储体0214a和固态存储器阵列216的状态,选择适当的位置用于写入一个或多个数据包,清除固态存储器阵列216中的输入缓冲区,将这一个或多个数据包传输到输入缓冲区,将输入缓冲区编程到选定的位置,验证数据已正确编程,以及如果发生程序错误则进行以下操作中的一个或多个:中断主控制器224、重新尝试写入到同一物理位置和重新尝试写入到另一物理位置。此外,结合写命令示例,存储总线控制器348将使得一个或多个命令复用到存储器I/O总线210a-n中的每一个,命令的逻辑地址对于存储器I/O总线210a映射到第一物理地址,对于存储器I/O总线210b映射到第二物理地址,以此类推,如下所述。
通常,总线仲裁器420从存储体控制器418中进行选择并从存储体控制器418内的输出队列提取子命令,并且按照优化存储体214的性能的顺序将它们转发到存储总线控制器348。在另一个实施例中,总线仲裁器420可以响应高级别中断,并修改普通选择条件。在另一个实施例中,主控制器224可以通过控制和状态寄存器340控制总线仲裁器420。本领域中的技术人员将认识到总线仲裁器420可用于控制和交错从存储体控制器418到固态存储介质110的命令的顺序的其他方式。
总线仲裁器420通常协调从存储体控制器418选择适当的命令以及在命令类型需要的情况下还选择相应的数据,然后将命令和数据发送到存储总线控制器348。总线仲裁器420通常还将命令发送到存储控制总线212以选择适当的存储体214。对于闪存或其他具有异步双向串行存储器I/O总线210的固态存储介质110而言,一次只能传输一个命令(控制信息)或一组数据。例如,当写命令或数据正在存储器I/O总线210上被传输到固态存储介质110时,读命令、被读取的数据、擦除命令、管理命令或其他状态命令不会在存储器I/O总线210上被传输。例如,当正从存储器I/O总线210读取数据时,不能将数据写入到固态存储介质110。
例如,在存储体-0上执行写操作期间,总线仲裁器420选择存储体-0控制器418a,该存储体-0控制器可以在其队列顶端具有一个写命令或一系列写子命令,这些命令使存储总线控制器348执行后续序列。总线仲裁器420将写命令转发到存储总线控制器348,该存储总线控制器通过以下方式设置写命令:通过存储控制总线212选择存储体-0214a、发送命令以清除与存储体-0214a相关联的固态存储元件110的输入缓冲区、并且发送命令以验证与存储体-0214a相关联的固态存储元件216、218、220的状态。存储总线控制器348随后将写子命令传输到存储器I/O总线210上,其包含物理地址,所述物理地址包括当从逻辑擦除块地址进行映射时用于每个单独物理擦除固态存储元件216a-m的逻辑擦除块的地址。然后,存储总线控制器348通过MUX350将写入缓冲区320通过写同步缓冲区308复用到存储器I/O总线210,并将写入数据流式传输到适当的页面。当页面满之后,存储总线控制器348使与存储体-0214a相关联的固态存储元件216a-m将输入缓冲区编程到固态存储元件216a-m中的存储器单元。最终,存储总线控制器348验证状态以确保页面编程正确。
读操作与上述写示例类似。在读操作期间,总线仲裁器420或存储体交错控制器344的其他组件通常接收数据和相应的状态信息,并将数据发送到读取数据流水线108,而将状态信息发送到控制和状态寄存器340。通常情况下,从总线仲裁器420转发到存储总线控制器348的读取数据命令将使MUX350将存储器I/O总线210上的读取数据选通到读取数据流水线108,并通过状态MUX422将状态信息发送到适当的控制和状态寄存器340。
总线仲裁器420协调各种命令类型和数据访问方式,以使得在任何给定的时间在总线上仅存在适当的命令类型或相应的数据。如果总线仲裁器420已经选择了写命令,并且写子命令和相应的数据正被写入到固态存储介质110,则总线仲裁器420将不允许存储器I/O总线210上存在其他命令类型。有利的是,总线仲裁器420使用时序信息(例如预测的命令执行时间)以及接收的与存储体214状态有关的状态信息来协调总线上各种命令的执行,目的在于最小化或消除总线的闲置时间。
通过总线仲裁器420的主控制器224通常使用预期的命令完成时间(存储在队列410、412、414、416中)和状态信息,以便当在一个存储体214a上执行与命令关联的子命令时,其他命令的其他子命令在其他存储体214b-n上执行。当一个命令在存储体214a上得到完全执行时,总线仲裁器420将其他命令引导到存储体214a。总线仲裁器420还可以协调存储在队列410、412、414、416中的命令和未存储在队列410、412、414、416中的其他命令。
例如,可以发出擦除命令以擦除固态存储介质110中的一组擦除块。执行擦除命令所用的时间可能比执行写或读命令所用时间多10到1000倍,或可能比执行编程命令所用时间多10到100倍。对于N个存储体214,存储体交错控制器344可以将擦除命令分成N个命令,其中每个命令擦除一个存储体214a中的一个虚拟擦除块。当存储体0214a正执行擦除命令时,总线仲裁器420可以选择其他命令以在其他存储体214b-n上执行。总线仲裁器420也可以与其他组件协同工作,例如存储总线控制器348、主控制器224等,以协调总线之间的命令执行。相对于没有存储体交错功能的其他固态存储系统,使用总线仲裁器420、存储体控制器418、存储体交错控制器344的队列410、412、414、416和代理402、404、406、408来协调命令的执行可以显著提高性能。
在一个实施例中,固态控制器104包括一个存储体交错控制器344,该交错控制器服务固态存储介质110的所有存储元件216、218、220。在另一个实施例中,固态控制器104包括用于存储元件216a-m、218a-m、220a-m每个列的存储体交错控制器344。例如,一个存储体交错控制器344服务一列存储元件SSS0.0-SSSN.0216a、218a、…220a,第二存储体交错控制器344服务第二列存储元件SSS0.1-SSSN.1216b、218b、…220b等。
特定于存储的组件
固态存储控制器104包括同步缓冲区346,该缓冲区用于缓冲从固态存储介质110接收和发送的命令和状态消息。同步缓冲区346位于固态存储时钟域和本地总线时钟域之间的边界处,并提供缓冲以便解决时钟域差异的问题。同步缓冲区346、写同步缓冲区308和读同步缓冲区328可以独立运行,或可以协作工作以缓冲数据、命令、状态信息等。在一个实施例中,同步缓冲区346所在的位置在整个时钟域中拥有最少的信号数量。本领域中的技术人员将认识到,时钟域之间的同步可以随意移动到固态存储设备102中的其他位置,以便优化设计实施的某些方面。
固态存储控制器104包括存储总线控制器348,该存储总线控制器根据固态存储介质110的类型解释和转换针对发送到和读取自固态存储介质110的数据的命令以及从固态存储介质110接收的状态消息。例如,存储总线控制器348对于不同类型的存储器、具有不同性能特性的存储器、来自不同制造商的存储器等可具有不同的时序要求。存储总线控制器348还将控制命令发送到存储控制总线212。
在一个实施例中,固态存储控制器104包括MUX350,MUX350包括复用器350a-n的阵列,其中每个复用器专门用于固态存储器阵列110中的行。例如,复用器350a与固态存储元件216a、218a、220a相关联。MUX350经由存储器I/O总线210将来自写入数据流水线106的数据和来自存储总线控制器348的命令路由到固态存储介质110,并经由存储器I/O总线210将来自固态存储介质110的数据和状态消息路由到读取数据流水线108并通过存储总线控制器348、同步缓冲区346和存储体交错控制器344路由到控制和状态寄存器340。
在一个实施例中,固态存储控制器104包括用于固态存储元件(例如SSS0.0216a、SSS1.0218a、SSSN.0220a)每个列的MUX350。MUX350合并来自写入数据流水线106的数据以及经由存储器I/O总线210发送到固态存储介质110的命令,并将读取数据流水线108要处理的数据与命令分开。写入缓冲区320中存储的数据包在总线上从写入缓冲区320通过用于每列固态存储元件(SSS0.x至SSSN.x216、218、220)的写同步缓冲区308引导到用于每列固态存储元件(SSS0.x至SSSN.x216、218、220)的MUX350。MUX350从存储器I/O总线210接收命令和读取数据。MUX350还将状态消息引导到存储总线控制器348。
存储总线控制器348包括映射模块424。映射模块424将擦除块的逻辑地址映射到擦除块的一个或多个物理地址。例如,对于每个存储体214a具有由20个存储元件(例如SSS0.0至SSS0.M216)组成的阵列的固态存储介质110对于映射到擦除块的20个物理地址的特定擦除块可具有逻辑地址,其中每个存储元件一个物理地址。由于存储元件被并行访问,所以存储元件216a、218a、220a列中每个存储元件中相同位置处的擦除块将共享物理地址。要选定一个擦除块(例如,在存储元件SSS0.0216a中)而不是行中的所有擦除块(例如在存储元件SSS0.0,1.0,…N.0216a、218a、220a中),选定一个存储体(在这种情况下为存储体0214a)。
擦除块的这种逻辑到物理映射是有益的,因为如果一个擦除块损坏或无法访问,映射可以更改为映射到另一个擦除块。这避免了在一个元件的擦除块有缺陷时丢失整个虚拟擦除块的损失。重新映射模块430将擦除块的逻辑地址映射更改为虚拟擦除块(分布在存储元件阵列上)的一个或多个物理地址。例如,虚拟擦除块1可以映射到存储元件SSS0.0216a的擦除块1、存储元件SSS0.1216b的擦除块1、...以及存储元件0.M216m,虚拟擦除块2可以映射到存储元件SSS1.0218a的擦除块2、存储元件SSS1.1218b的擦除块2、...以及存储元件1.M218m等。或者,虚拟擦除块1可以映射到阵列中每个存储元件的一个擦除块,使得虚拟擦除块1包括存储元件SSS0.0216a的擦除块1到存储元件SSS0.1216b的擦除块1到存储元件0.M216m,以及存储元件SSS1.0218a的擦除块1到存储元件SSS1.1218b的擦除块1…、以及到存储元件1.M218m,对于阵列中的每个存储元件,直至存储元件N.M220m的擦除块1。
如果存储元件SSS0.0216a的擦除块1损坏、由于磨损等原因发生错误、或者由于某种原因而无法使用,重新映射模块430可以更改指向虚拟擦除块1的擦除块1的逻辑地址的逻辑到物理映射。如果存储元件SSS0.0216a的备用擦除块(称之为擦除块221)可用并且当前未被映射,则重新映射模块430可以将虚拟擦除块1的映射更改为指向存储元件SSS0.0216a的擦除块221,同时继续指向存储元件SSS0.1216b的擦除块1、存储元件SSS0.2的擦除块1(未示出)...以及指向存储元件0.M216m。映射模块424或重新映射模块430可以指定的顺序映射擦除块(虚拟擦除块1到存储元件的擦除块1,虚拟擦除块2到存储元件的擦除块2等),或者基于一些其他标准以另外的顺序映射存储元件216、218、220的擦除块。
在一个实施例中,擦除块可以按照访问时间进行分组。按照访问时间分组(是指按照执行命令的时间进行分组,例如将数据编程(写入)到特定擦除块的页面)可以将命令完成均衡,以使得在虚拟块的多个擦除块上执行的命令不受最慢擦除块的限制。在另一个实施例中,可以按照可用程度、运行状况等对擦除块进行分组。本领域中的技术人员将认识到在映射或重新映射擦除块时要考虑的其他因素。
在一个实施例中,存储总线控制器348包括状态捕获模块426,该模块从固态存储介质110接收状态消息,并将状态消息发送到状态MUX422。在另一个实施例中,当固态存储介质110为闪存时,存储总线控制器348包括NAND总线控制器428。NAND总线控制器428将命令从读取和写入数据流水线106、108引导到固态存储介质110中的正确位置,根据闪存的特征等协调命令执行的时序。如果固态存储介质110为另一种固态存储类型,则NAND总线控制器428可以替换成特定于该存储类型的总线控制器。本领域中的技术人员将认识到NAND总线控制器428的其他功能。
电源故障管理
图5A显示了电源管理装置122的一个实施例。在一个实施例中,电源管理装置122可以包括监控模块510和电力丧失模块520。在另外的实施例中,电力丧失模块520包括识别模块512、终止模块514、损坏处理模块516和完成模块518。
在一个实施例中,监控模块510响应于主电源无法通过主电源连接130提供高于预定阈值的电力的情况而在非易失性存储设备102中启动电力丧失模式。在一个实施例中,电力丧失模式是这样一种运行模式,其中电源管理装置122使存储设备102准备在备用电源124提供的电力保持时间内关闭。在一个实施例中,电力丧失模块520在电力丧失模式期间调整非易失性存储设备102上进程内操作的执行,以允许执行必要的进程内操作。
在一个实施例中,超过预定阈值的电力对于存储设备102是充足的。在一个实施例中,充足的电力是指满足存储设备102正常运行要求的电力。在另一实施例中,预定阈值被设定为等于或高于存储设备102的不充足电力水平。不充足电力是指不满足存储设备102需求的电力。预期具有高AC或者在DC情况下具有谐波分量的电力以及过低的电压或电流水平都是不充足电力的示例。如上所述,在一个实施例中,存储设备102被配置成在来自主电源的电力低于预定阈值时自动接受或以其他方式从备用电源124中获取电力。在一个实施例中,预定阈值是由备用电源124的特性和相应的电路确定的设计阈值。
在一个实施例中,主电源是非易失性存储设备102在正常运行期间使用的电源,其提供在正常运行期间不会意外中断的基本上连续的电力。例如,在典型的实施例中,存储设备102所连接到的计算机系统(即主机114等)为主电源,并且通过母板提供电力,例如通过总线或插槽连接(例如PCI、PCIe、AGP等),或通过外部端口(例如USB端口、FireWire端口、eSATAp端口等)。在另一个实施例中,主电源为标准电气插座。
在一个实施例中,监控模块510直接监控主电源连接130,以确定来自主电源的电力何时降到预定阈值以下。例如,监控模块510可以包括功率传感器、电流传感器和/或另一适当的传感器,用于确定非易失性存储设备102是否正在接收充足的外部电力。在其他实施例中,如果非易失性存储设备102失去外部电力,则非易失性存储设备102中的另一个组件可以通知监控模块510。
在一个实施例中,监控模块510包括模拟电路,该电路对来自主电源连接130的电力丧失时做出响应。例如,主电源连接130和备用电源124可以并行放置,使得主电源连接130保持备用电源124完全充电(例如,当备用电源124由电容构成时),并且还向存储设备102供电。在并行配置中,如果主电源连接130发生故障,备用电源124自然地开始供电,并且存储设备102自然地从备用电源124接受电力。监控模块510电路也可以提供适当的隔离,以确保来自备用电源124的电力发送到存储设备102;例如,可以使用二极管来确保在主电源发生故障的情况下,电力从备用电源124流向存储设备102,而不会流向发生故障的主电源。基于本公开,本领域中的技术人员将认识到适当隔离的方式。
在此类实施例中,监控模块510仍可包括检测组件(例如电流传感器、电压传感器等),用于感测电力中断并作为响应而启动电力丧失模式以触发电源管理装置122中其他模块的工作。在另一个实施例中,监控模块510可以感测电力中断信号并激活开关,该开关将存储设备102的电力提供从主电源连接130更改为备用电源124等。
在一个实施例中,监控模块510可以通过直接或间接地向电力丧失模块520和/或其他模块通知存储设备102已经进入电力丧失模式来启动电力丧失模式。例如,在多个实施例中,监控模块122可以设置状态寄存器,发送电力丧失模式命令,发送电力丧失信号,发送电力丧失中断,启动电力丧失模式功能或程序,使存储设备进入电力丧失状态,和/或以其他方式向电力丧失模块520通知电力丧失模式。
在一个实施例中,电力丧失模块520在电力丧失模式期间调整存储设备102上进程内操作的执行,以确保必要操作(例如向主机114确认的操作等)在电力保持时间期间被执行。在一个实施例中,进程内操作包括存储设备102当前正在执行的操作。在另一实施例中,进程内操作包括排队等待在存储设备102上执行的操作、在写入数据流水线106和/或读取数据流水线108中处于动态的操作等。在所示实施例中,电力丧失模块520包括识别模块512、终止模块514和损坏处理模块516。
在一个实施例中,识别模块512响应于监控模块510确定外部电源已断开、低于预定阈值或以其他方式不充足并进入电力丧失模式而标识非易失性存储设备102上的一个或多个非必要操作。非必要操作是指可以终止、停止或暂停而不会导致存储设备102上数据损坏或数据丢失的那些操作。必要操作是指为了避免存储设备102上数据损坏、数据丢失或者为了避免存储设备102与主机114之间存在不一致通信(即针对数据向主机114发送确认,但该数据后来未采用与确认相一致的方式进行处理)而必须执行的操作。识别模块512还可以确认非必要操作是否正在执行,或者是否已经排队等待执行。
在一个实施例中,终止模块514终止由识别模块512标识的非必要操作。在多个实施例中,终止模块514可以通过擦除排队的非必要操作、命令和指令和/或通过中断当前正在存储设备102上执行的非必要操作来终止非必要操作。在一个实施例中,终止模块514允许存储设备102断电(即,一旦电力保持时间结束,并且备用电源124耗尽)而不执行非必要操作。在另一实施例中,终止模块514以一旦存储设备102在电力丧失之后重新接通电源也不执行或恢复非必要操作的方式来终止非必要操作。例如,在一个实施例中,终止模块514终止非必要操作而不保留所终止的非必要操作的记录,以使得存储设备102接通电源而不会执行或恢复所终止的非必要操作。
在一个实施例中,在存储设备102依赖于备用电源124运行时,识别模块512还管理存储设备102的电源预算。识别模块512可以确定例如有多少电力可用,存储设备102上的所有暂挂操作将需要多少电力,并且为暂挂操作确定优先级顺序。因此,操作可重新排序并按照优先级顺序执行,以在电力保持时间内至少执行必要的进程内操作。在一个实施例中,如果识别模块512确定可能由于错误或故障而没有足够的电力来执行所有写操作(即,非易失性固态存储设备上的编程操作),识别模块512可以记录此信息,以可能在电力恢复之后将关于部分或全部写操作已经丢失的信息通知给用户或系统。
在一个实施例中,非必要操作包括正擦除非易失性存储设备102上非易失性存储器110的擦除操作和/或正在非易失性存储设备102上读取数据的读操作。擦除操作可能已经生成,例如,作为回收固态存储设备(例如闪存设备)上空间的垃圾收集操作的一部分。非必要操作也可以包括多种操作,例如为非易失性存储设备102中的数据生成散列密钥,解压缩从存储器读取的数据,或其他操作。在另一实施例中,非必要操作可以包括非易失性存储设备102还未为其将确认发送到主机114的写入(或编程)操作。在一个实施例中,用户或系统设计人员指定哪些操作为必要操作,哪些操作为非必要操作。
在某些实施例中,终止模块514基于非必要操作所需的电力来终止非必要操作。例如,固态存储设备中的擦除操作往往会消耗大量电力。终止模块514可以迅速终止擦除操作,以保留电力。相比之下,读取操作需要相对较少的电力。终止模块514可以只在擦除操作终止后等等才开始终止读取操作。
在一个实施例中,识别模块512为操作确定优先级顺序,其中优先级顺序基于执行操作的重要性。例如,对于已确认的数据的编程操作可以被赋予最高的优先级,而对擦除操作赋予最低的优先级。终止模块514可以开始终止最低优先级的操作,向上移动排定好优先级的操作列表,并且不终止任何必要操作。从而,终止模块514从优先级最低的操作开始来确定操作是否为必要操作。如果不是,则操作被终止。如果操作是必要操作,则该操作不会被终止,并且终止模块514移动到下一个操作以进行判断。
在某些实施例中,识别模块512还可以基于完成非必要操作所需的电量来确定正在执行的非必要操作的优先级顺序。例如,与完成了5%的擦除操作相比,对于已经完成了90%的擦除操作可以赋予较低的终止优先级;因此,可以允许已经完成了90%的擦除操作继续完成,而在检测到电力中断时停止完成了5%的擦除操作。在一个实施例中,一个操作所需的电量在该操作执行期间可能会随时间变化。
在一个实施例中,终止模块514终止识别模块512所标识的非必要操作。如上所述,终止模块514可以按照识别模块512确定的优先级终止某些类别的操作(例如耗电量大的擦除操作或自主梳理操作),以在其他操作之前终止。在一个实施例中,终止模块514通过识别非必要操作正在其上工作/执行的存储器区域或组件并且重置该存储器区域或组件来终止非必要操作,如结合图6更详细讨论的那样。如本文所用,存储器区域或组件是指非易失性存储器110的物理区段,对于该非易失性存储器110,在该物理区段上执行的操作可以用命令或信号来重置、终止、停止、推迟或暂停。
通过终止非必要操作,电源管理装置122可以确保电力被用于必要写入操作和其他必要操作,以使得必要操作可以在电力保持时间内得到执行。此外,电源管理装置122可以由此减少备用电源124需要提供的总电量。因此,设计人员可以选择例如使用较小的电容器来提供电力,这就可以节省存储设备102中的空间、降低成本、提高可靠性,同时有能力确保所有收到和确认的数据得到保留并避免意外的电力中断。
在一个实施例中,终止模块514确定特定的非必要操作是在排队还是正在执行。通过将排队的非必要操作移出队列,终止模块514可以删除排队的非必要操作以确保其不执行。作为另外一种选择或作为补充,终止模块514可以取消正在执行的操作,以防止正在执行的操作消耗额外的电力。在某些实施例中,如上所述,终止模块514终止进程中的某些非必要操作,而允许其他操作完成。
在一个实施例中,损坏处理模块516识别被推定为损坏或很可能被推定为损坏的由存储设备102所接收的要写入到非易失性存储器110的数据。例如,此类数据可以是写入数据流水线106中的数据。损坏处理模块516确保被推定为损坏的数据不被存储到非易失性存储器110,还确保使主机114知道该数据未被存储或确保主机114不被告知损坏数据被成功存储了。
在某些实施例中,一旦监控模块510检测到电力中断,损坏处理模块516和终止模块514就记录所执行的操作。例如,终止模块514可以记录哪些非必要操作在开始执行之前被取消,以及哪些非必要操作在执行期间被终止。损坏处理模块516可以记录关于其将什么数据确定为损坏的信息。电源管理装置122中的其他模块可以通过类似方式记录各自的活动或其子集,以帮助存储设备102、主机114或其他相关实体确定在意外关机期间发生了什么。
在一个实施例中,损坏处理模块516预期在监控模块510收到电力中断信号之前从过去某个指定的时间开始(例如5微秒)存储设备102所接收的所有数据损坏并且不应该被存储在非易失性存储器110中。这个规范可以由诸如PCI、PCI-e等标准或由主机114、存储设备102、供应商、制造商等指定。在另一实施例中,损坏处理模块516将在预定阶段之前在写入数据流水线106中处于动态的数据视为已损坏。
图5B示出了与数据损坏相关的时间线的一个例子。在时间0,发生功率干扰。该时间点被称为干扰时间。从发生功率干扰到监控模块510收到到功率干扰信号,监控模块510检测到功率干扰等需要经过一段时间。这段时间在本文中被称为损坏周期。尽管本说明书可能提供了示例性的损坏周期(例如上述的5微秒),但损坏周期并不受限于此,并且其可基于标准以及开发人员、制造商、设计人员和其他人员等的假设而有所不同。
损坏周期是检测到功率干扰(图示为在5微秒时发生)、生成指示发生了功率干扰的信号(图示为在3微秒时发生)以及监控模块510收到功率干扰信号(图示为在5微秒时发生)所需的时间结果。一般来讲,一旦确定发生了功率干扰,损坏处理模块516就阻止新数据进入写入数据流水线106,因为该新数据被推定为损坏。然而,损坏数据可能已经在损坏周期期间已经移入到写入数据流水线106中。
因此,在损坏时间之后接收到的所有数据均被推定为损坏,并且不应被保存。例如,损坏处理模块516可以确定监控模块510在时间t收到了电力中断信号,并且损坏处理模块516可以始终将损坏时间设置为t-5微秒。因此,损坏处理模块516可以推断:在损坏时间t-5微秒之后接收的所有数据都是损坏的。在此类实施例中,损坏处理模块516标识t-5微秒后接收的所有写入操作(即,闪存等的编程操作),确定它们在写入数据流水线106中的位置,并跳过这些写入操作。在多个实施例中,损坏处理模块516可以通过取消写入操作、跳过写入操作、清除写入操作、中断写入操作或以其他方式使得无法执行写入操作的方式来跳过写入操作。
在一个实施例中,电源管理装置122还包括完成模块518。在某些实施例中,与写入数据流水线106中的阶段相关的某些操作将不会执行或允许连续的数据流通过该流水线,直到与该阶段相关的缓冲区被填满。例如,ECC阶段(例如图3的ECC生成器304)可能需要在生成ECC值之前缓冲区是填满的。相似地,在将数据移出输出缓冲区并移到非易失性存储器110之前,可能必须填满输出缓冲区(例如写入缓冲区320、写同步缓冲区308等)。在一个实施例中,如果缓冲区被部分填充,则在正常条件下,与该缓冲区相关的阶段将会等待直到该缓冲区填满,然后再执行与该缓冲区相关的操作。本文所指的缓冲区可以是物理缓冲区,或者可以仅仅是临时存储位置,例如寄存器、DRAM位置或其他。在另一实施例中,在数据包完成之前,在数据包组完成之前等,打包器302不会将数据包传输到写入数据流水线106中的其他阶段。相似地,在某些实施例中,在页面、逻辑页面、页面组或逻辑页面组等完成之前,写入缓冲区320不会将数据发送到存储设备102。
如果发生电力中断,则可能有用的是,即使一个或多个阶段的缓冲区、数据包或页面未填满,也通过写入数据流水线106移动数据,以将其清除到非易失性存储器110等。完成模块518通过写入数据流水线106将部分填充数据缓冲区中的数据清除到非易失性存储器110。在一个实施例中,完成模块518识别未填满的部分填充缓冲区、数据包和/或页面,并使用填充数据来填充缓冲区,使得数据被移出缓冲区并通过写入数据流水线106。
在一个实施例中,完成模块518确保填充能被识别为填充数据,以确保存储设备102和/或主机114可以识别填充并知道填充数据不是实际数据的一部分。在一个实施例中,完成模块518使用独特的头、令牌、标志、图案或其他标识符来标识填充数据。在另一实施例中,完成模块518通过使用缓冲区中未填满空间中的现有数据完成部分填充的缓冲区、数据包和/或页面来清除缓冲区、数据包和/或页面而不添加填充数据。例如,处于未填满或空状态的缓冲区可以存储所有二进制1、所有二进制0、无用或垃圾数据、来自先前事务的数据等。在一个实施例中,完成模块518将缓冲区的未填满区域中的现有数据标识为填充数据。根据本公开,完成模块518可以使用独特的图案、标记或其他指示符或本领域中技术人员熟知的其他方法。
在一个实施例中,完成模块518使用独特的头、脚注、令牌、标志、图案或其他标识符来标识电源管理装置122已经在电力丧失模式下成功完成了必要操作。在一个实施例中,成功完成必要操作是指完成模块518成功地将来自写入操作的写入数据清除通过写入数据流水线106并到非易失性存储器110等。在一个实施例中,指示符与上述用于标识填充数据的指示符相同。在另一实施例中,完成模块518使用单独的指示符来标识在电力丧失模式期间必要操作的成功执行。
图6示出了电源管理装置122和非易失性存储器110的一个实施例600。如上所述,电源管理装置122可以是存储控制器104的部件。电源管理装置122和非易失性存储器110可以是同一存储设备102的物理部件。电源管理装置122可以执行结合图5A所述的操作。在所示实施例中,电源管理装置122包括监控模块510和电力丧失模块520。在另一实施例中,电力丧失模块520可包括标识模块512、终止模块514、损坏处理模块516和/或完成模块518。电源管理装置122还与非易失性存储器110通信,以使得电源管理装置122直接或间接地将信号传输至非易失性存储器110。电源管理装置122可以例如能够将控制信号发送到非易失性存储器110。
图6示出了非易失性存储器110的一种架构的一个实施例。非易失性存储器110可以包括通道632a和632b。通道可以包括多个存储体;例如,通道632a包括存储体630a和630b,通道632b包括存储体650a和650b。在某些实施例中,芯片634a-c和654a-c包括多个裸片636a-f和656a-f。在某些实施例中,每个芯片634a-c和654a-c上的一个裸片用于形成存储体。如图所示,存储体630a包含裸片636a、636c和636e。存储体630b包括裸片636b、636d和636f。存储体650a和650b类似地由芯片654a-c上的一个裸片构成。在一个实施例中,图6的非易失性存储器110基本上类似于上述图2的固态存储介质110。
本领域的技术人员将会知道,图6中示出的实施例仅为非易失性存储器110(例如闪存)的一种架构的一个例子,多种其他架构也是可能的。图6示出了简化版本的非易失性存储器110,以便以有助于理解本发明的方式来关注非易失性存储器110的功能。非易失性存储器110实施的更详细信息可参见授予DavidFlynn等人、提交于2007年12月6日、标题为“Apparatus,System,andMethodforManagingCommandsofSolid-StateStorageUsingBankInterleave”(使用存储体交错管理固态存储器命令的装置、系统和方法)的美国专利申请No.11/952,095,该文献以引用的方式并入本文(以下称为“存储体交错应用”)。
如上所述,终止模块514可以通过确定操作正在其上执行的存储器区域或组件并重置该存储器区域或组件来终止识别模块512所标识的非必要操作。如本文所用,存储器区域或组件是指非易失性存储器110的可以用重置命令重置的物理区段。重置命令是指使针对存储器区域正在执行的所有操作(例如写入、擦除和读取)终止的命令。在一个实施例中,每个裸片636a-f和656a-f可以被独立重置,以使得每个单独的裸片636a-f和656a-f构成唯一的存储器区域或组件。重置操作使得作为重置操作对象的特定裸片上的操作终止进程。
在某些实施例中,如本文所述,以存储体为基础执行操作。例如,在一个实施例中,擦除操作在跨构成存储体的多个裸片的逻辑擦除块上执行。在此类实施例中,存储器区域或组件可以是存储体,并且重置操作基本上同时被发送到存储体中的所有裸片。重置操作本身可以是一个命令或多个命令;在此类实施例中,存储体中的每个裸片被重置,这停止了针对逻辑擦除块的每个裸片中每个物理擦除块的擦除操作。
在另一个实施例中,终止模块514可以同时重置几乎所有的非易失性存储器110。例如,在一个实施例中,存储设备102可以同时计划每个存储体630a、630b、650a、650b上的擦除操作,并且终止模块514可以将重置命令发送到非易失性存储器110的每个存储体630a、630b、650a、650b以终止这些计划的擦除操作。
在此类实施例中,终止模块514可以通过总线将重置命令发送到特定裸片636a-f或656a-f。这允许终止模块514重置正在执行非必要操作(例如擦除)的存储器区域,而允许其他存储器区域上的编程操作(即数据存储写入操作)继续进行。在一个实施例中,终止模块514通过发出重置信号来终止正在执行的操作,并通过从命令队列中移除暂挂的操作或以其他方式跳过暂挂的操作来终止暂挂的操作(即命令队列中尚未开始的那些操作)。
可以在不使用重置命令的情况下终止某些非必要操作。例如,如上所述,可通过删除、清除、标记以防止执行或在尚未启动的情况下移除非必要操作的方式简单地跳过命令队列中的非必要操作。由于这些操作尚未启动,因此无需重置裸片636a-f或656a-f即可终止操作。不在裸片636a-f或656a-f上执行的其他非必要操作即使当其正在执行的时候也可以类似地在不使用重置命令的情况下被终止;例如,如果在检测到电力中断时写入数据流水线106中的某个阶段正在生成数据的散列密钥,则散列生成操作可被终止,而不向裸片636a-f和656a-f发送重置操作。在某些实施例中,只有在特定裸片636a-f和656a-f上正在执行的过程中的编程/写入、读取和擦除操作以重置命令被终止。
在某些实施例中,终止模块514可以禁止或以其他方式关闭存储设备102的特定区域/区段/模块/子组件。例如,终止模块514可以关闭实施读取数据流水线108的所有物理设备/组件和/或逻辑模块。在另一实施例中,终止模块514可以禁止或以其他方式关闭读取DMA引擎或与非必要操作相关的其他子组件。终止模块514还可以关闭存储设备102上正在运行的一个或多个CPU;例如,存储设备102可以具有多核CPU。在此类实施例中,终止模块514可以关闭电源管理装置122当前未使用的CPU上的一个或多个核。
终止模块514还可以监控并确保正在支持电源管理装置122的核上没有任何与电源管理装置122的运行无关的活动正在发生。在某些实施例中,电源管理装置122可以在与CPU分离的硬件中实施,使得终止模块514可以简单地关闭CPU(或多个CPU)以保留电力。终止模块514可以通过停止相应的时钟来关闭读取数据流水线108和CPU。本领域的技术人员将会知道关闭存储设备102的读取数据流水线108、读取DMA引擎、CPU和/或其他子组件的其他方法。
在某些实施例中,如“存储体交错应用”中所描述的那样,某些操作可以在存储体级别上发生;例如,在影响存储体630a的编程操作期间,数据被编程(即写入或存储)到裸片636a、636c和636e。存储体630a-b和650a-b可以被组织为使得其提供逻辑擦除块(当存储体中存在n个裸片时由n个物理擦除块构成)、逻辑页面(当存储体中存在N个裸片时由N个物理擦除块构成)等等。因此,在图6中,存储体630a可以提供由3个物理擦除块(来自裸片636a、636c和636e)构成的逻辑擦除块,以及由来自裸片636a、636c和636e的3个物理页面构成的数据逻辑页面。
在此类实施例中,终止模块514可以通过总线将重置命令发送到正在存储体630a中并行运行的裸片(例如裸片636a、636c和636e)。在此类实施例中,裸片636a、636c和636e的组将被同时重置,从而有效地停止每个裸片636a、636c和636e上发生的操作。因此,由于擦除操作在包含三个物理裸片636a、636c和636e上物理擦除块的逻辑擦除块上发生,所以重置操作可以以物理方式同时发送到裸片636a、636c和636e上的三个物理擦除块,以停止对于该逻辑擦除块处于进程中的擦除操作。类似地,在另一实施例中,终止模块514可以将重置操作同时发送到所有裸片636a-f、656a-f以重置整个非易失性存储器110。
在一个可能的例子中,监控模块510可以确定存储设备102已经丧失电力。识别模块512确定对着存储体650a上的逻辑擦除块有擦除操作正在非易失性存储器110上发生。终止模块514将重置命令发送到存储体650a,这使得裸片656a、656c和656e重置,并因此终止擦除操作。在存储设备102丧失电力之后,对于非易失性存储器110的暂挂的其他擦除操作和读取操作,可以发生类似模式。此外,存储体可以彼此独立,使得可以终止或暂停正在一个存储体上发生的操作,而不影响存储设备102中其他存储体上的操作。
在某些实施例中,编程、擦除和读取操作不在如上所述的存储体级别上发生;在某些架构中,编程、擦除和读取操作在每个裸片636a-f和656a-f上分别发生。在此类实施例中,重置操作可以被发送到受影响的裸片;例如,通过由终止模块514将重置命令发送到裸片636b,可以终止裸片636b上物理擦除块的擦除。
可以采用其他方法来终止被识别模块512的标识为正在执行的非必要操作。在一个实施例中,终止模块514通过暂停非必要操作来终止正在执行的或排队等待执行的非必要操作。某些非易失性存储设备110可以允许暂停正在执行的操作。在此类实施例中,终止模块514可以发送命令来暂停非必要操作,而不发送后续命令来恢复该非必要操作,从而有效地使得操作取消。在其他实施例中,终止模块514可以发送命令来暂停非必要操作,等待直到所有必要编程操作完成,然后将一个或多个恢复命令发送到各个暂停的操作。
图7示出了用于存储设备102的电源管理装置122和写入数据流水线106的一个实施例700。在一个实施例中,写入数据流水线106基本上类似于上面参照图3所述的写入数据流水线106。在所示实施例700中,写入数据流水线106包括输入缓冲区306、压缩模块312、加密模块314、打包器302、ECC生成器304以及写入缓冲区320。在另一个实施例中,写入数据流水线106可以包括其他阶段或模块,例如写入编程模块310、垃圾收集器旁路316、介质加密模块318、写入同步缓冲区308和/或其他阶段。
如图3中所示,写入数据流水线106可以作为固态存储(SSS)控制器104的一部分来实施。在一个实施例中,电源管理装置122也可以作为SSS控制器104的一部分来实施。在一个实施例中,电源管理装置122可以单独实施,但要与SSS控制器104进行通信。在另一实施例中,电源管理装置122可以与SSS控制器104集成。
如上所论,在某些实施例中,损坏处理模块516对在电力中断之后接收的并且被推定为已损坏的通过PCI-e连接(或其他连接,取决于实施)接收的数据进行标识(在下文中统称为损坏数据)。在一个实施例中,损坏处理模块516还确保主机114可以知道或应该知道推定为已损坏的数据未被保存在存储设备102中。在一个实施例中,损坏处理模块516确定写入数据流水线106中最旧的损坏数据的位置。最旧的损坏数据位于在损坏期间开始之后所接收的数据的开头。从最旧的损坏数据回溯到写入数据流水线106(例如,输入缓冲区306)开始处的所有数据都被推定为损坏,并被移出写入数据流水线106。
在一个实施例中,损坏处理模块516可以使存储设备102推迟将确认发送回主机114,直到已经经过了用于计算损坏时间的时间段。如上所述,在某些实施例中,根据存储设备102和写入数据流水线106的架构,损坏处理模块516可以假定在监控模块510检测到电力中断之后第5微秒或之后接收的所有数据是损坏的。因此,5微秒是用于计算损坏时间的时间段。因此,损坏处理模块516可以指定在存储设备102接收到数据后5微秒之前不将确认发送到主机114。因此,在某些实施例中,在存储设备102可以确保数据没有被还未检测到和/或通知到存储设备102的电力中断破坏之前,绝不会确认已经存储数据。
在一个实施例中,一旦数据离开由缓冲区控制器208管理的缓冲区,但在该数据进入写入数据流水线106之前,损坏处理模块516发送确认。例如,数据可以由直接存储器访问(“DMA”)引擎传输到存储设备102上的缓冲区中,该数据随后由一个或多个缓冲区控制器208移入到写入数据流水线106中。
在一个实施例中,缓冲区控制器208允许缓冲区从DMA引擎接收数据进行填充,等待损坏时间结束,然后将确认发送到主机114。一旦在缓冲区填满之后经过了一段时间,就已知电力中断是否已经破坏了缓冲区中的全部或部分数据以及数据是否可以被安全地确认。如果发生了电力中断,则数据可以被从缓冲区中移除,而无需被发送到数据流水线106。此外,如果发生了电力中断,则可以不向主机114发送任何确认来确认数据已被存储。根据最佳实践,主机114应由此假定数据未被存储。在另一个实施例中,写入数据流水线106中数据损坏的潜在风险是可接收的,因此缓冲区控制器208允许填满缓冲区,不对损坏时间施加延迟,存储设备102随后向主机114发送确认。在某些实施例中,存储设备102在默认情况下插入损坏规避延迟,并可被配置为允许不插入损坏规避延迟。
因此,在此类实施例中,损坏处理模块516可以防止电力中断所损坏的数据进入写入数据流水线106,并进一步阻止存储设备102发送确认直到存储设备102可以确保数据在电力中断期间没有损坏。
在另一个实施例中,损坏处理模块516瓶颈点在写入数据流水线106中停止损坏数据。瓶颈点是写入数据流水线106中的这样一个位置,即如果检测到电力中断,则瓶颈点之上的任何数据(即,瓶颈点和输入缓冲区306之间的数据,包括输入缓冲区306中的数据)都被推定为已损坏。瓶颈点的位置可以由数据通过写入数据流水线106的速率来确定,并且还在用于确定损坏时间的时间段上来确定。例如,损坏处理模块516可以假定在损坏时间之后的5微秒内,可能已经进入写入数据流水线106的最远的数据到达ECC生成器304。因此,在示例性实施例中,ECC生成器304是写入数据流水线106中的瓶颈点。如果检测到电力中断,则损坏处理模块516可以阻止ECC生成器304中的数据和直到写入数据流水线中(即,在介质加密模块314、打包器302等直到写入数据流水线106中)的任何数据移动通过写入数据流水线106并进入非易失性存储器110。在某些实施例中,损坏处理模块516中止瓶颈点之上的在写入数据流水线106中发生的操作。
在另一实施例中,瓶颈点的位置可以由写入数据流水线106具有足够信息将数据写入非易失性存储器110的位置来决定。例如,在一个实施例中,一旦打包器302已经将头元数据添加到完整的数据包,写入数据流水线106就具有足够的信息来进一步处理数据包(即,将数据包传输到ECC生成器304等)并将数据包写入到非易失性存储器110。在一个实施例中,数据包是写入数据流水线106中数据的最小可写入单位。在该示例性实施例中,打包器302为瓶颈点。在另一实施例中,ECC区块或代码字是写入数据流水线106中数据的最小可写入单位,并且ECC生成器304可为瓶颈点。在一个实施例中,备用电源124的特性被选择为提供的电力保持时间足够长,以至于数据从瓶颈点穿过写入数据流水线106并被写入到非易失性存储器110。
在某些实施例中,一旦数据已经完全通过写入数据流水线106中的瓶颈点,损坏处理模块516就发送对数据的确认。从而,在确认被发送之前,损坏数据可以被停止,并且在损坏数据上运行的操作可以被中止。因此,在被存储的数据或在流水线中要被存储的数据是良好的、未损坏的数据之前,不向主机114发送确认。
在某些实施例中,数据可以被组织成原子数据单元。例如,原子数据单元可以是数据包、页面、逻辑页面、逻辑数据包、块、逻辑块、与一个或多个逻辑块地址相关联的一组数据(逻辑块地址可以是邻接或不邻接的)、文件、文档或其他相关数据分组。在此类实施例中,在整个原子数据单元已经通过瓶颈点之前,损坏处理模块516可以推迟发送确认。例如,文件的一部分可能已经通过了瓶颈点,并且因此被视为未损坏数据;然而,该文件的后半部分还尚未通过瓶颈点,并且因此可能包含损坏数据。损坏处理模块516可以等待直到整个原子数据单元已经通过瓶颈点,然后再发送确认,这与在在原子数据单元的仅仅一部分已经通过时即发送确认是相反的。在一个实施例中,损坏处理模块516弃用部分损坏的原子数据单元。在另一实施例中,损坏处理模块516允许原子数据单元的未损坏部分,或原子数据单元的损坏和未损坏部分两者通过写入数据流水线106,并被写入到非易失性存储器110。在某些实施例中,其中原子数据单元可以包括部分数据或损坏的数据,电源管理装置122可以包括存储有数据的指示符以指示原子数据单元的正确状态。
在检测到电力中断后,损坏处理模块516可以进一步负责停止数据向写入数据流水线106中的流动。因此,无论损坏数据是在写入数据流水线106外部还是在写入数据流水线106内部被处理,损坏处理模块516都可以在检测到电力中断后阻止任何数据进入写入数据流水线106。
完成模块518也可以与写入数据流水线106协同工作,以确保未损坏且已经确认的数据通过写入数据流水线106并存储在非易失性存储器110中。写入数据流水线106中的模块/阶段可以使用缓冲区来支持其操作。在某些实施例中,模块(例如模块302-314)仅在相关缓冲区填满之后执行操作。例如,ECC生成器304可以等待直到缓冲区填满,然后针对整个缓冲区生成ECC值。在一个实施例中,缓冲区控制器208管理写入数据流水线106中通过缓冲区的数据流。相似地,写入数据流水线106可以包括一个或多个用于写入数据流水线106中阶段的控制队列342,如上文参照图3所描述的那样。
在正常运行期间,写入数据流水线106连续流式传输数据通过写入数据流水线106,使得缓冲区始终将被填满。然而,如果发生电力中断,则当写入数据流水线106中的一个或多个缓冲区仅被部分填满时,可以停止到写入数据流水线106中的数据流。例如,如上所述,损坏处理模块516可以从写入数据流水线106中移除损坏数据,并阻止新数据流入到存储设备102中。因此,写入数据流水线106中的一个或多个缓冲区可以处于部分填满状态。如果数据未移动通过写入数据流水线106,则一旦备用电源124耗尽,数据将在电力保持时间结束时丢失。
在某些实施例中,完成模块518在电力丧失模式期间将数据清除通过写入数据流水线106中部分填充的缓冲区。在一个实施例中,完成模块518使用填充数据来填充部分填充的缓冲区。在其他实施例中,如上所述,完成模块518可以通过将缓冲区未填满部分中存储的现有数值用作填充数据等来在不能添加填充数据的情况下清除数据。因此,数据和填充在缓冲区上操作,被移出缓冲区并移动通过写入数据流水线106。写入数据流水线106中使用的缓冲区可以不是全部为相同的大小;在此类实施例中,完成模块518可在数据移动通过写入数据流水线106时监控数据,并在缓冲区部分填充的任何点处清除附加缓冲区。
在某些实施例中,完成模块518使用独特的标记、指示符或头来标识填充数据,以避免在将来把填充数据误用为实际数据。在某些实施例中,填充序列由数值1组成,因为数值“1”是非易失性存储器110单元在发生单元编程之前的状态。例如,在闪存中,编程操作将1转换为0。通过使用由1构成的填充序列,可以节省将1转换为0所需的电力。在一相关实施例中,在启动编程操作之前不需要传输构成填充数据的1,因为单元已经处于1状态。
在某些实施例中,当数据被移出写入数据流水线106,通过存储器I/O总线210,并进入非易失性存储器110中时,会在数据包中插入指示符,以指示数据是否被正确写入了。在某些实施例中,指示符被插入在数据包的头中,并指示带有该指示符的数据包前面的数据包中的数据是否被正确写入了。从而,如果数据包已成功编程,则后一数据包的头被编程以表明编程的上一数据包已成功编程的指示符。
在其他实施例中,指示符被放置载数据包尾部的脚注中,并指示包含该指示符的数据包是否被正确写入了。在一个实施例中,通过将数据向前移动一位使得数据侵入头空间来实现此操作。从而,如果头为64位头,则移位使头空间减少为63位并向脚注添加一个数位。这在数据包末尾留下一个数位,该数位可以用作指示符。在可能对边界校准敏感的实施例中,该方法允许每个数据包指示其自身状态,同时保持正确的校准。
指示符可用于标识数据包包含填充、数据因此不完整以及可能无法由系统使用。在某些实施例中,当存储设备102在发生故障后重新接通电源时,指示符用于帮助重新构建非易失性存储器110的索引和有效映射。
在某些实施例中,针对每个原子数据单元插入一个指示符。如上所述,指示符可以作为脚注被设置在原子数据单元中最后一个数据包的末尾。指示符因此可指示整个原子数据单元的数据是否已正确写入。例如,如果电力中断导致原子数据单元的仅一部分被写入,而最后一个数据包按照上述方式填充,则指示符将指示整个原子数据单元未被正确写入。此外,如上所论,在某些实施例中,没有确认会已经被发送到主机114。
在一个实施例中,允许损坏数据通过写入数据流水线106以便将经过确认的进程内正确数据清除到非易失性存储器110。通过按照上述方式来设置指示符可以标识损坏数据,该指示符将数据标记为无效/损坏。在相关的实施例中,其他形式的指示符(例如专用数据包、头、独特字符流、标记和本领域的技术人员已知的类似方法)可以取代上述指示符,来验证非易失性存储器110中存储的损坏数据。在所有这些情况下,损坏数据都不应被确认到主机114。
如上文参照图5所描述的那样,在一个实施例中,完成模块518使用独特的头、脚注、令牌、标记、图案或其他标识符来标识电源管理装置122在电力丧失模式下已成功完成必要操作,例如成功地将写入数据清除通过写入数据流水线106等,以及在电力保持时间内成功地将数据存储在非易失性存储器110上。在一个实施例中,指示符与上述用于标识损坏数据、填充数据等的指示符相同。在另一实施例中,完成模块518使用单独的指示符来标识在电力丧失模式期间必要操作的成功执行。
在一个实施例中,原子数据单元与写入数据流水线106作为单个原子数据单元处理的多个不邻接的和/或无序的逻辑块地址或其他标识符相关联。如本文所用,在单次写操作中写入不邻接和/或无序的逻辑块被称为原子写入。在一个实施例中,硬件控制器按照被接收的顺序处理操作,主机114的软件驱动程序针对单次原子写入将操作一起发送到硬件控制器,以使得写入数据流水线106可以如正常的那样处理原子写入操作。由于硬件按顺序处理操作,这确保不同的逻辑块地址或用于给定原子写入的其他标识符一起通过写入数据流水线106传输到非易失性存储器110。在一个实施例中,由于终止模块514不终止经过确认的写入操作,经过确认的原子写入被成功地存储在非易失性存储器110中,并且如果主机114未接收到确认,则主机114可以检测到原子写入由于电力丧失等而失败。在一个实施例中,一旦电力已经恢复,主机114就可以在恢复时返回、重新处理或以其他方式处理失败的原子写入和/或其他失败的或终止的操作。
在一个实施例中,主机114上的软件驱动程序可以用表示特定块是否是原子写入一部分的元数据标记来标记原子写入的块。一个示例性元数据标记为,依赖非易失性存储器110的仅写入/添加日志型协议和元数据标记等。使用仅添加型日志来存储数据和阻止任何交错块就使得原子写入成员元数据能够有一个数位。在一个实施例中,标记位可以是0,除非块是原子写入的成员,这种情况下数位为1,反之亦然。在一个实施例中,如果块是原子写入的成员并且是原子写入的最后一个块,则元数据标记可以是0,以表示该块为原子写入的最后一个块。在另一个实施例中,可以发送不同的硬件命令来标记原子写入的不同的头,例如原子写入中的第一块,原子写入的中间成员块,原子写入的结尾等。
在一个实施例中,在从电力丧失或者主机114或存储设备102的其他故障中恢复时,存储控制器104、电源管理装置122等以确定性的方向扫描非易失性存储器110上的日志(例如,在一个实施例中,日志的开头为结尾,日志的结尾为头部,数据始终在头部添加)。在一个实施例中,电源管理装置122从日志的头部向日志尾部扫描。在其他实施例中,电源管理装置122可以从日志的尾部向日志的头部扫描,从尾部向头部扫描一次并从头部向尾部扫描一次,或以其他方式扫描日志以用于恢复目的。在一个实施例中,对于原子写入恢复,当从头部扫描到尾部时,如果元数据标记位是0,则块是单块原子写入或非原子写入块。在一个实施例中,一旦元数据标记位从0变为1,则扫描的前一块并且可能还有扫描的当前块为原子写入的成员。在一个实施例中,电源管理装置122继续扫描日志,直到元数据标记变回0,此时在日志中,扫描的前一块是原子写入的最后一个成员和为该原子写入存储的第一块。
在一个实施例中,非易失性存储器110使用基于日志的仅添加型写入结构化的写入系统,其中新的写入记录在日志前方(即,在日志的头部)。在另一实施例中,存储控制器104使用垃圾收集系统、梳理器、清除器代理等来回收已删除的、过时的和/或无效的日志块。在另一实施例中,存储控制器104使用转发映射来将逻辑块地址映射到物理地址,以促进对仅添加型写入结构和垃圾收集的使用。
在另一实施例中,存储控制器104在存储设备102正常运行期间使用数据结构(例如动态树等)来跟踪进程中的写入操作。在一个实施例中,动态树是保存存储设备102已接收但尚未完成的块存储请求(在特定的写请求中)记录的数据结构。在一个实施例中,电源管理装置122确保对于单次块写入,保证即使电力丧失也会完成写入。
在所示实施例700中,打包器302包括不完整数据包702和完整数据包704。在一个实施例中,如果不完整数据包702在原子数据单元的尾部,则损坏处理模块516可以为不完整数据包702和完整数据包704中的数据发送确认到主机114。在一个实施例中,在电力丧失模式期间,完成模块518将不完整数据包702清除出打包器302。如上所述,在某些实施例中,完成模块518可以添加指示不完整数据包702中有效数据结尾的标记,将填充数据添加到数据包702,和/或以其他方式从打包器302中清除不完整数据包702。
在另一个实施例中,如果完整数据包704位于原子数据单元的尾部,而不完整数据包702来自不完整的不同原子数据单元,则损坏处理模块516为完整数据包704中数据发送确认到主机114,但不向主机114确认不完整数据包702的数据。在一个实施例中,在电力丧失模式期间,终止模块514可以将不完整数据包702作为未经确认的数据弃用,将与不完整数据包702相关的一个或多个操作作为非必要操作跳过等。
在所示实施例中,写入缓冲区320包括一个不完整页面708和两个完整页面710、712。在一个实施例中,页面708、710、712包括逻辑页面,如上所述。在一个实施例中,在电力丧失模式期间,完成模块518将数据包702、704二者或其中之一从打包器302清除,通过ECC生成器304并且到达写入缓冲区320。
在一个实施例中,写入缓冲区320将完整页面710、712基本上如正常的那样写入到非易失性存储器110,即使在电力丧失模式期间也是如此。在另一实施例中,终止模块514可以终止和/或重置非易失性存储器110上的一个或多个非必要操作,以使得写入缓冲区320可以将完整页面710、712写入到非易失性存储器110。在一个实施例中,完成模块518将不完整页面708从写入缓冲区320清除到非易失性存储器110,以使得非易失性存储器110在电力保持时间内存储不完整页面708。如上所述,在多个实施例中,完成模块518可以添加指示不完整页面708中有效数据结尾的标记,将填充数据添加到不完整页面708,和/或以其他方式从写入缓冲区320中清除不完整页面708。
图8示出了用于存储设备102中电力丧失管理的一种方法800的一个实施例。方法800开始,监控模块510确定802来自主电源连接130的电力是否低于预定阈值。在所示实施例中,如果监控模块510确定802来自主电源连接130的电力不低于预定阈值,则监控模块510继续监控802来自主电源连接130的电量。
在所示实施例中,如果监控模块510确定802来自主电源连接130的电力低于预定阈值,则监控模块510在存储设备102中启动804电力丧失模式。在电力丧失模式期间至少对于电力保持时间而言,存储设备102从备用电源124接受806电力。在所示实施例中,电力丧失模块520调整808在电力丧失模式期间存储设备102上进程内操作的执行,以使得必要的进程内操作在电力保持时间内执行,并且方法800终止。
图9示出了用于在电源故障期间获得改善的存储设备操作的一种方法900的一个实施例。方法900开始于监控902存储设备102的电力。在一个实施例中,监控模块510监控到存储设备102的电力。方法900还包括确定904到存储设备102的电力是否已经中断、降到预定阈值以下等。
如果到存储设备102的电力尚未中断,则监控模块510继续监控到存储设备102的电力是否中断。如果发生中断,则该方法包括标识906存储设备102上的未完成操作。在一个实施例中,识别模块512标识906未完成操作。在某些实施例中,识别模块512仅处理擦除操作、读取操作和编程操作。在某些实施例中,也标识其他类型的操作。
在所示实施例中,如果未完成操作为读取操作或擦除操作,则识别模块512可以确定908当前正在执行哪些读取操作和擦除操作(即在非易失性存储器110上当前发生的那些操作)以及哪些正暂挂。在一个实施例中,对于当前正在执行的读取和擦除操作,终止模块514发送重置命令以重置910受影响的存储器区域并取消相关操作。如上所述,终止模块514可以根据优先级系统执行这些动作,而作为另外一种选择,也可以选择以允许某些接近完成的操作完成。
如果未完成的读取/擦除操作当前未被执行,则终止模块514可以简单地使操作被取消914或以其他方式被跳过。例如,操作可能在一个或多个命令队列中排队并等待执行。终止模块514可以从队列中移除读取和擦除操作,使得它们不被执行。作为另外一种选择,终止模块514可以使这些操作被忽略或跳过;即,操作可以留在队列中,但不被选择进行执行。在另一实施例中,终止模块514可以忽略一个或多个保持非必要操作的非必要命令队列,并从一个或多个保持必要操作的必要命令队列中选择操作进行执行,等等。
如果未完成的操作是编程操作,则识别模块512可以确定912是否已经将确认发送至主机114。如果尚未发送确认,则终止模块514可以如上所述选择取消排队的操作或重置受影响的存储器区域。在其他实施例中,如果编程操作位于存储设备102中,可以允许编程操作完成,无论是否已经发送确认。
如果已经发送乐确认,则允许编程操作916完成。因此,与编程操作相关的数据如报告给主机114的那样被移动到非易失性存储器110。如上所述,作为方法900的一部分,损坏处理模块516可以从数据写入流水线106清理损坏数据。相似地,完成模块518可以清除部分填充的缓冲区,以确保要被编程的数据移动通过数据写入流水线106。如上所述,损坏处理模块516和/或完成模块518可以使得标识到存储设备102的损坏数据的指示符被设置。
通过减少非易失性存储设备102在电源故障期间执行的操作的数量,可以减少备用电源124的大小、成本和复杂性。在某些实施例中,重点尤其在于耗电/昂贵的操作,例如擦除操作,这种操作不太重要但消耗大量的电力。系统100可以进一步区分必要程序(针对其已经发送确认到主机114的那些程序)和非必要程序(针对其尚未发送确认的那些程序)。
自动提交存储器
上述用于电力降低管理的系统、方法和装置可以用于实施能够以CPU存储器写粒度和速度来实施存储器语义写入操作(例如,持久性写入)的自动提交存储器。如本文所用,术语“存储器语义操作”或更一般地说“存储器操作”是指具有易失性存储器访问的粒度、同步性和访问语义的操作。存储器语义操作可包括但不限于:加载、存储、取数、存数、写入、读取、设置、清除等。存储器语义操作可以以CPU级别的粒度运行(例如,单字节、字、缓存行等),并可以在操作完成时立刻返回(例如,不需要完成确认的那些同步操作等)ACM可供使用PCI-e基本地址寄存器(BAR)或其他适用的机制的计算设备和/或应用(本地和远程)使用。因此,可以使用存储器访问语义来访问ACM,例如CPU加载/存储、DMA、第三方DMA、RDMA、原子测试和设置等。本文所公开的对于ACM的直接的存储器语义访问允许绕过为了实施提交的操作而通常需要的多种系统和/或虚拟化层调用。(例如,绕过经由异步输入/输出接口的回调)。在某些实施例中,ACM可以被映射到一个或多个虚拟范围(例如,虚拟BAR范围、虚拟存储器地址等)。虚拟映射可以允许多个计算设备和/或应用共享单个ACM地址范围1021(例如,在不同的虚拟地址范围中同时访问同一ACM)。
ACM可以被预配置为在检测到故障条件(或者其他预先确定的触发事件)时提交其内容,并且同样地,ACM上执行的操作可以被视为被“即时提交”。例如,应用可以使用以CPU存储器粒度和速度运行的存储器语义写入来在ACM上执行“写入-提交”操作,而不需要相应的“提交”命令,这可以显著提高受写入-提交延迟影响的应用的性能。如本文所用,写入-提交操作是这样一种操作,即在该操作中,应用将数据写入到存储器位置(例如,使用存储器语义访问),然后发出后续提交命令来提交操作(例如,到持久性存储或其他提交机制)。性能基于写入-提交延迟的应用通常试图通过利用虚拟存储器系统(例如,使用存储器备份的文件)来缩短这一延迟。在这种情况下,应用在系统RAM中执行高性能存储器语义写入操作,但是为了提交操作,必须执行后续的“提交”命令以将每个写入操作保存到备份文件(或者其他持久性存储)。因此,每个写入-提交操作可包含其自己的单独的提交命令。例如,在数据库日志记录应用中,每个日志事务必须在日志记录下一个事务之前被写入并提交。相似地,消息传递系统(例如,存储和转发系统)必须写入并提交每个输入的消息,然后才可确认收到消息。因此,写入-提交延迟包括相对快速的存储器语义写入,后跟有速度慢很多的操作来将数据提交至持久性存储器。写入提交延迟可以包括多个因素,所述因素包括对持久性存储器的访问时间、系统调用开销(例如,RAM地址之间的转换、备份存储LBA等)等。可以从缩短的写入-提交延迟受益的应用的例子包括但不限于:数据库日志记录应用、文件系统日志记录、消息传递应用(例如,存储和转发)、信号量原语等。
本文所公开的用于自动提交存储器的系统、装置和方法可以用于通过提供对保证在发生系统故障时被提交的存储器区域的直接访问而显著提高受限于写入延迟的应用的性能。因此,应用的写入-提交延迟可以被缩短到存储器语义访问的延迟(通过系统总线进行单次写入)。
图10是包含自动提交存储器(ACM)1011的一个实施例的一种系统1000的框图。如本文所用,自动提交存储器是指被预配置为在特定条件下(例如,触发事件,例如故障条件或其他预先确定的事件)执行一个或多个自动触发的提交动作的快速、易失性存储器。相应地,当数据被写入到ACM1011时,不进行提交本身;而是数据的预配置提交被装备,并且在需要时加以执行。ACM1011可以能够自主并且以高度确信度执行预配置的提交动作,尽管系统1000正发生故障条件。同样,在ACM1011上存储数据的实体可以将数据视为被“即时提交”。
ACM1011可供一个或多个计算设备访问,例如主机1014。如本文所用,计算设备(例如主机1014)是指能够访问ACM的计算设备。主机1014可以是将ACM1011作为外围设备进行连接的计算设备;ACM1011可以连接到主机1014的系统总线1040。作为另外一种选择或作为补充,主机1014可以访问由另一台计算设备作为宿主机的ACM1011。该访问可以使用任何合适的通信机制来实施,包括但不限于:CPU编程的IO(CPIO)、端口映射的IO(PMIO)、存储器映射的IO(MMIO)、块接口、PCI-e总线、Infiniband、RDMA等。主机1014可以包括一个或多个ACM用户1016。如本文所用,ACM用户1016是指被配置为访问ACM1011的任何操作系统(OS)、虚拟操作平台(例如,具有超级管理程序的OS)、客户机OS、应用、进程、线程、实体、实用程序等。
由于在发生故障条件时,ACM1011确保自动提交其上存储的数据,所以主机1014(或ACM用户1016)可以将写入到ACM1011的数据视为被立即“提交”。因此,主机1014可以在不需要显式提交命令的情况下通过依赖于预配置的在故障(或其他条件)的情况下触发ACM1011提交数据而使用存储器写入语义(并以CPU速度和颗粒度)写入到ACM1011。
ACM1011可以包含多个自动提交缓冲区1013,每个缓冲区都包含各自的触发元数据1015。如上所述,触发元数据1015可以包含自动提交缓冲区1013的触发事件和/或ACM缓冲区1013中数据的逻辑标识符。自动提交缓冲区1013可以具有任何合适的大小,从单个扇区、页面、字节等到虚拟或逻辑页面大小(例如,80至400kb)。自动提交缓冲区1013的大小可以根据基础非易失性存储介质的存储容量和/或备用电源1024可提供的保持时间进行更改。
ACM1011被预配置或“装备”以实施一个或多个“触发的提交动作”,以对故障条件(或其他预先确定的条件)作出响应。如本文所用,故障条件可包括但不限于主机1014计算设备中的故障、主机1014的组件故障(例如,总线1040的故障)、软件故障(例如,主机1014或其他计算设备上运行的软件中的故障)、主电源连接1030断开、无效关机等。如本文所用,触发的提交动作是预配置的提交动作,该提交动作被装备为在发生触发事件(例如,故障事件或其他预先确定的事件)时由ACM1011执行。在ACM1011被请求和/或特定的ACM缓冲区1013被分配给供主机1014使用时,可以“装备”触发的提交动作。在一些实施例中,ACM1011可被配置为实施触发的提交动作来响应其他非故障性条件。例如,指向特定逻辑地址的操作(例如,存数)可以触发ACM1011。这种类型的触发可以用于在正常操作(例如,非故障)期间提交ACM1011的数据。
当自动提交缓冲区1013被映射到主机1014的存储器系统1018中时,会发生该装备。或者,装备可以作为单独的操作发生。如本文所用,装备自动提交缓冲区1013包括在动作被触发时执行完成被触发操作所需的必要配置步骤。在某些实施例中,装备还包括验证装备数据(例如,验证自动提交缓冲区1013的内容或其部分内容是否可以按照装备元数据中指定的方式进行提交)和验证ACM1011是否能够被配置为正确执行被触发操作而不发生错误或中断。验证可以确保ACM1011一旦装备了就可以在需要时实施被触发的提交动作。如果装备元数据无法被验证(例如,逻辑标识符或其他元数据无效、损坏、不可用等),装备操作可能失败;自动提交缓冲区1013上的存储器语义操作可能不被允许,直到自动提交缓冲区1013被成功地装备有有效元数据1015。例如,如果被提供用于装备操作的LBA不映射到在LBA和物理地址之间具有一对一映射的硬盘上的有效(和操作的)物理地址,则可能无法装备由该硬盘支持的自动提交缓冲区1013。在这种情况下,验证可包括查询磁盘以确定LBA是否具有有效的、相应的物理地址和/或将物理地址用作自动提交存储区1013的装备元数据1015。
所装备的被触发的提交动作响应于ACM1011(或其他实体)检测到触发事件(例如故障条件)而被实施。在某些实施例中,所装备的提交动作是可以由ACM1011执行并且不需要与主机1014或ACM1011“隔离区域”(将在下面进行讨论)之外的其他设备进行进一步通信的提交动作。因此,ACM1011可被配置为相对于主机1014和/或其其他组件自主地实施所触发的提交动作。ACM1011可以“保证”所触发的提交动作可以被提交,而不发生错误和/或尽管存在外部错误条件。因此,在一些实施例中,ACM1011的所触发的提交动作不包括和/或不需要可能引起错误的逻辑、计算和/或演算。在一些实施例中,所触发的提交动作包括将存储在易失性ACM1011上的数据提交至持久性存储位置。ACM1011可以能够自主地实施预配置的被触发的提交动作;ACM1011可以能够即使在主机1014中的故障条件、主电源断开等的情况下也实施所触发的提交动作。由于按照上述方式装备了ACM1011,所以ACM1011可以独立地实施所触发的提交动作。
ACM1011以可通信的方式耦合到主机1014,与上述主机114类似,主机1014可以包括操作系统、虚拟机、应用、处理器、中央处理单元(CPU)等。在图10的例子中,这些实体被统称为ACM用户1016。因此,如本文所用,ACM用户可指操作系统、虚拟操作系统(例如,超级管理程序)、应用、库、CPU访存-执行算法或其他程序或进程。ACM1011可通过总线1040以可通信的方式耦合到主机1014(以及ACM用户1016),总线例如是系统总线、处理器的存储器交换总线等(例如,超传输(HyperTransport)、快速通道互联(QPI:QuickPathInterconnect)、PCI总线、PCI-e总线等)。在一些实施例中,总线1040包括主电源连接1030(例如,固态存储设备1102可以通过总线1040获取电力)。尽管本文所述的一些实施例包括固态存储设备(例如固态存储设备1102),但本公开并非受限于此,而是可适于使用任何合适的非易失性存储设备和/或非易失性存储介质。如本文所用,“非易失性存储介质”是指任何合适的持久性存储介质,包括但不限于:固态存储介质、磁存储介质、光存储介质等。
ACM1011可以紧密耦合到用于执行所触发提交动作的设备。例如,ACM1011可以与控制器1004和/或备用电源1024在相同的设备、外围设备、卡上或相同的“隔离区域”中被实施。ACM1011与用于实施所触发提交动作的组件的紧密耦合定义了“隔离区域”,该区域可以提供关于ACM1011能够在故障条件的情况下实施所触发的自动提交动作的可接受的确信度水平(基于行业标准或其他计量标准)。在图10的例子中,ACM1011的隔离区域由ACM1011与自主控制器1004和备用电源1024的紧密耦合来提供(将在下面进行讨论)。
控制器1004可以包括I/O控制器,例如网络控制器(例如,网络接口控制器)、存储控制器、专用的故障条件控制器等。控制器1004可以包括固件、硬件、固件和硬件的组合等。在图10的例子中,控制器1004包括存储控制器,例如存储控制器104和/或上述的固态存储设备控制器202。控制器1004可被配置为独立于主机1014工作。同样,控制器1004可以用于实施ACM1011的所触发的提交动作,而不受上述故障条件的影响,例如主机1014(和/或ACM用户1016)中的故障和/或主电源连接1030中断。
ACM1011由主电源连接1030提供电力,主电源连接1030与上述主电源连接130相同,可以由系统总线(总线1040)、外部电源、主机1014等提供。ACM1011还包括和/或耦接到备用电源1024。备用电源1024可以在主电源连接1030发生故障时为ACM1011提供电力。当主电源连接1030发生故障时,备用电源1024能够提供至少足够的电力来使得ACM1011和/或控制器1004能够自主实施预配置的所触发的提交动作。
ACM1011可以包括易失性存储器存储。在图10的例子中,ACM1011包括一个或多个自动提交缓冲区1013。自动提交缓冲区1013可以使用易失性随机访问存储器(RAM)来实施。在一些实施例中,自动提交缓冲区1013可以被实现为ACM1011的独立组件(例如,在单独的RAM模块中)。或者,自动提交缓冲区1013可以在控制器1004、处理器、FPGA或ACM1011的其他组件中可用的嵌入式易失性存储器上实施。
每个自动提交缓冲区1013可以被预配置(装备)有各自的被触发提交动作。在一些实施例中,每个自动提交缓冲区1013可以包括其自己相应的被触发提交动作元数据1015。在一些实施例中,元数据1015标识存储在自动提交缓冲区1013上的数据要如何被提交和/或被提交至什么位置。在一些例子中,触发元数据1015可以包括与自动提交缓冲区1013中的数据相关联的逻辑标识符(例如,对象标识符、逻辑块地址、文件名称等)。当自动提交缓冲区1013被提交时,其中的数据可以与元数据1015一起被提交(例如,数据可以被存储在与逻辑标识符对应和/或与逻辑标识符相关联的物理存储位置)。在一些实施例中,元数据1015可以包括网络地址或数据提交位置的其他标识符。
如上所述,ACM1011可以与用于实施被触发提交动作的组件紧密耦合(例如,ACM1011在“隔离区域”内实施),这确保ACM1011上的数据将在故障条件情况下被提交。如本文所用,“紧密耦合”是指这样一种配置,即用于实施ACM1011的被触发提交动作的组件在相同的“隔离区域”中,并且被配置为即使在发生外部故障条件时仍工作,外部故障条件例如是电力丧失、无效关机、主机1014故障等。图10示出了ACM1011、控制器1004(其被配置为独立于主机1014工作)和备用电源1024(其被配置为在被触发提交动作完成时为控制器1004和ACM1011(包括自动提交缓冲区1013)提供电力)之间的紧密耦合。紧密耦合的例子包括但不限于在单个印刷电路板(PCB)上、在与主机1014进行电子通信的单独的外围设备中等包括控制器1004、备用电源1024和自动提交缓冲区1013。在其他实施例中,ACM1011可以紧密耦合到其他不同的组件集合(例如,冗余主机设备、冗余通信总线、冗余控制器、备用电源等)。
ACM1011可供主机1014和/或其中运行的ACM用户1016访问。可以使用存储器访问语义来提供对ACM1011的访问,存储器访问语义例如是CPU加载/存储命令、DMA命令、第三方DMA命令、RDMA命令、原子测试和设置命令等。在一些实施例中,对ACM1011的存储器语义访问是在总线1040上实施的(例如,使用如下所述的PCI-eBAR)。
在存储器语义范式中,主机1014上运行的ACM用户1016可以经由主机1014的存储器系统1018访问ACM1011。存储器系统1018可以包括由操作系统、虚拟化系统(例如,超级管理程序)、应用等实施的虚拟存储器系统、虚拟存储器管理器、虚拟存储器子系统(或类似的存储器地址空间)。ACM1011的一部分(例如,一个或多个自动提交缓冲区1013)可以被映射到存储器系统1018中,使得在映射的存储器地址范围(ACM地址范围1021)中实施的存储器语义操作在ACM1011上执行。
在一些实施例中,在存储器系统1018中的ACM地址范围1021和ACM1011之间建立关联可包括使用被触发的提交动作来预配置(装备)对应的自动提交缓冲区1013。如上所述,该预配置可包括将自动提交缓冲区1013与逻辑标识符相关联,逻辑标识符可以被存储在缓冲区1013的触发元数据1015中。如上所述,ACM1011可被配置为在故障条件情况下将缓冲区数据提交至指定的逻辑标识符。
可以使用任何合适的地址和/或设备关联机制来实施对ACM1011的存储器语义访问。在一些实施例中,通过将ACM1011的一个或多个自动提交缓冲区1013映射到主机1014的存储器系统1018中来实施存储器语义访问。在一些实施例中,该映射可以使用总线1040来实施。例如,总线1040可以包括PCI-e(或类似)通信总线,并且映射可以包括将总线1040上ACM1011的自动提交缓冲区1013的基本地址寄存器(BAR)与存储器系统1018中的ACM地址范围1021相关联(例如,主机1014将BAR映射到存储器系统1018中)。此关联可以由ACM用户1016(例如,由操作系统的虚拟存储器系统等)通过存储器层(例如虚拟存储器层(VSL)1050)的API实施。VSL1050可被配置为向ACM用户1016提供对自动提交存储器1011的访问。虚拟存储器层1050可以包括驱动程序、内核级别的应用、用户级别的应用、库等。VSL1050可以提供VSLAPI1019,其包括尤其是用于将自动提交存储器1011的部分映射到主机1014的存储器系统1018的API。VSL1050可被配置为维护元数据1051,这可包括转发索引1053,转发索引1053包括逻辑地址空间的逻辑标识符与自动提交存储器1011和/或持久性存储介质上的物理存储位置之间的关联。在一些实施例中,ACM1011可以与一个或多个映射到BAR(或其他寻址机制)的不同地址范围的虚拟范围相关联。虚拟范围可由不同的ACM用户1016访问(例如,映射)。可以根据需要,通过VSLAPI1019调用的方式,使得能够将PCIeACMBAR映射或暴露到主机存储器1018。
VSLAPI1019可以包括用于将自动提交缓冲区1013映射到存储器系统1018中的接口。在一些实施例中,VSLAPI1019可以扩展现有的存储器管理接口(例如malloc、calloc等),以将自动提交缓冲区1013映射到ACM用户应用1016的虚拟存储器范围中(例如,通过VSLAPI1019的malloc调用可以将一个或多个自动提交缓冲区1013映射到存储器系统1018中)。作为另外一种选择或作为补充,VSLAPI1019可以包括一个或多个显式自动提交映射函数,例如ACM_alloc、ACM_free等。映射自动提交缓冲区1013可以进一步包括配置主机的存储器系统1018,以确保直接在自动提交缓冲区1013上实施存储器操作(例如,阻止所映射ACM地址范围1021中的缓存存储器操作)。
主机存储器系统1018中ACM地址范围1021与ACM1011之间的关联可使得所映射的ACM地址范围1021中执行的存储器语义操作直接在ACM1011上实施(在典型的写入提交操作、额外的系统层调用等中,不涉及系统RAM或其他中间存储器)。例如,ACM地址范围1021中实施的存储器语义写入操作可以使数据被写入到ACM1011(在自动提交缓冲区1013的一个或多个上)。因此,在一些实施例中,映射ACM地址范围1021可包括禁用ACM地址范围1021中存储器操作的缓存,使得存储器操作在ACM1011上执行并且不被主机执行缓存(例如,缓存在CPU缓存中、主机易失性存储器中等)。禁用ACM地址范围1021中的缓存可包括在定义ACM范围1021时设置与ACM范围1021相关联的“不能缓存”标记属性。
如上所述,在主机存储器系统1018和ACM1011之间建立关联可包括“装备”ACM1011以实施预先确定的被触发提交动作。装备可包括为ACM1011提供逻辑标识符(例如,逻辑块地址、文件名称、网络地址、条带或镜像模式等)。ACM1011可以使用逻辑标识符来装备被触发的提交动作。例如,ACM1011可以被触发为利用逻辑标识符来将数据提交至持久性存储介质(例如,数据可以被存储在与逻辑标识符对应的物理地址处和/或逻辑标识符可以和数据一起被存储在基于日志的数据结构中)。装备ACM1011允许主机1014将ACM地址范围1021中(以及ACM1011上)执行的后续操作视为“即时提交”,从而通过即时提交语义启用存储器语义写粒度(例如,字节级别的操作)和速度。
存储器语义写入(例如针对CPU的“存储”操作)通常是同步操作,使得CPU在处理后续操作之前完成该操作。因此,ACM存储器范围1021中执行的存储器语义写入操作可以被视为“即时提交”,不需要在写入-提交操作中相应的“提交”操作,这可以显著提高受写入-提交延迟影响的ACM用户1016的性能。ACM存储器范围1021中执行的存储器语义操作可以是同步的。因此,ACM1011可被配置为防止存储器语义操作阻挡(例如,等待来自其他层的确认,例如总线1040等)。此外,ACM地址范围1021和ACM1011之间的关联允许存储器语义操作绕过通常包括在写入-提交操作中的系统调用(例如,单独的写入和提交命令及其相应的系统调用)。
主机1014和ACM1011之间的数据传输可以使用任何合适的数据传输机制来实施,包括但不限于:主机1014经由总线1040与ACM1011执行处理器IO操作(PIO);ACM1011(或其他设备)提供一个或多个DMA引擎或代理(数据移动器)以在主机1014和ACM1011之间传输数据;主机1014执行处理器缓存写入/清除操作;等。
如上所述,ACM可被配置为响应于检测到某些条件(例如,故障条件)而自动执行预配置的被触发提交动作。在一些实施例中,被触发提交动作可以包括将存储在ACM1014上的数据提交至持久性存储介质。因此,在一些实施例中,ACM(例如如上所述的ACM1011)可以包括持久性存储介质。图11为示出ACM的一个实施例的系统1100的框图,该ACM被配置为实施所触发的提交动作,这可包括将数据提交至持久性固态存储器。
图11例子中的ACM1111可以被紧密耦合到固态存储设备1102,其包括控制器1104。控制器1104可以包括写入数据流水线1106和读取数据流水线1108,这两个流水线如上述地操作。固态存储设备1102可以能够在非易失性存储器1110上保存数据,非易失性存储器例如是固态存储介质。
提交管理装置1122用于响应于触发事件,例如主电源连接中断或其他预先确定的触发事件,将数据提交至非易失性存储器1110。因此,提交管理装置1122可以包括和/或被配置为执行上述电源管理装置122的功能。提交管理装置1122可以进一步被配置为响应于故障条件(或来自主机1014和/或ACM用户1016的请求)并根据触发元数据1015将ACM1111上的数据(例如,自动提交缓冲区1013的内容)提交至非易失性存储器1110。ACM1111上的数据可以根据触发元数据1015指定的逻辑标识符(例如,逻辑块地址)而被提交至持久性存储器1110。如果非易失性存储器1110为顺序存储设备,则这可包括存储带有自动提交缓冲区1013的内容的逻辑标识符(例如,在数据包或容器头中)。如果非易失性存储器1110包括在逻辑标识符和物理地址之间具有一一对应映射的硬盘,则自动提交缓冲区1013的内容被提交至逻辑标识符所映射到的存储位置。由于与数据相关联的逻辑标识符在元数据1015中进行了预配置(例如,装备),因此,ACM1111独立于主机1014来实施所触发提交动作。在完成(和/或确认完成)所触发提交动作之前,备用电源1024为ACM1111的易失性自动提交缓冲区1013提供电力。
在一些实施例中,ACM1111以保留数据与其相应逻辑标识符之间的关联的方式来提交数据(按照元数据1015)。如果非易失性存储器1110包括硬盘,则数据可以被提交至与逻辑标识符对应的存储位置,其可以在隔离区域1301之外(例如,使用逻辑标识符来进行物理地址转换)。在其他实施例中,其中非易失性存储器1110包括顺序介质(例如固态存储介质),数据可以被顺序地存储,和/或以如上面和/或在美国临时专利申请公开No.61/373271(标题为“APPARATUS,SYSTEM,ANDMETHODFORCACHINGDATA(用于缓存数据的装置、系统和方法)”,提交于2010年8月12日,该文献全文以引入方式并入本文)中所描述的基于日志的格式被存储。顺序存储操作可包括以相应的逻辑标识符(如触发元数据1015所指示的那样)存储自动提交缓冲区1013的内容。在一个实施例中,自动提交缓冲区1013的数据和相应的逻辑标识符根据预先确定的模式共同被存储在介质上。在某些实施例中,逻辑标识符先于自动提交缓冲区1013的内容被存储。逻辑标识符可以被包括在含有数据的数据包的头中,或者采用其他顺序和/或基于日志的格式。数据和逻辑标识符之间的关联可允许如上所述地重新构建数据索引。
如上所述,ACM1011的自动提交缓冲区1013可以被映射到主机1014的存储器系统1018,从而允许ACM用户1016使用存储器访问语义来访问这些缓冲区1013。在一些实施例中,逻辑标识符和自动提交缓冲区1013之间的映射可以利用主机1014的虚拟存储器系统。
例如,存储器系统1018内的地址范围可以与“存储器映射的文件”关联。如上所述,存储器映射的文件是一种虚拟存储器抽象,其中文件、文件的一部分或块设备被映射到存储器系统1018的地址空间,用于固态存储设备1102的数据上更有效的存储器语义操作。自动提交缓冲区1013可以利用类似的抽象而被映射到主机存储器系统1018。ACM存储器范围1021因此可以由存储器映射的文件表示。备份文件必须存储在隔离区域1301内的非易失性存储器1110(参见下面的图13)或者也受隔离区域1301保护的另一个网络连接的固态存储设备1102上。自动提交缓冲器1013可仅与文件的一部分对应(文件本身可能很大,超过自动提交缓冲区1031和/或非易失性存储器1110的容量)。当文件的一部分被映射到自动提交缓冲区时,ACM用户1016(或其他实体)可以标识在文件内所需的偏移以及将以ACM特性运行(例如,具有ACM语义)的文件中的块范围。该偏移将具有预定义的逻辑标识符,并且逻辑标识符和范围可以用于触发文件中映射的自动提交缓冲区1013的提交。或者,块(或块的范围)进入文件时的单独偏移可以用作触发器,用于提交映射到文件的自动提交缓冲区1013。例如,无论何时对单独偏移或块范围中的数据执行存储器操作(加载、存储、存数等),都会导致触发事件,该触发事件使得映射到文件的自动提交缓冲区1013被提交。
然而,基础逻辑标识符可能变化(例如,由于文件中的其他部分发生变化、文件大小变化等)。发生变化时,VSL1050(经由VSLAPI1019、ACM用户1016或其他实体)可以更新相应自动提交缓冲区1013的触发元数据1015。在一些实施例中,VSL1050可被配置为向主机1014(操作系统、超级管理程序或其他应用)查询对与自动提交缓冲区1013关联的文件的逻辑标识符的更新。查询可由VSLAPI1019发起和/或可作为到主机1014中的挂钩(回调机制)而被提供。当ACM用户1016不再需要自动提交缓冲区1013时,VSL1050可以对上述缓冲区1013取消分配。取消分配可以进一步包括通知主机1014不再需要对逻辑标识符的更新。
在一些实施例中,文件可以在多个存储设备中映射(例如,存储设备可以被形成为RAID组,可以包括虚拟存储设备等)。自动提交缓冲区1013和文件之间的关联可以被更新以反映文件映射。这允许自动提交缓冲区1013将数据提交至正确的存储设备。自动提交缓冲区的触发元数据可以响应于对上述基础文件映射和/或分区的更改而被更新。或者,在自动提交缓冲区1013正在使用时,文件可以被“锁定”到特定映射或分区。例如,如果需要文件的重新映射/重新分区,则相应的自动提交缓冲区1013可以将数据提交至文件,然后在新映射/分区方案下重新与文件相关联。VSLAPI1019可以包括接口和/或命令,以根据文件的更改来使用VSL1050锁定文件、释放文件和/或更新触发元数据1015。
如上所述,将数据提交至固态非易失性存储器1110可以包括存储控制器1104从ACM1111自动提交缓冲区1013中访问数据、将数据与相应的逻辑标识符相关联(例如,标记数据)以及将标记的数据载入到写入数据流水线1106。在一些实施例中,为了确保存在能够保持ACM数据的页面编程命令,存储控制器1104在工作期间保持两个或更多个暂挂的页面程序。在写入如上所述的电力丧失标识符(电力切断填充模式)之前,可以将ACM数据提交至固态非易失性存储器1110。
图12示出了一种包括多个自动提交存储器的系统1200的一个实施例。在图12的例子中,主机1014实施的存储器语义访问可以被存储在多个ACM上,包括1011A和1011B。在一些实施例中,主机数据可以在ACM1011A和1011B之间进行镜像。可以使用多播总线1040来实施镜像。作为另外一种选择或作为补充,ACM中的其中一个(AM1011A)可被配置为将数据重新广播到ACM1011B。ACM1011A和1011B可以互为本地的(例如,在相同的局部总线上)。或者,ACM1011A和1011B可以位于不同的系统上,并且可以经由支持远程数据访问的总线(例如Infiniband、远程PCI总线、RDMA等)以可通信的方式进行耦接。
在一些实施例中,ACM1011A和1011B可以实施条带方案(例如,RAID方案)。在这种情况下,主机数据的不同部分可以被发送到不同的ACM1011A和/或1011B。驱动器级软件,例如VSL1050和/或操作系统1018实施的卷管理器可以按照条带模式将主机数据映射到正确的ACM。
在一些配置中,ACM提供的存储器访问语义可以根据特定的存储条带模式进行更改。例如,如果主机数据从ACM1011A镜像到ACM1011B,则在ACM1011A验证数据已经发送到ACM1011B之前(在“即时提交”语义下),存储器语义写入不会完成(和/或不会返回确认)。当ACM用于条带模式中时,可以实施类似的更改(例如,在特定操作的条带模式完成之前,不会返回和/或确认存储器语义写入)。例如,在写入操作的副本中,ACM1011A可以存储自动提交缓冲区的数据,然后使数据复制到ACM1011B。在数据被复制到ACM1011B之前,ACM1011A不会返回对写入操作的确认(或允许数据被读取)。
镜像的ACM设备1011A和1011B的用途可以在高可用性配置中使用。例如,ACM设备1011A和1011B可以在分开的主机计算设备中实施。对设备1011A和1011B的存储器语义访问在上述设备之间进行镜像(例如,使用PCI-e访问)。设备可被配置为以高可用性模式运行,使得可以不需要设备代理。因此,触发操作(以及其他存储器语义访问)可以跨两个设备1011A和1011B进行镜像,但设备1011A和1011B可以不必等待来自另一设备的“确认”便可继续处理,这从写入-提交延迟路径中移除了另一设备。
图13是一种提交管理装置1122的一个实施例1300的框图。提交管理装置1122可以(例如,在隔离区域1301中)紧密耦合到自动提交存储器1011、固态存储控制器1304、固态存储介质1310和/或备用电源1324。紧密耦合可包括在同一裸片、同一外围设备上、在同一卡(例如,同一PCB)上、在预定义的隔离区域内等实施这些组件132、1011、1304、1310和/或1324。紧密耦合可以确保在故障条件情况下提交ACM缓冲区1013的被触发提交动作。
提交管理装置1122包括监控模块1310,该模块可被配置为检测故障条件,例如电力丧失等。监控模块1310可被配置为感测触发事件,例如故障条件(例如,电力故障、通信故障、主机或应用故障等),并且作为响应,启动提交模块1320以启动装置1122的提交丧失模块(故障丧失模式)和/或触发其他模块(例如模块1312、1314、1316、1317和/或1318)的操作。提交模块1320包括识别模块1312、终止模块1314、损坏处理模块516和完成模块1318,这些模块可以如上所述地工作。
识别模块1312可以进一步被配置为标识要针对ACM1011的每个ACM缓冲区1013执行的被触发提交动作。如上所述,识别模块1312可以根据相对重要性为操作指定优先级,其中被确认的操作比未确认的操作具有更高的优先级。被装备的要提交的自动提交缓冲区1013的内容可以被分配高优先级,因为由其支持“即时提交”语义。在一些实施例中,与写入数据流水线1306的被确认内容相比,ACM被触发提交动作可以具有更高的优先级。或者,被装备的自动提交缓冲区1013的内容可被分配“次最高”优先级。优先级分配可为用户可配置的(通过API、IO控制(IOCTRL)等)。
终止模块1314终止非必要操作,以允许“必要操作”继续进行,如上所述。终止模块1314可被配置为保持“装备为”要提交的ACM1011的部分(例如,装备的自动提交缓冲区)并且可以终止向自动提交存储器1011的未装备(未使用)部分供电。终止模块1314可以进一步被配置为,当提交那些缓冲区的内容时,终止向ACM1011的一部分(各个自动提交缓冲区1013)供电。
损坏处理模块1316标识写入数据流水线1306中的损坏(或可能损坏)数据,如上所述。模块1316可以进一步被配置为标识损坏的ACM1011数据(根据上面的图5B,在电力干扰或其他故障条件期间被写入到ACM1011的数据)。损坏处理模块1316可被被配置为防止在触发提交动作中提交ACM1011上的损坏数据。
ACM模块1317被配置为访问自动提交存储器1011中的被装备的自动提交缓冲区、标识与其关联的触发元数据(例如,对于每个触发元数据用相应的逻辑标识符标记数据),并将数据(和元数据)载入到固态存储控制器1304的写入数据流水线。在一些实施例中,自动提交缓冲区1013的逻辑标识符(或其他元数据)可以被存储在缓冲区1013自身中。在这种情况下,自动提交缓冲区1013的内容可以被直接流式传输到顺序的和/或基于日志的存储设备,而无需首先标识和/或标记数据。ACM模块1317可以将数据载入在写入数据流水线1306中的当前数据之前或之后。在一些实施例中,从ACM1011提交的数据用于“填充”写入数据流水线1306的写入缓冲区的剩余部分(在移除潜在的损坏数据之后)。如果写入缓冲区的剩余容量不足,则写入缓冲区被写入到固态存储器1310,并且下一个写入缓冲区使用剩余的ACM数据来填充。
如上所述,在一些实施例中,在电力丧失的情况下,固态存储控制器1304可以保持被装备的写入操作(逻辑页面写入)以存储写入数据流水线1306的内容。在与ACM1011一起使用时,可以保持两个(或更多个)被装备的写入操作(逻辑页面写入),以确保在故障条件的情况下,可以提交写入数据流水线1306和ACM1011的所有被装备的缓冲区1013这二者的内容。由于在发生触发事件时,写入缓冲区320中的逻辑页面可能部分填充,所以写入缓冲区320的大小可以被调整以容纳至少比ACM1011的所有ACM缓冲区1013中所存储的所有数据的总量和已经确认为持久保存的写入数据流水线中的数据容量多出一个逻辑页面的数据。这样,写入缓冲区320中将会有足够的容量来响应于触发事件而完成ACM1011的持久保存。因此,自动提交缓冲区1013的大小可以根据ACM1011能提交的数据量进行调整。一旦达到这一阈值,VSL430就可以拒绝对于使用ACM缓冲区1013的请求,除非有更多缓冲区变为可用的。
在图14的所示实施例中,写入缓冲区320包含一个不完整的页面1321和两个完整的页面1320、1319。在一个实施例中,页面1321、1320、1319包括逻辑页面,如上所述。被装备的写入操作可以各自对应于页面1321、1320、1319中的其中一个。两个完整页面1319、1320可以对应于两个单独的自动提交缓冲区。被装备的写入操作/命令被配置为将页面1320和1319自主地写入到非易失性存储介质1310(不再需要任何寻址信息或计算)。在一些实施例中,可以仅使用ACM1011的隔离区域1301内的组件来写入页面1320和1319。部分填充的页面1321可以包括在发生故障条件时流水线中的数据。
完成模块1318被配置为清除写入数据流水线,而无论某些缓冲区、数据包和/或页面是否完全填满。完成模块1318被配置为在ACM1011上的数据(如果有的话)已经被载入到写入数据流水线1306中之后执行清除(并插入相关的填充数据)。完成模块1318可以进一步被配置为将完成指示符载入到写入数据流水线,这些指示符可用于指示发生了故障条件(例如,故障条件填充模式)。在从ACM1011载入被触发数据之后,该填充模式可以被包含在写入数据流水线1306中。
如上所述,备用电源1324可被配置为提供足够的电力来存储ACM1011的内容以及写入数据流水线1306中的数据。存储该数据可包括一个或多个写入操作(例如,页面编程操作),其中数据被持久性存储在固态存储介质1310上。如果写入操作失败,则可在不同的存储位置上尝试启动另一个写入操作。在数据被成功地持久存储到固态存储介质1310上之前,可以持续尝试。备用电源1324可被配置为提供足够的电力用于完成多个此类页面编程操作中的每一个。因此,备用电源1324可被配置为提供充足的电力以完成存储ACM1011和/或写入数据流水线1306的数据所需的两次(或更多次)页面编程写入操作。
图14是示出了一种包含自动提交存储器的系统1400的框图。主机1014可以经由存储总线1040并通过固态存储控制器的写入数据流水线1106针对固态存储介质1310执行存储操作(写入数据)。主机1014还使用存储器访问语义将数据写入到ACM1011的ACM缓冲区1013(并且也通过存储总线1040,通过例如,将总线1040的BAR映射到主机1014的地址空间中)。提交管理装置1122(和监控模块1310)监控主机1014(和其他系统组件,未示出)的故障条件。当检测到故障条件时,监控模块1310实施提交模块1320,如上所述。
ACM模块1317标识ACM1011的所触发自动提交缓冲区1013,使用相应的逻辑标识符标记数据(每个触发元数据),并将标记数据载入到写入数据流水线1106中,如上所述。可以根据由识别模块1312所确定的相对优先级来载入被装备的ACM缓冲区1013的数据。
如上所述,完成模块1318在故障模式期间将数据通过部分填充缓冲区清除到写入数据流水线1106中。完成模块1318可以使用填充数据填充部分填充缓冲区,填充数据可包括故障模式指示符。在ACM1011中的被触发数据已经被流式传输到写入数据流水线1106之后,可包括填充数据和/或指示符。ACM数据可以用于填充写入数据流水线中未完成的数据包(例如,702)。
如果写入缓冲区320的剩余容量不足以存储所触发的ACM数据,写入缓冲区320被提交至固态存储介质1310,下一个写入缓冲区320被填充以ACM数据。因此,在与ACM1011一起使用时,鉴于写入数据流水线1106的固态存储控制器可以包括持续装备的写入操作(足以提交写入缓冲区320),可以持续装备两个或更多个写入操作。连续装备的写入操作的数量可以根据ACM1011的容量发生变化(例如,如果ACM1011可以包括足够的被触发数据来填冲两(2)个额外的写入操作,则可以连续装备三个(或更多个)写入操作)。如上所述,备用电源1324可被配置为提供足够的电力来完成所需的写入操作。在一些实施例中,备用电源1324可以能够为额外的写入操作提供电力以允许失败的写入操作进行一次或多次“重试”以写入固态存储介质1310。在一些实施例中,两个或更多个写入操作可以同时发生(例如,在固态存储介质1310的分开的存储区上并发进行,如上所述)。同时写入操作可以减少将ACM1011的数据提交至固态存储介质1310所需的保持时间。作为另外一种选择或作为补充,某些写入操作可以并行发生。例如,当第一写入操作正发生时,第二写入操作可以正在进行(例如,在第一写入操作正在进行的同时,第二写入操作的数据可以被流式传输到固态存储介质1310的写入或编程缓冲区),这可以类似的方式减少对保持时间的需求。如图14中所示,ACM1011、提交管理装置1122、写入数据流水线1106、固态存储介质1310和备用电源1324在“隔离区域”1401中紧密耦合。隔离区域1401内的紧密耦合可以将ACM1011(和相关组件)与外部故障条件隔离,这可以确保ACM缓冲区1013上的被触发数据在故障条件情况下被提交至固态存储介质1310。主机1014(和/或其上实施的应用)可依赖于这种确保来将ACM缓冲区1013上执行的存储器语义操作作为“即时提交”进行处理。
图15为示出了使用存储器访问语义来访问ACM的一种主机计算设备1014的框图1500。主机计算设备1014可以包括处理器(CPU1013),该处理器可以包括但不限于通用处理器、特定于应用的处理器、可重新配置的处理器(FPGA)、处理器组合等。一个或多个ACM用户1016(例如,操作系统、应用等)在主机1014上运行。
主机1014可经由总线1040(其可包括PCI-e总线等)以可通信的方式耦接到ACM1011。可供主机1014访问的ACM1011的部分可以在自动提交缓冲区1013中被映射到主机1014。在一些实施例中,映射包括将主机存储器系统1018内的地址范围与ACM1011的自动提交缓冲区1013相关联。这些关联可以通过使用主机1014上提供的VSLAPI1019和/或VSL1050来启用。
VSL1050可以包括库和/或提供接口(例如,VSLAPI1019)以实施上述存储器访问语义。API1019可以被用于经由存储器语义访问模块1522使用存储器访问语义来访问ACM1011。其他类型的访问,例如对固态存储器1502的访问可以经由块设备接口1520来提供。
VSL1050可被配置为将ACM1011的自动提交缓冲区1013存储器映射到存储器系统1018(经由VSLAPI1019)。存储器映射可以使用存储器系统1018的虚拟存储器抽象。例如,可以使用存储器映射的文件抽象来实施存储器映射。在该例子中,操作系统(或应用)1016将文件指定为映射到存储器系统1018。文件与逻辑标识符1025(例如,逻辑块地址)相关联,该逻辑标识符可以由文件系统、操作系统1016等保持。
存储器映射的文件可以与ACM1013的自动提交缓冲区1013相关联。所述关联可以由VSL1050使用总线1040来实施。VSL1050将存储器映射的文件的地址范围(在存储器系统1018中)与ACM1011上的自动提交缓冲区1013的设备地址相关联。所述关联可以包括将PCI-eBAR映射到存储器系统1018。在图15的例子中,存储器系统1018中的ACM地址范围1021与自动提交缓冲区1013相关联。
如上所述,向ACM1011提供存储器访问语义可以包括“装备”ACM1011以在发生故障时提交其上存储的数据。预配置的装备确保在发生故障的情况下,ACM1011上存储的数据将被提交至正确的逻辑标识符。触发条件的预配置使得应用1016能使用“即时提交”存储器访问语义来访问自动提交缓冲区1013。用于装备自动提交缓冲区的逻辑标识符可以从操作系统、存储器系统1018(例如,虚拟存储器系统)等中获取。
VSL1050可被配置为用逻辑标识符装备自动提交缓冲区1013(例如,自动地,通过回调和/或经由VSLAPI1019)。可以装备每个自动提交缓冲器1013以将数据提交至不同的逻辑标识符(不同的LBA、持久性标识符等),这可以允许ACM1011提供对大量不同的并发ACM用户1016的存储器语义访问。在一些实施例中,装备自动提交缓冲区1013包括用逻辑标识符设置触发元数据1015。在图15的例子中,ACM地址范围1021与逻辑标识符1025相关联,并且所关联的自动提交缓冲区的触发元数据1015被转被以相应的逻辑标识符1025。
VSL1050可以使用I/O控制(IOCTL)命令装备自动提交缓冲区,包括ACM地址范围1021、逻辑标识符1025和/或要装备的自动提交缓冲区1013的指示符。VSL1050(通过VSLAPI1019)可以提供接口以解除装备或“分离”自动提交缓冲区1013。解除装备命令可如上所述使自动提交缓冲区1013的内容被提交(例如,提交至固态存储设备1502)。分离可以进一步包括“解除装备”自动提交缓冲区1013(例如,清除元数据1015)。VSL1050可被配置为跟踪存储器系统1018中的地址范围与自动提交缓冲区1013之间的映射,以使得自动执行分离命令。
作为另外一种选择或作为补充,VSL1050可以被集成到主机1014的操作系统(或虚拟操作系统,例如,超级管理程序)中。这可以允许虚拟存储器需求分页系统使用自动提交缓冲区1013。操作系统可以(通过VSLAPI1019或其他集成技术)映射/装备自动提交缓冲区,以供ACM用户1016使用。在ACM用户1016和/或其内部需求分页系统请求时,操作系统可以发出提交命令。因此,操作系统可将ACM1011作为另一个一般可用的虚拟存储器资源来使用。
一旦ACM用户1016已经将ACM地址范围1021映射到自动提交缓冲区1013并且已经装备了缓冲区1013,ACM用户1016就可以使用存储器访问语义访问资源,并且可以在存储器访问已经完成后立即将存储器访问视为“在逻辑上”被提交。ACM用户1016可以将针对ACM地址范围1021的存储器语义访问视为被“即时提交”,因为ACM1011被配置为提交自动提交缓冲区的内容(至逻辑标识符1025)而无论是否遇到故障条件。因此,ACM用户1016可以不需要执行单独的写入和提交命令(例如,单次存储器语义写入足以实施写入-提交)。此外,本文所公开的自动提交缓冲区1013和ACM1011之间的映射取消由于通常在写入-提交路径中引入延迟的函数调用、系统调用甚至是超级管理程序(如果ACM用户1016正在虚拟机中运行)所引起的开销。ACM用户1016的写入-提交延迟时间可以因此减少为访问ACM1011自身所需的时间。
如上所述,ACM1011可以在虚拟机环境中使用,其中一个或多个ACM用户1016在由超级管理程序维护的虚拟机内运行。超级管理程序可被配置为向虚拟机内运行的ACM用户1016提供对VSLAPI1019和/或VSL1050的访问。超级管理程序可以访问VSLAPI1019以使逻辑标识符与ACM1011的自动提交缓冲区1013相关联,如上所述。超级管理程序随后可以将一个或多个装备的自动提交缓冲区1013提供给ACM用户1016(例如,通过将虚拟机存储器系统中的ACM地址范围1021映射到一个或多个自动提交缓冲区1013)。ACM用户1016随后可以使用存储器访问语义(例如,有效的写入-提交操作)访问ACM1011,而不会由于尤其是超级管理程序和其他系统调用而产生开销。超级管理程序可以进一步被配置为维护与自动提交缓冲区1013相关联的ACM地址范围1021,直到被ACM用户1016显式释放(例如,防止映射在使用期间发生更改)。
在一些实施例中,ACM用户1016可被调整为以ACM1013提供的“即时提交”存储器访问语义来运行。例如,由于所装备的自动提交缓冲区1013被触发以在发生故障的情况下提交(不需要显式提交命令),因此,ACM用户1016对ACM1011执行存储器访问的顺序可能变得非常重要。ACM用户1016可以使用存储器屏障、编译器标记等来确保存储器访问操作的正确排序。
例如,在ACM用户1016尝试通过块设备接口1520读取(经由存储器语义接口1522)存储在ACM1011上的数据时,可能会发生在写入之前读取的风险。在一些实施例中,VSL1050可以维护跟踪逻辑标识符和/或存储器系统1018中的地址范围与自动提交缓冲区1013之间关联的元数据。当ACM用户1016(或其他实体)尝试访问映射到自动提交缓冲区1013的逻辑标识符时(例如,通过块设备接口1520),VSL1050将请求引导到ACM1011(经由存储器语义接口1522),以防止发生在写入之前读取的风险。
VSL1050可被配置为提供“一致性”机制,用于获取ACM1011的一致状态(例如,屏障、快照或逻辑副本)。可以使用由VSL1050维护的元数据来实施一致性机制,如上所述,VSL1050可以跟踪ACM1011中所触发的自动提交缓冲区1013。一致性机制可以包括VSL1050提交所有被触发自动提交缓冲区1013的内容,使得维护持久性存储器的状态(例如,在固态存储器1502或其他持久性存储器上存储自动提交缓冲区1013的内容)。
如上所述,ACM用户1016可以使用存储器访问语义以RAM粒度访问ACM1011,其中确保在必要时将提交操作(在故障、电力丧失等的情况下)。这尤其是通过主机1014的存储器系统1018与相应的自动提交缓冲区1013之间的映射而能实现;映射到自动提交缓冲区1013的ACM存储器范围1021内实施的存储器语义操作直接在缓冲区1013上实施。如上所述,主机1041和ACM1011之间的数据传输可以使用任何合适的数据传输机制来实施,包括但不限于:主机1014经由总线1040执行与ACM1011的处理器IO操作(PIO)(例如,MMIO、PMIO等);ACM1011(或其他设备)提供一个或多个DMA引擎或代理(数据移动器)以在主机1014和ACM1011之间传输数据;主机1014执行处理器缓存写入/清除操作;等。在总线1040上传输数据可以包括发出后面跟有“读取”的总线“写入”操作。在总线1040(例如,PCI总线)不提供显式写入确认的情况下,可能需要后续的“读取”。
在一些实施例中,ACM用户可能希望将数据批量传输到ACM1011,而不是使用多个小型事务。批量传输可以使用任何合适的批量传输机制来实施。批量传输机制可以基于总线1040的特征。例如,在包括PCI-e总线1040的实施例中,批量传输操作可以使用批量寄存器存储CPU指令来实施。
相似地,某些旨在用于ACM1011的数据可以在处理器缓存中进行缓存。处理器缓存中缓存的数据可以使用CPU缓存清除指令等来显式清除到ACM1011(清除到特定的自动提交缓冲区1013)。
上述DMA引擎也可以用于在ACM用户1016和ACM1011之间执行批量数据传输。在一些实施例中,ACM1011可以实施一个或多个DMA引擎,ACM用户1016可以使用VSL1050(通过VSLAPI1019)对DMA引擎进行分配和/或访问。DMA引擎可以包括用于在本地系统总线上传输数据的本地DMA传输引擎以及用于使用网络总线、网络接口等传输数据的RDMA传输引擎。
在一些实施例中,ACM1011可以在缓存应用中使用。例如,固态存储设备1502可以用作其他备份存储器的缓存,其他备份存储器例如是硬盘、网络连接的存储器等(未示出)。通过配置ACM1011的一个或多个自动提交缓冲区1013以将数据提交至固态存储器1502中的适当的逻辑标识符,ACM1011的一个或多个自动提交缓冲区1013可以用作到固态存储器1502缓存(写入-备份缓存)的前端。被触发的缓冲区1013可如上所述供ACM用户1016访问(例如,通过将缓冲区1013映射到主机1014的存储器系统1018中)。故障条件使得缓冲区1013的内容被提交至固态存储器1502缓存。在故障条件清除时,固态存储器1502中缓存的数据(由自动提交缓冲区1013在故障条件下提交)将被视为写入缓存中的“脏数据”并且可用于和/或迁移到备份存储器。将ACM1011用作缓存前端可以提高性能和/或降低缓存设备的磨损。
在一些实施例中,ACM1011的自动提交缓冲区1013可以被操作系统、虚拟存储器系统和/或主机1014的一个或多个CPU用作存储器写入-备份缓存。作为CPU写入-备份缓存的一部分,自动提交缓冲区1013中缓存的数据可以被装备,以作为组提交。在提交时,自动提交缓冲区1013可以提交数据和关联的缓存标记这二者。在一些实施例中,写入-备份缓存自动提交缓冲区1013可以被装备以ACM地址(或装备以预定的写入-备份缓存地址)。在数据被恢复时,逻辑标识符信息(例如LBA等)可以从日志或其他数据确定。
在一些实施例中,VSL1050可以包括库和/或适用于一个特定组的ACM用户1016的发布API。例如,VSL1050可以提供适用于性能取决于写入-提交延迟的应用的即时提交的日志库(ICL)1552,例如事务日志(数据库、文件系统和其他事务日志)、存储和转发消息传递系统、持久性对象缓存、存储设备元数据等。
ICL1552提供用于将ACM1011的自动提交缓冲区1013映射到ACM用户1016的存储器系统1018中的机制,如上所述。ACM用户1016(或ICL1552自身)可以实施有效的“提供者/使用者”范式以进行自动提交缓冲区1013的分配、装备和访问。例如,“提供者”线程或进程(在ACM用户1016的应用空间中)可以用于为ACM用户1016分配和/或装备自动提交缓冲区1013(例如,将自动提交缓冲区1013映射到主机1014的存储器系统1018内的地址范围,用逻辑标识符装备自动提交缓冲区1013等)。ACM用户1016的“使用者”线程或进程随后可以访问预先分配的自动提交缓冲区1013。在该方法中,分配和/或装备步骤不在使用者线程的写入-提交延迟路径内。ACM用户1016的使用者线程可以将针对映射到被触发自动提交缓冲区的存储器范围的存储器语义访问(ACM存储器范围1021)视为被“即时提交”,如上所述。
通过将即时提交的日志库(ICL)1552(或ACM用户1016)的提供者线程配置为提前分配和/或装备自动提交缓冲区1013,可以增强ACM用户1016的使用者线程的性能。在需要下一个自动提交缓冲区1013时,ACM用户1016可以从提供者维护的池中访问预先分配/装备的缓冲区。提供者也可以在需要时执行清理和/或提交操作。例如,如果写入到自动提交缓冲区的数据将被提交至持久性存储器,则提供者线程(或写入-提交路径外的其他线程)可以导致数据被提交(使用VSLAPI1019)。提交数据可以包括为ACM用户1016的使用者线程重新分配和/或重新装备自动提交缓冲区1013,如上所述。
上述“提供者/使用者”方法可以用于实施“滚动更新缓冲区”。ACM用户1016可以实施使用预定量的“滚动”数据的应用。例如,ACM用户1016可以实施存储“最近20条入站消息”的消息队列,和/或ACM用户1016可以管理固态存储设备的指令(例如,持久性修正指令等)。提供者线程可以分配至少具有足够容量来容纳ACM用户1016所需的“滚动数据”(例如,足够容量来容纳最近20条入站消息)的自动提交缓冲区1013。使用者线程可使用存储器访问语义(加载和存储调用)来访问缓冲区,如上所述。VSLAPI1019(或ACM用户1016的提供者线程)可以监控自动提交缓冲区1013的使用情况。当使用者线程接近自动提交缓冲区1013的末尾时,提供者线程可以重新初始化缓冲区1013的“头”,方法是通过使数据被提交(如果需要的话),将数据映射到存储器系统1018内的其他范围,以及用适当的逻辑标识符装备自动提交缓冲区1013。当使用者继续访问缓冲区1013时,使用者将“滚动过”的新位置处的新数据存储到被提供者线程重新初始化了的自动提交缓冲区1013,并继续运行。在一些情况下,写入到上述滚动更新缓冲区的数据可能永远不被提交至持久性存储设备(除非发生故障条件或者其他触发条件)。此外,如果自动提交缓冲区1013的容量足以容纳ACM用户的滚动数据,则提供者线程可以不必执行上述重新初始化/重新装备操作。而是,提供者线程可以简单地重新映射包含已经“滚动过”的数据的自动提交缓冲区1013(和/或弃用其中的“滚动过”的数据)。
在另一个例子中,提供者线程可以维护四(4)个或更多个ACM缓冲区1013。第一ACM缓冲区1013可被装备并准备接受来自使用者的数据,如上所述。第二ACM缓冲区1013可由使用者线程主动访问(例如,填充),如上所述。第三ACM缓冲区1013可以正在进行预装备(例如,重新初始化,如上所述),而第四ACM缓冲区1013可以“正在清空”(例如,提交至持久性存储器,如上所述)。
在一些实施例中,上述ICL1552和/或滚动日志机制可用于为文件系统(例如,ZFS文件系统)的同步写入实施意向日志。日志数据(ZIL)可以相当小(1至4千兆字节)并且通常为“只写”。仅可针对文件系统恢复来执行读取。一个或多个自动提交缓冲区1013可用于使用滚动日志和/或需求分页机制来存储文件系统数据,如上所述。
ICL库1552可被配置为在高可用性模式下运行,如上文结合图12所述。在高可用性模式下,VSL1050和/或总线1040将与存储器语义访问相关的命令发送到两个或更多个ACM1011,其中每个ACM1011都可以实施所请求的操作和/或可以在故障条件情况下被触发来提交数据。
本文所公开的ACM1011可用于支持其他类型的应用,例如持久性同步原语。同步原语可以包括但不限于:信号量、互斥、原子计数、测试和设置等。
同步原语可以在自动提交缓冲区1013上实施。希望访问同步原语的ACM用户1016(或其他实体)可以将自动提交缓冲区1013映射到存储器系统1018中。在一些实施例中,每个ACM用户1016可以将同步原语自动提交缓冲区1013映射到存储器系统1018中其自己各自的地址范围。由于不同的地址范围都映射到相同的自动提交缓冲区1013,因此,所有这些地址范围都将显示同步原语的相同状态。远程计算设备上的ACM用户1016可以使用RDMA网络或其他远程访问机制(例如,Infiniband、远程PCI等)将同步原语自动提交缓冲区1013映射到它们的存储器系统中。
在一些实施例中,VSL1050可以包括持久性同步原语库(DSL)1554以有利于ACM1011上同步原语的创建和/或访问。DSL1554可如上所述被配置为有利于一对多映射(一个自动提交缓冲区1030对应存储器系统1018中的多个地址范围)。
访问信号量原语的ACM用户1016可以将其访问视为是“持久性”,因为如果在使用同步原语期间发生故障条件,则同步原语的状态将如上所述继续保持(同步原语的自动提交缓冲区1013将被提交至固态存储器1502或其他持久性存储器)。
如上所述,VSL1050可用于将文件映射到主机1014的存储器系统1018(虚拟地址空间)中。文件可以在“即时提交存储器”(ICM)模式下进行映射。在这种模式下,确保对存储器映射的文件所做的所有更改均反映在文件中,即使发生故障条件也是如此。通过将需求分页系统配置为针对ICM文件的所有“脏”页面使用ACM1011的自动提交缓冲区1013,可以提供这种保证。因此,当发生故障条件时,脏页面将被提交至文件,而不会丢失任何数据。
在一些实施例中,VSL1050可以包括ICM库(ICML)1556以实施这些功能。ICML1556可以与主机1014的操作系统和/或虚拟存储器系统集成。当ICM存储器映射的文件的页面变为脏页面时,ICML1556准备自动提交缓冲区1013来容纳脏页面。自动提交缓冲区1013被映射到主机1014的存储器系统1018,并且被触发以提交至与存储器映射的文件相关联的逻辑标识符。如上所述,对存储器系统1018中页面的更改在自动提交缓冲区1013上实施(经由存储器语义访问模块1522)。
ICML1556可被配置为在发生故障条件时和/或在主机1014的需求分页系统需要将自动提交缓冲区1013用于其他目的时提交存储器映射文件的自动提交缓冲区1013。是否从脏页面中“分离”自动提交缓冲区1013可以由需求分页系统、VSL1050(例如,使用最近最少使用的(LRU)度量等)、或由某其他实体(例如,ACM用户1016)决定。当自动提交缓冲区被分离时,VSL1050可以使其内容被提交。或者,自动提交缓冲区1013的内容可以被传输到系统RAM,文件的虚拟存储器映射在此处可以转换为使用RAM映射机制。
在一些实施例中,VSL1050(或ICML1556)可被配置为提供一种机制来向操作系统(虚拟存储器系统等)通知存储器映射文件的页面即将在ACM用户1016写入数据之前变成脏页面。该通知可允许操作系统为脏页面提前准备自动提交缓冲区1013,防止在实际发生写入时出现停顿(在映射和装备自动提交缓冲区时)。该通知和自动提交缓冲区1013的准备可以在单独的线程中实施(例如,上述的提供者线程)。
VSL1050和/或ICML1556可以提供API来向操作系统通知即将被写入的特定页面不包含任何可用内容并且应被零填充。该通知可帮助操作系统避免不必要的读取操作。
用于将文件存储器映射到ACM1011的机制可以在日志型应用中使用。例如,可以实施ICL库1552以将日志文件存储器映射到一个或多个自动提交缓冲区1013,如上所述。提供者线程可以向操作系统提供关于哪些页面即将成为脏页面的通知和/或标识不包含有效数据的页面。
作为另外一种选择或作为补充,ICML1556可以在不集成到主机1014的操作系统中的情况下实施。在这些实施例中,ICML1556可被配置为监控和/或捕获系统信号,例如mprotect、mmap和手动区段故障信号,以模拟通常由操作系统执行的需求分页操作。
图16为一种用于提供自动提交存储器的方法1600的一个实施例的流程图。在步骤1610,方法1600可以开始和初始化。步骤1610可包括方法1600启动通过总线与ACM的通信(例如,启动经由总线1040与ACM1011的通信)。
在步骤1620中,ACM的自动提交缓冲区可以被映射到计算设备(例如,主机1014)的存储器系统中。映射可以包括将自动提交缓冲区的BAR地址与存储器系统中的地址范围相关联。
在步骤1630中,可用元数据装备自动提交缓冲区,该元数据被配置为在故障条件情况下使自动提交缓冲区被提交至特定的持久性存储器和/或持久性存储器中的特定位置。在一些实施例中,元数据可以包含逻辑标识符,例如LBA、对象标识符等。步骤1630可以包括验证元数据是否有效和/或是否可用于提交自动提交缓冲区的内容。
在步骤1640中,ACM用户(例如操作系统、应用等)可以使用存储器访问语义来访问被装备的自动提交缓冲区。由于步骤1630的装备,ACM用户可以将访问视为被“即时提交”。因此,ACM用户可以实施“即时提交”写入,该写入省略了单独的和/或显式的提交命令。此外,由于存储器语义访问被直接映射到自动提交缓冲区(经由步骤620的映射),存储器语义访问可以绕过在虚拟存储器系统中通常需要的系统调用。
在步骤1650中,方法1600结束,直到下一个自动提交缓冲区被映射或装备。
图17为一种用于提供自动提交存储器的方法1700的另一实施例的流程图。在步骤1710中,方法1700启动和初始化,如上所述。
在步骤1720中,ACM的自动提交缓冲区被映射到计算设备(例如,主机1014)的存储器系统并进行装备,如上所述。
在步骤1730中,ACM用户使用存储器访问语义来访问自动提交缓冲区(例如,通过在步骤1720中映射到自动提交缓冲区的存储器范围内实施存储器语义操作)。
在步骤1740中,检测到故障条件。如上所述,故障条件可以是电力丧失、ACM和主机计算设备之间的通信中断、软件故障或任何其他阻止ACM和/或主机计算设备正常运行的故障条件。
在步骤1750中,ACM在自动提交缓冲区上实施所装备的被触发提交动作。被触发的提交动作可包括将自动提交缓冲区的内容提交至持久性存储器,例如固态存储器等。
在步骤1760中,方法1700结束,直到下一个自动提交缓冲区被映射和/或装备或检测到故障条件。
图18为一种用于提供自动提交存储器的另一个实施例的流程图。在步骤1810中,方法1800启动和初始化,如上所述。在步骤1820中,检测到故障条件。
在步骤1830中,方法1800访问ACM上的被装备的自动提交缓冲区(如果有的话)。访问被装备的自动提交缓冲区可包括方法1800通过检查自动提交缓冲区的被触发提交动作元数据来确定自动提交缓冲区是否已经被装备了。如果不存在被触发动作元数据,或者元数据无效,则方法1800可以确定自动提交缓冲区未被装备。如果对于特定的自动提交缓冲区确实存在有效的被触发动作元数据,则方法1800将该自动提交缓冲区标识为被装备的缓冲区,并继续到步骤1840。
在步骤1840中,执行被装备的自动提交缓冲区的被触发提交动作。执行被触发提交动作可包括将自动提交缓冲区的内容持久存储到顺序的和/或基于日志的存储介质,例如固态存储介质。因此,被触发提交动作可包括访问自动提交缓冲区的逻辑标识符,用逻辑标识符标记数据,以及将被标记数据载入到写入数据流水线中。或者,被触发提交动作可包括将数据存储到在逻辑标识符和物理存储地址之间具有一对一映射的持久性存储器(例如,硬盘)上。被触发提交动作可包括将被装备的自动提交缓冲区的内容存储到指定的物理地址。
在步骤1840中执行被触发提交动作可包括使用备用电源为ACM、固态存储介质和/或其他持久性存储介质供电,直到被触发提交动作完成。
在不脱离本发明精神或基本特征的情况下,本发明可以实现为其他的具体形式。所述实施例在所有方面被视为仅为示例性而非限制性的。因此,本发明的范围由所附权利要求书而不是由前面的描述指定。在权利要求书等同物的含义和范围内进行的所有更改均包含在其范围内。

Claims (21)

1.一种用于在计算设备的易失性存储器地址空间中即时提交存储器语义操作的方法,所述方法包括:
将主机的存储器地址范围映射到包括存储控制器的非易失性存储设备的隔离区域中的易失性自动提交缓冲区,所述存储控制器被配置为独立于主机计算设备将所述自动提交缓冲区的数据存储在所述非易失性存储设备的非易失性存储介质上;
装备所述自动提交缓冲区以响应于触发事件而与逻辑标识符相关联地将数据存储在所述非易失性存储介质上,所述逻辑标识符与所述自动提交缓冲区的用户相关联;以及
在被映射的存储器地址范围中为来自所述用户的存储器操作提供服务。
2.根据权利要求1所述的方法,其中所述主机的所述存储器地址范围被映射到与所述隔离区域中的所述易失性自动提交缓冲区相对应的总线地址范围。
3.根据权利要求1所述的方法,其中装备所述自动提交缓冲区包括在所述自动提交缓冲区中存储所述逻辑标识符。
4.根据权利要求1所述的方法,还包括响应于将所述主机的所述存储器地址范围映射到所述隔离区域内的所述易失性自动提交缓冲区,在所述自动提交缓冲区上执行即时提交的存储器语义操作。
5.根据权利要求1所述的方法,其中所述主机包括虚拟机的客户机操作系统,所述方法还包括通过所述客户机操作系统的被映射存储器地址范围向所述自动提交缓冲区提供即时提交的存储器语义访问。
6.根据权利要求1所述的方法,还包括响应于触发事件将所述自动提交缓冲区的内容存储在所述非易失性存储介质上,其中所述触发事件包括电源故障、主机硬件故障和主机软件故障中的其中一种。
7.根据权利要求1所述的方法,还包括:
在所述非易失性存储设备的写入缓冲区中保留空间,其中所述写入缓冲区在所述隔离区域内并且包括足够的容量来独立于所述主机计算设备在所述非易失性存储设备上存储所述自动提交缓冲区的内容;以及
响应于所述触发事件,通过所述写入缓冲区来将所述自动提交缓冲区的内容存储在所述非易失性存储介质上。
8.根据权利要求1所述的方法,还包括:
维持两个或更多个暂挂的非易失性介质写入操作,所述暂挂的非易失性介质写入操作被配置为将所述自动提交缓冲区的数据存储在所述非易失性存储介质上各自的存储位置上;以及
响应于所述触发事件执行所述两个或更多个暂挂的非易失性介质写入操作,以存储所述自动提交缓冲区的数据。
9.根据权利要求1所述的方法,还包括响应于所述触发事件,确定所述自动提交缓冲区的数据相对于所述非易失性存储设备上其他数据暂挂存储的优先级,其中所述优先级确定所述自动提交缓冲区的数据相对于所述其他数据暂挂存储被存储的顺序。
10.根据权利要求9所述的方法,其中所述优先级确定所述自动提交缓冲区的数据在未确认的存储操作的数据之前并在已确认的存储操作的数据之后被存储到所述非易失性存储设备上。
11.根据权利要求9所述的方法,其中所述优先级确定所述自动提交缓冲区的数据在已确认的存储操作的数据之前被存储到所述非易失性存储设备上。
12.根据权利要求1所述的方法,还包括响应于所述触发事件,以基于日志的格式将所述自动提交缓冲区的内容存储在所述非易失性存储介质上,所述基于日志的格式包括具有所述逻辑标识符和顺序标识符的数据包,所述顺序标识符保存在所述非易失性存储介质上存储操作的有序顺序。
13.根据权利要求1所述的方法,还包括响应于重命名存储器映射文件、移动存储器映射文件、来自操作系统的通知、mprotect操作、mmap操作和区段故障中的其中一种,更新所述自动提交缓冲区的所述逻辑标识符,mprotect操作涉及用于设置存储器访问许可的操作,且mmap操作涉及用于将对象映射到处理的地址空间的操作。
14.根据权利要求1所述的方法,将所述主机的所述存储器地址范围映射到所述易失性自动提交缓冲区包括将所述主机配置为直接在所述易失性自动提交缓冲区中为存储器操作提供服务。
15.根据权利要求14所述的方法,还包括将所述主机配置为绕过存储器缓存,使得所述易失性自动提交缓冲区直接为存储器操作提供服务。
16.根据权利要求1所述的方法,还包括在将所述存储器地址范围映射到所述易失性自动提交缓冲区的同时装备所述自动提交缓冲区。
17.一种用于在计算设备的易失性存储器地址空间中即时提交存储器语义操作的装置,所述装置包括:隔离区域,所述隔离区域包括:
映射到主机的存储器地址范围的易失性自动提交缓冲区,
提交模块,所述提交模块被配置为响应于触发事件,将所述易失性自动提交缓冲区的数据连同与所述自动提交缓冲区的用户相关联的逻辑标识符一起存储到非易失性存储设备的非易失性存储介质;以及
备用电源,所述备用电源被配置为独立于所述主机向所述易失性自动提交缓冲区、提交模块和非易失性存储设备提供电力。
18.根据权利要求17所述的装置,其中所述非易失性存储设备包括非易失性存储控制器,所述非易失性存储控制器被配置为独立于所述主机将所述易失性自动提交缓冲区的数据存储在所述非易失性存储介质上。
19.根据权利要求18所述的装置,其中所述非易失性存储控制器包括写入数据流水线,所述写入数据流水线被配置为以包括与所述用户相关联的所述逻辑标识符的数据包格式并且与顺序标识符相关联地存储所述自动提交缓冲区的内容,所述顺序标识符保存在所述非易失性存储介质上存储操作的有序顺序。
20.根据权利要求17所述的装置,其中所述易失性自动提交缓冲区以可通信的方式通过总线耦接到所述主机,并且所述主机的所述存储器地址范围被映射到所述总线的地址。
21.一种用于在计算设备的易失性存储器地址空间中即时提交存储器语义操作的系统,所述系统包括:
自动提交存储器,所述自动提交存储器包括:
映射到主机的存储器地址范围的易失性自动提交缓冲区,
非易失性存储设备,所述非易失性存储设备包括非易失性存储介质,以及
提交模块,所述提交模块被配置为响应于触发事件,将所述易失性自动提交缓冲区的数据连同与所述自动提交缓冲区的用户相关联的逻辑标识符一起存储到非易失性存储设备的非易失性存储介质;以及
备用电源,所述备用电源被配置独立于所述主机为向所述易失性自动提交缓冲区、提交模块和非易失性存储设备提供电力。
CN201180059862.6A 2010-12-13 2011-12-13 用于自动提交存储器的装置、系统和方法 Active CN103262054B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US42263510P 2010-12-13 2010-12-13
US61/422,635 2010-12-13
PCT/US2011/064728 WO2012082792A2 (en) 2010-12-13 2011-12-13 Apparatus, system, and method for auto-commit memory

Publications (2)

Publication Number Publication Date
CN103262054A CN103262054A (zh) 2013-08-21
CN103262054B true CN103262054B (zh) 2015-11-25

Family

ID=46200571

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180059862.6A Active CN103262054B (zh) 2010-12-13 2011-12-13 用于自动提交存储器的装置、系统和方法

Country Status (4)

Country Link
US (2) US8527693B2 (zh)
EP (1) EP2652623B1 (zh)
CN (1) CN103262054B (zh)
WO (1) WO2012082792A2 (zh)

Families Citing this family (197)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080140724A1 (en) 2006-12-06 2008-06-12 David Flynn Apparatus, system, and method for servicing object requests within a storage controller
US8307180B2 (en) 2008-02-28 2012-11-06 Nokia Corporation Extended utilization area for a memory device
US8874824B2 (en) 2009-06-04 2014-10-28 Memory Technologies, LLC Apparatus and method to share host system RAM with mass storage memory RAM
US9377960B2 (en) * 2009-07-29 2016-06-28 Hgst Technologies Santa Ana, Inc. System and method of using stripes for recovering data in a flash storage system
EP2476039B1 (en) 2009-09-09 2016-10-26 SanDisk Technologies LLC Apparatus, system, and method for power reduction management in a storage device
US8819208B2 (en) 2010-03-05 2014-08-26 Solidfire, Inc. Data deletion in a distributed data storage system
US8688926B2 (en) 2010-10-10 2014-04-01 Liqid Inc. Systems and methods for optimizing data storage among a plurality of solid state memory subsystems
US10817502B2 (en) 2010-12-13 2020-10-27 Sandisk Technologies Llc Persistent memory management
US10817421B2 (en) 2010-12-13 2020-10-27 Sandisk Technologies Llc Persistent data structures
US9218278B2 (en) * 2010-12-13 2015-12-22 SanDisk Technologies, Inc. Auto-commit memory
WO2012082792A2 (en) 2010-12-13 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for auto-commit memory
US9047178B2 (en) 2010-12-13 2015-06-02 SanDisk Technologies, Inc. Auto-commit memory synchronization
US9208071B2 (en) 2010-12-13 2015-12-08 SanDisk Technologies, Inc. Apparatus, system, and method for accessing memory
US20120158677A1 (en) * 2010-12-20 2012-06-21 Apple Inc. Systems and methods for streaming compressed files via a non-volatile memory
US9054992B2 (en) 2011-12-27 2015-06-09 Solidfire, Inc. Quality of service policy sets
US9838269B2 (en) 2011-12-27 2017-12-05 Netapp, Inc. Proportional quality of service based on client usage and system metrics
KR101878200B1 (ko) * 2012-01-09 2018-07-16 삼성전자 주식회사 서든 파워 오프 발생 시 메모리 시스템을 제어하는 방법
US9417998B2 (en) 2012-01-26 2016-08-16 Memory Technologies Llc Apparatus and method to provide cache move with non-volatile mass memory system
US9311226B2 (en) 2012-04-20 2016-04-12 Memory Technologies Llc Managing operational state data of a memory module using host memory in association with state change
KR101961324B1 (ko) * 2012-05-09 2019-03-22 삼성전자주식회사 메모리 장치 및 메모리 장치의 파워 관리 방법
US9164804B2 (en) 2012-06-20 2015-10-20 Memory Technologies Llc Virtual memory module
US10216652B1 (en) * 2012-06-29 2019-02-26 EMC IP Holding Company LLC Split target data transfer
US8788880B1 (en) * 2012-08-22 2014-07-22 Western Digital Technologies, Inc. Efficient retry mechanism for solid-state memory failures
US9830964B2 (en) * 2012-09-10 2017-11-28 Texas Instruments Incorporated Non-volatile array wakeup and backup sequencing control
KR20140039756A (ko) * 2012-09-25 2014-04-02 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
US9141505B1 (en) * 2012-09-27 2015-09-22 Emc Corporation Adaptive failure survivability in a storage system using save time and data transfer after power loss
US20140129765A1 (en) * 2012-11-07 2014-05-08 Taejin Info Tech Co., Ltd. Method to improve data reliability in dram ssd using asynchronous logging and incremental backup
US9519592B2 (en) * 2012-11-30 2016-12-13 Oracle International Corporation Stale pointer detection with overlapping versioned memory
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
US20140201434A1 (en) * 2013-01-15 2014-07-17 Hewlett-Packard Development Company, L.P. Managing Volatile File Copies
US10324642B2 (en) * 2013-06-07 2019-06-18 Sanmina Corporation Peripheral component interconnect express (PCIe) solid state drive (SSD) accelerator
US10649775B2 (en) * 2013-07-15 2020-05-12 Texas Instrum Ents Incorporated Converting a stream of data using a lookaside buffer
CN105474192A (zh) * 2013-09-23 2016-04-06 英特尔公司 数据到非易失性存储器的事件触发的存储
JP5884812B2 (ja) * 2013-11-20 2016-03-15 横河電機株式会社 通信装置及び無線通信システム
WO2015089488A1 (en) 2013-12-12 2015-06-18 Memory Technologies Llc Channel optimized storage modules
US9152330B2 (en) 2014-01-09 2015-10-06 Netapp, Inc. NVRAM data organization using self-describing entities for predictable recovery after power-loss
KR20150087744A (ko) * 2014-01-22 2015-07-30 한양대학교 산학협력단 전자 장치의 동작 상태를 변경하는 방법 및 장치
US20160335201A1 (en) * 2014-01-28 2016-11-17 Hewlett Packard Enterprise Development Lp Data and instruction set encryption
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US9933980B2 (en) * 2014-02-24 2018-04-03 Toshiba Memory Corporation NAND raid controller for connection between an SSD controller and multiple non-volatile storage units
WO2015130314A1 (en) 2014-02-28 2015-09-03 Hewlett-Packard Development Company, L.P. Mapping mode shift
CN103902486B (zh) * 2014-04-08 2017-02-22 华为技术有限公司 一种远端直接内存访问实现方法、装置及系统
US10467166B2 (en) 2014-04-25 2019-11-05 Liqid Inc. Stacked-device peripheral storage card
US10114784B2 (en) * 2014-04-25 2018-10-30 Liqid Inc. Statistical power handling in a scalable storage system
KR102238650B1 (ko) 2014-04-30 2021-04-09 삼성전자주식회사 저장 장치, 상기 저장 장치를 포함하는 컴퓨팅 시스템 및 상기 저장 장치의 동작 방법
US9990298B2 (en) 2014-05-12 2018-06-05 Western Digital Technologies, Inc System and method for caching solid state device read request results
KR102272228B1 (ko) 2014-05-13 2021-07-06 삼성전자주식회사 불휘발성 메모리 장치, 그것을 포함하는 저장 장치 및 그것의 동작 방법
US9939865B2 (en) 2014-06-13 2018-04-10 Seagate Technology Llc Selective storage resource powering for data transfer management
CN104091617B (zh) * 2014-06-17 2017-05-03 深圳市江波龙电子有限公司 一种闪存存储设备检测的方法及装置
US10180889B2 (en) 2014-06-23 2019-01-15 Liqid Inc. Network failover handling in modular switched fabric based data storage systems
US9645829B2 (en) * 2014-06-30 2017-05-09 Intel Corporation Techniques to communicate with a controller for a non-volatile dual in-line memory module
US9798728B2 (en) 2014-07-24 2017-10-24 Netapp, Inc. System performing data deduplication using a dense tree data structure
US9653124B2 (en) 2014-09-04 2017-05-16 Liqid Inc. Dual-sided rackmount storage assembly
US10362107B2 (en) 2014-09-04 2019-07-23 Liqid Inc. Synchronization of storage transactions in clustered storage systems
US10133511B2 (en) 2014-09-12 2018-11-20 Netapp, Inc Optimized segment cleaning technique
US9671960B2 (en) 2014-09-12 2017-06-06 Netapp, Inc. Rate matching technique for balancing segment cleaning and I/O workload
US9529668B2 (en) * 2014-09-26 2016-12-27 Intel Corporation Method and system for using NAND page buffers to improve the transfer buffer utilization of a solid state drive
US9665451B2 (en) * 2014-10-07 2017-05-30 Sandisk Technologies Llc Method and device for distributing holdup energy to memory arrays
US9767306B2 (en) 2014-11-03 2017-09-19 Secured2 Corporation Secured data storage on a hard drive
US9823859B2 (en) * 2014-11-06 2017-11-21 Western Digital Technologies, Inc. Mechanical shock mitigation for data storage
US9836229B2 (en) 2014-11-18 2017-12-05 Netapp, Inc. N-way merge technique for updating volume metadata in a storage I/O stack
CN104461947B (zh) * 2014-11-21 2019-07-30 上海宝存信息科技有限公司 一种掉电保护方法及固态硬盘
US10079779B2 (en) 2015-01-30 2018-09-18 Nicira, Inc. Implementing logical router uplinks
US10198183B2 (en) 2015-02-06 2019-02-05 Liqid Inc. Tunneling of storage operations between storage nodes
US9720601B2 (en) 2015-02-11 2017-08-01 Netapp, Inc. Load balancing technique for a storage array
US10956189B2 (en) 2015-02-13 2021-03-23 Red Hat Israel, Ltd. Methods for managing virtualized remote direct memory access devices
US9652157B2 (en) 2015-03-19 2017-05-16 International Business Machines Corporation Accelerated non-volatile memory recirculation processing
US9762460B2 (en) 2015-03-24 2017-09-12 Netapp, Inc. Providing continuous context for operational information of a storage system
WO2016159930A1 (en) 2015-03-27 2016-10-06 Hewlett Packard Enterprise Development Lp File migration to persistent memory
US9710317B2 (en) 2015-03-30 2017-07-18 Netapp, Inc. Methods to identify, handle and recover from suspect SSDS in a clustered flash array
CN107209720B (zh) 2015-04-02 2020-10-13 慧与发展有限责任合伙企业 用于页面高速缓存的系统及方法以及存储介质
US10108422B2 (en) 2015-04-28 2018-10-23 Liqid Inc. Multi-thread network stack buffering of data frames
US10019388B2 (en) 2015-04-28 2018-07-10 Liqid Inc. Enhanced initialization for data storage assemblies
US10191691B2 (en) 2015-04-28 2019-01-29 Liqid Inc. Front-end quality of service differentiation in storage system operations
US9756146B2 (en) * 2015-05-19 2017-09-05 Intel IP Corporation Secure boot download computations based on host transport conditions
US9684457B2 (en) * 2015-05-21 2017-06-20 Intel Corporation Gathering sensed data from devices to manage host command transmission and cooling of the devices
CN106326061B (zh) * 2015-06-26 2020-06-23 伊姆西Ip控股有限责任公司 高速缓存数据处理方法及设备
US9946496B2 (en) * 2015-07-27 2018-04-17 Elastifile Ltd. SSD with non-blocking flush command
US10423330B2 (en) * 2015-07-29 2019-09-24 International Business Machines Corporation Data collection in a multi-threaded processor
WO2017019086A1 (en) * 2015-07-30 2017-02-02 Hewlett Packard Enterprise Development Lp Preserving virtual machine data
US9740566B2 (en) 2015-07-31 2017-08-22 Netapp, Inc. Snapshot creation workflow
JP6479608B2 (ja) * 2015-08-28 2019-03-06 東芝メモリ株式会社 メモリ装置およびメモリ制御方法
US20170097771A1 (en) 2015-10-01 2017-04-06 Netapp, Inc. Transaction log layout for efficient reclamation and recovery
US11086832B2 (en) * 2015-10-16 2021-08-10 Sap Se Out of memory error handling for data definition language operations
KR102413755B1 (ko) * 2015-11-20 2022-06-28 삼성전자주식회사 리텐션 특성에 의한 성능 저하를 복구하는 저장 장치의 동작 방법 및 이를 포함하는 데이터 처리 시스템의 동작 방법
CN105530405B (zh) * 2015-12-01 2019-02-19 上海兆芯集成电路有限公司 图像处理的方法及装置
US10482940B2 (en) 2015-12-17 2019-11-19 Hewlett Packard Enterprise Development Lp Computational accuracy in a crossbar array
US20170185354A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Techniques for a Write Transaction at a Storage Device
KR20170076878A (ko) * 2015-12-24 2017-07-05 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US9965398B2 (en) 2016-01-12 2018-05-08 Samsung Electronics Co., Ltd. Method and apparatus for simplified nameless writes using a virtual address table
US9846539B2 (en) 2016-01-22 2017-12-19 Netapp, Inc. Recovery from low space condition of an extent store
US10255215B2 (en) 2016-01-29 2019-04-09 Liqid Inc. Enhanced PCIe storage device form factors
US20170249080A1 (en) * 2016-02-29 2017-08-31 Itu Business Development A/S Solid-state storage device with programmable physical storage access
US10275376B2 (en) 2016-03-02 2019-04-30 Western Digital Technologies, Inc. Efficient cross device redundancy implementation on high performance direct attached non-volatile storage with data reduction
US10255213B1 (en) * 2016-03-28 2019-04-09 Amazon Technologies, Inc. Adapter device for large address spaces
US9852025B2 (en) 2016-03-29 2017-12-26 Alibaba Group Holding Limited Protecting data stored on a solid state drive
KR101758558B1 (ko) * 2016-03-29 2017-07-26 엘에스산전 주식회사 에너지 관리 서버 및 그를 갖는 에너지 관리 시스템
US10386904B2 (en) * 2016-03-31 2019-08-20 Qualcomm Incorporated Hardware managed power collapse and clock wake-up for memory management units and distributed virtual memory networks
US10642496B2 (en) * 2016-04-01 2020-05-05 Sandisk Technologies Inc. Out of order read transfer with host memory buffer
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
US10521305B2 (en) * 2016-04-29 2019-12-31 Toshiba Memory Corporation Holdup time measurement for solid state drives
US10713202B2 (en) * 2016-05-25 2020-07-14 Samsung Electronics Co., Ltd. Quality of service (QOS)-aware input/output (IO) management for peripheral component interconnect express (PCIE) storage system with reconfigurable multi-ports
US10599424B2 (en) * 2016-06-15 2020-03-24 Red Hat Israel, Ltd. Committed program-code management
US10877688B2 (en) 2016-08-01 2020-12-29 Apple Inc. System for managing memory devices
US11294839B2 (en) 2016-08-12 2022-04-05 Liqid Inc. Emulated telemetry interfaces for fabric-coupled computing units
WO2018031939A1 (en) 2016-08-12 2018-02-15 Liqid Inc. Disaggregated fabric-switched computing units
US11880326B2 (en) 2016-08-12 2024-01-23 Liqid Inc. Emulated telemetry interfaces for computing units
US9952798B2 (en) * 2016-08-12 2018-04-24 Google Inc. Repartitioning data in a distributed computing system
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
JP6790686B2 (ja) * 2016-09-30 2020-11-25 オムロン株式会社 制御装置、制御方法およびプログラム
US10713276B2 (en) 2016-10-03 2020-07-14 Ocient, Inc. Data transition in highly parallel database management system
KR20180043451A (ko) 2016-10-19 2018-04-30 삼성전자주식회사 컴퓨팅 시스템 및 그것의 동작 방법
US10452115B2 (en) 2016-10-26 2019-10-22 Seagate Technology Llc Removable power loss protection module
US10445263B2 (en) 2016-10-26 2019-10-15 Seagate Technology Llc Carrier board with removable memory module power fail protection
CN106648016B (zh) * 2016-12-02 2020-04-10 浙江宇视科技有限公司 供电电路、供电设备及供电方法
US10868863B1 (en) 2016-12-14 2020-12-15 Ocient Inc. System and method for designating a leader using a consensus protocol within a database management system
EP3555774B8 (en) 2016-12-14 2024-03-27 Ocient Inc. Efficient database management system utilizing silo and manifest
CN109074301B (zh) * 2017-03-13 2021-10-08 荣耀终端有限公司 一种数据处理方法及装置
TWI748081B (zh) * 2017-04-14 2021-12-01 仁寶電腦工業股份有限公司 電腦裝置及其資料保護方法
US10445007B1 (en) * 2017-04-19 2019-10-15 Rockwell Collins, Inc. Multi-core optimized warm-start loading approach
WO2018200761A1 (en) 2017-04-27 2018-11-01 Liqid Inc. Pcie fabric connectivity expansion card
US10180924B2 (en) 2017-05-08 2019-01-15 Liqid Inc. Peer-to-peer communication for graphics processing units
WO2018222580A1 (en) 2017-05-30 2018-12-06 Ocient Inc. System and method for optimizing large database management systems
US10379979B2 (en) 2017-05-31 2019-08-13 Western Digital Technologies, Inc. Power fail handling using stop commands
US10013194B1 (en) * 2017-06-02 2018-07-03 Western Digital Technologies, Inc. Handling thermal shutdown for memory devices
US11068299B1 (en) * 2017-08-04 2021-07-20 EMC IP Holding Company LLC Managing file system metadata using persistent cache
US11182125B2 (en) 2017-09-07 2021-11-23 Ocient Inc. Computing device sort function
CN107797899A (zh) * 2017-10-12 2018-03-13 记忆科技(深圳)有限公司 一种固态硬盘数据安全写入的方法
CN108009101A (zh) * 2017-11-30 2018-05-08 郑州云海信息技术有限公司 一种固态硬盘异常掉电处理方法、系统、介质及设备
CN108052289A (zh) * 2017-12-12 2018-05-18 深圳市创维软件有限公司 数据处理的方法、机顶盒及存储介质
US10552145B2 (en) * 2017-12-12 2020-02-04 Cypress Semiconductor Corporation Memory devices, systems, and methods for updating firmware with single memory device
US10496298B2 (en) * 2017-12-28 2019-12-03 Intel Corporation Configurable flush of data from volatile memory to non-volatile memory
TWI714830B (zh) * 2018-02-13 2021-01-01 緯穎科技服務股份有限公司 目錄資料的管理方法與記憶體裝置
KR102549545B1 (ko) 2018-03-22 2023-06-29 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
CN110413216B (zh) * 2018-04-28 2023-07-18 伊姆西Ip控股有限责任公司 用于管理存储系统的方法、设备和计算机程序产品
US10534551B1 (en) * 2018-06-22 2020-01-14 Micron Technology, Inc. Managing write operations during a power loss
KR102495539B1 (ko) * 2018-07-16 2023-02-06 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
US10768853B2 (en) * 2018-07-27 2020-09-08 Dell Products, L.P. Information handling system with memory flush during shut down
CN109189654A (zh) * 2018-08-02 2019-01-11 山东浪潮通软信息科技有限公司 一种移动端用户行为轨迹记录方法
US10660228B2 (en) 2018-08-03 2020-05-19 Liqid Inc. Peripheral storage card with offset slot alignment
US11429419B2 (en) * 2018-08-03 2022-08-30 Nvidia Corporation Secure access of virtual machine memory suitable for AI assisted automotive applications
JP6995728B2 (ja) * 2018-09-28 2022-01-17 株式会社日立製作所 ストレージ装置、管理方法及びプログラム
US11256696B2 (en) 2018-10-15 2022-02-22 Ocient Holdings LLC Data set compression within a database system
US11249916B2 (en) 2018-10-15 2022-02-15 Ocient Holdings LLC Single producer single consumer buffering in database systems
US11880368B2 (en) 2018-10-15 2024-01-23 Ocient Holdings LLC Compressing data sets for storage in a database system
US11886436B2 (en) 2018-10-15 2024-01-30 Ocient Inc. Segmenting a partition of a data set based on a data storage coding scheme
US11709835B2 (en) 2018-10-15 2023-07-25 Ocient Holdings LLC Re-ordered processing of read requests
US10942677B2 (en) * 2019-01-24 2021-03-09 Silicon Motion, Inc. Method for performing access management of memory device, associated memory device and controller thereof, associated host device and associated electronic device
US10585827B1 (en) 2019-02-05 2020-03-10 Liqid Inc. PCIe fabric enabled peer-to-peer communications
EP3959604A4 (en) 2019-04-25 2023-01-18 Liqid Inc. MACHINE TEMPLATES FOR DEDICATED COMPUTING UNITS
EP3959608A4 (en) 2019-04-25 2022-12-21 Liqid Inc. COMPOSITE COMPUTING SYSTEMS WITH CONVERGED AND DISAGGREGATED COMPONENT POOL
JP2022522437A (ja) 2019-04-30 2022-04-19 長江存儲科技有限責任公司 コントローラ、機器および方法
US11113007B2 (en) * 2019-05-13 2021-09-07 Micron Technology, Inc. Partial execution of a write command from a host system
EP3942398A4 (en) * 2019-05-23 2023-04-05 Hewlett Packard Enterprise Development LP SYSTEM AND METHOD FOR FACILITATING DATA REQUEST MANAGEMENT IN A NETWORK INTERFACE (NIC) CONTROLLER
US10877900B1 (en) 2019-06-26 2020-12-29 Western Digital Technologies, Inc. Enabling faster and regulated device initialization times
CN110764693B (zh) * 2019-09-12 2023-03-28 深圳市德明利技术股份有限公司 一种提高Nand flash数据稳定性的方法以及装置
US11093500B2 (en) 2019-10-28 2021-08-17 Ocient Holdings LLC Enforcement of minimum query cost rules required for access to a database system
US11106679B2 (en) 2019-10-30 2021-08-31 Ocient Holdings LLC Enforcement of sets of query rules for access to data supplied by a plurality of data providers
US11086808B2 (en) * 2019-11-25 2021-08-10 Micron Technology, Inc. Direct memory access (DMA) commands for noncontiguous source and destination memory addresses
US11609911B2 (en) 2019-12-19 2023-03-21 Ocient Holdings LLC Selecting a normalized form for conversion of a query expression
US11347725B2 (en) * 2020-01-14 2022-05-31 EMC IP Holding Company LLC Efficient handling of highly amortized metadata page updates in storage clusters with delta log-based architectures
US11061910B1 (en) 2020-01-31 2021-07-13 Ocient Holdings LLC Servicing concurrent queries via virtual segment recovery
US11853364B2 (en) 2020-01-31 2023-12-26 Ocient Holdings LLC Level-based queries in a database system and methods for use therewith
JP2021133829A (ja) * 2020-02-27 2021-09-13 本田技研工業株式会社 車両制御装置
DE102020108101A1 (de) * 2020-03-24 2021-09-30 Pilz Gmbh & Co. Kg Vorrichtung zur Speicherung von Daten in einem nichtflüchtigen Speicher
US11599463B2 (en) 2020-03-25 2023-03-07 Ocient Holdings LLC Servicing queries during data ingress
US11238041B2 (en) 2020-03-25 2022-02-01 Ocient Holdings LLC Facilitating query executions via dynamic data block routing
US11580102B2 (en) 2020-04-02 2023-02-14 Ocient Holdings LLC Implementing linear algebra functions via decentralized execution of query operator flows
US11789611B2 (en) * 2020-04-24 2023-10-17 Netapp, Inc. Methods for handling input-output operations in zoned storage systems and devices thereof
US11294916B2 (en) 2020-05-20 2022-04-05 Ocient Holdings LLC Facilitating query executions via multiple modes of resultant correctness
US11418247B2 (en) 2020-06-30 2022-08-16 Hewlett Packard Enterprise Development Lp High spatial reuse for mmWave Wi-Fi
CN113965511A (zh) * 2020-07-02 2022-01-21 北京瀚海云星科技有限公司 一种基于rdma的标签数据传输方法及相关装置、系统
US11775529B2 (en) 2020-07-06 2023-10-03 Ocient Holdings LLC Recursive functionality in relational database systems
US11880716B2 (en) 2020-08-05 2024-01-23 Ocient Holdings LLC Parallelized segment generation via key-based subdivision in database systems
US11755589B2 (en) * 2020-08-05 2023-09-12 Ocient Holdings LLC Delaying segment generation in database systems
US11321288B2 (en) 2020-08-05 2022-05-03 Ocient Holdings LLC Record deduplication in database systems
US11527300B2 (en) 2020-08-26 2022-12-13 Western Digital Technologies, Inc. Level dependent error correction code protection in multi-level non-volatile memory
US11436083B2 (en) 2020-09-04 2022-09-06 Western Digital Technologies, Inc. Data address management in non-volatile memory
WO2022061859A1 (en) * 2020-09-28 2022-03-31 Intel Corporation Application restore based on volatile memory storage across system resets
US11822532B2 (en) 2020-10-14 2023-11-21 Ocient Holdings LLC Per-segment secondary indexing in database systems
KR20220049856A (ko) * 2020-10-15 2022-04-22 에스케이하이닉스 주식회사 메모리 시스템 및 컨트롤러
US11507578B2 (en) 2020-10-19 2022-11-22 Ocient Holdings LLC Delaying exceptions in query execution
US11675757B2 (en) 2020-10-29 2023-06-13 Ocient Holdings LLC Maintaining row durability data in database systems
US11297123B1 (en) 2020-12-11 2022-04-05 Ocient Holdings LLC Fault-tolerant data stream processing
US11442776B2 (en) 2020-12-11 2022-09-13 Liqid Inc. Execution job compute unit composition in computing clusters
US11429544B2 (en) 2020-12-18 2022-08-30 Micron Technology, Inc. Enabling devices with enhanced persistent memory region access
CN112748409B (zh) * 2020-12-21 2024-02-13 中国航天科工集团八五一一研究所 一种基于fpga的干扰信号压缩存储方法
US11314743B1 (en) 2020-12-29 2022-04-26 Ocient Holdings LLC Storing records via multiple field-based storage mechanisms
US20220206957A1 (en) * 2020-12-30 2022-06-30 Pensando Systems Inc. Methods and systems for using a packet processing pipeline to accelerate infiniband administrative operations
US11340987B1 (en) 2021-03-04 2022-05-24 Netapp, Inc. Methods and systems for raid protection in zoned solid-state drives
US20220334890A1 (en) * 2021-04-14 2022-10-20 Nvidia Corporation Application programming interface to indicate increased resource usage
US11645273B2 (en) 2021-05-28 2023-05-09 Ocient Holdings LLC Query execution utilizing probabilistic indexing
US11687251B2 (en) * 2021-09-28 2023-06-27 Advanced Micro Devices, Inc. Dynamic repartition of memory physical address mapping
US11797377B2 (en) 2021-10-05 2023-10-24 Netapp, Inc. Efficient parity determination in zoned solid-state drives of a storage system
US11803544B2 (en) 2021-10-06 2023-10-31 Ocient Holdings LLC Missing data-based indexing in database systems
US11803329B2 (en) 2021-11-22 2023-10-31 Netapp, Inc. Methods and systems for processing write requests in a storage system
US11861231B2 (en) 2021-12-16 2024-01-02 Netapp, Inc. Scalable solid-state storage system and methods thereof

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004077219A2 (en) * 2003-01-30 2004-09-10 Vaman Technologies (R & D) Limited System and method of mapping patterns of data, optimising disk read and write, verifying data integrity across clients and servers of different functionality having shared resources

Family Cites Families (299)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4980861A (en) 1987-01-16 1990-12-25 Microchip Technology Incorporated NAND stack ROM
US5261068A (en) 1990-05-25 1993-11-09 Dell Usa L.P. Dual path memory retrieval system for an interleaved dynamic RAM memory unit
US5193184A (en) 1990-06-18 1993-03-09 Storage Technology Corporation Deleted data file space release system for a dynamically mapped virtual data storage subsystem
US5325509A (en) 1991-03-05 1994-06-28 Zitel Corporation Method of operating a cache memory including determining desirability of cache ahead or cache behind based on a number of available I/O operations
US5438671A (en) 1991-07-19 1995-08-01 Dell U.S.A., L.P. Method and system for transferring compressed bytes of information between separate hard disk drive units
US6256642B1 (en) 1992-01-29 2001-07-03 Microsoft Corporation Method and system for file system management using a flash-erasable, programmable, read-only memory
US5845329A (en) 1993-01-29 1998-12-01 Sanyo Electric Co., Ltd. Parallel computer
JP2856621B2 (ja) 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
JP2784440B2 (ja) 1993-04-14 1998-08-06 インターナショナル・ビジネス・マシーンズ・コーポレイション データ・ページの転送制御方法
US5682497A (en) 1993-09-28 1997-10-28 Intel Corporation Managing file structures for a flash memory file system in a computer
US5535399A (en) 1993-09-30 1996-07-09 Quantum Corporation Solid state disk drive unit having on-board backup non-volatile memory
JPH07110784A (ja) 1993-10-14 1995-04-25 Fujitsu Ltd 追加形式レコード格納方法及び装置
US5553261A (en) 1994-04-01 1996-09-03 Intel Corporation Method of performing clean-up of a solid state disk while executing a read command
US5696917A (en) 1994-06-03 1997-12-09 Intel Corporation Method and apparatus for performing burst read operations in an asynchronous nonvolatile memory
US5504882A (en) 1994-06-20 1996-04-02 International Business Machines Corporation Fault tolerant data storage subsystem employing hierarchically arranged controllers
US6002411A (en) 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US6170047B1 (en) 1994-11-16 2001-01-02 Interactive Silicon, Inc. System and method for managing system memory and/or non-volatile memory using a memory controller with integrated compression and decompression capabilities
US5651133A (en) 1995-02-01 1997-07-22 Hewlett-Packard Company Methods for avoiding over-commitment of virtual capacity in a redundant hierarchic data storage system
US5701434A (en) 1995-03-16 1997-12-23 Hitachi, Ltd. Interleave memory controller with a common access queue
US5799140A (en) 1995-04-21 1998-08-25 International Business Machines Corporation Disk array system and method for storing data
DE69615278T2 (de) 1995-06-06 2002-06-27 Hewlett Packard Co SDRAM-Datenzuweisungsanordnung und -verfahren
US5682499A (en) 1995-06-06 1997-10-28 International Business Machines Corporation Directory rebuild method and apparatus for maintaining and rebuilding directory information for compressed data on direct access storage device (DASD)
JP3732869B2 (ja) 1995-06-07 2006-01-11 株式会社日立製作所 外部記憶装置
US5721874A (en) 1995-06-16 1998-02-24 International Business Machines Corporation Configurable cache with variable, dynamically addressable line sizes
US6978342B1 (en) 1995-07-31 2005-12-20 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US6728851B1 (en) 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US5754563A (en) 1995-09-11 1998-05-19 Ecc Technologies, Inc. Byte-parallel system for implementing reed-solomon error-correcting codes
US5799200A (en) 1995-09-28 1998-08-25 Emc Corporation Power failure responsive apparatus and method having a shadow dram, a flash ROM, an auxiliary battery, and a controller
US6014724A (en) 1995-10-27 2000-01-11 Scm Microsystems (U.S.) Inc. Flash translation layer block indication map revision system and method
US6330688B1 (en) 1995-10-31 2001-12-11 Intel Corporation On chip error correction for devices in a solid state drive
US6385710B1 (en) 1996-02-23 2002-05-07 Sun Microsystems, Inc. Multiple-mode external cache subsystem
TW338165B (en) 1996-09-09 1998-08-11 Sony Co Ltd Semiconductor nand type flash memory with incremental step pulse programming
US5960462A (en) 1996-09-26 1999-09-28 Intel Corporation Method and apparatus for analyzing a main memory configuration to program a memory controller
US5754567A (en) 1996-10-15 1998-05-19 Micron Quantum Devices, Inc. Write reduction in flash memory systems through ECC usage
US6148377A (en) * 1996-11-22 2000-11-14 Mangosoft Corporation Shared memory computer networks
US5802602A (en) 1997-01-17 1998-09-01 Intel Corporation Method and apparatus for performing reads of related data from a set-associative cache memory
JPH10320270A (ja) 1997-05-15 1998-12-04 Matsushita Electric Ind Co Ltd メモリモジュール
JP3459868B2 (ja) 1997-05-16 2003-10-27 日本電気株式会社 メモリ障害時におけるグループ入れ替え方式
US6418478B1 (en) 1997-10-30 2002-07-09 Commvault Systems, Inc. Pipelined high speed data transfer mechanism
US6205521B1 (en) 1997-11-03 2001-03-20 Compaq Computer Corporation Inclusion map for accelerated cache flush
US6292844B1 (en) 1998-02-12 2001-09-18 Sony Corporation Media storage device with embedded data filter for dynamically processing data during read and write operations
US6295581B1 (en) 1998-02-20 2001-09-25 Ati Technologies, Inc. Method and apparatus for assuring cache coherency
US6185654B1 (en) 1998-07-17 2001-02-06 Compaq Computer Corporation Phantom resource memory address mapping system
WO2001006371A1 (en) 1998-07-21 2001-01-25 Seagate Technology Llc Improved memory system apparatus and method
US6507911B1 (en) 1998-07-22 2003-01-14 Entrust Technologies Limited System and method for securely deleting plaintext data
US6629112B1 (en) 1998-12-31 2003-09-30 Nortel Networks Limited Resource management for CORBA-based applications
US6412080B1 (en) 1999-02-23 2002-06-25 Microsoft Corporation Lightweight persistent storage system for flash memory devices
US6295571B1 (en) 1999-03-19 2001-09-25 Times N Systems, Inc. Shared memory apparatus and method for multiprocessor systems
KR100330164B1 (ko) 1999-04-27 2002-03-28 윤종용 무효 블록들을 가지는 복수의 플래시 메모리들을 동시에 프로그램하는 방법
US6849480B1 (en) 1999-05-07 2005-02-01 Seagate Technology Llc Surface mount IC stacking method and device
US7194740B1 (en) 1999-05-28 2007-03-20 Oracle International Corporation System for extending an addressable range of memory
US6336174B1 (en) 1999-08-09 2002-01-01 Maxtor Corporation Hardware assisted memory backup system and method
KR100577380B1 (ko) 1999-09-29 2006-05-09 삼성전자주식회사 플래시 메모리와 그 제어 방법
AU2746001A (en) 1999-10-25 2001-05-08 Infolibria, Inc. Fast indexing of web objects
US6278633B1 (en) 1999-11-05 2001-08-21 Multi Level Memory Technology High bandwidth flash memory that selects programming parameters according to measurements of previous programming operations
US8452912B2 (en) 2007-10-11 2013-05-28 Super Talent Electronics, Inc. Flash-memory system with enhanced smart-storage switch and packed meta-data cache for mitigating write amplification by delaying and merging writes until a host read
US6785785B2 (en) 2000-01-25 2004-08-31 Hewlett-Packard Development Company, L.P. Method for supporting multi-level stripping of non-homogeneous memory to maximize concurrency
US6671757B1 (en) 2000-01-26 2003-12-30 Fusionone, Inc. Data transfer and synchronization system
US6240040B1 (en) 2000-03-15 2001-05-29 Advanced Micro Devices, Inc. Multiple bank simultaneous operation for a flash memory
JP2001297316A (ja) 2000-04-14 2001-10-26 Mitsubishi Electric Corp メモリカード及びその制御方法
US7089391B2 (en) 2000-04-14 2006-08-08 Quickshift, Inc. Managing a codec engine for memory compression/decompression operations using a data movement engine
US6523102B1 (en) 2000-04-14 2003-02-18 Interactive Silicon, Inc. Parallel compression/decompression system and method for implementation of in-memory compressed cache improving storage density and access speed for industry standard memory subsystems and in-line memory modules
KR100399034B1 (ko) 2000-05-02 2003-09-22 한국과학기술원 효율적 메모리 셀 어레이 관리 방법
GB2379538B (en) 2000-06-23 2005-01-12 Intel Corp Non-volatile cache
US6981070B1 (en) 2000-07-12 2005-12-27 Shun Hang Luk Network storage device having solid-state non-volatile memory
US7167944B1 (en) 2000-07-21 2007-01-23 Lexar Media, Inc. Block management for mass storage
US6892298B2 (en) 2000-07-26 2005-05-10 Times N Systems, Inc. Load/store micropacket handling system
US6658438B1 (en) 2000-08-14 2003-12-02 Matrix Semiconductor, Inc. Method for deleting stored digital data from write-once memory device
US6404647B1 (en) 2000-08-24 2002-06-11 Hewlett-Packard Co. Solid-state mass memory storage device
US6883079B1 (en) 2000-09-01 2005-04-19 Maxtor Corporation Method and apparatus for using data compression as a means of increasing buffer bandwidth
US6625685B1 (en) 2000-09-20 2003-09-23 Broadcom Corporation Memory controller with programmable configuration
JP3922516B2 (ja) 2000-09-28 2007-05-30 株式会社ルネサステクノロジ 不揮発性メモリと不揮発性メモリの書き込み方法
US7039727B2 (en) 2000-10-17 2006-05-02 Microsoft Corporation System and method for controlling mass storage class digital imaging devices
US6779088B1 (en) 2000-10-24 2004-08-17 International Business Machines Corporation Virtual uncompressed cache size control in compressed memory systems
US7185162B1 (en) 2000-10-26 2007-02-27 Cypress Semiconductor Corporation Method and apparatus for programming a flash memory
US6694453B1 (en) 2000-11-14 2004-02-17 Hewlett-Packard Development Company, L.P. Apparatus and method to handle power supply failures for a peripheral device
US7340558B2 (en) 2000-11-22 2008-03-04 Silicon Image, Inc. Multisection memory bank system
JP4216457B2 (ja) 2000-11-30 2009-01-28 富士通マイクロエレクトロニクス株式会社 半導体記憶装置及び半導体装置
US6564288B2 (en) 2000-11-30 2003-05-13 Hewlett-Packard Company Memory controller with temperature sensors
US6957313B2 (en) 2000-12-01 2005-10-18 Hsia James R Memory matrix and method of operating the same
US7020739B2 (en) 2000-12-06 2006-03-28 Tdk Corporation Memory controller, flash memory system having memory controller and method for controlling flash memory device
JP2002184190A (ja) 2000-12-11 2002-06-28 Toshiba Corp 不揮発性半導体記憶装置
US20020103819A1 (en) 2000-12-12 2002-08-01 Fresher Information Corporation Technique for stabilizing data in a non-log based information storage and retrieval system
US7107480B1 (en) 2000-12-22 2006-09-12 Simpletech, Inc. System and method for preventing data corruption in solid-state memory devices after a power failure
KR100365725B1 (ko) 2000-12-27 2002-12-26 한국전자통신연구원 플래시 메모리를 이용한 파일 시스템에서 등급별 지움정책 및 오류 복구 방법
DE60041199D1 (de) 2000-12-29 2009-02-05 St Microelectronics Srl Programmierverfahren für nichtflüchtigen Speicher
US6802023B2 (en) 2001-03-15 2004-10-05 Hewlett-Packard Development Company, L.P. Redundant controller data storage system having hot insertion system and method
US6731447B2 (en) 2001-06-04 2004-05-04 Xerox Corporation Secure data file erasure
US6839808B2 (en) 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
US7275135B2 (en) 2001-08-31 2007-09-25 Intel Corporation Hardware updated metadata for non-volatile mass storage cache
US6735546B2 (en) 2001-08-31 2004-05-11 Matrix Semiconductor, Inc. Memory device and method for temperature-based control over write and/or read operations
US7177197B2 (en) 2001-09-17 2007-02-13 Sandisk Corporation Latched programming of memory and method
KR100437610B1 (ko) 2001-09-20 2004-06-30 주식회사 하이닉스반도체 정상 모드와 부분 어레이 셀프 리프레쉬 모드를 갖는저전력 반도체 메모리 장치
US20030061296A1 (en) 2001-09-24 2003-03-27 International Business Machines Corporation Memory semantic storage I/O
US6938133B2 (en) 2001-09-28 2005-08-30 Hewlett-Packard Development Company, L.P. Memory latency and bandwidth optimizations
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
GB0123415D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
US6552955B1 (en) 2001-10-30 2003-04-22 Mitsubishi Denki Kabushiki Kaisha Semiconductor memory device with reduced power consumption
US6715046B1 (en) 2001-11-29 2004-03-30 Cisco Technology, Inc. Method and apparatus for reading from and writing to storage using acknowledged phases of sets of data
US6925573B2 (en) 2002-01-02 2005-08-02 Intel Corporation Method and apparatus to manage use of system power within a given specification
CN1278239C (zh) 2002-01-09 2006-10-04 株式会社瑞萨科技 存储系统和存储卡
US20030145230A1 (en) 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
US7010662B2 (en) 2002-02-27 2006-03-07 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US7085879B2 (en) 2002-02-27 2006-08-01 Microsoft Corporation Dynamic data structures for tracking data stored in a flash memory device
JP2003281071A (ja) 2002-03-20 2003-10-03 Seiko Epson Corp データ転送制御装置、電子機器及びデータ転送制御方法
JP4050548B2 (ja) 2002-04-18 2008-02-20 株式会社ルネサステクノロジ 半導体記憶装置
US6707748B2 (en) 2002-05-07 2004-03-16 Ritek Corporation Back up power embodied non-volatile memory device
US6751129B1 (en) 2002-05-21 2004-06-15 Sandisk Corporation Efficient read, write methods for multi-state memory
US6894931B2 (en) 2002-06-20 2005-05-17 Kabushiki Kaisha Toshiba Nonvolatile semiconductor memory device
US7043599B1 (en) 2002-06-20 2006-05-09 Rambus Inc. Dynamic memory supporting simultaneous refresh and data-access transactions
US7562089B2 (en) 2002-06-26 2009-07-14 Seagate Technology Llc Systems and methods for storing information to allow users to manage files
US7082495B2 (en) 2002-06-27 2006-07-25 Microsoft Corporation Method and apparatus to reduce power consumption and improve read/write performance of hard disk drives using non-volatile memory
US7051152B1 (en) 2002-08-07 2006-05-23 Nvidia Corporation Method and system of improving disk access time by compression
JP4005895B2 (ja) 2002-09-30 2007-11-14 株式会社東芝 不揮発性半導体メモリ装置
US7340566B2 (en) 2002-10-21 2008-03-04 Microsoft Corporation System and method for initializing a memory device from block oriented NAND flash
US6996676B2 (en) 2002-11-14 2006-02-07 International Business Machines Corporation System and method for implementing an adaptive replacement cache policy
US6845053B2 (en) 2002-11-15 2005-01-18 Micron Technology, Inc. Power throughput adjustment in flash memory
US7082512B2 (en) 2002-11-21 2006-07-25 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US6836434B2 (en) 2002-11-21 2004-12-28 Micron Technology, Inc. Mode selection in a flash memory device
US7003620B2 (en) 2002-11-26 2006-02-21 M-Systems Flash Disk Pioneers Ltd. Appliance, including a flash memory, that is robust under power failure
US7165824B2 (en) 2002-12-02 2007-01-23 Silverbrook Research Pty Ltd Dead nozzle compensation
US6957158B1 (en) 2002-12-23 2005-10-18 Power Measurement Ltd. High density random access memory in an intelligent electric device
EP1435576B1 (en) 2003-01-03 2013-03-20 Austria Card Plastikkarten und Ausweissysteme GmbH Method and apparatus for block-oriented memory management provided in smart card controllers
US20040148360A1 (en) 2003-01-24 2004-07-29 Hewlett-Packard Development Company Communication-link-attached persistent memory device
US6959369B1 (en) 2003-03-06 2005-10-25 International Business Machines Corporation Method, system, and program for data backup
JP2004278439A (ja) 2003-03-17 2004-10-07 Toshiba Kyaria Kk 流体機械
US8041878B2 (en) 2003-03-19 2011-10-18 Samsung Electronics Co., Ltd. Flash file system
US7610348B2 (en) 2003-05-07 2009-10-27 International Business Machines Distributed file serving architecture system with metadata storage virtualization and data access at the data server connection speed
JP2004348818A (ja) 2003-05-20 2004-12-09 Sharp Corp 半導体記憶装置の書込制御方法及びシステム並びに携帯電子機器
US7380081B2 (en) 2003-06-06 2008-05-27 Hewlett-Packard Development Company, L.P. Asynchronous data redundancy technique
US7243203B2 (en) 2003-06-13 2007-07-10 Sandisk 3D Llc Pipeline circuit for low latency memory
US20040268359A1 (en) 2003-06-27 2004-12-30 Hanes David H. Computer-readable medium, method and computer system for processing input/output requests
GB0320142D0 (en) 2003-08-28 2003-10-01 Ibm Data storage systems
US7173852B2 (en) 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7096321B2 (en) 2003-10-21 2006-08-22 International Business Machines Corporation Method and system for a cache replacement technique with adaptive skipping
CA2544063C (en) 2003-11-13 2013-09-10 Commvault Systems, Inc. System and method for combining data streams in pilelined storage operations in a storage network
CN100543702C (zh) 2003-11-18 2009-09-23 松下电器产业株式会社 文件记录装置及其控制方法和执行方法
US7631138B2 (en) 2003-12-30 2009-12-08 Sandisk Corporation Adaptive mode switching of flash memory address mapping based on host usage characteristics
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US8250295B2 (en) 2004-01-05 2012-08-21 Smart Modular Technologies, Inc. Multi-rank memory module that emulates a memory module having a different number of ranks
US7188229B2 (en) 2004-01-17 2007-03-06 Sun Microsystems, Inc. Method and apparatus for memory management in a multi-processor computer system
US7328307B2 (en) 2004-01-22 2008-02-05 Tquist, Llc Method and apparatus for improving update performance of non-uniform access time persistent storage media
US7042664B2 (en) 2004-01-26 2006-05-09 Seagate Technology Llc Method and system for host programmable data storage device self-testing
US7064994B1 (en) 2004-01-30 2006-06-20 Sun Microsystems, Inc. Dynamic memory throttling for power and thermal limitations
US7305520B2 (en) 2004-01-30 2007-12-04 Hewlett-Packard Development Company, L.P. Storage system with capability to allocate virtual storage segments among a plurality of controllers
US7532537B2 (en) 2004-03-05 2009-05-12 Netlist, Inc. Memory module with a circuit providing load isolation and memory domain translation
US7916574B1 (en) 2004-03-05 2011-03-29 Netlist, Inc. Circuit providing load isolation and memory domain translation for memory module
US7289386B2 (en) 2004-03-05 2007-10-30 Netlist, Inc. Memory module decoder
US7260695B2 (en) 2004-03-05 2007-08-21 International Business Machines Corporation Scanning modified data during power loss
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
US20050240713A1 (en) 2004-04-22 2005-10-27 V-Da Technology Flash memory device with ATA/ATAPI/SCSI or proprietary programming interface on PCI express
CA2564844C (en) 2004-04-26 2014-12-09 Storewiz, Inc. Method and system for compression of files for storage and operation on compressed files
US7412614B2 (en) 2004-04-29 2008-08-12 Hewlett-Packard Development Company, L.P. Power management using a pre-determined thermal characteristic of a memory module
US7773521B2 (en) 2004-04-30 2010-08-10 Emc Corporation Storage switch traffic bandwidth control
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7512830B2 (en) 2004-05-14 2009-03-31 International Business Machines Corporation Management module failover across multiple blade center chassis
US20050257017A1 (en) 2004-05-14 2005-11-17 Hideki Yagi Method and apparatus to erase hidden memory in a memory card
US7831561B2 (en) 2004-05-18 2010-11-09 Oracle International Corporation Automated disk-oriented backups
WO2005114374A2 (en) 2004-05-21 2005-12-01 Computer Associates Think, Inc. Object-based storage
JP2005346321A (ja) 2004-06-02 2005-12-15 Hitachi Ltd ディスクアレイ装置及びディスクアレイ装置のバッテリ出力制御方法
US7395384B2 (en) 2004-07-21 2008-07-01 Sandisk Corproation Method and apparatus for maintaining data on non-volatile memory systems
TWI300186B (en) 2004-07-30 2008-08-21 Mediatek Inc Method and apparatus for data recording with pseudo-merge
US7477570B2 (en) 2004-08-20 2009-01-13 Micron Technology, Inc. Sequential access memory with system and method
US7398348B2 (en) 2004-08-24 2008-07-08 Sandisk 3D Llc Method and apparatus for using a one-time or few-time programmable memory with a host device designed for erasable/rewritable memory
US20060075057A1 (en) 2004-08-30 2006-04-06 International Business Machines Corporation Remote direct memory access system and method
US7395452B2 (en) 2004-09-24 2008-07-01 Microsoft Corporation Method and system for improved reliability in storage devices
US8655853B2 (en) 2004-10-01 2014-02-18 Sap Ag System and method for optimizing database transaction termination
US7603532B2 (en) 2004-10-15 2009-10-13 Netapp, Inc. System and method for reclaiming unused space from a thinly provisioned data container
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
US7337277B2 (en) 2004-11-18 2008-02-26 International Business Machines Corporation Apparatus, system, and method for flushing cache data
US7610307B2 (en) 2004-11-30 2009-10-27 Microsoft Corporation Method and system of detecting file system namespace changes and restoring consistency
JP2008523468A (ja) 2004-12-06 2008-07-03 テイアック エアロスペース テクノロジーズ インコーポレイテッド 不揮発記録媒体消去システム及び方法
US7581118B2 (en) 2004-12-14 2009-08-25 Netapp, Inc. Disk sanitization using encryption
US7487320B2 (en) 2004-12-15 2009-02-03 International Business Machines Corporation Apparatus and system for dynamically allocating main memory among a plurality of applications
US7739290B2 (en) 2004-12-17 2010-06-15 Sap (Ag) System and method for object persistence
KR100662256B1 (ko) 2004-12-20 2006-12-28 한국전자통신연구원 낮은 프로세스 점유율을 가지는 객체기반 스토리지 장치및 그 제어 방법
KR100684887B1 (ko) 2005-02-04 2007-02-20 삼성전자주식회사 플래시 메모리를 포함한 데이터 저장 장치 및 그것의 머지방법
US7392429B2 (en) 2004-12-22 2008-06-24 Microsoft Corporation System and method for maintaining persistent state data
US7246195B2 (en) 2004-12-30 2007-07-17 Intel Corporation Data storage management for flash memory devices
US20060184719A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US7426649B2 (en) 2005-02-09 2008-09-16 International Business Machines Corporation Power management via DIMM read operation limiter
US20060184736A1 (en) 2005-02-17 2006-08-17 Benhase Michael T Apparatus, system, and method for storing modified data
US20060190552A1 (en) 2005-02-24 2006-08-24 Henze Richard H Data retention system with a plurality of access protocols
US20060212644A1 (en) 2005-03-21 2006-09-21 Acton John D Non-volatile backup for data cache
US7463521B2 (en) 2005-04-01 2008-12-09 Sandisk Corporation Method for non-volatile memory with managed execution of cached data
US7702928B2 (en) 2005-04-08 2010-04-20 Hewlett-Packard Development Company, L.P. Memory module with on-board power-consumption monitoring
KR101077992B1 (ko) 2005-04-11 2011-10-31 엘지전자 주식회사 홈네트워크 제어 시스템 및 상기 홈네트워크 제어시스템에서의 데이터 흐름 제어 방법
US7620773B2 (en) 2005-04-15 2009-11-17 Microsoft Corporation In-line non volatile memory disk read cache and write buffer
US8452929B2 (en) 2005-04-21 2013-05-28 Violin Memory Inc. Method and system for storage of data in non-volatile media
US7130960B1 (en) 2005-04-21 2006-10-31 Hitachi, Ltd. System and method for managing disk space in a thin-provisioned storage subsystem
JP2006324754A (ja) 2005-05-17 2006-11-30 Fujitsu Ltd 最大事後確率復号方法及び復号装置
US20060265636A1 (en) 2005-05-19 2006-11-23 Klaus Hummler Optimized testing of on-chip error correction circuit
KR101268984B1 (ko) 2005-05-26 2013-05-29 삼성전자주식회사 메타 데이터를 제공하기 위한 애플리케이션이 포함된정보저장매체, 메타 데이터를 제공하는 장치 및 방법
US7536529B1 (en) 2005-06-10 2009-05-19 American Megatrends, Inc. Method, system, apparatus, and computer-readable medium for provisioning space in a data storage system
US7444526B2 (en) 2005-06-16 2008-10-28 International Business Machines Corporation Performance conserving method for reducing power consumption in a server system
US20080082763A1 (en) 2006-10-02 2008-04-03 Metaram, Inc. Apparatus and method for power management of memory circuits by a system or component thereof
US7716387B2 (en) 2005-07-14 2010-05-11 Canon Kabushiki Kaisha Memory control apparatus and method
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
US7552271B2 (en) 2005-08-03 2009-06-23 Sandisk Corporation Nonvolatile memory with block management
KR100739722B1 (ko) 2005-08-20 2007-07-13 삼성전자주식회사 플래시 메모리 관리 방법 및 플래시 메모리 시스템
JP5008845B2 (ja) 2005-09-01 2012-08-22 株式会社日立製作所 ストレージシステムとストレージ装置及びその制御方法
US20070061508A1 (en) 2005-09-13 2007-03-15 Quantum Corporation Data storage cartridge with built-in tamper-resistant clock
US7529905B2 (en) 2005-10-13 2009-05-05 Sandisk Corporation Method of storing transformed units of data in a memory system having fixed sized storage blocks
US7457928B2 (en) 2005-10-28 2008-11-25 International Business Machines Corporation Mirroring system memory in non-volatile random access memory (NVRAM) for fast power on/off cycling
US7516267B2 (en) 2005-11-03 2009-04-07 Intel Corporation Recovering from a non-volatile memory failure
US7739472B2 (en) 2005-11-22 2010-06-15 Sandisk Corporation Memory system for legacy hosts
US20070143560A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with memory allocation for a directly mapped file storage system
US20070143567A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Methods for data alignment in non-volatile memories with a directly mapped file storage system
US20070143566A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with data alignment in a directly mapped file storage system
US20070156998A1 (en) 2005-12-21 2007-07-05 Gorobets Sergey A Methods for memory allocation in non-volatile memories with a directly mapped file storage system
US7440455B2 (en) 2005-12-22 2008-10-21 Level 3 Communications, Llc Registration of multiple VoIP devices
US7613898B2 (en) 2006-01-17 2009-11-03 Globalfoundries Inc. Virtualizing an IOMMU
TWM298188U (en) 2006-01-23 2006-09-21 Genesys Logic Inc Control device for accessing Non-Volatile memory
US20070208790A1 (en) 2006-03-06 2007-09-06 Reuter James M Distributed data-storage system
US7421552B2 (en) * 2006-03-17 2008-09-02 Emc Corporation Techniques for managing data within a data storage system utilizing a flash-based memory vault
US7551492B2 (en) 2006-03-29 2009-06-23 Mosaid Technologies, Inc. Non-volatile semiconductor memory with page erase
US7640249B2 (en) 2006-03-29 2009-12-29 Sap (Ag) System and method for transactional session management
US7831778B2 (en) 2006-03-30 2010-11-09 Silicon Image, Inc. Shared nonvolatile memory architecture
KR101323400B1 (ko) 2006-03-30 2013-10-29 실리콘 이미지, 인크. 가변적인 포트 속도들을 갖는 다중-포트 메모리 디바이스
US20070233937A1 (en) 2006-03-31 2007-10-04 Coulson Richard L Reliability of write operations to a non-volatile memory
TW200739349A (en) 2006-04-12 2007-10-16 Giga Byte Tech Co Ltd Volatile storage device and serial connection type mixed storage device having the same
US7636829B2 (en) 2006-05-02 2009-12-22 Intel Corporation System and method for allocating and deallocating memory within transactional code
US7509460B2 (en) 2006-05-04 2009-03-24 Sun Microsystems, Inc. DRAM remote access cache in local memory in a distributed shared memory system
US7464240B2 (en) 2006-05-23 2008-12-09 Data Ram, Inc. Hybrid solid state disk drive with controller
US7620784B2 (en) * 2006-06-09 2009-11-17 Microsoft Corporation High speed nonvolatile memory device using parallel writing among a plurality of interfaces
US8307148B2 (en) 2006-06-23 2012-11-06 Microsoft Corporation Flash management techniques
US7721059B2 (en) 2006-07-06 2010-05-18 Nokia Corporation Performance optimization in solid-state media
US7500078B2 (en) 2006-08-25 2009-03-03 Dell Products L.P. Thermal control of memory modules using proximity information
US8060806B2 (en) 2006-08-27 2011-11-15 Anobit Technologies Ltd. Estimation of non-linear distortion in memory devices
US7788513B2 (en) 2006-08-29 2010-08-31 Hewlett-Packard Development Company, L.P. Method of reducing power consumption of a computing system by evacuating selective platform memory components thereof
US7870306B2 (en) 2006-08-31 2011-01-11 Cisco Technology, Inc. Shared memory message switch and cache
US7761625B2 (en) 2006-09-28 2010-07-20 Virident Systems, Inc. Methods for main memory with non-volatile type memory modules, and related technologies
US7573744B2 (en) 2006-09-29 2009-08-11 Kabushiki Kaisha Toshiba Semiconductor memory device having different capacity areas
JP4437489B2 (ja) 2006-10-25 2010-03-24 株式会社日立製作所 揮発性キャッシュメモリと不揮発性メモリとを備えたストレージシステム
KR100780773B1 (ko) 2006-11-03 2007-11-30 주식회사 하이닉스반도체 플래시 메모리소자의 프로그램 시작 바이어스 설정방법 및이를 이용한 프로그램 방법
US7567462B2 (en) 2006-11-16 2009-07-28 Micron Technology, Inc. Method and system for selectively limiting peak power consumption during programming or erase of non-volatile memory devices
US7924648B2 (en) 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
US20080140724A1 (en) 2006-12-06 2008-06-12 David Flynn Apparatus, system, and method for servicing object requests within a storage controller
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US20080140737A1 (en) 2006-12-08 2008-06-12 Apple Computer, Inc. Dynamic memory management
WO2008082591A2 (en) 2007-01-02 2008-07-10 Marvell World Trade Ltd. High speed interface for multi-level memory
US8880480B2 (en) 2007-01-03 2014-11-04 Oracle International Corporation Method and apparatus for data rollback
US7564722B2 (en) 2007-01-22 2009-07-21 Micron Technology, Inc. Memory system and method having volatile and non-volatile memory devices at same hierarchical level
US8369141B2 (en) 2007-03-12 2013-02-05 Apple Inc. Adaptive estimation of memory cell read thresholds
US7599967B2 (en) 2007-03-20 2009-10-06 Oracle International Corporation No data loss system with reduced commit latency
US7908501B2 (en) 2007-03-23 2011-03-15 Silicon Image, Inc. Progressive power control of a multi-port memory device
JPWO2008117520A1 (ja) 2007-03-28 2010-07-15 パナソニック株式会社 メモリコントローラ、不揮発性メモリシステムおよびホスト装置
US20080243966A1 (en) 2007-04-02 2008-10-02 Croisettier Ramanakumari M System and method for managing temporary storage space of a database management system
WO2008131058A2 (en) * 2007-04-17 2008-10-30 Rambus Inc. Hybrid volatile and non-volatile memory device
US9207876B2 (en) 2007-04-19 2015-12-08 Microsoft Technology Licensing, Llc Remove-on-delete technologies for solid state drive optimization
US8429677B2 (en) 2007-04-19 2013-04-23 Microsoft Corporation Composite solid state drive identification and optimization technologies
US7853759B2 (en) 2007-04-23 2010-12-14 Microsoft Corporation Hints model for optimization of storage devices connected to host and write optimization schema for storage devices
US7876621B2 (en) 2007-04-23 2011-01-25 Sandisk Il Ltd. Adaptive dynamic reading of flash memories
US7606079B2 (en) 2007-04-25 2009-10-20 Sandisk Corporation Reducing power consumption during read operations in non-volatile storage
US7752360B2 (en) 2007-05-16 2010-07-06 Nuova Systems, Inc. Method and system to map virtual PCIe I/O devices and resources to a standard I/O bus
US8301833B1 (en) 2007-06-01 2012-10-30 Netlist, Inc. Non-volatile memory module
US7793061B1 (en) * 2007-06-29 2010-09-07 Emc Corporation Techniques for using flash-based memory as a write cache and a vault
US8046546B2 (en) 2007-07-25 2011-10-25 AGIGA Tech Variable partitioning in a hybrid memory subsystem
US8028198B2 (en) 2007-07-30 2011-09-27 Micron Technology, Inc. Devices, methods, and apparatuses for detection, sensing, and reporting functionality for semiconductor memory
US8850154B2 (en) 2007-09-11 2014-09-30 2236008 Ontario Inc. Processing system having memory partitioning
US7773413B2 (en) 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
TWI578330B (zh) 2007-10-09 2017-04-11 A-Data Technology Co Ltd Solid state semiconductor storage device with temperature control function and control method thereof
US8621605B2 (en) 2007-10-09 2013-12-31 International Business Machines Corporation Method for reducing the time to diagnose the cause of unexpected changes to system files
US8156299B2 (en) 2007-10-19 2012-04-10 Virident Systems Inc. Managing memory systems containing components with asymmetric characteristics
US8548953B2 (en) 2007-11-12 2013-10-01 F5 Networks, Inc. File deduplication using storage tiers
US8001334B2 (en) 2007-12-06 2011-08-16 Silicon Image, Inc. Bank sharing and refresh in a shared multi-port memory device
US7917689B2 (en) * 2007-12-28 2011-03-29 Intel Corporation Methods and apparatuses for nonvolatile memory wear leveling
US8001434B1 (en) 2008-04-14 2011-08-16 Netlist, Inc. Memory board with self-testing capability
US8516185B2 (en) 2009-07-16 2013-08-20 Netlist, Inc. System and method utilizing distributed byte-wise buffers on a memory module
JP5159421B2 (ja) 2008-05-14 2013-03-06 株式会社日立製作所 ストレージシステム及び管理装置を用いたストレージシステムの管理方法
US8775718B2 (en) 2008-05-23 2014-07-08 Netapp, Inc. Use of RDMA to access non-volatile solid-state memory in a network storage system
JP5242264B2 (ja) 2008-07-07 2013-07-24 株式会社東芝 データ制御装置、ストレージシステムおよびプログラム
US7777652B2 (en) 2008-10-29 2010-08-17 Silicon Image, Inc. Coding system for memory systems employing high-speed serial links
US8407427B2 (en) 2008-10-29 2013-03-26 Silicon Image, Inc. Method and system for improving serial port memory communication latency and reliability
US8990573B2 (en) 2008-11-10 2015-03-24 Citrix Systems, Inc. System and method for using variable security tag location in network communications
KR101541812B1 (ko) 2008-11-19 2015-08-06 삼성전자주식회사 비휘발성 메모리 장치
US8645641B2 (en) 2008-12-17 2014-02-04 Seagate Technology Llc Intelligent storage device controller
US20100199020A1 (en) 2009-02-04 2010-08-05 Silicon Storage Technology, Inc. Non-volatile memory subsystem and a memory controller therefor
US8375195B2 (en) 2009-03-05 2013-02-12 Oracle America, Inc. Accessing memory locations for paged memory objects in an object-addressed memory system
US8423710B1 (en) * 2009-03-23 2013-04-16 Marvell International Ltd. Sequential writes to flash memory
US8364923B2 (en) 2009-03-30 2013-01-29 Oracle America, Inc. Data storage system manager and method for managing a data storage system
US8639871B2 (en) 2009-04-08 2014-01-28 Google Inc. Partitioning a flash memory data storage device
US20100262979A1 (en) 2009-04-08 2010-10-14 Google Inc. Circular command queues for communication between a host and a data storage device
US8595572B2 (en) 2009-04-08 2013-11-26 Google Inc. Data storage device with metadata command
US8214663B2 (en) 2009-04-15 2012-07-03 International Business Machines Corporation Using power proxies combined with on-chip actuators to meet a defined power target
US8095770B2 (en) 2009-05-08 2012-01-10 Oracle America Inc. Method and system for mapping data to a process
US8230257B2 (en) 2009-06-26 2012-07-24 Seagate Technology Llc Systems, methods and devices for controlling backup power provided to memory devices and used for storing of sensitive data
US20100332871A1 (en) 2009-06-30 2010-12-30 International Buisness Machines Corporation Capping power consumption in a data storage system
WO2011016081A1 (en) 2009-08-04 2011-02-10 Hitachi, Ltd. Storage system, control method thereof, and program to adjust power consumption per workload
US20110035562A1 (en) 2009-08-10 2011-02-10 Hewlett-Packard Development Company, L.P. Providing mirroring write data
US7818525B1 (en) 2009-08-12 2010-10-19 Texas Memory Systems, Inc. Efficient reduction of read disturb errors in NAND FLASH memory
IE20100614A1 (en) 2009-09-23 2011-03-30 Conor Maurice Ryan A flash memory device and control method
US8688899B2 (en) 2010-09-28 2014-04-01 Fusion-Io, Inc. Apparatus, system, and method for an interface between a memory controller and a non-volatile memory controller using a command protocol
WO2012051600A2 (en) 2010-10-15 2012-04-19 Kyquang Son File system-aware solid-state storage management system
WO2012082792A2 (en) 2010-12-13 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for auto-commit memory
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004077219A2 (en) * 2003-01-30 2004-09-10 Vaman Technologies (R & D) Limited System and method of mapping patterns of data, optimising disk read and write, verifying data integrity across clients and servers of different functionality having shared resources

Also Published As

Publication number Publication date
US20120151118A1 (en) 2012-06-14
CN103262054A (zh) 2013-08-21
US8527693B2 (en) 2013-09-03
WO2012082792A3 (en) 2012-10-11
EP2652623B1 (en) 2018-08-01
US20130346793A1 (en) 2013-12-26
US9223662B2 (en) 2015-12-29
WO2012082792A2 (en) 2012-06-21
EP2652623A2 (en) 2013-10-23
EP2652623A4 (en) 2014-04-30

Similar Documents

Publication Publication Date Title
CN103262054B (zh) 用于自动提交存储器的装置、系统和方法
CN102597910B (zh) 存储设备中用于功率减小管理的装置、系统及方法
US11907200B2 (en) Persistent memory management
US9047178B2 (en) Auto-commit memory synchronization
US9218278B2 (en) Auto-commit memory
CN105612503B (zh) 持久性数据结构
US9767017B2 (en) Memory device with volatile and non-volatile media
US9734027B2 (en) Synchronous mirroring in non-volatile memory systems
US10817421B2 (en) Persistent data structures
US20030070041A1 (en) Method and system for caching data in a storage system
US20170322611A1 (en) Host memory protection via powered persistent store
WO2013080299A1 (ja) データ管理装置、データコピー方法、およびプログラム
US9348704B2 (en) Electronic storage system utilizing a predetermined flag for subsequent processing of each predetermined portion of data requested to be stored in the storage system
CN103098034A (zh) 用于条件和原子存储操作的装置、系统和方法
JPWO2013080299A1 (ja) データ管理装置、データコピー方法、およびプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: SANDISK CORPORATION

Free format text: FORMER OWNER: FUSION-IO INC.

Effective date: 20150512

C41 Transfer of patent application or patent right or utility model
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: Utah, USA

Applicant after: Iverson IO - LLC

Address before: Utah, USA

Applicant before: Fusion-io, Inc.

COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM:

Free format text: CORRECT: APPLICANT; FROM: FUSION MULTISYSTEMS INC TO: FUSION-IO INC.

TA01 Transfer of patent application right

Effective date of registration: 20150512

Address after: Texas, USA

Applicant after: SANDISK TECHNOLOGIES Inc.

Address before: Utah, USA

Applicant before: Iverson IO - LLC

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: Texas, USA

Patentee after: SANDISK TECHNOLOGIES LLC

Address before: Texas, USA

Patentee before: SANDISK TECHNOLOGIES Inc.