首页> 中国专利> 一种面向闪存存储的数据访问方法及其装置

一种面向闪存存储的数据访问方法及其装置

摘要

提供了一种面向闪存存储的数据访问方法及其装置。一种用于存储系统的数据访问方法,所述存储系统包括多个存储设备,所述存储系统提供多个存储对象,存储对象由存储设备上的存储资源组成,所述多个存储对象包括一个或多个可写存储对象与多个只读存储对象;所述方法包括:响应于写请求,向所述可写存储对象以追加写方式写入数据;若所述可写存储对象已满,将所述可写存储对象设置为只读存储对象;响应于读请求,从所述只读存储对象中读出数据。

著录项

  • 公开/公告号CN106445405A

    专利类型发明专利

  • 公开/公告日2017-02-22

    原文格式PDF

  • 申请/专利权人 北京忆恒创源科技有限公司;

    申请/专利号CN201510498599.0

  • 申请日2015-08-13

  • 分类号G06F3/06;

  • 代理机构

  • 代理人

  • 地址 100192 北京市石景山区西小口路66号中关村东升科技园B-2号楼A302室

  • 入库时间 2023-06-19 01:36:59

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-02-07

    授权

    授权

  • 2018-06-26

    实质审查的生效 IPC(主分类):G06F3/06 申请日:20150813

    实质审查的生效

  • 2017-02-22

    公开

    公开

说明书

技术领域

本发明涉及高性能存储系统,更具体地,本发明涉及在存储系统中将数据输出到记录载体期间,使读、写操作在存储对象层分离的存储系统的数据访问方法及其装置。

背景技术

现有技术通常通过LBA(Logical Block Address,逻辑块地址)的方式对固态硬盘(SSD,Solid State Drive)进行访问。文件系统中产生的数据访问需要确定LBA,然后根据LBA访问对应的SSD。这种采用LBA进行数据布局的方式比较直观,并且能够通过数据缓存、充分利用应用数据的局部性特性来提高数据访问的性能。

现有技术是在磁盘技术上演变过来的,其充分利用了磁盘存储设备的顺序访问能力强,随机访问能力弱的特性。然而,通过LBA访问SSD的方式无法满足存储性能一致性的需求,并且当存储系统使用一段时间之后,由于大量数据回收操作将使得系统性能整体下降。

为提高存储系统的写操作性能,一般在系统中提供高速缓冲,用于缓存写入的数据。提供写缓存的一种方式是在内存中建立缓存,对文件或者块设备的写请求写到内存中的缓存后,就可以向主机返回写操作完成,然后通过后台操作异步地将数据写到磁盘。这种方法通常称为write-back(写回)。另一种方法是等待缓冲中的数据被同步到磁盘才向主机返回写操作完成,这称为write-through(写穿)。

NVDIMM是用于计算设备的存储器,其兼具类似DRAM(Dynamic RandomAccess Memory)的高速数据存取能力与非易失存储器的数据保持能力,即使发生意外掉电,NVDIMM中存储的数据依然不会丢失。

参看图1,在公开号为CN104239226A的中国专利申请中公开了采用NVDIMM作为高速缓存的iSCSI存储服务器。在存储服务器工作时,所有的iSCSI读写命令都通过磁盘缓存完成相应的读写操作。当存储服务器收到iSCSI读命令时,先在磁盘缓存查找,如果找到相应的数据,直接返回给客户端;如果没找到相应的数据,将数据从磁盘读入到该磁盘缓存中,然后再返回给客户端;当存储服务器收到iSCSI写命令时,直接将数据复制到磁盘缓存的相应区域中。

现有技术中,将NVDIMM既用作读缓存又用作写缓存,对NVDIMM的容量提出了很高的需求。在面对流式数据访问请求时,现有技术的缓存方式难以获得高利用率,而频繁的缓存缺失又将引起存储系统的整体性能颠簸。

发明内容

本发明的一个目的在于希望解决在掉电时数据不丢失的前提下提升写性能的问题,实现对写性能和数据可靠性的兼顾。本发明的又一个目的在于提供针对流式大数据的有效的缓存替换机制,提高缓存的利用效率,减少存储系统的性能颠簸,使存储系统实现延迟的一致性。本发明的又一个目的在于提出了一种数据在闪存存储介质上的分布方式,降低读写操作之间的相互影响,使读操作延迟控制在一定范围之内。在使得闪存存储系统获取最佳性能的同时,还实现性能一致性。除此之外,本发明的目的还在于提高系统性能的同时,增强闪存使用寿命。

根据本发明的第一方面,提供了根据本发明第一方面的第一基于NVDIMM的数据写缓存方法,包括:接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;影响于接收到该第一数据写入请求,将所述第一数据写入NVDIMM;响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;响应于接收到所述第一数据写入请求,还将所述第一数据写入存储设备;响应于将所述第一数据写入存储设备的操作完成,释放所述第一数据在所述NVDIMM中占据的存储空间。

根据本发明第一方面的第一基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第二方法,其中将所述第一数据写入NVDIMM的操作与将所述第一数据写入存储设备的操作并行执行。

根据本发明第一方面的第一或第二基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第三方法,其中所述将所述第一数据写入NVDIMM包括:生成第一数据块,所述第一数据块中包括所述第一数据、所述第一地址以及顺序号,其中每次生成顺序号时,递增所述顺序号;将所述第一数据块写入所述NVDIMM。

根据本发明第一方面的第一至第三基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第四方法,还包括:接收第二数据写入请求,所述第二数据写入请求指示将第二数据写入第二地址;响应于接收到所述第二数据写入请求,生成第二数据块,所述第二数据块中包括所述第二数据、所述第二地址以及顺序号;将所述第二数据块写入所述NVDIMM。

根据本发明第一方面的第一至第三基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第五方法,还包括:响应于收到正常关机的消息,向所述NVDIMM中写入第一标记。

根据本发明第一方面的第四基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第六方法,还包括:响应于收到正常关机的消息,向所述NVDIMM中写入第一标记。

根据本发明第一方面的第六基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第七方法,还包括:响应于开机,若从所述NVDIMM中无法读到所述第一标记,则从所述NVDIMM中读出所述第一数据块与所述第二数据块,按照所述第一数据块与所述第二数据块中的顺序号从小到大的顺序将所述第一数据块与所述第二数据块中的第一数据与第二数据写入所述存储设备。

根据本发明第一方面的第四基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第八方法,还包括:响应于收到异常关机的消息,向所述NVDIMM中写入第二标记;响应于开机,若从所述NVDIMM中读到所述第二标记,则从所述NVDIMM中读出所述第一数据块与所述第二数据块,按照所述第一数据块与所述第二数据块中的顺序号从小到大的顺序将所述第一数据块与所述第二数据块中的第一数据与第二数据写入所述存储设备。

根据本发明第一方面的前述基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第九方法,其中响应于将第一数据写入所述NVDIMM,将所述第一数据在所述NVDIMM上占据的存储空间标记为占用;响应于释放所述第一数据在所述NVDIMM中占据的存储空间,将所述第一数据在所述NVDIMM上占据的存储空间标记为空闲。

根据本发明第一方面的第九基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第十方法,其中所述将所述第一数据写入NVDIMM时将所述第一数据写入所述NVDIMM的被标记为空闲的存储空间。

根据本发明第一方面的前述基于NVDIMM的数据写缓存方法,提供了根据本发明第一方面的第十一方法,还包括:将所述第一地址写入所述存储设备。

根据本发明的第二方面,提供了根据本发明第二方面的第一基于NVDIMM的数据写缓存装置,包括:接收模块,用于接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;NVDIMM写入模块,用于响应于接收到该第一数据写入请求,将所述第一数据写入NVDIMM;消息发送模块,用于响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;存储设备写入模块,用于响应于接收到所述第一数据写入请求,还将所述第一数据写入存储设备;以及NVDIMM释放模块,用于响应于将所述第一数据写入存储设备的操作完成,释放所述第一数据在所述NVDIMM中占据的存储空间。

根据本发明的第三方面,提供了根据本发明第三方面的第一基于NVDIMM的数据写缓存方法,包括:接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;响应于接收到该第一数据写入请求,将所述第一数据写入NVDIMM;响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;接收第二数据写入请求,所述第二数据写入请求指示将第二数据写入第二地址;响应于接收到该第二数据写入请求,将所述第二数据写入NVDIMM;响应于将所述第二数据写入NVDIMM的操作完成,发送指示所述第二数据写入请求完成的消息;生成第一存储数据块,所述第一存储数据块中包括所述第一数据、所述第一地址、所述第二数据以及所述第二地址;将所述第一存储数据块写入存储设备;响应于将所述第一存储数据写入存储设备的操作完成,释放所述第一数据与第二数据在所述NVDIMM中占据的存储空间。

根据本发明第三方面的第一基于NVDIMM的数据写缓存方法,提供了根据本发明第三方面的第二方法,其中所述将所述第一数据写入NVDIMM包括:生成第一数据块,所述第一数据块中包括所述第一数据、所述第一地址以及顺序号;将所述第一数据块写入所述NVDIMM;以及其中所述将所述第二数据写入NVDIMM包括:生成第二数据块,所述第二数据块中包括所述第二数据、所述第二地址以及顺序号;将所述第二数据块写入所述NVDIMM;以及其中每次生成顺序号时,递增所述顺序号。

根据本发明第三方面的第一或第二基于NVDIMM的数据写缓存方法,提供了根据本发明第三方面的第三方法,还包括:响应于收到正常关机的消息,向所述NVDIMM中写入第一标记。

根据本发明第三方面的第三基于NVDIMM的数据写缓存方法,提供了根据本发明第三方面的第四方法,还包括:响应于开机,若从所述NVDIMM中无法读到所述第一标记,则从所述NVDIMM中读出所述第一数据块与所述第二数据块,按照所述第一数据块与所述第二数据块中的顺序号从小到大的顺序将所述第一数据块与所述第二数据块中的第一数据与第二数据写入所述存储设备。

根据本发明第三方面的前述基于NVDIMM的数据写缓存方法,提供了根据本发明第三方面的第五方法,其中响应于将第一数据写入所述NVDIMM,将所述第一数据在所述NVDIMM上占据的存储空间标记为占用;响应于释放所述第一数据在所述NVDIMM中占据的存储空间,将所述第一数据在所述NVDIMM上占据的存储空间标记为空闲。

根据本发明第三方面的第五基于NVDIMM的数据写缓存方法,提供了根据本发明第三方面的第六方法,其中所述将所述第一数据写入NVDIMM时将所述第一数据写入所述NVDIMM的被标记为空闲的存储空间。

根据本发明的第四方面,提供了根据本发明第四方面的第一基于NVDIMM的数据写缓存装置,包括:第一接收模块,用于接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;第一NVDIMM写入模块,用于响应于接收到该第一数据写入请求,将所述第一数据写入NVDIMM;第一消息发送模块,用于响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;第二接收模块,用于接收第二数据写入请求,所述第二数据写入请求指示将第二数据写入第二地址;第二NVDIMM写入模块,用于响应于接收到该第二数据写入请求,将所述第二数据写入NVDIMM;第二消息发送模块,用于响应于将所述第二数据写入NVDIMM的操作完成,发送指示所述第二数据写入请求完成的消息;数据聚合模块,用于生成第一存储数据块,所述第一存储数据块中包括所述第一数据、所述第一地址、所述第二数据以及所述第二地址;存储设备写入模块,用于将所述第一存储数据块写入存储设备;以及NVDIMM释放模块,用于响应于将所述第一存储数据写入存储设备的操作完成,释放所述第一数据与第二数据在所述NVDIMM中占据的存储空间。

根据本发明的第五方面,提供一种计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行执行根据本发明的第一与第三方面而提供的多种方法之一。

根据本发明的第六方面,提供了一种计算机,包括:用于存储程序指令的机器可读存储器;用于执行存储在所述存储器中的程序指令的一个或多个处理器;所述程序指令用于使所述一个或多个处理器执行根据本发明的第一与第三方面而提供的多种方法之一。

根据本发明的第七方面,提供了一种程序,其使得计算机执行根据本发明的第一与第三方面而提供的多种方法之一。

根据本发明的第八方面,提供了一种在其上具有所记录的程序的计算机可读存储介质,其中所述程序使得计算机执行根据本发明的第一与第三方面而提供的多种方法之一。

根据本发明的第九方面,提供了根据本发明第九方面的第一用于流式数据处理的写缓存释放方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述方法包括:响应于接收到释放所述写缓存的第一存储空间的请求,查找与所述第一存储空间相接的存储空间是否为空闲存储空间;若找到与所述第一存储空间相接的第一空闲存储空间,修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间;以及若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。

根据本发明第九方面,提供了根据本发明第九方面的第二用于流式数据处理的写缓存释放方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,所述方法包括:响应于接收到释放所述写缓存的第一存储空间的请求,查找所述第一存储空间前后的空闲存储空间是否与所述第一存储空间相接;

若找到与所述第一存储空间相接的第一空闲存储空间,则合并所述第一空闲存储空间与所述第一存储空间;以及若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。

根据本发明第九方面的第二用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第三用于流式数据处理的写缓存释放方法,其中所述合并所述第一空闲存储空间与所述第一存储空间包括:修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间。

根据本发明第九方面的第二用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第四用于流式数据处理的写缓存释放方法,其中若找到与所述第一存储空间相接的第一空闲存储空间与第二空闲存储空间,则合并所述第一空间存储空间与所述第二空闲存储空间,其中第一空闲存储空间的地址在所述第一存储空间之前,而第二空间存储空间的地址在所述第一存储空间之后。

根据本发明第九方面的前述用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第五用于流式数据处理的写缓存释放方法,还包括:在所述第一存储空间中设置标记,用以指示所述第一存储空间为空闲。

根据本发明第九方面的前述用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第六用于流式数据处理的写缓存释放方法,其中提供指针,所述指针指向的节点索引所述第一空闲存储空间;响应于接收到分配存储空间的请求,从所述指针指向的节点开始查找空闲存储空间。

根据本发明第九方面的第六用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第七用于流式数据处理的写缓存释放方法,还包括:若所述指针指向的节点可满足所述分配存储空间的请求,从所述指针指向的节点所索引的空闲存储空间中分配空闲存储空间以响应所述分配存储空间的请求。

根据本发明第九方面的第七用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第八用于流式数据处理的写缓存释放方法,还包括:若未找到索引了可满足所述请求的空闲存储空间的第三节点,等待可满足所述请求的空闲存储空间出现。

根据本发明第九方面的第二用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第九用于流式数据处理的写缓存释放方法,其中所述合并所述第一空闲存储空间与所述第一存储空间包括:在数据结构中添加第二节点用来索引所述第一存储空间与所述第一空间存储空间;以及在数据结构中删除索引所述第一空闲存储空间的第一节点。

根据本发明第九方面的第四用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第十用于流式数据处理的写缓存释放方法,包括:修改所述数据结构中索引所述第一空闲存储空间的第一节点或索引所述第二空闲存储空间的第二节点,使所述第一节点或所述第二节点索引所述第一空闲存储空间、所述第一存储空间与所述第二存储空间。

根据本发明第九方面的第四用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第十一用于流式数据处理的写缓存释放方法,包括:在数据结构中添加第二节点用来索引第一空闲存储空间、所述第一存储空间与所述第二存储空间;以及在数据结构中删除索引所述第一空闲存储空间的第一节点,与索引所述第二空闲存储空间的第二节点。

根据本发明第九方面的前述用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第十二用于流式数据处理的写缓存释放方法,其中所述写缓存的存储空间组织为环形缓冲区。

根据本发明第九方面的前述用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第十三用于流式数据处理的写缓存释放方法,其中所述节点索引空闲存储空间包括在所述节点中标记所引用的空闲存储空间的首地址与空闲存储空间长度。

根据本发明第九方面的前述用于流式数据处理的写缓存释放方法,提供了根据本发明第九方面的第十四用于流式数据处理的写缓存释放方法,其中所述多个节点按其索引的空闲存储空间的地址排序。

根据本发明的第十方面,提供了根据本发明第十方面的第一用于流式数据处理的写缓存分配方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一,所述方法包括:响应于接收到分配第一存储空间的第一请求,从所述指针指向的第一节点查找空闲存储空间;若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间的低地址开始分配空闲存储空间以响应所述第一请求;修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间。

根据本发明的第十方面的第一用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第二用于流式数据处理的写缓存分配方法,还包括:若所述第一节点不满足所述第一请求,等待第一节点出现可满足所述第一请求的空闲存储空间。

根据本发明的第十方面的第一用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第三用于流式数据处理的写缓存分配方法,还包括:若所述第一节点不满足所述第一请求,顺序遍历所述多个节点,查找可满足所述第一请求的空闲存储空间。

根据本发明的第十方面的第三用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第四用于流式数据处理的写缓存分配方法,还包括:若未找到索引了可满足所述第一请求的空闲存储空间的节点,等待可满足所述第一请求的空闲存储空间出现。

根据本发明的第十方面的前述用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第五用于流式数据处理的写缓存分配方法,还包括:响应于接收到释放第二存储空间的请求,查找所述第二存储空间前后的空闲存储空间是否与所述第二存储空间相邻;若找到与所述第二存储空间相邻的第一空闲存储空间,则合并所述第一空闲存储空间与所述第二存储空间,以及修改索引了所述第一空闲存储空间的节点使之索引合并后的所述第一空闲存储空间与所述第二存储空间;以及若未找到与所述第二存储空间相邻的第一空闲存储空间,在数据结构中添加新的节点用来索引所述第二存储空间。

根据本发明的第十方面的前述用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第六用于流式数据处理的写缓存分配方法,其中节点索引空闲存储空间包括在节点中标记所所引用的空闲存储空间的首地址与空闲存储空间长度。

根据本发明的第十方面的前述用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第七用于流式数据处理的写缓存分配方法,其中所述多个节点按其索引的空闲存储空间的地址(增序)排序。

根据本发明的第十方面的前述用于流式数据处理的写缓存分配方法,提供了根据本发明第十方面的第八用于流式数据处理的写缓存分配方法,其中所述写缓存的存储空间组织为环形缓冲区。

根据本发明第十一方面,提供了一种基于NVDIMM的数据写缓存方法,包括:接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;影响于接收到该第一数据写入请求,将所述第一数据写入NVDIMM,其中所述NVDIMM中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一;从所述指针指向的第一节点开始查找空闲存储空间;若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间的低地址开始分配第一空闲存储空间;修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间;将所述第一数据写入所述第一空闲存储空间;响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;响应于接收到所述第一数据写入请求,还将所述第一数据写入存储设备;响应于将所述第一数据写入存储设备的操作完成,释放所述第一数据在所述NVDIMM中占据的存储空间。

根据本发明第十二方面,提供了一种写缓存释放装置,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述装置包括:空闲存储空间查找模块,用于响应于接收到释放所述写缓存的第一存储空间的请求,查找与所述第一存储空间相接的存储空间是否为空闲存储空间;存储空间合并模块,用于若找到与所述第一存储空间相接的第一空闲存储空间,修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间;以及索引添加模块,用于若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。

根据本发明第十三方面,提供了一种写缓存分配装置,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一,所述装置包括:空闲存储空间查找模块,用于响应于接收到分配第一存储空间的第一请求,从所述指针指向的第一节点查找空闲存储空间;存储空间分配模块,用于若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间的低地址开始分配空闲存储空间以响应所述第一请求;节点修改模块,用于修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间。

根据本发明第十四方面,提供了一种基于NVDIMM的写入数据的装置,包括:接收模块,用于接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;NVDIMM写入模块,用于响应于接收到该第一数据写入请求,将所述第一数据写入NVDIMM,其中所述NVDIMM中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一;所述NVDIMM写入模块包括:空闲存储空间查找模块,用于从所述指针指向的第一节点开始查找空闲存储空间;存储空间分配模块,用于若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间分配第一空闲存储空间;节点修改模块,用于修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间;以及数据写入模块,用于将所述第一数据写入所述第一空闲存储空间;所述基于NVDIMM的写入数据的装置还包括:消息发送模块,用于响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;存储设备写入模块,用于响应于接收到所述第一数据写入请求,还将所述第一数据写入存储设备;NVDIMM释放模块,用于响应于将所述第一数据写入存储设备的操作完成,释放所述第一数据在所述NVDIMM中占据的存储空间。

根据本发明第十五方面,提供了一种计算机,包括:用于存储程序指令的机器可读存储器;用于执行存储在所述存储器中的程序指令的一个或多个处理器;所述程序指令用于使所述一个或多个处理器执行根据本发明第九到第十一方面提供的多种方法之一。

根据本发明的第十六方面,提供了一种程序,其使得计算机执行根据本发明的第九与第十一方面而提供的多种方法之一。

根据本发明的第十七方面,提供了一种在其上具有所记录的程序的计算机可读存储介质,其中所述程序使得计算机执行根据本发明的第九与第十一方面而提供的多种方法之一。

根据本发明的第十八方面,提供了根据本发明第十八方面的第一用于存储系统的数据访问方法,所述存储系统包括多个存储设备,所述存储系统提供多个存储对象,存储对象由存储设备上的存储资源组成,所述多个存储对象包括一个或多个可写存储对象与多个只读存储对象;所述方法包括:响应于写请求,向所述可写存储对象以追加写(append)/顺序写方式写入数据;若所述可写存储对象已满,将所述可写存储对象设置为只读存储对象;响应于读请求,从所述只读存储对象中读出数据。

根据本发明第十八方面的第一用于存储系统的数据访问方法,提供了根据本发明第十八方面的第二用于存储系统的数据访问方法,其中存储对象包括来自第一存储设备的第一存储空间与来自第二存储设备的第二存储空间。

根据本发明第十八方面的第一用于存储系统的数据访问方法,提供了根据本发明第十八方面的第三用于存储系统的数据访问方法,其中存储对象包括来自第一存储设备的第一连续存储空间的部分与来自第二存储设备的第二连续存储空间的部分。

根据本发明第十八方面的第二或第三用于存储系统的数据访问方法,提供了根据本发明第十八方面的第四用于存储系统的数据访问方法,其中第二存储空间用于存储第一存储空间的数据的校验数据。

根据本发明第十八方面的第一用于存储系统的数据访问方法,提供了根据本发明第十八方面的第五用于存储系统的数据访问方法,其中存储对象包括来自存储设备的存储空间。

根据本发明第十八方面的第一用于存储系统的数据访问方法,提供了根据本发明第十八方面的第六用于存储系统的数据访问方法,还包括记录所写入数据与所述可写对象的映射关系。

根据本发明第十八方面的第六用于存储系统的数据访问方法,提供了根据本发明第十八方面的第七用于存储系统的数据访问方法,还包括响应于读请求,根据所述映射关系查找存储了所请求数据的只读存储对象,并从所述存储了所请求数据的只读存储对象中读出数据。

根据本发明第十八方面的前述用于存储系统的数据访问方法,提供了根据本发明第十八方面的第八用于存储系统的数据访问方法,其中若所述可写对象写满,还将空闲存储对象设置为可写存储对象,使得所述存储系统中包括至少一个可写存储对象。

根据本发明第十八方面的前述用于存储系统的数据访问方法,提供了根据本发明第十八方面的第九用于存储系统的数据访问方法,其中所述存储系统还包括NVDIMM;所述方法还包括:响应于写请求,向所述NVDIMM写入数据;响应于向所述NVDIMM写入数据的操作完成,发送指示所述写请求完成的消息;以及响应于将数据写入所述可写存储对象,释放所述数据在所述NVDIMM中占据的空间。

根据本发明第十八方面的前述用于存储系统的数据访问方法,提供了根据本发明第十八方面的第十用于存储系统的数据访问方法,其中所述存储系统还包括NVDIMM;所述方法还包括:响应于写请求,向所述NVDIMM写入数据;响应于向所述NVDIMM写入数据的操作完成,发送指示所述写请求完成的消息;在将所述可写存储对象设置为只读存储对象之前,响应于读请求,从所述NVDIMM中读出所述数据。

根据本发明第十八方面的第一至第九用于存储系统的数据访问方法,提供了根据本发明第十八方面的第十一用于存储系统的数据访问方法,其中所述存储系统还提供缓存,所述方法还包括:响应于写请求,向所述缓存写入数据;在将所述可写存储对象设置为只读存储对象之前,响应于读请求,从所述缓存中读出所述数据。

根据本发明的第十八方面,提供了根据本发明第十八方面的第十二用于存储系统的数据访问方法,其中所述存储系统包括多个存储设备与NVDIMM,所述存储系统提供多个存储对象,存储对象由存储设备上的存储资源组成,所述多个存储对象包括一个或多个可写存储对象与多个只读存储对象;所述方法包括:响应于第一写请求,将第一数据写入所述NVDIMM;响应于将所述第一数据写入所述NVDIMM,发送指示所述第一写请求完成的消息;响应于第二写请求,将第二数据写入所述NVDIMM;响应于将所述第二数据写入所述NVDIMM,发送指示所述第二写请求完成的消息;生成存储数据块,所述存储数据块包括所述第一数据与所述第二数据;向所述可写存储对象以追加写/顺序写(append)方式写入所述存储数据块;若所述可写存储对象已满,将所述可写存储对象设置为只读存储对象;响应于读请求,从所述只读存储对象中读出所述第一数据或所述第二数据。

根据本发明的第十九方面,提供了根据本发明第十九方面的第一计算机,包括:用于存储程序指令的机器可读存储器;用于执行存储在所述存储器中的程序指令的一个或多个处理器;所述程序指令用于使所述一个或多个处理器执行根据根据本发明第十八方面提供的多种方法。

根据本发明的第二十方面,提供了根据本发明第二十方面的第一用于存储系统的数据访问装置,所述存储系统包括多个存储设备,所述存储系统提供多个存储对象,存储对象由存储设备上的存储资源组成,所述多个存储对象包括一个或多个可写存储对象与多个只读存储对象;所述装置包括:写入模块,用于响应于写请求,向所述可写存储对象以追加写(append)/顺序写方式写入数据;存储对象设置模块,用于若所述可写存储对象已满,将所述可写存储对象设置为只读存储对象;读出模块,用于响应于读请求,从所述只读存储对象中读出数据。

根据本发明的第二十方面,提供了根据本发明第二十方面的第二用于存储系统的数据访问装置,其中所述存储系统包括多个存储设备与NVDIMM,所述存储系统提供多个存储对象,存储对象由存储设备上的存储资源组成,所述多个存储对象包括一个或多个可写存储对象与多个只读存储对象;所述装置包括:第一NVDIMM写入模块用于响应于第一写请求,将第一数据写入所述NVDIMM;第一消息发送模块,用于响应于将所述第一数据写入所述NVDIMM,发送指示所述第一写请求完成的消息;第二NVDIMM写入模块,用于响应于第二写请求,将第二数据写入所述NVDIMM;第二消息发送模块,响应于将所述第二数据写入所述NVDIMM,发送指示所述第二写请求完成的消息;生成模块,用于生成存储数据块,所述存储数据块包括所述第一数据与所述第二数据;存储对象写入模块,用于向所述可写存储对象以追加写/顺序写(append)方式写入所述存储数据块;存储对象设置模块,用于若所述可写存储对象已满,将所述可写存储对象设置为只读存储对象;读出模块,用于响应于读请求,从所述只读存储对象中读出所述第一数据或所述第二数据。

附图说明

当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:

图1是现有技术的存储系统的方框图;

图2是根据本发明的实施例的存储系统的方框图;

图3是根据本发明的又一实施例的存储系统的方框图;

图4是根据本发明的实施例的数据写入方法的流程图;

图5展示了根据本发明实施例的在NVDIMM上存储的数据块;

图6是根据本发明的实施例的存储系统开机过程中执行的方法的流程图;

图7是根据本发明的又一实施例的数据写入方式的流程图;

图8展示了根据本发明实施例的NVDIMM的数据组织;

图9是根据本发明实施例的NVDIMM的存储空间分配方法的流程图;

图10是根据本发明又一实施例的NVDIMM的存储空间分配方法的流程图;

图11是根据本发明实施例的NVDIMM的存储空间释放方法的流程图;

图12是根据本发明又一实施例的NVDIMM的存储空间释放方法的流程图;

图13是根据本发明的又一实施例的数据写入方法的流程图;

图14展示了根据本发明实施例的存储对象;

图15展示了根据本发明实施例的存储系统的读写操作的示意图;

图16是根据本发明的实施例的存储系统数据访问方法的流程图;

图17是根据本发明的又一实施例的存储系统数据访问方法的流程图;以及

图18是根据本发明的依然又一实施例的存储系统数据访问方法的流程图。

具体实施方式

图2是根据本发明的实施例的存储系统的方框图。在根据图2的实施例中,存储系统可以是计算机或服务器,包括CPU 210、NVDIMM 220以及一个或多个盘(DISK)设备230。盘设备230可以是机械硬盘、固态硬盘和或存储卡。盘设备230可通过例如SATA、IDE、USB、PCIe、NVMe、SCSI、以太网等方式与CPU交换数据。盘设备230可以直接耦合到CPU 210,也可以通过诸如芯片组的桥接芯片(未示出)耦合到CPU 210。NVDIMM 220通过DIMM内存插槽耦合到CPU 210。CPU 210可包括一个或多个CPU芯片。一个或多个盘230可以被组织为RAID来提供高性能、高可靠性的存储服务。

在CPU 210上运行访问存储系统的软件,例如应用软件、数据库软件等。根据本发明实施例的提供存储服务的软件也运行在CPU 210,用于响应存储请求,并操作诸如NVDIMM 220与盘230的存储设备。因而可在诸如应用服务器、数据库服务器的服务器上实施本发明。

图3是根据本发明的又一实施例的存储系统的方框图。在根据图3的实施例中,提供独立的存储系统。存储系统包括控制器310、NVDIMM 320、接口340以及一个或多个盘(DISK)设备330。盘设备230可以是机械硬盘、固态硬盘和或存储卡。盘设备230可通过例如SATA、IDE、USB、PCIe、NVMe、SCSI、以太网等方式与控制器交换数据。盘设备330可以直接耦合到控制器310,也可以通过诸如芯片组的桥接芯片(未示出)耦合到控制器310。NVDIMM 320通过DIMM内存插槽耦合到控制器310。控制器10可包括一个或多个CPU芯片,或一个或多个应用专用集成电路。一个或多个盘330可以被组织为RAID来提供高性能、高可靠性的存储服务。接口340将存储系统耦合到网络,存储系统可通过网络来被访问。接口340可以是支持例如以太网、FC(Fibre Channel,光纤通道)、Infiniband的接口。访问存储系统的应用运行于其他服务器上,并通过网络以及接口340来访问根据图3的实施例的存储系统。本发明实施例的提供存储服务的软件运行在控制器310,用于响应存储请求,并操作诸如NVDIMM 320与盘330的存储设备。

图4是根据本发明的实施例的数据写入方法的流程图。当需要写入数据时,应用程序会发出数据写入请求。根据本发明实施例的软件接收应用程序或其他程序发出的数据写入请求。响应于接收到数据写入请求(410),在根据本发明的实施例中,将数据写入NVDIMM(420)。在将数据写入NVDIMM之后,向发出写请求的应用或其他程序发出消息,该消息用以指示数据写入请求已经处理完成(430)。虽然此时数据仅被写入到NVDIMM中,而尚未写入存储系统的诸如盘230(参看图2)的存储设备,但由于NVDIMM具有非易失特性,根据本发明的实施例的写入方法中,基于数据被写入到NVDIMM而发出指示数据写入请求已经处理完成的消息,并且通过后续的步骤确保写入到NVDIMM的数据被写入到存储系统的诸如盘230的存储设备。以此方式,能够保证即使在执行步骤430与执行步骤450之间发生掉电,已写入存储系统的数据不丢失。在根据图4的实施例中,NVDIMM充当存储服务器的写缓存。由于NVDIMM具有高速数据存取能力,步骤420将很快完成,并能很快向发出指示数据写入请求完成的消息,从而提升了存储系统的写入性能。

响应于接收到数据写入请求,在根据本发明的实施例中,还将数据写入到存储设备(450)。在根据本发明的实施例中,将数据写入到存储设备(450)的步骤与将数据写入到DIMM(420)的步骤均依赖于接收到数据写入请求(410)而发生。因而,在一个例子中,将数据写入到存储设备(450)的步骤与将数据写入到DIMM(420)的步骤并行发生。在另一个例子中,由一个CPU来处理将数据写入到存储设备(450)的步骤,而由另一个CPU来处理将数据写入到DIMM(420)的步骤。在依然另一个例子中,由一个CPU来分时地处理将数据写入到存储设备(450)的步骤与将数据写入到DIMM(420)的步骤。在依然另一个例子中,在将数据写入到存储设备(450)的步骤之后再执行将数据写入到DIMM(420)的步骤。

响应于将数据写入存储设备(450)的步骤执行完成,指示释放在步骤420中写入的NVDIMM的数据在NVDIMM中占据的空间。存储设备可以是诸如盘230(参见图2)的存储设备。由于在将数据写入存储设备后,及时将NVDIMM中缓存的数据释放或删除,在根据本发明的实施例中,NVDIMM的存储容量无需很大,可以远小于存储系统的诸如盘230(参见图2)的存储设备的存储容量。对NVDIMM中数据的释放可以是将数据所占用的存储空间标记为空闲,而无需在NVDIMM上执行删除、写入或擦除等操作。在根据图4的实施例中,响应于接收到数据写入请求,将数据写入到存储设备(450),并从NVDIMM中释放相应的数据(460)。因而数据不会在NVDIMM中缓存很长世间,从而NVDIMM的存储空间得以很快地重复利用,减少了对NVDIMM的整体存储容量的需求。并使存储系统具有可持续的高写入性能。

所属领域技术人员将意识到,会接收到多个数据写入请求。对每个数据写入请求,分别执行将数据写入NVDIMM(420)的步骤以及将数据写入存储设备(450)的步骤。以及在将数据写入NVDIMM(420)后,发送指示数据写入请求完成的消息(430)。在将数据写入存储设备(450)后,释放该数据在NVDIMM中所占据的空间(460)。

图5展示了根据本发明实施例的在NVDIMM上存储的数据块。在根据图5的实施例中,NVDIMM 500上存储有数据块510、数据块520、数据块530与数据块540。作为举例,在数据块510中至少包括数据、逻辑地址与顺序号。在一个例子中,数据块510、数据块520、数据块530与数据块540具有相同的尺寸。数据块510、数据块520、数据块530与数据块540也可以具有不同的尺寸,并在每个数据块中记录数据块各自的尺寸。

参看图4,所接收到的数据写入请求中,包括要写入的数据与要写入数据的逻辑地址。为了将数据写入到NVDIMM,生成数据块510(图5),在数据块510中记录数据写入请求所包括的要写入的数据与要写如数据的逻辑地址。在生成数据块510时,还产生顺序号,并在数据块510中包含该顺序号。顺序号是递增的,用于标识接收到数据写入请求的顺序,从而可通过顺序号而获得各个数据块生成的顺序。为了获得递增的顺序号,在一个例子中,每当接收到数据写入请求并生成数据块(例如,数据块510)时,将顺序号递增,并将递增后的顺序号的值记录在数据块510中。

在需要从NVDIMM中恢复数据时,利用数据块(例如,数据块510)中的数据与逻辑地址,能够获得向逻辑地址写入数据的数据写入请求;而利用数据块中的顺序号,能够获得各个数据写入请求的收到的顺序。准确的识别各个数据写入请求的收到的顺序是非常重要的。发生在不同时间的数据写入请求可能向相同的地址写入不同的数据,而数据写入请求的执行顺序决定了在该相同地址最终记录的数据。

在NVDIMM中还记录多种元数据。元数据可用来记录NVDIMM中空闲的和/或被占用的存储区。当向NVDIMM中写入数据块时,向NVDIMM中的空闲存储区写入数据块,并将被写入了数据的存储区标记为被占用。当响应于将数据写入诸如盘230(参看图2)的存储设备后,释放该数据在NVDIMM中占据的空间(参看图4,460)时,在元数据中标记对应的存储区为空闲。在向NVDIMM中写入数据时,若NVDIMM中没有足够的空闲存储区,该数据写入无法完成。可暂时挂起该数据写入,等待NVDIMM中被占据的存储区被释放后,再执行将数据写入NVDIMM的操作。

元数据还可用来记录标志位,用来指示在存储系统上电时是否执行数据恢复操作。在一个例子中,在存储系统启动时,将标志位设置为第一值,而在存储系统正常关闭时,将标志设置为第二值。在此情况下,在存储系统启动时,若发现标志位为第一值,表明存储系统没有被正确关闭。在次情况下,需要利用NVDIMM中保存的数据进行数据恢复。后面会结合附图详细描述从NVDIMM中恢复数据的方法。在另一个例子中,在存储系统异常关机时,在标志位中写入第一值,在存储系统启动时,若发现标志位为第一值,表明存储系统没有被正确关闭,需要利用NVDIMM中保存的数据进行数据恢复。

图6是根据本发明的实施例的存储系统开机过程中执行的方法的流程图。当存储系统开机(600)时,访问NVDIMM中记录的标志位(620),用以判断存储系统是否需要从NVDIMM中恢复数据。在正常关机时,作为举例,NVDIMM中缓存的数据均已被写入诸如盘230的存储设备。在此情况下,无需从NVDIMM中恢复数据。在。若存储系统经历了异常关机,比如在执行数据写入请求过程中发生掉电等意外事件,与数据写入请求对应的数据被写入到NVDIMM,但并未被写入诸如盘230的存储设备中。在此情况下,需要从NVDIMM中恢复数据。

通过访问NVDIMM中记录的标志位来判断存储系统在上一次关机时是否经历了正常关机(630)。若是正常关机,则无需从NVDIMM中恢复数据,图6中的方法转向步骤660结束执行。若是非正常关机,则从NVDIMM中读出所有数据块(640)。在一个例子中,参看图5,从NVDIMM中读出数据块510、数据块520、数据块530与数据块540。在进一步的实施例中,还通过访问NVDIMM中记录的元数据来获得被占用的数据块的信息,进而从NVDIMM中读出被占用的数据块,而无需读出NVDIMM中的空闲数据块。

对于读出的数据块,依据各个数据块中记录的顺序号,按从小到大的方式排序,并按照排序后的顺序将各数据块对应的数据写入诸如盘230的存储设备。数据块的顺序号小,意味与该数据块对应的数据写入请求发生得较早。若数据块510(参看图5)的顺序号小于数据块520的顺序号,意味着数据块510对应的数据写入请求的发生早于数据块520对应的数据写入请求。在一个例子中,数据块510的顺序号小于数据块520的顺序号,数据块520的顺序号小于数据块530的顺序号,数据块530的顺序号小于数据块540的顺序号,则按照数据块510、数据块520、数据块530、数据块540的顺序,将各数据块对应的数据写入诸如盘230(参看图2)的存储设备。具体地,从各数据块中获得数据与逻辑地址,并根据逻辑地址将数据写入诸如盘230的存储设备。在一个例子中,根据逻辑地址与数据重新生成数据写入写请求,并基于数据写入请求将数据写入存储设备。

图7是根据本发明的又一实施例的数据写入方式的流程图。当需要写入数据时,应用程序会发出数据写入请求。根据本发明实施例的软件接收应用程序或其他程序发出的数据写入请求。而另一个实施例中,根据本发明的存储系统通过网络接收应用程序或其他程序或其他服务器发出的数据写入请求。

响应于接收到第一数据写入请求(710),在根据图7的实施例中,将第一数据写入NVDIMM(712)。在第一数据写入请求中,包括第一数据以及要写入第一数据的第一逻辑地址。在将第一数据写入NVDIMM之后,向发出写请求的应用、其他程序或服务器发出消息,该消息用以指示第一数据写入请求已经处理完成(714)。虽然此时数据仅被写入到NVDIMM中,而尚未写入存储系统的诸如盘230(参看图2)的存储设备,但由于NVDIMM具有非易失特性,根据本发明的实施例的写入方法中,基于数据被写入到NVDIMM而发出指示数据写入请求已经处理完成的消息,并且通过后续的步骤确保写入到NVDIMM的数据被写入到存储系统的诸如盘230的存储设备。

在根据图7的实施例中,在接收到第一数据写入请求后,并非立即将第一写入请求对应的第一数据写入到诸如盘230的存储设备。而是等待接收到第二写入请求(720)。通过将第一写入请求与第二写入请求合并处理,能够在保证数据可靠性的前提下,减少存储设备执行写操作的次数,从而提升存储系统性能。在第二数据写入请求中,包括第二数据以及要写入第二数据的第二逻辑地址。

响应于接收到第二数据写入请求(720),将第二数据写入NVDIMM(722)。在将第二数据写入NVDIMM之后,向发出写请求的应用、其他程序或服务器发出消息,该消息用以指示第二数据写入请求已经处理完成(724)。

响应于接收到第一写入请求与第二写入请求,将第一数据与第二数据写入存储设备(730)。在一个例子中,生成存储数据块,在存储数据块中记录第一数据与第二数据,并将存储数据块写入存储设备。存储数据块可具有与存储设备的物理存储块相同的大小。在另一个例子中,在第一数据写入请求与第二数据写入请求在逻辑地址上连续的情况下,将第二数据追加在第一数据之后,并写入存储设备。

响应于将第一数据与第二数据写入存储设备,在NVDIMM中释放第一数据与第二数据(740)。在一个例子中,在NVDIMM中释放与第一数据对应的第一存储块,以及与第二数据对应的第二存储块。

需要指出的是,在步骤730中合并的数据可以来自两个或更多个数据写入请求。在另一个例子中,在收到第二数据写入请求后,若第一数据与第二数据不适于合并,将第一数据与第二数据分别写入存储设备。在根据图7的实施例中,向NVDIMM写入的存储块可以是如图5所展示的存储块。在根据图7的实施例将第一数据与第二数据写入NVDIMM后,若经历了异常掉电,也可通过如图6所示的实施例来从NVDIMM中恢复数据。

图8展示了根据本发明实施例的NVDIMM的数据组织。参看图8,以类似环形缓冲区(810)的方式组织NVDIMM中的存储空间。图8中指示了队列头部(head),指示通常情况下将数据写入NVDIMM的起始位置。图8中还指示了队列尾部(tail)。NVDIMM中未被使用或已经释放的存储空间为空闲存储空间。如图8所示,NVDIMM中包括空闲存储空间812、空闲存储空间814与空闲存储空间816。使用数据结构索引NVDIMM中的空闲存储空间。在图8的实施例中,例如,以链表830组织NVDIMM的空闲存储空间。也可以使用线性表、树等数据结构来索引NVDIMM中的空闲存储空间。NVDIMM中还包括一个或多个数据块,在图8中用网状线标识。数据块代表NVDIMM中被占用的存储空间。

参看图8,链表830包括节点832、节点834与节点836。每个节点索引NVDIMM中的连续空闲地址空间。节点832索引空闲存储空间812,节点834索引空闲存储空间814,节点836索引空间存储空间816。在节点836中,通过存储空闲存储空间816的起始地址、长度和/或末尾地址来索引空闲存储空间816。在节点834中,通过存储空闲存储空间814的起始地址、长度和/或末尾地址来索引空闲存储空间814。在节点832中通过存储空闲存储空间812的起始地址、长度和/或末尾地址来索引空间存储空间812。节点832、节点834与节点834组织为双向链表。还提供指针820来索引节点836。参看图8,将NVDIMM的空闲存储空间按顺时针方向排序。在未发生地址回绕时(回绕指地址达到或越过最大值而从地址空间的起始地址重新开始),节点832、节点834与节点834按其各自所索引的空闲存储区的地址排序。

空闲存储空间816与空闲存储空间814相邻,而空闲存储空间814与空闲存储空间812相邻。参看图8,空闲存储空间816与空闲存储空间812或空闲存储空间814之间存在数据块,因而空闲存储空间816与空闲存储空间812或空闲存储空间814并不相接。

当从NVDIMM中申请或分配空闲存储空间时,从指针820所索引的节点836开始寻找空闲存储区。根据本发明实施例的存储空间分配/释放方法,在指针836所索引的节点,将有很大概率存在满足要求的空闲存储区,从而提高存储空间分配的效率。在一个例子中,当在节点836找到满足要求的空闲存储区816,返回空闲存储区816的首地址来代表所分配的存储空间。修改节点836中记录的空闲存储区的起始地址和/或长度。此时队列的头部(head)相应变化。作为另一个例子,当在节点836找不到满足要求的空闲存储区,则遍历链表830来寻找满足要求的空闲存储区。例如若在节点832找到满足要求的空闲存储空间,则从节点832所索引的空闲存储区812中分配存储空间,并相应地修改节点832的索引信息。

通常情况下,从NVDIMM的头部(head)写入数据,而在尾部(tail)删除数据。参看图4,在将数据写入存储设备(450)后,释放该数据在NVDIMM中所占据的空间(460)。因而NVDIMM中的数据在写入NVDIMM一段时间后被释放,进而在向NVDIMM写入数据时,通常情况下将在指针820所索引的节点836找到满足要求的空闲存储区。

在根据本发明的另一个例子中,在NVDIMM中预留一定空间来存储NVDIMM的状态信息,包括例如多种元数据。元数据可用来记录NVDIMM中空闲的和/或被占用的存储区。元数据还可用来记录标志位,用来指示在存储系统上电时是否执行数据恢复操作。所属领域技术人员将意识到,元数据也可存储在NVDIMM之外。

图9是根据本发明实施例的NVDIMM的存储空间分配方法的流程图。在根据图9的实施例中,向NVDIMM写入数据时,需要从NVDIMM中分配空闲存储空间。参见图8,NVDIMM中可包括一个或多个空闲存储空间(812、814与816),利用链表830或其他数据结构来索引NVDIMM中的一个或多个空闲存储空间。

响应于接收接收到分配存储空间的请求(910),从指针820(参见图8)索引的节点836(第一节点)中查找空闲存储空间(920)。节点836索引的空闲存储空间816作为NVDIMM的环形缓冲区的队列头部,有很大几率存在可满足分配要求的空闲缓冲区。若第一节点可满足分配存储空间的请求(930),则从第一节点分配空闲存储空间(940)。在一个例子中,提供第一节点的空闲存储空间起始地址来响应分配存储空间的请求。若第一节点无法满足分配存储空间的请求(930),则遍历例如链表830数据结构的其他节点来寻找空闲存储空间(950)。例如,若图8的节点836对应的空闲存储空间816无法满足分配存储空间的请求,则遍历链表830,判断节点834对应的空闲存储空间814是否满足分配存储空间的请求。如果需要的话,判断节点832对应的空闲存储空间812是否满足分配存储空间的请求。在进一步的实施例中,若遍历了链表830依然无法找到满足请求的空闲存储空间,则等待由于存储空间的释放而在NVDIMM中出现的空闲存储空间。在依然进一步的实施例中,存储空间的释放在空闲存储空间816的附近出现的几率最大,因而在发现NVDIMM中的存储空间被释放后,优先通过节点836查找空闲存储空间。

在根据本发明的实施例中,若通过节点836找到了满足分配请求的空闲存储空间816,还修改节点836,使之索引分配了存储空间之后的空闲存储空间。例如,修改在节点836中存储的空闲存储空间的起始地址、末尾地址和/或空闲存储空间的长度。

图10是根据本发明又一实施例的NVDIMM的存储空间分配方法的流程图。在根据图9的实施例中,遍历链表830,从NVDIMM的全部空闲存储空间中查找满足分配请求的存储空间。而根据本发明,在NVDIMM的环形缓冲区的队列头部,相对于缓冲区的其他位置,有更大几率存在空闲存储空间。因而在根据图10的实施例中,仅从索引环形缓冲区的队列头部的第一节点(节点836)中寻找空闲存储空间,在第一节点对应的空闲存储空间不能满足分配请求时,不去遍历链表830,而是等待满足分配请求的空闲存储空间出现。从而进一步提高存储空间分配的效率。

参看图10,响应于接收接收到分配存储空间的请求(1010),从指针820(参见图8)索引的节点836(第一节点)中查找空闲存储空间(1020)。节点836索引的空闲存储空间816作为NVDIMM的环形缓冲区的队列头部,有很大几率存在可满足分配要求的空闲缓冲区。若第一节点可满足分配存储空间的请求(1030),则从第一节点分配空闲存储空间(1040)。在一个例子中,提供第一节点的空闲存储空间起始地址来响应分配存储空间的请求。若第一节点无法满足分配存储空间的请求(1030),则等待满足分配请求的空闲存储空间出现(1050)。在一个例子中,响应于对NVDIMM的存储空间释放,再次查找结点836(第一节点)中是否存在满足分配请求的空闲存储空间(1040)。在另一个例子中,响应于对NVDIMM的存储空间释放,判断存储空间释放请求所释放的存储空间能否满足分配请求,进而分配空闲存储空间。

图11是根据本发明实施例的NVDIMM的存储空间释放方法的流程图。响应于接收到释放第一存储空间的请求(1110),判断在NVDIMM中第一存储空间与相邻的空闲存储空间是否相接(1120)。若在NVDIMM中第一存储空间与相邻的存储空间相接,则合并第一存储空间与相邻的空闲存储空间(1130)。若在NVDIMM中第一存储空间与相邻的空闲存储空间不相接,则提供新节点来索引第一存储空间(1140)。例如,参看图8,创建新节点来索引所释放的第一存储空间,并将该新节点插入链表830。可按照第一存储空间的地址,将该新节点插入链表830。使得链表830中的节点依然按照各自所索引的空闲存储空间的地址排序。换句话说,使得链表830中的各节点所索引的空闲存储空间依照其地址按顺时针方向排列。

在根据本发明的实施例中,链表830的节点按其所索引的空闲存储空间的地址排序。通过第一存储空间的地址,在链表830中找到索引与第一存储空间相邻的空闲存储空间的节点,并确定第一存储空间与相邻的空闲存储空间是否相接。在一个例子中,在索引空闲存储空间的节点中包括空闲存储空间的起始地址、末尾地址和/或长度。通过比较空闲存储空间的地址与第一存储存储空间的地址来确定第一存储空间与相邻的空闲存储空间是否相接。

在一个例子中,参看图8,若待释放的第一存储空间与空闲存储空间816相邻,并且第一存储空间的末尾地址等于空闲存储空间816的起始地址,则修改索引了空闲存储空间816的节点836,使得修改后的节点836索引第一存储空间与空闲存储空间816。以此方式实现了第一存储空间与空闲存储空间816的合并。例如,修改节点836所索引的空闲存储空间的起始地址、长度和/或末尾地址,来使节点836索引合并后的第一存储空间与空闲存储空间816。在另一个例子中,通过创建索引了第一存储空间与空闲存储空间816的新节点,将新节点插入链表830,删除节点836的方式来实现第一存储空间与空闲存储空间816的合并。在此例子中,由于指针820指向的节点836被删除,还将指针820指向所创建的新节点。

在依然一个例子中,若与待释放的第一存储空间相邻的空闲存储空间是空闲存储空间816和空闲存储空间812,但第一存储空间与空闲存储空间816或空间存储空间812均不相接,则创建新的节点来索引第一存储空间,并将该新的节点插入链表830。

所属领域技术人员将意识到,虽然在图8的实施例中,用链表组织了索引空闲存储空间的多个节点,但是可使用多种数据结构来组织多个节点,例如可使用树、线性表等结构来组织多个节点,并对多个节点排序和/或有效查找。

图12是根据本发明又一实施例的NVDIMM的存储空间释放方法的流程图。响应于接收接收到释放第一存储空间的请求(1210),查找第一存储空间的前向相接空闲存储空间是否存在(1220),换句话说,查找在NVDIMM中第一存储空间之前的空闲存储空间与第一存储空间是否相接。若找到前向相接的空闲存储空间,再查找第一存储空间的后向相接的空闲存储空间(1230),换句话说,查找在NVDIMM中第一存储空间之后的空闲存储空间与第一存储空间是否相接。若在操作1230找到后向相接的空闲存储空间,表明在NVDIMM中第一存储空间前后均存在与第一存储空间相接的空闲存储空间,那么将与第一存储空间前向相接的空闲存储空间以及与第一存储空间后向相接的空闲存储空间合并(1250)。在一个例子中,通过链表830中的一个节点索引合并后的空闲存储空间。

若在操作1230未找到与第一存储空间后向相接的空闲存储空间,表明在NVDIMM中第一存储空间前存在与第一存储空间相接的空闲存储空间,而在第一存储空间后不存在与第一存储空间相接的空闲存储空间,那么将与第一存储空间前向相接的空闲存储空间以及第一存储空间合并(1260)。在一个例子中,修改链表830中索引与第一存储空间前向相接的空闲存储空间的节点,使之索引合并后的空闲存储空间。

在操作1220,若未找到前向相接的空闲存储空间,则查找第一存储空间的后向相接空闲存储空间是否存在(1235),换句话说,查找在NVDIMM中第一存储空间之后的空闲存储空间与第一存储空间是否相接。若找到后向相接的空闲存储空间,则将第一存储空间和与第一存储空间后向相接的空闲存储空间合并(1270)。在一个例子中,修改链表830中索引与第一存储空间后向相接的空闲存储空间的节点,使之索引合并后的空闲存储空间。

若在操作1235未找到与第一存储空间后向相接的空闲存储空间,表明在NVDIMM中第一存储空间周围,不存在空闲存储空间。那么提供新节点索引第一存储空间(1280),并将新节点按其索引的第一存储空间的地址插入链表830,使得链表830中的节点按其各自所索引的空闲存储区的地址排序。

图13是根据本发明的又一实施例的数据写入方法的流程图。当需要写入数据时,应用程序会发出数据写入请求。根据本发明实施例的软件接收应用程序或其他程序发出的数据写入请求。而另一个实施例中,根据本发明的存储系统通过网络接收应用程序或其他程序或其他服务器发出的数据写入请求。NVDIMM作为写缓存根据本发明的数据写入方法中得到使用。

响应于接收到数据写入请求(1310),在根据图13的实施例中,判断在NVDIMM中是否有足够的空闲存储空间来容纳数据写入请求所对应的数据(1320)。若在NVDIMM中有足够的空闲存储空间,则在NVDIMM中分配存储空闲存储空间(1330),并将数据写入请求所对应的数据写入NVDIMM(1350),继而向发出数据写如请求的应用、其他程序或服务器发出消息,该消息用以指示数据写入请求已经处理完成(1360)。虽然此时数据仅被写入到NVDIMM中,而尚未写入存储系统的诸如盘230(参看图2)的存储设备,但由于NVDIMM具有非易失特性,根据本发明的实施例的写入方法中,基于数据被写入到NVDIMM而发出指示数据写入请求已经处理完成的消息,并且通过后续的步骤确保写入到NVDIMM的数据被写入到存储系统的诸如盘230或盘330(参看图3)的存储设备。

若在NVDIMM中没有足够的连续空闲存储空间来满足数据写入请求,则等待空闲存储空间出现在NVDIMM中(1340)。随着向NVDIMM释放存储空间,NVDIMM中将出现更大的连续空闲存储空间来满足数据写入请求。

响应于接收到数据写入请求(1310),将数据写入请求所对应的数据写入到存储设备(1370)。响应于将数据写入存储设备(1370)的步骤执行完成,指示释放该数据写入请求所对应的数据在NVDIMM中占据的空间(1380)。存储设备可以是诸如盘230(参见图2)的存储设备。随着释放数据在NVDIMM中占据的空间,NVDIMM中将出现足够的连续空闲存储空间来满足在NVDIMM中分配存储空间的需要。在另一个例子中,可通过图11或图12展示的实施例来从NVDIMM中释放存储空间。

在根据图13的实施例中,响应于接收到数据写入请求,将数据写入到存储设备(1370),并从NVDIMM中释放相应的数据(1380)。因而数据不会在NVDIMM中缓存很长世间,从而NVDIMM的存储空间得以很快地重复利用,减少了对NVDIMM的整体存储容量的需求,并能够及时在NVDIMM中申请到空闲存储空间用于响应数据写入请求。

所属领域技术人员将意识到,会接收到多个数据写入请求。对每个数据写入请求,分别执行将数据写入NVDIMM(1350)的步骤以及将数据写入存储设备(1370)的步骤。以及在将数据写入NVDIMM(1350)后,发送指示数据写入请求完成的消息(1360)。在将数据写入存储设备(1370)后,释放该数据在NVDIMM中所占据的空间(1380)。

再次参看图8,响应于收到数据写入请求,通过指针820获得节点836,从节点836所对应的空闲存储区816中分配至少部分空闲存储区的用于写入数据。在写入数据后,空闲存储区816将变小,并可能不足以响应新的数据写入请求。依据本发明实施例的数据写入方法,在NVDIMM的队列尾部(由tail指示)的数据块在较早时被写入,因而通常情况下,该数据块以很大几率将被很快被写入到存储设备并在NVDIMM中被释放。即队列尾部(由tail指示)的数据块将很快被释放。随着队列尾部(由tail指示)的数据块被释放,由节点836所索引的空闲存储区(816)将与队列尾部(由tail指示)的数据块合并,使得空闲存储区816的空间变大,并能够响应新的数据写入请求。

在根据本发明的实施例中,将数据写入存储设备时,使写入数据形成数据流,并且使写入的数据在存储设备上的分布具有局部性,而使待读出的数据分布在存储设备的整个存储空间。通过这样的数据部分方式,来充分利用SSD随机读性能、顺序写性能高的优势。

图14是展示了根据本发明实施例的存储对象。在根据本发明的实施例中,将存储设备提供的存储资源组织为一个或多个存储对象。在一个例子中,将SSD的存储资源(例如,块)池化,并组成一个或多个存储对象。存储对象又被称为Container(容器)。将数据写入存储设备或从存储设备中读出数据时,以存储对象作为访问的基本单元。存储对象的数量由存储系统的容量决定。

参看图14,盘0、盘1、盘2与盘3是诸如SSD的存储设备。在其他例子中,盘0、盘1、盘2与盘3也可以是机械硬盘。作为举例,盘0作为存储设备提供地址空间。将盘0的地址空间分为多个大块(chunk),例如图4中的大块(chunk 0)1410、大块(chunk 1)1412……大块(chunk)n。大块可包括多个块(block)。类似地,将盘1、盘2与盘3的每个的地址空间分为多个大块,例如大块1420与大块1422由盘3提供。

在图14的例子中,由盘0、盘1、盘2与盘3提供的多个大块形成了存储资源池。从存储资源池中将若干个大块组织为存储对象(在图14中展示为容器)。例如,容器0包括来自盘0的大块0(大块0-1)、来自盘1的大块1(大块1-1)与来自盘2的大块0(大块2-0),容器1包括来自盘0的大块2(大块0-2)与来自盘1的大块2(大块1-2)。根据本发明实施例的存储系统提供多个容器,每个容器可包括相同或不同数量的大块。在容器内,可以提供诸如RAID的数据保护机制。例如,在容器0内,大块0-0与大块1-1用于存储用户数据,而大块2-0用于存储与大块0-0、大块1-1相对应的校验数据。容器0内,校验数据的存储位置不限于大块2-0,也可以存储在大块0-0或大块1-1。作为另一个例子,容器1的大块0-2与大块1-2均用于存储用户数据。依然作为一个例子,构成容器0的多个大块(大块0-0、大块1-1与大块2-0)来自不同的盘,从而对容器0的访问将分布于盘0、盘1与盘2。以此方式,增加了对盘的访问的并行性,使存储性能得以提升。所属领域技术人员也将意识到,存储系统中的盘可具有不同的容量,盘可能被更换,从而容器内的大块可来自相同的盘。

在图14的例子中,展示了以大块构成容器的例子。可由其他方式来构成大块。例如在另一个例子中,不提供大块,容器对应于盘的一段存储空间,例如一段连续的逻辑地址空间。

在根据本发明的实施例中,为提升存储系统性能,向容器写入数据时,采用追加写或顺序写方式。换句话说,容器只能从头写到尾,而容器的任意位置不能被覆盖写入。

图15展示了根据本发明实施例的存储系统的读写操作的示意图。图15中展示了存储系统包括容器0、容器1、容器2与容器3。存储系统中的容器可分为两类,可写容器与只读容器。图15中,容器3是可写容器,而容器0、容器1与容器2都是只读容器。在存储系统中,存在至少一个可写容器,例如一个。通过限制可写容器的数量,使存储系统中写入的数据在存储设备上的分布具有局部性。当可写容器被写满后,将写满的可写容器变为只读容器,存储系统创建新的可写容器供写请求使用。可写容器仅用于响应写请求,而只读容器仅用于响应读请求。

参看图15,存储系统收到写请求时,将数据写入NVDIMM。数据被写入NVDIMM后,发出指示写请求完成的消息。在收到写请求后,还将数据写入可写容器3。数据以追加写方式被写入可写容器3,已经写入可写容器3的数据不会被更新。在容器3被写完后,将容器3设置为只读容器,并且不再用于响应写请求。通过这种写入方式,使得在存储系统中的盘设备上的写操作基本上都是大块数据的顺序写,从而盘设备的FTL(Flash Translation Layer)工作在最佳状态,盘设备内不会频繁启动垃圾回收,从而获取最高性能。通过这种数据分布方式,写入数据永远发生在盘设备的局部,而且都是大数据块的方式对盘设备进行操作。因此,盘设备内的写放大系数将会大大降低。从而可以整体提高盘设备的使用寿命。

继续参看图15,存储系统中的读请求,由只读容器响应。在图15中,容器0、容器1与容器2是只读容器。存储系统接收到读请求时,通过映射机制得到读请求对应数据所在的只读容器,并从只读容器中读取数据。可写容器3在被写满后,也变为只读容器,继而不再用于写请求而只用于响应读请求。在写数据写入容器3时,记录数据与容器3的对应关系。在容器3被写满后,容器3成为只读容器。

通过这样的方式,将读写操作在容器级别分离,从而减少了读写操作之间的耦合性,降低读操作与写操作彼此的干扰,增强了读操作延迟与写操作延迟的一致性。这与传统的基于LBA的数据布局方式完全不同。在根据本发明的实施例中,当存储系统中写入了很多数据后,写入的数据会分布到多个盘的几乎任意位置。此时在响应读请求时,是从多个盘的多个位置读出数据,从而能够充分利用SSD随机读性能高的优点。而在某一时刻,写请求发生在可写容器上,使得写请求与读请求的目标位置彼此分离,从而降低读请求与写请求彼此的影响。

在进一步的实施例中,在存储系统中为可写容器提供缓存。从而在诸如容器3的可写容器尚未写满时,由缓存来响应对可写容器3中已写入数据的读请求。在根据图15的实施例中,可使用NVDIMM作为可写容器的缓存,用于响应对可写容器中已写入数据的读请求。在另一个例子中,使用存储系统的内存或其他高速存储介质作为可写容器的缓存。

图16是根据本发明的实施例的存储系统数据访问方法的流程图。响应于接收到写请求(1610),将数据写入可写存储对象(例如,参看图15,容器3)(1620)。以追加写方式将数据写入可写存储对象。当可写存储对象被写满(1630)后,将该存储对象设置为只读存储对象(1640)。响应于接收到读请求(1650),从只读存储对象读出数据(1660)。

在将数据写入可写存储对象时,还记录数据与存储对象的对应关系。在响应读请求时,依据记录的对应关系,确定存储了数据的只读存储对象,并从只读存储对象中读出数据。

图17是根据本发明的又一实施例的存储系统数据访问方法的流程图。也参看图15,响应于接收到写请求(1710),将数据写入NVDIMM(1770)。NVDIMM作为存储系统的写缓存。将数据写入NVDIMM后,发送指示所述写请求完成的消息(1780)。从而降低了写操作的延迟。响应于收到写请求,还将数据写入到可写存储对象(例如,图15中的容器3)(1720)。在将数据写入可写存储对象时还记录数据与存储对象的对应关系,以用于读出该数据。当可写存储对象写满时(1730),将该可写存储对象设置为只读(1740)存储对象(1740)。在一个例子中,任意时刻存储系统中仅有一个可写存储对象。当该可写存储对象写满后,将该可写存储对象设置为只读。存储系统创建新的可写存储对象用于承载写请求。在另一个例子中,存储系统中同时存在若干个可写存储对象。响应于接收到读请求(1750),从只读存储对象读出数据(1760)。

在一个例子中,NVDIMM还作为可写存储对象的缓存。若数据已写入可写存储对象,而可写存储对象尚未写满时,出现对已写入数据的读请求,则从NVDIMM中读出所请求的数据。而在可写存储对象写满后,还释放NVDIMM缓存的对应于该可写存储对象的数据。

在另一个例子中,NVDIMM作为存储系统的写缓存。在将数据写入可写存储对象后,从NVDIMM中释放对应的数据。存储系统在内存或其他高速存储介质中为可写存储对象提供缓存。响应于收到写请求,将数据缓存在为可写存储对象提供的缓存中。若数据已写入可写存储对象,而可写存储对象尚未写满时,出现对已写入数据的读请求,则从为可写存储对象提供的缓存中读出所请求的数据。而在可写存储对象写满后,还释放为可写存储对象提供的缓存中存储的对应于该可写存储对象的数据。

图18是根据本发明的依然又一实施例的存储系统数据访问方法的流程图。响应于接收到第一数据写入请求(1810),在根据图18的实施例中,将第一数据写入NVDIMM(1812)。在第一数据写入请求中,包括第一数据以及要写入第一数据的第一逻辑地址。在将第一数据写入NVDIMM之后,向发出写请求的应用、其他程序或服务器发出消息,该消息用以指示第一数据写入请求已经处理完成(1814)。

在根据图7的实施例中,在接收到第一数据写入请求后,并非立即将第一写入请求对应的第一数据写入到可写存储对象。而是等待接收到第二写入请求(1820)。通过将第一写入请求与第二写入请求合并处理,能够在保证数据可靠性的前提下,减少存储设备执行写操作的次数,从而提升存储系统性能。

响应于接收到第二数据写入请求(1820),将第二数据写入NVDIMM(1822)。在将第二数据写入NVDIMM之后,向发出写请求的应用、其他程序或服务器发出消息,该消息用以指示第二数据写入请求已经处理完成(1824)。

响应于接收到第一写入请求与第二写入请求,将第一数据与第二数据写入可写存储对象(例如,参看图15,容器3)(1830)。在一个例子中,将第一数据与第二数据聚合,使得写入可写存储对象的数据块具有较大的尺寸。在另一个例子中,在第一数据写入请求与第二数据写入请求在逻辑地址上连续的情况下,将第二数据追加在第一数据之后,并写入可写存储对象。在依然另一个例子中,当NVDIMM中了聚合第一数据与第二数据后,将NVDIMM中聚合的数据写入可写存储对象。

以追加写方式将数据写入可写存储对象。记录第一数据与可写存储对象的对应关系,以及第二数据与可写存储对象的对应关系。当可写存储对象被写满(185)后,将该存储对象设置为只读存储对象(1860)。响应于接收到读请求(1870),依据所记录的数据与存储对象的对应关系,确定存储了所请求数据的存储对象,并从只读存储对象读出数据(1875)。

在一个例子中,响应于将第一数据与第二数据写入可写存储对象,在NVDIMM中释放第一数据与第二数据(1840)。在另一个例子中,NVDIMM用作可写存储对象的缓存。若数据已写入可写存储对象,而可写存储对象尚未写满时,出现对已写入数据的读请求,则从NVDIMM中读出所请求的数据。而在可写存储对象写满后,还释放NVDIMM缓存的对应于该可写存储对象的数据。

需要指出的是,在步骤1830中合并的数据可以来自两个或更多个数据写入请求。在另一个例子中,在收到第二数据写入请求后,若第一数据与第二数据不适于合并,将第一数据与第二数据分别写入可写存储对象。

本发明实施例还提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行上面所述的方法。

本发明实施例还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行上面所述的方法。

应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。

这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。

因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。

上面已经公开了存储系统的数据访问方法及其装置。所属领域技术人员还将意识到本发明中所公开的方法或操作流程可由软件、固件及其任何组合实现。实现本发明实施例的方法或操作流程的软件、固件可由访问存储设备的主机的CPU执行。实现本发明实施例的方法或操作的软件、固件可存储于网络服务器、访问存储设备的主机和/或存储设备。

虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。

这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号