跨多个存储装置执行原子写入操作的制作方法

文档序号:11450150阅读:231来源:国知局
跨多个存储装置执行原子写入操作的制造方法

在此描述的实施例大体上涉及通过跨存储装置执行原子写入操作来跨多个存储装置存储数据的主机系统。



背景技术:

独立磁盘冗余阵列(raid)控制器将数据剥离到多个存储驱动,并且根据写入到raid条带的数据计算奇偶校验数据(典型地通过对所剥离的数据进行xor)以写入到奇偶校验盘。raid实施方式的一个潜在问题已知是raid写入洞。在raid条带中的数据更新但奇偶校验数据未更新时发生写入洞,从而在盘失效时所有盘xor为零以便重构数据。问题在于,不存在原子地更新两个或更多个盘的方式,因此raid条带在死机或掉电期间可能变得损坏。为了解决这一问题,raid控制器维持非易失性存储装置,也称为nvram,以备份写入数据,直到奇偶校验数据可以写入。然而,添加nvram增加了raid控制器和raid解决方案的成本。没有显著性能问题的情况下,还未已知raid软件实施方式成功地解决写入洞问题。

在本领域存在对以下的需要:诸如在利用raid存储解决方案的情况下,提供改进的解决方案以跨多个存储装置写入数据,这允许在失效的情况下恢复数据。

附图说明

作为举例,参照未按照比例绘制的附图描述实施例,在附图中相似参考标记指代类似元件。

图1图示在其中主机系统跨多个存储装置存储数据的存储系统的实施例。

图2图示由用于写入操作的主机系统和存储装置维持的写入状态条目的实施例。

图3图示由用于写入操作的存储装置维持的写入状态条目的实施例。

图4图示状态图,其示出响应于来自主机系统的涉及用于原子写入操作的数据写入的命令的存储装置内的状态转移。

图5a和5b图示由存储控制器驱动器执行的用于实施写入操作以跨多个存储装置写入数据的操作的实施例。

图6图示由存储装置执行的用于处理来自主机系统的开启命令的操作的实施例。

图7、8和9图示由存储装置执行的用于处理来自主机系统的写入命令的操作的实施例。

图10图示由存储装置执行的用于处理关闭命令的操作的实施例。

图11、12和13图示由主机系统执行的用于处置对于写入操作的中断的操作的实施例。

图14图示由存储装置执行的用于处理状态查询请求的操作的实施例。

图15图示在其中可以实施图1的主机系统的系统。

具体实施方式

目前的raid控制器通过在昂贵nvram装置中实施回写高速缓存以部分地缓存写入的数据,来解决写入洞数据讹误问题。然而,这样的解决方案要求使用nvram,其是raid控制器的最昂贵的部件之一。此外,nvram用于回写高速缓存可能在底层的存储装置具有接近nvram装置的性能的读取和写入性能时造成瓶颈,诸如具有固态存储驱动(ssd)的情况。

所描述的实施例提供了实施raid或其他存储控制器的技术,其通过将部分写入的数据的存储卸载到存储装置本身来在避免使用nvram装置的同时免受写入洞和静默数据讹误。存储或raid控制器与分布式存储装置协调以确保对于存储装置的原子更新,而无需单独的回写高速缓存或者交付日志装置来存储部分写入的数据。

所描述的实施例提供了装置分布解决方案,用于以原子方式跨多个装置更新多个非连续数据块。在数据更新期间的任意给定时间点,可以在主机系统中的软件中实施的存储控制器可以断言整个操作整体完成或者通过将部分或全部写入的数据的存储卸载在存储装置处而不完全完成。在ssd的情况下,它们的读取和写入速率可以接近nvram的读取和写入速率。因此,所描述的实施例不需要nvram来备份卸载到存储装置、ssd的部分写入的数据。以这一方式,在存储装置是快存取装置,诸如ssd时,将不存在由nvram引入的瓶颈,这是因为ssd将在原子写入操作中使用来存储部分写入的数据以及数据的先前版本。

实施所描述的实施例的存储装置提供了用于存储控制器的机构,诸如软件raid控制器,用于将意向寄存在存储装置中以备份数据的先前版本。这一“意向”指示存储驱动将提供在对于写入的中断发生的情况下用于恢复所需要的数据。在意向条目对于写入操作是开放的时,存储装置维持所列出的数据块的“旧”和“新”副本。一旦写入完成,每个装置中的意向条目和旧数据可以丢弃。然而,如果写入被中断,则存在跨用于raid实施方式的所有参与存储装置和存储控制器、多装置文件系统或者数据库的充分分布的元数据,以前滚事务以完成,或者回滚到先前的状态/数据。所描述实施例存储系统的消费者经历在其整体式或不完全完成的写入请求。

在以下描述中,阐述了大量具体的细节,例如逻辑实施方式、操作码、指定操作数的手段、资源分区/共享/复制实施方式、系统部件的类型和相互关系、以及逻辑分区/综合选择,以便提供对本发明更透彻的理解。然而,本领域的技术人员将意识到,没有这些具体的细节也可以实践本发明。在其他实例中,没有详细地示出控制结构、门级电路和全部软件指令序列,以免模糊了本发明。本领域的普通技术人员利用所包括的描述,无需过度试验就将能够实施适当的功能。

在说明书中提及“一种实施例”、“实施例”、“示例实施例”等都是指示所描述的实施例可以包括具体的特征、结构或特性,但是每个实施例可以不一定包括所述具体的特征、结构或特性。而且,这样的短语不一定是指同一实施例。某些实施例涉及存储装置电子组件。实施例包括用于形成电子组件的装置和方法二者。

图1图示具有主机系统100的存储环境的实施例,其存储诸如用户数据的数据,该数据可以从其他附接的计算机系统和装置传送到多个存储装置1021、1022……102n。主机系统100包括操作系统104,其包括存储控制器驱动器106,用于管理存储装置1021、1022……102n中的数据存储。存储控制器驱动器106维持写入操作状态信息200,其具有有关分布到用于存储的存储装置1021、1022……102n以及写入高速缓存110的数据的信息,写入高速缓存110缓冲发送至存储装置1021、1022……102n的数据,直到存储装置证实数据已经写入。

在一个实施例中,存储控制器驱动器106可以实施独立磁盘冗余阵列(raid)算法以将数据单元的部分剥离到多个存储装置1021、1022……102n,计算所剥离的数据单元的奇偶校验数据,并且将奇偶校验数据存储在存储装置1021、1022……102n之一中。如果具有数据的一个存储装置1021、1022……102n失效,则奇偶校验数据可以包括xor奇偶校验数据以执行奇偶校验错误恢复。存储控制器驱动器106可以实施不同的raid算法,包括交织等。

在图1的实施例中,存储控制器驱动器106包括操作系统104的软件部件。在替代实施例中,存储控制器驱动器106可以在可以通过内部总线连接至主机系统100的硬件装置或单独硬件控制器或卡中实施。

每个存储装置1021、1022……102n包括控制器112,控制器112管理数据到一个或多个数据存储单元114的写入,包括传送以及接收来自主机系统100的读取和写入命令。控制器112维持写入操作状态300,其具有有关由主机系统100发送的写入请求的状态的信息。控制器112还可以包括来自主机系统100的队列到队列的读取和写入请求。

在一个实施例中,存储装置1021、1022……102n可以包括固态驱动(ssd)、闪速驱动等。对于ssd实施方式,数据存储单元114可以包括闪速存储器储存单元的nand管芯。在一个实施例中,nand管芯可以包括多级储存单元(mlc)nand闪速存储器,其在每个储存单元中记录两个位值,下位值和上位值。可替换地,nand管芯可以包括单级储存单元(slc)存储器或者每储存单元三位(tlc)存储器。存储单元114也可以包括但不限于mlcnand闪速存储器、铁电随机存取存储器(fetram)、基于纳米线的非易失性存储器、诸如相变存储器(pcm)的三维(3d)交叉点存储器、结合忆阻器技术的存储器、磁阻随机存取存储器(mram)、自旋转移力矩(stt)-mram、单级储存单元(slc)闪速存储器、能量源后援(电池/超级电容器)dram以及其他电可擦除可编程只读存储器(eeprom)类型装置。在替代实施例中,存储装置1021、1022……102n可以包括其他类型的存储装置,诸如硬盘驱动等。在实施例中,在存储装置1021、1022……102n包括硬盘驱动的情况下,数据存储单元114可以包括磁盘。

主机100可以通过诸如总线接口的接口116与存储装置1021、1022……102n通信。主机100和存储装置1021、1022……102n可以位于同一个封装体或分离的封装体中。可替换地,主机系统100可以通过网络与存储装置1021、1022……102n通信。

主机100和存储装置1021、1022……102n可以包括输入/输出(i/o)接口以允许它们之间的通信,诸如串行高级技术附件(sata)接口,并且包括耦接主机100和存储装置102的sata兼容总线。在其他实施例中,可以使用其他类型的i/o接口和总线互连,诸如串行附接小型计算机系统接口(scsi)(或简称sas)、快速外围部件互连(pcie)等。

图2图示存储控制器驱动器106针对相对于存储装置1021、1022……102n之一开启的每个写入操作维持的写入操作状态条目200i的实施例。每个条目200i可以具有:提供写入操作的唯一标识符的写入操作标签200,其可以具有跨多个存储装置1021、1022……102n剥离的数据的轨迹或块;标识由标签200标识的写入操作所指向的存储装置1021、1022……102n的存储装置标识符(id);以及写入操作的状态206。

如果写入操作涉及将数据单元的部分写入到存储装置1021、1022……102n的多个,则对于每个写入操作可以有多个写入状态条目200i,这些条目中的每一个相对于存储装置1021、1022……102n中具有用于写入操作标签202的所接收数据的一个存储装置,提供针对所标识的写入操作的状态。

状态206可以相对于存储装置1021、1022……102n之一指示写入操作的状态,包括但不限于:

空闲状态指示存储装置204还未接受开启命令以指示意向日志记录。确认意向日志记录的存储装置致力于在更新数据之前制作写入数据的先前版本的副本,并且维持该先前版本直到写入操作完成,即,原子操作完成。

开启状态指示存储装置204已经确认其已经接收到标识写入操作标签202的开启命令,开启命令指示存储装置204已经确认写入的意向并且准备在数据针对所标识的写入操作进行更新之前保存数据的先前版本。

脏状态在写入操作202包括多个写入命令时使用,每个写入命令针对要在所指定的存储装置204处写入的范围或数据单元的一部分。对于写入数据的一部分的写入命令之一的脏状态指示写入数据的该部分已被写入到存储装置204。针对具有开启状态的数据的部分的写入的写入状态条目200i指示该特定部分未完成。

已写入状态指示对于所指定的存储装置204的写入操作202所要求的写入已完成。在仅有一个写入命令已针对写入操作202被发送的情况下,在存储装置204证实其已经完成写入时,指示已写入。在对于存储装置204的写入操作202包括多个写入命令(例如子写入命令)的情况下,在针对数据的部分的所有部件写入命令已经在存储装置204处完成时,指示写入操作202的已写入。

复原状态指示复原命令已发送至存储装置204以将由写入操作204更新的数据回滚到已被记录日志的先前版本。

关闭状态指示存储装置204已经确认关闭命令的接受以使存储装置204清理所有记录日志的数据的先前版本以及用于写入操作202的状态信息。

图3图示存储装置1021、1022……102n中的每一个针对由存储控制器驱动器106开启的每个写入操作维持的写入操作状态条目300i的实施例。每个条目300i可以具有:提供写入操作的唯一标识符的写入操作标签300,其可以具有跨多个存储装置1021、1022……102n剥离的数据的轨迹或块;指示存储装置维持被更新的数据的先前版本的副本的意向的意向日志记录标记304;以及写入操作的状态306,其可以包括上文描述的状态之一。

在替代实施例中,存储控制器驱动器106在操作期间可以不维持显式的写入操作状态200信息。替代地,存储装置1021、1022……102n维持状态300,并且在需要处置对于写入操作的中断时,存储控制器驱动器106将从存储装置1021、1022……102n获得状态。

存储控制器驱动器106可以将以下命令提交给存储装置1021、1022……102n作为写入操作的部分,以将数据单元或范围的部分写入到多个存储装置1021、1022……102n:

open(tag,extents)-指令存储装置1021、1022……102n开始针对写入操作标签的新意向日志以写入所标识的范围或数据单元。

close(tag)-指令存储装置1021、1022……102n关闭写入操作,并且清除任何状态信息以及针对写入操作标签维持的数据的日志记录的先前版本。

writewithtag(tag,extents)-在此也称为写入,指令存储装置1021、1022……102n写入用于开启写入操作(标签)的数据(范围)。

readwithtag(tag,extents,new)-在此也称为读取,指令进行接收的存储装置1021、1022……102n检索先前版本、写入数据或者用于写入操作(标签)的所标识数据(范围)中两个的混合。

revert(tag)-指令存储装置1021、1022……102n将已写入的数据回滚到针对写入操作(标签)的数据的日志记录的先前版本。

图4图示描述存储装置1021、1022……102n处的不同状态的状态图400的实施例。旧数据状态401示出在数据更新之前数据的状态。一接收到开启命令,进行接收的存储装置1021、1022……102n的状态转变402到意向日志记录状态403,在意向日志记录状态403中存储装置1021、1022……102n在写入新数据之前保存数据的先前版本。存储装置1021、1022……102n可以通过执行位写入式(write-in-place)写入来写入新数据,或者使用间接法执行写时拷贝以在写入时拷贝旧数据。在写入操作包括对于存储装置的数据单元的部分的一系列写入命令的实施例中,则一接收到写入命令之一,在对于数据单元的部分之一的特定写入完成时但在对于存储装置的所有写入完成之前,进行接收的存储装置1021、1022……102n的状态转变404到脏状态405。在写入操作包括单个写入命令或者在完成所有部件写入命令之后的实施例中,状态分别转变407和408到已写入状态409。一接收到针对写入操作(标签)的关闭命令,存储装置1021、1022……102n转变410到新数据状态411。在新数据状态411,存储装置1021、1022……102n丢弃数据的日志记录的先前版本以及写入操作(标签)的其他信息,诸如用于写入操作的写入状态条目300i。可替换地,具有数据的日志记录的先前版本以及其他相关信息的存储空间可以标记为自由空间并且可用于垃圾回收或再利用。

图4的状态图实施例提供了原子性,因为写入操作在任一存储装置1021、1022……102n处未完成,直到所有存储装置已证实它们的数据已经在单个写入命令或多个写入命令中写入。直到原子写入操作完成的点,存储装置1021、1022……102n维持部分以及全部写入的数据以及数据的先前版本,以允许存储控制器驱动器106将用于所有存储装置的数据回滚到更新或者写入操作的写入数据之前的数据的先前版本。此外,在奇偶校验数据被维持的实施例中,存储装置1021、1022……102n维持足够的信息以允许在原子写入操作完成之前奇偶校验数据的计算。下文详细描述在存储控制器驱动器106与存储装置1021、1022……102n之间的这一原子写入操作的实施方式。

图5a和5b图示由存储控制器驱动器106执行的操作的实施例,用以管理具有写入数据(例如数据单元、轨迹、范围)的原子写入操作,以跨多个存储装置1021、1022……102n进行写入或剥离。一初始化(块500处)用于原子写入操作的过程,存储控制器106确定(块501处)用于唯一地标识写入操作的标签。存储控制器驱动器106将开启命令发送(块503处)至存储装置1021、1022……102n中的每一个以接收用于写入操作的数据,来指令存储装置1021、1022……102n开始意向日志记录,从而存储要更新的数据的先前版本。发送开启命令导致存储控制器驱动器106创建用于写入操作的数据将发送到的每个存储装置1021、1022……102n的写入状态条目200i,该写入状态条目200i具有空闲状态。如果写入操作将涉及用于每个存储装置的数据的部分的多个写入命令,则存储驱动控制器106可以提供用于写入数据的一部分的每个写入命令的具有空闲状态的写入状态条目200i,以便提供用于存储装置1021、1022……102n的数据的部分的每个写入命令的单独状态。

一接收到(块505处)来自用于写入操作的存储装置1021、1022……102n之一的开启命令的确认,存储控制器驱动器106更新(块506处)用于写入操作标签和存储装置1021、1022……102n的状态206以指示开启。如果(块507处)所有存储装置1021、1022……102n未具有开启状态,则存储控制器驱动器106返回到块505以等待来自存储装置1021、1022……102n中的其他存储装置的开启命令的确认,以确保所有的存储装置1021、1022……102n确认它们将从事意向日志记录。如果(块507处)所有存储装置1021、1022……102n已经确认开启状态,则存储控制器驱动器106确定(块508处)要发送至用于写入操作的存储装置1021、1022……102n中的每一个的数据。这一操作可能涉及确定要跨多个存储装置写入的数据单元的部分。在raid实施方式中,这一操作可以确定要剥离到存储装置1021、1022……102n中的每一个的数据,以及确定所计算的用于存储xor奇偶校验数据的存储装置1021、1022……102n中的一个或多个的xor奇偶校验数据。此外,这一确定可以进一步分解数据的部分以针对每个存储装置写入多个写入命令,以针对每个存储装置1021、1022……102n写入数据的每个部分。

存储控制器驱动器106将写入(或以标签写入)命令发送(块509处)至每个存储装置,以写入针对该存储装置确定的所指示的写入数据。针对写入操作标签和接收一个或多个写入命令的存储装置1021、1022……102n中的每一个,更新(块510处)状态206以指示写入已被发送。在一个实施例中,用于已经接收到写入命令的存储装置的开启状态将指示写入已被发送但还未完成。

控制随后前进到图5b中的块511,在其中存储控制器驱动器106接收(块511处)来自用于写入操作标签的存储装置之一的写入完成的确认。用于写入操作标签和确认存储装置的状态被更新(块512处)以指示写入完成,其可以是已写入状态。存储控制器驱动器106可以随后清理(块513处)写入高速缓存110中的用于该完成的写入操作的数据。这时,写入数据的副本维持在存储装置1021、1022……102n处,并且存储控制器驱动器106不需要维持部分写入的数据。如果写入操作涉及用于一个存储装置的多个写入命令,则存储控制器驱动器106可以丢弃用于写入命令的数据的部分,但是针对未接收到对其的确认的写入命令保留数据的部分以针对存储装置写入。如果(块514处)存在一些未确认写入完成状态(例如已写入状态)的接收到写入命令的存储装置1021、1022……102n,则控制前进回到块511以等待来自所有存储装置1021、1022……102n的进一步写入完成确认。对于涉及将多个写入命令发送至存储装置1021、1022……102n中的每一个的写入操作,控制前进回到块511,如果并不是所有用于数据部分的写入命令已经完成的话。

如果(块514处)在接收到用于写入操作的写入数据的所有存储装置1021、1022……102n处已经完成所有的写入,则存储控制器驱动器106将关闭命令发送(块515处)至在写入状态条目200i中针对写入操作标签标识的存储装置1021、1022……102n中的每一个。一接收到(块516处)来自存储装置1021、1022……102n之一的针对写入操作的关闭命令完成的确认,存储控制器驱动器106在用于写入操作标签202和确认存储装置204的写入状态条目200i中更新(块517处)状态206以指示关闭状态。如果(块508处)不是所有的存储装置1021、1022……102n已经确认关闭命令的处理,则控制前进回到块516以等待来自存储装置1021、1022……102n中的其他存储装置的关闭命令的确认。如果(块518处)已被发送关闭命令的所有存储装置1021、1022……102n返回了确认,则存储控制器驱动器106可以丢弃(块519处)用于写入操作标签的任何信息,诸如用于写入操作标签和存储装置1021、1022……102n中的每一个的所有写入状态条目200i。可替换地,存储控制器驱动器106可以针对作为用于以后垃圾回收或再利用的自由空间的所有存储装置,指示用于写入操作的信息。

在替代实施例中,块518和519处的操作不执行,并且在第一次接收到确认时异步地针对每个存储装置1021、1022……102n指示关闭,因为到第一个关闭状态确认被接收的时候所有装置已经写入数据。在另外的替代实施例中,存储控制器驱动器106基于接收自存储装置1021、1022……102n的确认不维持状态信息,并且仅在需要时、在针对状态信息对存储装置1021、1022……102n进行询问时、在存在对于写入操作的中断或其他失效时获得这样的状态信息。

利用图5a和5b的操作,存储控制器驱动器106不需要维持所有的写入数据和写入数据的先前版本,直到整个写入操作被证实完成。替代地,一旦数据被写入到存储装置1021、1022……102n,用于该存储装置1021、1022……102n的数据可以丢弃,因为原子写入确保了存储装置1021、1022……102n中的每一个维持数据的先前版本以及当前写入数据以允许回滚或者完成写入。此外,如果计算了奇偶校验数据,则存储装置维持部分写入的数据以允许重新计算奇偶校验数据,以前滚和完成用于写入操作的非奇偶校验和奇偶校验数据的写入。如所讨论的,奇偶校验数据可以包括擦除代码奇偶校验数据,诸如xor奇偶校验和其他奇偶校验数据,其可以在存储装置之一失效时用于数据恢复。

图6-9图示在存储装置1021、1022……102n中的每一个的控制器112中实施的操作,用于处理来自存储控制器驱动器106的命令以实施原子写入操作。图6图示由控制器112执行以处理来自存储控制器驱动器106的开启命令的操作的实施例。响应于接收到(块600处)指定写入操作(标签)的开启命令,存储装置控制器112创建(块601处)写入状态条目300i,写入状态条目300i标识写入操作标签302、指示意向日志记录304状态(指示要更新的作为所标识的写入操作标签302的部分的数据的先前版本将被日志记录和保存)、以及指示状态306为开启。控制器112将开启完成状态返回(块602处)给主机100。具有开启状态的存储装置1021、1022……102n确认保存更新数据的先前版本的意向,以及任何发送的写入未被接收或者已经被接收但未完成。

图7图示由存储装置控制器112执行的操作的实施例,用于处理用于写入操作标签的写入命令,诸如以标签写入。一接收到(块700处)针对(多个)数据存储单元114中的位置寻址的逻辑或物理地址的用于写入操作(标签)的写入命令,控制器112将数据的副本保存(块701处)在数据存储单元114中的存储地址处作为要更新的数据的先前版本,所述命令具有写入数据。在替代的写时拷贝实施方式中,控制器112可以记住旧数据位于的地方并且将新数据写入新存储区域,并且间接表格允许旧数据的位置被再利用。写入命令中的写入数据被写入(块702处)到存储地址。一将数据写入到实际存储单元114(诸如闪速存储器、ssd等的情况),或者一将存储装置1021、1022……102n中的写入数据缓冲在与数据存储单元114分离的缓冲器中,写入可以视为完成,其中所缓冲的数据最终离台到数据存储单元114(诸如硬盘驱动的情况)。一完成写入,控制器112将写入操作的状态306指示(块703处)为用于写入操作302的写入状态条目300i中的已写入。完成返回(块704处)到主机100。图7的操作可以在仅有一个写入命令针对写入操作发送至每个存储装置1021、1022……102n时执行。

图8图示由存储装置控制器112执行的操作的实施例,用于处理多个写入命令,诸如以标签写入,以针对一个存储装置和写入操作标签写入数据的部分。一接收到(块800处)多个写入命令(也称为子写入命令)以针对(多个)数据单元114中的存储地址写入用于写入操作(标签)的数据的部分,控制器112针对每个写入执行块801至805处的操作循环。在块802处,数据存储单元114中存储地址处的数据的副本被保存为要更新的数据的先前版本。在替代的写入时拷贝实施方式中,控制器112可以记住旧数据位于的地方并且将新数据写入到新存储区域,并且间接表格允许旧数据的位置被再利用。写入命令中的写入数据被写入(块803处)到存储地址。一完成写入,控制器112在针对写入操作302的写入状态条目300i中将写入操作的状态306和写入的部分数据指示(块804处)为脏。在完成写入要针对所有写入操作写入的数据单元的所有部分之后,控制器112将针对写入命令和写入操作(标签)的写入完成返回给主机100。

在图8的实施例中,写入完成或已写入状态仅在执行所有写入命令以写入数据单元的数据的所有部分之后返回。在替代实施例中,控制器112可以在每个写入命令完成时返回脏状态,从而指示写入数据的该部分完成。

图9图示由控制器112执行的操作的实施例,用于在存储装置1021、1022……102n的数据单元独立地包括可寻址的存储装置时,跨多个数据单元114(包括奇偶校验数据单元114)剥离所接收的写入数据。数据单元114可以包括独立存储装置,诸如闪速装置、ssd、硬盘驱动等。可替换地,如果存储装置包括ssd,则数据单元114可以包括存储装置1021、1022……102n中的存储器储存单元的管芯,诸如用于ssd存储装置的nand管芯。在图9的实施例中,控制器112可以包括raid控制器,其具有写入高速缓存,用于缓存要跨数据单元114剥离的所有数据。再进一步地,控制器112可以实施存储控制器驱动器106的逻辑以执行关于存储控制器驱动器106所描述的原子写入操作。

一针对存储地址处理(块900处)用于写入操作(标签)的写入命令,控制器112将数据存储单元114中该存储地址处的数据的副本作为数据的先前版本保存(块901处)在写入高速缓存中,所述写入命令具有写入数据。在替代的写入时拷贝实施方式中,控制器112可以记住旧数据位于的地方并且将新数据写入到新存储区域,并且间接表格允许旧数据的位置被再利用。控制器112确定(块902处)针对写入数据的剥离单元以跨存储装置中的数据存储单元进行剥离,并且计算(块903处)用于剥离单元的擦除代码奇偶校验数据(诸如但不限于xor奇偶校验数据)以写入到存储单元114的奇偶校验数据存储单元。在一个实施例中,控制器112可以使用raid算法以根据不同的raid级别来确定剥离单元和奇偶校验数据。控制器112将剥离单元和奇偶校验数据写入(块904处)到数据存储单元904,并且一完成数据从写入命令到存储单元114的剥离,返回(块905处)给主机110。奇偶校验数据可以使用纠错码或者本领域已知的其他奇偶校验算法来计算。

图10图示由存储装置控制器112执行的操作的实施例,用于处理来自存储控制器驱动器106的关闭命令。一接收到(块1000处)用于写入操作(标签)的关闭命令,控制器112丢弃(块1002处)用于写入操作的数据的先前版本以及用于写入操作的写入状态信息,包括写入状态条目300i。针对写入操作(标签),将关闭完成返回给(块1004处)主机系统100。

图11-13图示由存储控制器驱动器106执行的操作的实施例,用于从失效(诸如导致写入操作的中断的供电失效或其他事件)恢复。关于图11,一检测到(块1100处)对于写入操作的中断,存储控制器驱动器106向不具有已写入状态106的存储装置1021、1022……102n中的每一个发送(块1101处)状态查询。一接收到(块1102处)状态,存储控制器驱动器106针对写入操作标签202和存储装置204更新(块1103处)写入状态条目200i,以指示对应于接收自存储装置的状态的状态206,诸如已写入、开启、已关闭等。如果所接收的状态是针对发送至存储装置的多个写入命令之一,则所返回的状态可以指示脏,使得数据的部分被写入,而不是以不同写入命令发送的数据的所有部分。如果(块1104处)针对写入操作(标签)之一接收对于所有存储装置1021、1022……102n的状态,则存储控制器驱动器106发起(块1105处)恢复操作以将写入操作中涉及的存储装置1021、1022……102n返回到数据的先前版本(回滚)或者写入数据的版本(前滚)。可替换地,恢复操作可以涉及通过使用以标签读取命令来重新生成在掉电时运行中的数据,而使存储装置中的数据一致,所述运行中的数据可以通过读取命令从存储装置1021、1022……102n恢复。图12和13图示用于图11中的块1105处执行的不同类型的恢复操作的操作的实施例。

图12图示由存储驱动器控制器106执行的操作的实施例,用于执行恢复操作以复原回到写入操作之前的数据的先前版本。如果存在恢复操作,则图12的操作可以针对写入操作状态200中的每个写入操作标签来执行。一发起恢复操作(块1200处),存储控制器驱动器106确定(块1201处)写入操作的状态是否是中断的写入,所述中断的写入在用于写入操作标签的写入状态条目200i中的存储装置1021、1022……102n中的一些而不是全部处于已写入状态时发生。这可以在一些条目200i指示已写入状态以及其他条目200i指示开启或脏状态或者指示写入可能还未完成的任意其他状态时发生。如果(块1201处)针对写入操作的状态不是中断的写入,则存储控制器驱动器106确定(块1202处)写入操作标签的状态是否是中断的开启,所述中断的开启在存储装置1021、1022……102n中的至少一个处于开启状态并且至少一个处于空闲状态时发生。如果是,则恢复动作包括将关闭命令发送(块1203处)至所有存储装置1021、1022……102n。否则,如果(块1202处)所有都处于空闲状态,则控制结束而不采取任何恢复动作。

如果(块1201处)写入操作的状态是中断的写入,则存储控制器驱动器106将复原命令发送(块1204处)至在写入状态条目200i中指示为具有已写入或脏状态的任意存储装置1021、1022……102n,以使存储装置1021、1022……102n以数据的先前版本回滚更新数据。一针对写入操作从存储装置之一接收到(块1205处)复原命令完成的确认,如果(块1206处)接收到复原命令的所有存储装置1021、1022……102n已经确认复原操作完成,则存储控制器驱动器106将关闭命令发送(块1207处)至在写入状态条目200i中针对写入操作标识的未处于空闲状态的所有存储装置1021、1022……102n。此时,由于数据已经复原到先前状态,所以需要写入的任意数据将不得不从生成了写入数据的较高级别的应用恢复。否则,如果(块1206处)并非所有存储装置1021、1022……102n已经确认复原命令完成,则控制前进回到块1205以等待所有复原命令完成。

图13图示由存储驱动器控制器106执行的操作的替代实施例,用于执行恢复操作以完成已经接收到用于写入操作的写入命令的所有存储装置1021、1022……102n处的写入操作。如果存在恢复操作,则图13的操作可以针对写入操作状态200中的每个写入操作标签来执行。一发起恢复操作(块1300处),存储控制器驱动器106执行与关于图12中的块1201、1202和1203描述的操作相同的块1301、1302和1303处的操作,以确定写入操作是否具有中断的写入状态或中断的开启状态。一确定(块1301处)状态是中断的写入状态,对于具有奇偶校验数据的实施例,如果(在块1306处)具有奇偶校验数据的(多个)存储装置未处于已写入状态,则存储控制器驱动器106从具有指示脏或已写入状态206的条目200i的任意存储装置读取(块1304处)所写入的写入数据。针对未完成的写入,存储控制器驱动器106根据从存储装置1021、1022……102n读取的写入数据以及写入高速缓存110中的写入数据中的任一个来计算(块1305处)奇偶校验数据。所计算的奇偶校验数据写入(块1306处)到具有奇偶校验的(多个)存储装置。

在完成重新写入奇偶校验(块1306处)之后或者如果(块1303处)具有奇偶校验数据的(多个)存储装置处于已写入状态,则对于在状态条目200i中针对写入操作标签标识为处于开启状态(写入未完成)的存储装置1021、1022……102n中的每一个,于是存储控制器驱动器106重新发送(块1307处)写入命令以写入先前从写入高速缓存110发送的写入数据。在不存在奇偶校验数据的实施例中,则在确定针对写入操作的中断的写入状态(块130处)之后,控制将直接前进到块1307。

利用图13的所描述的实施例,在写入所有数据之后返回写入完成的实施例中,则块1307处的操作将被执行以针对未完成写入的存储装置重新写入数据。在所描述的实施例中,一完成写入,存储装置1021、1022……102n可以不返回中间脏确认,而是可以等待直到所有写入命令或子写入命令完成并且随后针对用于写入操作的所有写入命令发送写入完成。在这一实施例中,仅响应于错误恢复期间的状态查询而返回脏状态。在替代实施例中,存储装置1021、1022……102n可以响应于完成用于写入操作的多个写入命令之一而返回脏。

图14图示响应于接收到来自存储控制器驱动器106的状态查询而由存储装置1021、1022……102n的控制器112执行的操作的实施例。响应于接收到(块1400处)状态查询,如果(块1401处)存在任意针对维持在写入操作状态300中的写入操作标签的待决未完成命令,则存储装置1021、1022……102n将完成用于写入操作的待决命令,诸如开启、写入、关闭、复原。如果(块1401处)不存在用于写入操作的待决命令或者在完成(块1402处)所有待决命令之后,则控制器112发送(块1403处)用于在所有写入状态条目300i中所指示的所有写入操作标签的状态信息。

应意识到,贯穿本说明书提及“一个实施例”或“实施例”意味着结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,要强调和应该意识到的是,在本说明书的各个部分两次或更多次提及“实施例”或“一个实施例”或“替代实施例”并不必然全都指代同一个实施例。此外,特定特征、结构或特性可以在本发明的一个或多个实施例中合适地组合。

类似地,应意识到,在前文对本发明的实施例的描述中,为了流水化本公开以帮助理解各个发明性方面中的一个或多个的目的而有时将各种特征一起分组到单个实施例、图或其描述中。但是,不应将这种公开方法解释为反应了所要求保护的主题要求的特征比每个权利要求中明确记载的更多的意图。而是,如所附权利要求所反应的,发明性的方面所依赖的特征少于单个在前文公开的实施例中的全部特征。因此,特此将附于详细描述的权利要求明确地并入该详细描述中。

存储控制器驱动器106和存储装置1021、1022……102n中的控制器112的所描述的操作可以实施为方法、设备或计算机可读存储介质,所述计算机可读存储介质使用标准的编程和/或工程技术来产生软件、固件、硬件或其任意组合。所描述的操作可以实施为维持在“计算机可读存储介质”中的代码或逻辑,所述代码或逻辑可以直接执行功能,或者其中处理器可以读取和执行来自计算机存储可读介质的代码。计算机可读存储介质包括电子电路、存储材料、无机材料、有机材料、生物材料、铸件、壳体、涂层和硬件中的至少一个。计算机可读存储介质可以包括但不限于磁存储介质(例如,硬盘驱动、软盘、磁带等)、光学存储部(cd-rom、dvd、光学盘等)、易失性和非易失性存储器装置(例如,eeprom、rom、prom、ram、dram、sram、闪速存储器、固件、可编程逻辑等)、固态装置(ssd)等。计算机可读存储介质还可以包括在硬件装置(例如,集成电路芯片、可编程逻辑器件、可编程门阵列(pga)、现场可编程门阵列(fpga)、专用集成电路(asic)等)中实施的数字逻辑。再进一步地,实施所描述的操作的代码可以在“传输信号”中实施,其中传输信号可以通过空间或者通过诸如光纤、铜导线等的传输介质来传播。代码或逻辑被编码在其中的传输信号还可以包括无线信号、卫星传输、无线电波、红外信号、蓝牙等。嵌入在计算机可读存储介质上的程序代码可以作为传输信号从发射站或计算机传输至接收站或计算机。计算机可读存储介质并不仅仅包括传输信号,而是包括有形部件。本领域技术人员将认识到,在不偏离本发明的范围的情况下可以对这一配置做出许多修改,并且制品可以包括本领域已知的合适的信息承载介质。

图15图示主机系统100可以在其中实施的系统1500的实施例。该系统包括处理器1504,其通过总线1506与易失性存储器装置1508和非易失性存储装置1510通信,在易失性存储器装置1508中缓存执行的程序、操作数和参数,诸如操作系统104和存储控制器驱动器106,在非易失性存储装置1510中可以存储数据和程序。处理器1504也可以与输入/输出(i/o)装置1512a、1512b通信,它们可以包括输入装置、显示装置、图形卡、端口、网络接口等。非易失性存储装置1510可以安装到系统外壳1500,诸如在存储驱动机架中,或者通过端口接口或通过网络连接至系统1500。

示例

以下示例涉及进一步的实施例。

示例1是一种计算机可读存储装置,具有在与多个存储装置通信的主机系统中执行的计算机程序指令,所述计算机程序指令用于导致操作,所述操作包括:确定在其上要写入用于写入操作的数据的多个存储装置;生成唯一地标识所述写入操作的标签;将包括所述标签和写入数据的写入命令发送至所确定的多个存储装置中的每一个,以使每一个存储装置在所述存储装置处写入所述写入数据,其中每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及将具有所述标签的复原命令发送至所述多个存储装置中的一个存储装置,以使所述一个存储装置还原所述一个存储装置处的所述写入数据的先前版本的副本。

在示例2中,根据示例1和3-11的主题可以可选地包括:所述操作还包括:将开启命令发送至具有所述标签的每一个存储装置,其中所述开启命令使每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及其中,响应于从已被发送所述开启命令的所有存储装置接收到所述开启命令的确认,而将所述写入命令发送至每一个存储装置。

在示例3中,根据示例1、2和4-11的主题可以可选地包括:操作还包括:响应于接收到对于所有存储装置的所述写入命令在存储装置处已完成的确认,而将关闭命令发送至每一个存储装置,其中所述关闭命令使每一个存储装置去除所述写入操作的上下文,所述上下文包括所述数据的先前版本的副本。

在示例4中,根据示例1-3和5-11的主题可以可选地包括:所述操作还包括:检测中断;确定所有存储装置未完成所述写入命令;以及将关闭命令发送至处于开启状态的每一个存储驱动以关闭所述写入操作。

在示例5中,根据示例1-4和6-11的主题可以可选地包括:所述操作还包括:响应于检测到中断,而确定未确认完成所述写入命令的存储装置的状态,其中,所述复原命令被发送至确定已完成所述写入命令的至少一个存储装置。

在示例6中,根据示例1-5和7-11的主题可以可选地包括:确定存储装置的状态包括将查询发送至已经接收到所述写入命令的未确认所述写入命令完成的每一个存储装置,其中,所述复原命令被发送至已响应于所述写入命令从而指示所述写入完成的每一个存储装置,并且被发送至已响应于所述查询从而指示所述写入完成的每一个存储装置。

在示例7中,根据示例1-6和8-11的主题可以可选地包括:所述操作还包括:缓存以所述写入命令发送的所述写入数据;响应于接收到一个写入命令已完成所缓存的写入数据的确认,而丢弃以所述一个写入命令发送的所述写入数据;响应于检测到中断,确定已经接收到所述写入命令并且未确认所述写入完成的存储装置的状态;以及将具有所缓存的写入数据的写入命令重新发送至具有指示所述写入未完成的状态的每一个存储装置。

在示例8中,根据示例1-7和9-11的主题可以可选地包括:发送至所述多个存储装置的写入命令包括发送至所述多个存储装置中的多个存储装置的非奇偶校验数据以及发送至所述多个存储装置中的至少一个存储装置的奇偶校验数据。

在示例9中,根据示例1-8、10和11的主题可以可选地包括:响应于确定所述奇偶校验数据的写入命令未完成,而执行:从具有指示所述写入命令完成的状态的每一个存储装置读取所述写入数据;以及根据从所述多个存储装置中的所述至少一个存储装置读取的写入数据以及针对具有指示所述写入未完成的状态的存储装置所缓存的写入数据,来计算所述奇偶校验数据。

在示例10中,根据示例1-9和11的主题可以可选地包括:多个写入命令被发送至每一个存储装置以写入针对所述存储装置的写入数据的一部分,其中,所述操作还包括:缓存以所述多个写入命令发送的写入数据的部分;响应于检测到中断,确定已经接收到所述多个写入命令并且未确认所有写入完成的存储装置的状态;对于已经确认少于所有所发送的写入命令完成的每一个存储装置,将至少一个读取命令发送至所述存储装置以读取所述写入数据的部分;根据所述写入数据的所读取的部分以及根据以未完成的写入发送的所述写入数据的所缓存的部分,来计算奇偶校验数据;将未完成的具有所述写入数据的所缓存的部分并且用于所计算的奇偶校验数据的写入命令重新发送至数据的所述部分意图用于的至少一个存储装置。

在示例11中,根据示例1-10的主题可以可选地包括:所述主机系统将多个写入操作发送至所述多个存储装置,并且对于每个写入操作,提供唯一地标识所述写入操作的标签,其中,所述操作还包括:响应于检测到对于所述写入操作的中断,将对于维持在所述多个存储装置处的所述标签的状态的查询请求发送至所述多个存储装置;以及响应于所述请求,从每一个存储装置接收在所述多个存储装置处发起的写入操作的标签,以及针对指示开启或已写入状态的每一个标签的写入操作的状态。

示例12是一种与主机系统通信的存储装置,其中所述存储装置包括:在执行时执行操作的控制器,所述操作包括:从所述主机系统接收具有唯一地标识写入操作的标签和写入数据的写入命令;响应于所述写入命令,将所述写入数据写入所述存储装置并且维持更新的数据的先前版本的副本作为所述写入命令的部分;接收具有标识所述写入命令针对其已被接收的写入操作的标签的复原命令;以及响应于所述复原命令,还原由所述写入数据更新的数据的先前版本的副本。

在示例13中,根据示例12和14-18的主题可以可选地包括:所述写入命令包括多个写入命令,每个写入命令具有用于所述写入操作的写入数据的一部分,其中写入所述写入数据以及维持所述先前版本的副本的操作针对每一个写入命令来执行,其中所述操作还包括:响应于完成所有写入命令中所述写入数据的部分的写入,将确认返回给所述写入命令;以及将已经针对所述多个写入命令之一写入的所述数据的部分指示为脏。

在示例14中,根据示例12、13和15-18的主题可以可选地包括:所述操作还包括:接收用于所述写入操作的关闭命令;并且响应于用于所述写入操作的所述关闭命令,删除有关所述写入操作以及用于所述写入操作的所述数据的先前副本的信息;以及将所述关闭命令的完成的确认返回给所述主机系统。

在示例15中,根据示例12-14和16-18的主题可以可选地包括:所述存储装置包括固态盘(ssd)。

在示例16中,根据示例12-15、17和18的主题可以可选地包括:所述操作还包括:从所述主机系统接收具有用于所述写入操作的标签的开启命令;指示用于所述标签的意向日志记录以维持更新的数据的先前版本的副本作为由所述标签标识的写入操作的部分;以及响应于指示所述意向日志记录,而返回所述开启命令的确认,其中所述写入命令在返回所述开启命令的确认之后发送。

在示例17中,根据示例12-16和18的主题可以可选地包括:所述操作还包括:从主机接收状态查询;响应于接收到所述状态查询:完成用于所述写入操作的任何待决写入命令;响应于完成所述待决写入命令,而将写入完成返回给所述主机;以及响应于确定不存在用于所述写入操作的待决写入命令,而返回开启状态。

在示例18中,根据示例12-17的主题可以可选地包括:针对所述存储装置处开启的多个写入操作中的每一个,执行完成所述待决写入命令以及将所述写入完成或开启状态返回给所述主机的操作。

示例19是一种与多个存储装置通信的系统,所述系统包括:处理器;以及计算机可读存储介质,具有由所述处理器执行以执行操作的程序指令,所述操作包括:确定在其上要写入用于写入操作的数据的多个存储装置;生成唯一地标识所述写入操作的标签;将包括所述标签和写入数据的写入命令发送至所确定的多个存储装置中的每一个,以使每一个存储装置在所述存储装置处写入所述写入数据,其中每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及将具有所述标签的复原命令发送至所述多个存储装置中的一个存储装置,以使所述一个存储装置还原所述一个存储装置处的所述写入数据的先前版本的副本。

在示例20中,根据示例19和21-26的主题可以可选地包括:所述操作还包括:将开启命令发送至具有所述标签的每一个存储装置,其中所述开启命令使每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及其中,响应于从已被发送所述开启命令的所有存储装置接收到所述开启命令的确认,而将所述写入命令发送至每一个存储装置。

在示例21中,根据示例19、20和22-26的主题可以可选地包括:所述操作还包括:响应于接收到对于所有存储装置的所述写入命令在存储装置处已完成的确认,而将关闭命令发送至每一个存储装置,其中所述关闭命令使每一个存储装置去除所述写入操作的上下文,所述上下文包括所述数据的先前版本的副本。

在示例22中,根据示例19-21和23-26的主题可以可选地包括:所述操作还包括:检测中断;确定所有存储装置未完成所述写入命令;以及将关闭命令发送至处于开启状态的每一个存储驱动以关闭所述写入操作。

在示例23中,根据示例19-22和24-26的主题可以可选地包括:所述操作还包括:响应于检测到中断,而确定未确认完成所述写入命令的存储装置的状态,其中,所述复原命令被发送至确定已完成所述写入命令的至少一个存储装置。

在示例24中,根据示例19-23和25-26的主题可以可选地包括:确定存储装置的状态包括将查询发送至已经接收到所述写入命令的未确认所述写入命令完成的每一个存储装置,其中,所述复原命令被发送至已响应于所述写入命令从而指示所述写入完成的每一个存储装置,并且被发送至已响应于所述查询从而指示所述写入完成的每一个存储装置。

在示例25中,根据示例19-24和26的主题可以可选地包括:所述操作还包括:缓存以所述写入命令发送的所述写入数据;响应于接收到一个写入命令已完成所缓存的写入数据的确认,而丢弃以所述一个写入命令发送的所述写入数据;响应于检测到中断,确定已经接收到所述写入命令并且未确认所述写入完成的存储装置的状态;以及将具有所缓存的写入数据的写入命令重新发送至具有指示所述写入未完成的状态的每一个存储装置。

在示例26中,根据示例19-25的主题可以可选地包括:发送至所述多个存储装置的写入命令包括发送至所述多个存储装置中的多个存储装置的非奇偶校验数据以及发送至所述多个存储装置中的至少一个存储装置的奇偶校验数据。

示例27是一种方法,包括:确定在其上要写入用于写入操作的数据的多个存储装置;生成唯一地标识所述写入操作的标签;将包括所述标签和写入数据的写入命令发送至所确定的多个存储装置中的每一个,以使每一个存储装置在所述存储装置处写入所述写入数据,其中每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及将具有所述标签的复原命令发送至所述多个存储装置中的一个存储装置,以使所述一个存储装置还原所述一个存储装置处的所述写入数据的先前版本的副本。

在示例28中,根据示例27和29-31的主题可以可选地包括:将开启命令发送至具有所述标签的每一个存储装置,其中所述开启命令使每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及其中,响应于从已被发送所述开启命令的所有存储装置接收到所述开启命令的确认,而将所述写入命令发送至每一个存储装置。

在示例29中,根据示例27、28、30和31的主题可以可选地包括:响应于检测到中断,而确定未确认完成所述写入命令的存储装置的状态,其中,所述复原命令被发送至确定已完成所述写入命令的至少一个存储装置。

在示例30中,根据示例27-30的主题可以可选地包括:缓存以所述写入命令发送的所述写入数据;响应于接收到一个写入命令已完成所缓存的写入数据的确认,而丢弃以所述一个写入命令发送的所述写入数据;响应于检测到中断,确定已经接收到所述写入命令并且未确认所述写入完成的存储装置的状态;以及将具有所缓存的写入数据的写入命令重新发送至具有指示所述写入未完成的状态的每一个存储装置。

在示例31中,示例27-30的主题可以可选地包括:从其余存储写入速率以及当前存储写入速率确定对写入放大的调节包括:确定在应用于当前存储写入速率时导致其余存储写入速率的调节因素。

在示例32中,示例27的主题可以可选地包括以下中的至少一个步骤:

(1)将开启命令发送至具有所述标签的每一个存储装置,其中所述开启命令使每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及其中,响应于从已被发送所述开启命令的所有存储装置接收到所述开启命令的确认,而将所述写入命令发送至每一个存储装置;和/或

(2)响应于接收到对于所有存储装置的所述写入命令在存储装置处已完成的确认,而将关闭命令发送至每一个存储装置,其中所述关闭命令使每一个存储装置去除所述写入操作的上下文,所述上下文包括所述数据的先前版本的副本;和/或

(3)检测中断;确定所有存储装置未完成所述写入命令;以及将关闭命令发送至处于开启状态的每一个存储驱动以关闭所述写入操作;和/或

(4)响应于检测到中断,而确定未确认完成所述写入命令的存储装置的状态,其中,所述复原命令被发送至确定已完成所述写入命令的至少一个存储装置;和/或

(5)其中,确定存储装置的状态包括将查询发送至已经接收到所述写入命令的未确认所述写入命令完成的每一个存储装置,其中,所述复原命令被发送至已响应于所述写入命令从而指示所述写入完成的每一个存储装置,并且被发送至已响应于所述查询从而指示所述写入完成的每一个存储装置;和/或

(6)缓存以所述写入命令发送的所述写入数据;响应于接收到一个写入命令已完成所缓存的写入数据的确认,而丢弃以所述一个写入命令发送的所述写入数据;响应于检测到中断,确定已经接收到所述写入命令并且未确认所述写入完成的存储装置的状态;以及将具有所缓存的写入数据的写入命令重新发送至具有指示所述写入未完成的状态的每一个存储装置;和/或

(7)其中,发送至所述多个存储装置的写入命令包括发送至所述多个存储装置中的多个存储装置的非奇偶校验数据以及发送至所述多个存储装置中的至少一个存储装置的奇偶校验数据;和/或

(8)其中,响应于确定所述奇偶校验数据的写入命令未完成,而执行:从具有指示所述写入命令完成的状态的每一个存储装置读取所述写入数据;以及根据从所述多个存储装置中的所述至少一个存储装置读取的写入数据以及针对具有指示所述写入未完成的状态的存储装置所缓存的写入数据,来计算所述奇偶校验数据;和/或

(9)其中,多个写入命令被发送至每一个存储装置以写入针对所述存储装置的写入数据的一部分,还包括:缓存以所述多个写入命令发送的写入数据的部分;响应于检测到中断,确定已经接收到所述多个写入命令并且未确认所有写入完成的存储装置的状态;对于已经确认少于所有所发送的写入命令完成的每一个存储装置,将至少一个读取命令发送至所述存储装置以读取所述写入数据的所述部分;根据所述写入数据的所读取的部分以及根据以未完成的写入发送的所述写入数据的所缓存的部分,来计算奇偶校验数据;将未完成的具有所述写入数据的所缓存的部分并且用于所计算的奇偶校验数据的写入命令重新发送至数据的所述部分意图用于的至少一个存储装置;和/或

(10)其中,所述主机系统将多个写入操作发送至所述多个存储装置,并且对于每个写入操作,提供唯一地标识所述写入操作的标签,还包括:响应于检测到对于所述写入操作的中断,将对于维持在所述多个存储装置处的所述标签的状态的查询请求发送至所述多个存储装置;以及响应于所述请求,从每一个存储装置接收在所述多个存储装置处发起的写入操作的标签,以及针对指示开启或已写入状态的每一个标签的写入操作的状态。

示例33是一种方法,包括:从主机系统接收具有唯一地标识写入操作的标签和写入数据的写入命令;响应于所述写入命令,将所述写入数据写入存储装置并且维持更新的数据的先前版本的副本作为所述写入命令的部分;接收具有标识所述写入命令针对其已被接收的写入操作的标签的复原命令;以及响应于所述复原命令,还原由所述写入数据更新的数据的先前版本的副本。

在示例34中,示例33的主题可以可选地包括:接收用于所述写入操作的关闭命令;并且响应于用于所述写入操作的所述关闭命令,删除有关所述写入操作以及用于所述写入操作的所述数据的先前副本的信息;以及将所述关闭命令的完成的确认返回给所述主机系统。

在示例35中,示例33的主题可以可选地包括以下中的至少一个步骤:

(1)其中,所述写入命令包括多个写入命令,每个写入命令具有用于所述写入操作的写入数据的一部分,其中写入所述写入数据以及维持所述先前版本的副本的操作针对每一个写入命令来执行,还包括:响应于完成所有写入命令中所述写入数据的部分的写入,将确认返回给所述写入命令;以及将已经针对所述多个写入命令之一写入的所述数据的部分指示为脏;和/或

(2)接收用于所述写入操作的关闭命令;并且响应于用于所述写入操作的所述关闭命令,删除有关所述写入操作以及用于所述写入操作的所述数据的先前副本的信息;以及将所述关闭命令的完成的确认返回给所述主机系统;和/或

(3)其中,所述存储装置包括固态盘(ssd);和/或

(4)从所述主机系统接收具有用于所述写入操作的标签的开启命令;指示用于所述标签的意向日志记录以维持更新的数据的先前版本的副本作为由所述标签标识的写入操作的部分;以及响应于指示所述意向日志记录,而返回所述开启命令的确认,其中所述写入命令在返回所述开启命令的确认之后发送;和/或

(5)从所述主机接收状态查询;响应于接收到所述状态查询:完成用于所述写入操作的任何待决写入命令;响应于完成所述待决写入命令,而将写入完成返回给所述主机;以及响应于确定不存在用于所述写入操作的待决写入命令,而返回开启状态;和/或

(6)其中,针对所述存储装置处开启的多个写入操作中的每一个,执行完成所述待决写入命令以及将所述写入完成或开启状态返回给所述主机的操作。

示例36是包括用于执行如任意前述权利要求中要求保护的方法的构件的设备。

示例37是包括机器可读指令的机器可读存储部,在所述机器可读指令执行时实施如任意前述权利要求中要求保护的方法,或者实现如任意前述权利要求中要求保护的设备或系统。

示例38是一种设备,包括:用于确定在其上要写入用于写入操作的数据的多个存储装置的构件;用于生成唯一地标识所述写入操作的标签的构件;用于将包括所述标签和写入数据的写入命令发送至所确定的多个存储装置中的每一个,以使每一个存储装置在所述存储装置处写入所述写入数据的构件,其中每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及用于将具有所述标签的复原命令发送至所述多个存储装置中的一个存储装置,以使所述一个存储装置还原所述一个存储装置处的所述写入数据的先前版本的副本的构件。

在示例39中,根据示例38的主题可以可选地包括:用于将开启命令发送至具有所述标签的每一个存储装置的构件,其中所述开启命令使每一个存储装置维持要由所述写入操作更新的数据的先前版本的副本;以及其中,响应于从已被发送所述开启命令的所有存储装置接收到所述开启命令的确认,而将所述写入命令发送至每一个存储装置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1