CN106469123A - 一种基于nvdimm的写缓存分配、释放方法及其装置 - Google Patents
一种基于nvdimm的写缓存分配、释放方法及其装置 Download PDFInfo
- Publication number
- CN106469123A CN106469123A CN201510516186.0A CN201510516186A CN106469123A CN 106469123 A CN106469123 A CN 106469123A CN 201510516186 A CN201510516186 A CN 201510516186A CN 106469123 A CN106469123 A CN 106469123A
- Authority
- CN
- China
- Prior art keywords
- data
- space
- nvdimm
- storage space
- memory space
- 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.)
- Pending
Links
Landscapes
- Information Transfer Systems (AREA)
Abstract
一种基于NVDIMM的写缓存分配、释放方法及其装置。写缓存释放方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述方法包括:响应于接收到释放所述写缓存的第一存储空间的请求,查找与所述第一存储空间相接的存储空间是否为空闲存储空间;若找到与所述第一存储空间相接的第一空闲存储空间,修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间;以及若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。
Description
技术领域
本发明涉及高性能存储系统,更具体地,本发明涉及在存储系统中基于NVDIMM(Non-Volatile Dual In-line Memory Module)对写入数据实施缓存的方法及其装置。
背景技术
为提高存储系统的写操作性能,一般在系统中提供高速缓冲,用于缓存写入的数据。提供写缓存的一种方式是在内存中建立缓存,对文件或者块设备的写请求写到内存中的缓存后,就可以向主机返回写操作完成,然后通过后台操作异步地将数据写到磁盘。这种方法通常称为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中占据的存储空间。
根据本发明第十五方面,提供了一种计算机,包括:用于存储程序指令的机器可读存储器;用于执行存储在所述存储器中的程序指令的一个或多个处理器;所述程序指令用于使所述一个或多个处理器执行根据本发明第九到第十一方面提供的多种方法之一。
根据本发明的第十六方面,提供了一种程序,其使得计算机执行根据本发明的第九与第十一方面而提供的多种方法之一。
根据本发明的第十七方面,提供了一种在其上具有所记录的程序的计算机可读存储介质,其中所述程序使得计算机执行根据本发明的第九与第十一方面而提供的多种方法之一。
附图说明
当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:
图1是现有技术的存储系统的方框图;
图2是根据本发明的实施例的存储系统的方框图;
图3是根据本发明的又一实施例的存储系统的方框图;
图4是根据本发明的实施例的数据写入方法的流程图;
图5展示了根据本发明实施例的在NVDIMM上存储的数据块;
图6是根据本发明的实施例的存储系统开机过程中执行的方法的流程图;
图7是根据本发明的又一实施例的数据写入方式的流程图;
图8展示了根据本发明实施例的NVDIMM的数据组织;
图9是根据本发明实施例的NVDIMM的存储空间分配方法的流程图;
图10是根据本发明又一实施例的NVDIMM的存储空间分配方法的流程图;
图11是根据本发明实施例的NVDIMM的存储空间释放方法的流程图;
图12是根据本发明又一实施例的NVDIMM的存储空间释放方法的流程图;以及
图13是根据本发明的又一实施例的数据写入方法的流程图。
具体实施方式
图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的空间变大,并能够响应新的数据写入请求。
本发明实施例还提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行上面所述的方法。
本发明实施例还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行上面所述的方法。
应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。
这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。
因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。
上面已经公开了基于NVDIMM的数据写缓存方法及其装置。所属领域技术人员还将意识到本发明中所公开的方法或操作流程可由软件、固件及其任何组合实现。实现本发明实施例的方法或操作流程的软件、固件可由访问存储设备的主机的CPU执行。实现本发明实施例的方法或操作的软件、固件可存储于网络服务器、访问存储设备的主机和/或存储设备。
虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。
这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
Claims (11)
1.一种写缓存释放方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述方法包括:
响应于接收到释放所述写缓存的第一存储空间的请求,查找与所述第一存储空间相接的存储空间是否为空闲存储空间;
若找到与所述第一存储空间相接的第一空闲存储空间,
修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间;以及
若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。
2.一种写缓存释放方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,所述方法包括:
响应于接收到释放所述写缓存的第一存储空间的请求,查找所述第一存储空间前后的空闲存储空间是否与所述第一存储空间相接;
若找到与所述第一存储空间相接的第一空闲存储空间,则合并所述第一空闲存储空间与所述第一存储空间;以及
若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。
3.根据权利要求2所述的方法,其中所述合并所述第一空闲存储空间与所述第一存储空间包括:
修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间。
4.根据权利要求2所述的方法,其中
若找到与所述第一存储空间相接的第一空闲存储空间与第二空闲存储空间,则合并所述第一空间存储空间与所述第二空闲存储空间,其中第一空闲存储空间的地址在所述第一存储空间之前,而第二空间存储空间的地址在所述第一存储空间之后。
5.根据权利要求1-4之一所述的方法,还包括:
在所述第一存储空间中设置标记,用以指示所述第一存储空间为空闲。
6.根据权利要求1-5之一所述的方法,其中提供指针,所述指针指向的节点索引所述第一空闲存储空间;
响应于接收到分配存储空间的请求,从所述指针指向的节点开始查找空闲存储空间。
7.一种写缓存分配方法,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一,所述方法包括:
响应于接收到分配第一存储空间的第一请求,从所述指针指向的第一节点查找空闲存储空间;
若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间的低地址开始分配空闲存储空间以响应所述第一请求;
修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间。
8.一种基于NVDIMM的数据写缓存方法,包括:
接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;
影响于接收到该第一数据写入请求,将所述第一数据写入NVDIMM,其中所述NVDIMM中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一;
从所述指针指向的第一节点开始查找空闲存储空间;
若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间的低地址开始分配第一空闲存储空间;
修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间;
将所述第一数据写入所述第一空闲存储空间;
响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;
响应于接收到所述第一数据写入请求,还将所述第一数据写入存储设备;
响应于将所述第一数据写入存储设备的操作完成,释放所述第一数据在所述NVDIMM中占据的存储空间。
9.一种写缓存释放装置,其中所述写缓存中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述装置包括:
空闲存储空间查找模块,用于响应于接收到释放所述写缓存的第一存储空间的请求,查找与所述第一存储空间相接的存储空间是否为空闲存储空间;
存储空间合并模块,用于若找到与所述第一存储空间相接的第一空闲存储空间,修改所述数据结构中索引所述第一空闲存储空间的第一节点,使所述第一节点索引所述第一空闲存储空间与所述第一存储空间;以及
索引添加模块,用于若未找到与所述第一存储空间相接的第一空间存储空间,在数据结构中添加新的节点用来索引所述第一存储空间。
10.一种基于NVDIMM的写入数据的装置,包括:
接收模块,用于接收第一数据写入请求,所述第一数据写入请求指示将第一数据写入第一地址;
NVDIMM写入模块,用于响应于接收到该第一数据写入请求,将所述第一数据写入NVDIMM,其中所述NVDIMM中包括一个或多个空闲存储空间,提供数据结构用来索引所述一个或多个空闲存储空间,所述数据结构包括多个节点,每个节点用于索引一个空闲存储空间,提供第一指针,指向所述多个节点之一;
所述NVDIMM写入模块包括:
空闲存储空间查找模块,用于从所述指针指向的第一节点开始查找空闲存储空间;
存储空间分配模块,用于若所述第一节点可满足所述第一请求,从第一节点所索引的空闲存储空间分配第一空闲存储空间;
节点修改模块,用于修改所述第一节点,使所述第一节点索引响应了所述第一请求之后的空闲存储空间;以及
数据写入模块,用于将所述第一数据写入所述第一空闲存储空间;
所述基于NVDIMM的写入数据的装置还包括:
消息发送模块,用于响应于将所述第一数据写入NVDIMM的操作完成,发送指示所述第一数据写入请求完成的消息;
存储设备写入模块,用于响应于接收到所述第一数据写入请求,还将所述第一数据写入存储设备;
NVDIMM释放模块,用于响应于将所述第一数据写入存储设备的操作完成,释放所述第一数据在所述NVDIMM中占据的存储空间。
11.一种计算机,包括:用于存储程序指令的机器可读存储器;用于执行存储在所述存储器中的程序指令的一个或多个处理器;所述程序指令用于使所述一个或多个处理器执行根据权利要求1-8之一所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2015104861273 | 2015-08-10 | ||
CN201510486127 | 2015-08-10 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106469123A true CN106469123A (zh) | 2017-03-01 |
Family
ID=58229566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510516186.0A Pending CN106469123A (zh) | 2015-08-10 | 2015-08-20 | 一种基于nvdimm的写缓存分配、释放方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106469123A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107193694A (zh) * | 2017-05-27 | 2017-09-22 | 郑州云海信息技术有限公司 | 一种新型存储系统、存储方法及装置 |
CN107861887A (zh) * | 2017-11-30 | 2018-03-30 | 科大智能电气技术有限公司 | 一种串行易失性存储器的控制方法 |
CN108628753A (zh) * | 2017-03-24 | 2018-10-09 | 华为技术有限公司 | 内存空间管理方法和装置 |
CN109144778A (zh) * | 2018-07-27 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种存储服务器系统及其备份方法、系统及可读存储介质 |
CN109840150A (zh) * | 2017-11-29 | 2019-06-04 | 北京忆芯科技有限公司 | 存储器分配器 |
CN110321301A (zh) * | 2018-03-30 | 2019-10-11 | 华为技术有限公司 | 一种数据处理的方法及装置 |
CN110941564A (zh) * | 2018-09-25 | 2020-03-31 | 杭州海康威视数字技术股份有限公司 | 一种存储空间分配方法、装置、电子设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5111457A (en) * | 1989-10-26 | 1992-05-05 | Xerox Corporation | Detection and recovery from an nvm data integrity failure |
CN103514249A (zh) * | 2013-06-20 | 2014-01-15 | 易乐天 | 一种数据自精简方法和系统及存储装置 |
WO2015081470A1 (zh) * | 2013-12-02 | 2015-06-11 | 华为技术有限公司 | 数据处理设备和数据处理的方法 |
-
2015
- 2015-08-20 CN CN201510516186.0A patent/CN106469123A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5111457A (en) * | 1989-10-26 | 1992-05-05 | Xerox Corporation | Detection and recovery from an nvm data integrity failure |
CN103514249A (zh) * | 2013-06-20 | 2014-01-15 | 易乐天 | 一种数据自精简方法和系统及存储装置 |
WO2015081470A1 (zh) * | 2013-12-02 | 2015-06-11 | 华为技术有限公司 | 数据处理设备和数据处理的方法 |
Non-Patent Citations (2)
Title |
---|
张尧学: "《计算机操作系统教程(第三版)》", 31 October 2006 * |
池糖糖: "第五章 存储管理(二)", 《HTTP://WWW.DOC88.COM/P-603856867256.HTML》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628753A (zh) * | 2017-03-24 | 2018-10-09 | 华为技术有限公司 | 内存空间管理方法和装置 |
CN108628753B (zh) * | 2017-03-24 | 2021-02-23 | 华为技术有限公司 | 内存空间管理方法和装置 |
CN107193694A (zh) * | 2017-05-27 | 2017-09-22 | 郑州云海信息技术有限公司 | 一种新型存储系统、存储方法及装置 |
CN109840150A (zh) * | 2017-11-29 | 2019-06-04 | 北京忆芯科技有限公司 | 存储器分配器 |
CN109840150B (zh) * | 2017-11-29 | 2021-10-26 | 北京忆芯科技有限公司 | 存储器分配器 |
CN107861887A (zh) * | 2017-11-30 | 2018-03-30 | 科大智能电气技术有限公司 | 一种串行易失性存储器的控制方法 |
CN110321301A (zh) * | 2018-03-30 | 2019-10-11 | 华为技术有限公司 | 一种数据处理的方法及装置 |
CN110321301B (zh) * | 2018-03-30 | 2023-09-22 | 华为技术有限公司 | 一种数据处理的方法及装置 |
CN109144778A (zh) * | 2018-07-27 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种存储服务器系统及其备份方法、系统及可读存储介质 |
CN110941564A (zh) * | 2018-09-25 | 2020-03-31 | 杭州海康威视数字技术股份有限公司 | 一种存储空间分配方法、装置、电子设备以及存储介质 |
CN110941564B (zh) * | 2018-09-25 | 2022-03-04 | 杭州海康威视数字技术股份有限公司 | 一种存储空间分配方法、装置、电子设备以及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106469123A (zh) | 一种基于nvdimm的写缓存分配、释放方法及其装置 | |
CN106445405A (zh) | 一种面向闪存存储的数据访问方法及其装置 | |
US10289315B2 (en) | Managing I/O operations of large data objects in a cache memory device by dividing into chunks | |
CN102467408B (zh) | 一种虚拟机数据的访问方法和设备 | |
CN102843396B (zh) | 一种分布式缓存系统中的数据写入及读取方法及装置 | |
CN104350477B (zh) | 用于固态驱动装置(ssd)的优化的上下文移除 | |
CN105574104B (zh) | 一种基于ObjectStore的LogStructure存储系统及其数据写入方法 | |
CN103049397B (zh) | 一种基于相变存储器的固态硬盘内部缓存管理方法及系统 | |
CN109947363B (zh) | 一种分布式存储系统的数据缓存方法 | |
US20130145095A1 (en) | Melthod and system for integrating the functions of a cache system with a storage tiering system | |
CN106066890B (zh) | 一种分布式高性能数据库一体机系统 | |
CN103885728A (zh) | 一种基于固态盘的磁盘缓存系统 | |
CN111400083B (zh) | 数据存储方法及系统、存储介质 | |
CN107291889A (zh) | 一种数据存储方法及系统 | |
US20140115016A1 (en) | Systems and methods for enabling parallel processing of write transactions | |
CN104503703B (zh) | 缓存的处理方法和装置 | |
CN104765575A (zh) | 信息存储处理方法 | |
CN102637147A (zh) | 利用固态硬盘作为计算机写缓存的存储系统以及相应的管理调度方法 | |
EP3298495A1 (en) | Cache architecture and algorithms for hybrid object storage devices | |
CN104267912A (zh) | 一种nas加速方法及系统 | |
CN106503051A (zh) | 一种基于元数据分类的贪婪预取型数据恢复系统及恢复方法 | |
CN106469119A (zh) | 一种基于nvdimm的数据写缓存方法及其装置 | |
CN107665219A (zh) | 一种日志管理方法及装置 | |
CN105897859A (zh) | 一种存储系统 | |
US10180901B2 (en) | Apparatus, system and method for managing space in a storage device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170301 |