计算机系统和用于控制计算机的方法与流程

文档序号:11432260阅读:258来源:国知局
计算机系统和用于控制计算机的方法与流程

本申请要求于2016年2月23日提交的第62/298,987的美国临时专利申请的权益,以及于2016年4月29日提交的第15/143,504的美国临时专利申请的权益,所述美国专利申请为了所有的目的通过参考合并于此。

本发明构思涉及键-值存储,更具体的讲,涉及在访问键-值装置时使用操作系统高速缓冲存储器。



背景技术:

现有的操作系统实现了用于将文件系统数据缓存在存储器中并提高性能的无数的机制。具体地讲,页高速缓冲存储器(pagecache)(或缓冲器高速缓冲存储器(buffercache))大量缓存频繁被访问的数据以提高整体的文件系统性能。虽然页高速缓冲存储器本身不需要文件系统以驻留在块装置上,但是实际中,使用页高速缓冲存储器来提高文件系统性能的大部分配置需要文件系统驻留在块装置上。

键-值固态驱动器(ssd)是一种提供更好的存储性能的新兴技术。但是被这些ssd使用的键-值系统输出对象语义(objectsemantic)而不是块语义(blocksemantic),因此,通常可不被连接到页高速缓冲存储器。目前,使用键-值ssd需要完全地绕过文件系统或者使用没有页高速缓冲存储器的好处的文件系统。在这两者中的任何一个情况下,来自键-值ssd的数据不被缓存在操作系统的页高速缓冲存储器或缓冲器高速缓冲存储器中。

这将造成性能劣化(performancecliff),且通常需要用户程序来实现它自身的缓存机制来恢复合理的性能。在用户程序之内实现高速缓冲存储器对于用户而言是非常复杂且需要软件开发成本。此外,当使用用户空间缓存时,不同的程序可能不能轻易地共享它们的高速缓冲存储器,并且当程序终止时全部的高速缓冲存储器内容丢失。

存在对于允许具有键-值ssd的系统利用页高速缓冲存储器的好处的方法的需求。



技术实现要素:

根据本发明构思的一实施例的一种计算机系统,包括:计算机;计算机中的处理器;计算机中的存储器;文件系统,存储在存储器中并在处理器上运行,文件系统包括页高速缓冲存储器;键-值文件系统(kvfs),所述kvfs包括:接收单元,从文件系统接收文件系统命令,文件系统命令包括标识文件的文件名称;映射单元,将文件系统命令映射到键-值系统命令;命令单元,将键-值系统命令发送到存储装置;返回单元,将键-值系统命令的结果返回到文件系统。

此外,根据所述计算机系统,存储装置存储文件的数据对象和元数据对象。

此外,根据所述计算机系统,所述计算机系统还包括:应用,存储在存储器中并在处理器上运行来发出文件系统命令。

此外,根据所述计算机系统,所述计算机系统还包括kvfs垫片,所述kvfs垫片包括:第二接收单元,接收第二键-值系统命令,第二键-值系统命令包括对象名称;第二映射单元,将第二键-值系统命令映射到文件系统命令;第二命令单元,将文件系统命令发送到文件系统。

此外,根据所述计算机系统,kvfs垫片还包括:文件描述符查找表,存储与文件对应的文件描述符。

此外,根据所述计算机系统,第二命令单元用于将文件系统命令和文件描述符发送到文件系统。

此外,根据所述计算机系统,kvfs垫片还包括:名称生成器单元,从对象名称生成文件名称。

此外,根据所述计算机系统,名称生成器单元包括:哈希单元,对对象名称执行哈希来生成哈希值。

此外,根据所述计算机系统,名称生成器单元还包括:ascii表示单元,将文件名称生成为哈希值的ascii表示。

此外,根据所述计算机系统,名称生成器单元还包括:冲突索引单元,将文件名称与冲突索引组合。

此外,根据所述计算机系统,kvfs包括:kvfs高速缓冲存储器。

此外,根据所述计算机系统,kvfs高速缓冲存储器可操作为用于存储来自存储装置的数据对象和元数据对象的数据的复本。

此外,根据所述计算机系统,返回单元用于仅将存储在kvfs高速缓冲存储器的数据对象和元数据对象的一部分数据返回到文件系统。

此外,根据所述计算机系统,kvfs包括:索引节点,所述索引节点存储来自存储装置的数据对象的元数据。

根据本发明构思的另一实施例,一种存储器包括:存储在存储器中的数据结构,其中,所述数据结构包括文件的名称、文件的创建日期、文件的修改日期、文件的访问日期、文件的类型、文件的大小、文件的容器、文件的所有者、存储数据的对象的名称。

此外,根据所述存储器,存储数据的对象的名称包括:指向存储数据的对象的名称的指针。

此外,根据所述存储器,存储数据的对象的名称还包括:存储数据的对象的名称的大小。

此外,根据所述存储器,数据结构还包括:针对存储数据的对象的多个权限。

此外,根据所述存储器,针对存储数据的对象的所述多个权限包括:指向存储针对存储数据的对象的所述多个权限的第二数据结构的指针。

根据本发明构思的另一实施例,一种方法包括:接收文件系统命令,所述文件系统命令包括标识文件的文件名称;将文件系统命令映射到关于标识对象的至少一个对象名称的至少一个键-值系统命令;试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令;接收所述至少一个键-值系统命令的键-值系统结果;返回键-值系统结果。

此外,根据所述方法,接收文件系统命令的步骤包括:接收第二键-值系统命令,第二键-值系统命令包括标识第二对象的第二对象名称;将第二键-值系统命令映射到文件系统命令。

此外,根据所述方法,接收第二键-值系统命令的步骤包括:接收第二键-值系统命令,第二键-值系统命令是从包括put命令、get命令和delete命令的集合得到。

此外,根据所述方法,将第二键-值系统命令映射到文件系统命令的步骤包括:从第二对象名称生成文件名称。

此外,根据所述方法,从第二对象名称生成文件名称的步骤包括:将哈希函数应用到第二对象名称来产生文件名称。

此外,根据所述方法,将哈希函数应用到第二对象名称来产生文件名称的步骤包括:将哈希函数应用到第二对象名称来产生哈希值;将文件名称生成为所述哈希值的ascii表示。

此外,根据所述方法,从第二对象名称生成文件名称的步骤还包括:将哈希值的ascii表示与冲突索引进行组合。

此外,根据所述方法,接收文件系统命令的步骤还包括:在文件描述符查找表搜索与文件名称相关联的文件描述符。

此外,根据所述方法,接收文件系统命令的步骤还包括:如果文件描述符查找表不包括所述文件名称:接收文件的文件描述符;将文件描述符和文件名称添加到文件描述符查找表。

此外,根据所述方法,接收文件系统命令的步骤还包括:如果文件描述符查找表包括所述文件名称,使用文件名称从文件描述符查找表访问文件的文件描述符。

此外,根据所述方法,本发明构思的实施例包括根据声明23的方法,其中,接收文件系统命令的步骤还包括:向存储装置请求元数据对象,元数据对象通过文件名称进行标识;从存储装置接收元数据对象,元数据对象包括文件的元数据。

此外,根据所述方法,将文件系统命令映射到至少一个键-值系统命令的步骤包括:从元数据对象访问第二对象名称,并且,试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令的步骤包括:试图使用元数据对象来使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令;试图使用第二对象使用键-值文件系统(kvfs)高速缓冲存储器来满足第二键-值系统命令。

此外,根据所述方法,从元数据对象访问第二对象名称的步骤包括:从元数据对象访问指向第二对象的第二对象名称的指针;使用指向第二对象名称的指针检索第二对象名称。

此外,根据所述方法,从元数据对象访问指向第二对象的第二对象名称的指针的步骤包括:从元数据对象访问指向第二对象名称和第二对象名称的名称长度的指针,并且,使用指向第二对象名称的指针检索第二对象名称的步骤包括:使用指向第二对象名称和第二对象名称的名称长度的指针检索第二对象名称。

此外,根据所述方法,接收文件系统命令的步骤还包括:将来自元数据对象的元数据存储在索引节点中。

此外,根据所述方法,试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令的步骤包括:响应于所述至少一个键-值系统命令来修改索引节点。

此外,根据所述方法,响应于所述至少一个键-值系统命令来修改索引节点的步骤包括:从存储装置删除元数据对象;将替换元数据对象存储在存储装置上。

此外,根据所述方法,试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令的步骤包括:在键-值文件系统(kvfs)高速缓冲存储器搜索所述对象。

此外,根据所述方法,接收所述至少一个键-值系统命令的键-值系统结果的步骤包括:如果kvfs高速缓冲存储器存储所述对象,则从kvfs高速缓冲存储器访问对象的数据。

此外,根据所述方法,接收所述至少一个键-值系统命令的键-值系统结果的步骤还包括:如果kvfs高速缓冲存储器没有存储所述对象:将键-值系统命令发送到存储装置;从存储装置接收对象的数据;将所述数据存储在kvfs高速缓冲存储器。

此外,根据所述方法,接收所述至少一个键-值系统命令的键-值系统结果的步骤包括:仅访问对象的数据的一部分;返回所述数据的一部分作为键-值系统结果。

根据本发明构思的另一实施例,一种方法包括:接收键-值系统命令,键-值系统命令包括标识对象的对象名称;将键-值系统命令映射到文件系统命令;向存储装置发送文件系统命令。

此外,根据所述方法,接收键-值系统命令的步骤包括:接收键-值系统命令,键-值系统命令是从包括put命令、get命令和delete命令的集合得到。

此外,根据所述方法,将键-值系统命令映射到文件系统命令的步骤包括:从对象名称生成文件名称。

此外,根据所述方法,从对象名称生成文件名称的步骤包括:将哈希函数应用到对象名称来产生文件名称。

此外,根据所述方法,将哈希函数应用到对象名称来产生文件名称的步骤包括:将哈希函数应用到对象名称来产生哈希值;将文件名称生成为所述哈希值的ascii表示。

此外,根据所述方法,从对象名称生成文件名称的步骤还包括:将哈希值的ascii表示与冲突索引进行组合。

此外,根据所述方法,将键-值系统命令映射到文件系统命令的步骤包括:在文件描述符查找表搜索与文件名称相关联的文件描述符。

此外,根据所述方法,将键-值系统命令映射到文件系统命令的步骤还包括:如果文件描述符查找表不包括所述文件名称:接收与所述对象对应的文件的文件描述符;将文件描述符和文件名称添加到文件描述符查找表。

此外,根据所述方法,将键-值系统命令映射到文件系统命令的步骤还包括:如果文件描述符查找表包括所述文件名称,则使用文件名称从文件描述符查找表访问文件的文件描述符。

此外,根据所述方法,所述方法还包括:返回文件系统命令的结果。

根据本发明构思的另一实施例,一种方法包括:接收文件系统命令,文件系统命令标识文件;访问与文件对应的索引节点;从索引节点访问对象名称,对象名称标识存储在存储装置中的对象;试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令;返回所述命令的结果。

此外,根据所述方法,接收文件系统命令的步骤包括:接收所述文件系统命令,所述文件系统命令包括文件描述符,并且,访问与文件对应的索引节点的步骤包括:访问与文件描述符对应的索引节点。

此外,根据所述方法,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤包括:在kvfs高速缓冲存储器搜索所述对象名称;如果在kvfs高速缓冲存储器中存在具有所述对象名称的对象,对kvfs高速缓冲存储器中的对象执行命令。

此外,根据所述方法,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤还包括:如果在kvfs高速缓冲存储器中不存在具有所述对象名称的对象:将文件系统命令映射到键-值系统命令;将关于具有所述对象名称的对象的键-值系统命令发送到存储装置;从存储装置接收所述对象;将所述对象存储在kvfs高速缓冲存储器。

此外,根据所述方法,返回键-值系统命令的结果的步骤包括:仅访问对象的数据的一部分;返回所述数据的一部分作为键-值系统结果。

此外,根据所述方法,所述方法还包括:如果没有与文件描述符对应的索引节点可被定位:向存储装置请求元数据对象,元数据对象通过文件名称标识;从存储装置接收元数据对象,元数据对象包括文件的元数据;从元数据对象提取元数据;使用元数据创建索引节点。

此外,根据所述方法,从元数据对象提取元数据的步骤包括:从元数据对象访问指向对象的对象名称的指针。

此外,根据所述方法,从元数据对象访问指向对象的对象名称的指针的步骤包括:从元数据对象访问指向对象名称和对象名称的名称长度的指针。

此外,根据所述方法,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤包括:响应于文件系统命令来修改索引节点。

此外,根据所述方法,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤还包括:从存储装置删除元数据对象;将替换元数据对象存储在存储装置上。

根据本发明构思的另一实施例,一种方法包括:接收对象名称,对象名称标识存储在存储装置上的对象;将哈希函数应用到对象名称来产生文件名称。

此外,根据所述方法,所述方法还包括:将文件名称生成为哈希值的ascii表示。

此外,根据所述方法,将文件名称生成为哈希值的ascii表示的步骤包括:将哈希值的ascii表示与冲突索引进行组合。

根据本发明构思的另一实施例,一种具有指令的计算机可读存储介质,该指令被计算机执行时导致:接收文件系统命令,文件系统命令包括对文件进行标识的文件名称;将文件系统命令映射到关于对对象进行标识的至少一个对象名称的至少一个键-值系统命令;试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令;接收所述至少一个键-值系统命令的键-值系统结果;返回键-值系统结果。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤包括:接收第二键-值系统命令,第二键-值系统命令包括对第二对象进行标识的第二对象名称;将第二键-值系统命令映射到文件系统命令。

此外,根据所述计算机可读存储介质,接收第二键-值系统命令的步骤包括:接收第二键-值系统命令,第二键-值系统命令是从包括put命令、get命令和delete命令的集合得到。

此外,根据所述计算机可读存储介质,将第二键-值系统命令映射到文件系统命令的步骤包括:从第二对象名称生成文件名称。

此外,根据所述计算机可读存储介质,从第二对象名称生成文件名称的步骤包括:将哈希函数应用到第二对象名称来产生文件名称。

此外,根据所述计算机可读存储介质,将哈希函数应用到第二对象名称来产生文件名称的步骤包括:将哈希函数应用到第二对象名称来产生哈希值;将文件名称生成为哈希值的ascii表示。

此外,根据所述计算机可读存储介质,将哈希函数应用到第二对象名称来产生文件名称的步骤还包括:将哈希值的ascii表示与冲突索引进行组合。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤还包括:在文件描述符查找表搜索与文件名称相关联的文件描述符。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤还包括:如果文件描述符查找表不包括所述文件名称:接收文件的文件描述符;将文件描述符和文件名称添加到文件描述符查找表。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤还包括:如果文件描述符查找表包括文件名称,则使用文件名称从文件描述符查找表访问文件的文件描述符。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤还包括:向存储装置请求元数据对象,元数据对象通过文件名称识别;从存储装置接收元数据对象,元数据对象包括文件的元数据。

此外,根据所述计算机可读存储介质,将文件系统命令映射到至少一个键-值系统命令的步骤包括:从元数据对象访问第二对象名称,并且,试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令的步骤包括:试图使用元数据对象来使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令;试图使用第二对象来使用键-值文件系统(kvfs)高速缓冲存储器来满足第二键-值系统命令。

此外,根据所述计算机可读存储介质,本从元数据对象访问第二对象名称的步骤包括:从元数据对象访问指向第二对象的第二对象名称的指针;使用指向第二对象名称的指针检索第二对象名称。

此外,根据所述计算机可读存储介质,从元数据对象访问指向第二对象的第二对象名称的指针的步骤包括:从元数据对象访问指向第二对象名称和第二对象名称的名称长度的指针,并且,使用指向第二对象名称的指针检索第二对象名称的步骤包括:使用指向第二对象名称和第二对象名称的名称长度的指针检索第二对象名称。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤还包括:将来自元数据对象的元数据存储在索引节点中。

此外,根据所述计算机可读存储介质,试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令的步骤包括:响应于所述至少一个键-值系统命令来修改索引节点。

此外,根据所述计算机可读存储介质,响应于所述至少一个键-值系统命令来修改索引节点的步骤包括:从存储装置删除元数据对象;将替换元数据对象存储在存储装置中。

此外,根据所述计算机可读存储介质,试图使用键-值文件系统(kvfs)高速缓冲存储器来满足所述至少一个键-值系统命令的步骤包括:在键-值文件系统(kvfs)高速缓冲存储器搜索所述对象。

此外,根据所述计算机可读存储介质,接收所述至少一个键-值系统命令的键-值系统结果的步骤包括:如果kvfs高速缓冲存储器存储了所述对象,则从kvfs高速缓冲存储器访问对象的数据。

此外,根据所述计算机可读存储介质,接收所述至少一个键-值系统命令的键-值系统结果的步骤还包括:如果kvfs高速缓冲存储器没有存储所述对象:将键-值系统命令发送到存储装置;从存储装置接收对象的数据;将所述数据存储在kvfs高速缓冲存储器。

此外,根据所述计算机可读存储介质,接收所述至少一个键-值系统命令的键-值系统结果的步骤包括:仅访问对象的数据的一部分;返回所述数据的一部分作为键-值系统结果。

根据本发明构思的另一实施例,一种具有指令的计算机可读存储介质,该指令被计算机执行时导致:接收键-值系统命令,键-值系统命令包括对对象进行标识的对象名称;将键-值系统命令映射到文件系统命令;向存储装置发送文件系统命令。

此外,根据所述计算机可读存储介质,接收键-值系统命令的步骤包括:接收键-值系统命令,键-值系统命令是从包括put命令、get命令和delete命令的集合得到。

此外,根据所述计算机可读存储介质,将键-值系统命令映射到文件系统命令的步骤包括:从对象名称生成文件名称。

此外,根据所述计算机可读存储介质,从对象名称生成文件名称的步骤包括:将哈希函数应用到对象名称来产生文件名称。

此外,根据所述计算机可读存储介质,将哈希函数应用到对象名称来产生文件名称的步骤包括:将哈希函数应用到对象名称来产生哈希值;将文件名称生成为所述哈希值的ascii表示。

此外,根据所述计算机可读存储介质,从对象名称生成文件名称的步骤还包括:将哈希值的ascii表示与冲突索引进行组合。

此外,根据所述计算机可读存储介质,将键-值系统命令映射到文件系统命令的步骤包括:在文件描述符查找表搜索与文件名称相关联的文件描述符。

此外,根据所述计算机可读存储介质,将键-值系统命令映射到文件系统命令的步骤还包括:如果文件描述符查找表不包括所述文件名称:接收与所述对象对应的文件的文件描述符;将文件描述符和文件名称添加到文件描述符查找表。

此外,根据所述计算机可读存储介质,将键-值系统命令映射到文件系统命令的步骤还包括:如果文件描述符查找表包括所述文件名称,则使用文件名称从文件描述符查找表访问文件的文件描述符。

此外,根据所述计算机可读存储介质在指令被机器执行时,导致:返回文件系统命令的结果。

根据本发明构思的另一实施例,一种具有指令的计算机可读存储介质,该指令被计算机执行时导致:接收文件系统命令,文件系统命令对文件进行标识;访问与文件对应的索引节点;从索引节点访问对象名称,对象名称对存储在存储装置中的对象进行标识;试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令;返回所述命令的结果。

此外,根据所述计算机可读存储介质,接收文件系统命令的步骤包括:接收所述文件系统命令,所述文件系统命令包括文件描述符,并且,访问与文件对应的索引节点的步骤包括:访问与文件描述符对应的索引节点。

此外,根据所述计算机可读存储介质,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤包括:在kvfs高速缓冲存储器搜索所述对象名称;如果在kvfs高速缓冲存储器中存在具有所述对象名称的对象,对kvfs高速缓冲存储器中的对象执行命令。

此外,根据所述计算机可读存储介质,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤还包括:如果在kvfs高速缓冲存储器中不存在具有所述对象名称的对象:将文件系统命令映射到键-值系统命令;将关于具有所述对象名称的对象的键-值系统命令发送到存储装置;从存储装置接收所述对象;将所述对象存储在kvfs高速缓冲存储器。

此外,根据所述计算机可读存储介质,返回键-值系统命令的结果的步骤包括:仅访问对象的数据的一部分;返回所述数据的一部分作为键-值系统结果。

此外,根据所述计算机可读存储介质,在所述指令被执行时导致:如果没有与文件描述符对应的索引节点可被定位:从存储装置请求元数据对象,元数据对象通过文件名称识别;从存储装置接收元数据对象,元数据对象包括文件的元数据;从元数据对象提取元数据;使用元数据创建索引节点。

此外,根据所述计算机可读存储介质,从元数据对象提取元数据的步骤包括:从元数据对象访问指向对象名称的指针。

此外,根据所述计算机可读存储介质,从元数据对象访问指向对象的对象名称的指针的步骤包括:从元数据对象访问指向对象名称和对象名称的名称长度的指针。

此外,根据所述计算机可读存储介质,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤包括:响应于文件系统命令来修改索引节点。

此外,根据所述计算机可读存储介质,试图对键-值文件系统(kvfs)高速缓冲存储器中的对象执行命令的步骤还包括:从存储装置删除元数据对象;将替换元数据对象存储在存储装置上。

根据本发明的另一实施例,一种具有指令的计算机可读存储介质,该指令被计算机执行时导致:接收对象名称,对象名称对存储在存储装置上的对象进行标识;将哈希函数应用到对象名称来产生文件名称。

此外,根据所述计算机可读存储介质,在所述指令被机器执行时导致:将文件名称生成为哈希值的ascii表示。

此外,根据所述计算机可读存储介质,将文件名称生成为哈希值的ascii表示的步骤包括:将哈希值的ascii表示与冲突索引进行结合。

附图说明

图1示出根据本发明构思的实施例的在访问键-值系统存储装置时能够使用操作系统的页高速缓冲存储器的系统。

图2示出图1的计算机的附加细节。

图3a至图3b示出经过图1的计算机的层的命令和数据的流动。

图4示出图1的键-值文件系统(kvfs)层的细节。

图5示出图1的kvfs垫片(shim)的细节。

图6示出图5的名称生成器单元的细节。

图7示出图5的文件描述符查找表的细节。

图8示出图1的元数据对象的结构的细节。

图9a至图9e示出根据本发明构思的实施例的使用图1的计算机处理命令的示例过程的流程图。

图10a至图10b示出根据本发明构思的实施例的图1的kvfs垫片的操作的示例过程的流程图。

图11a至图11b示出根据本发明构思的实施例的图1的kvfs的操作的示例过程的流程图。

图12a至图12b示出根据本发明构思的实施例的使用图1的kvfs高速缓冲存储器的示例过程的流程图。

图13示出根据本发明构思的实施例的使用图5的名称生成器单元从对象名称生成文件名称的示例过程的流程图。

图14示出根据本发明构思的实施例的在图1的系统中修改图1的元数据对象的示例过程的流程图。

具体实施方式

现在将详细参考本发明构思的实施例,其中,附图中示出本发明构思的实施例的示例。在下面的具体实施方式中,阐述了很多具体的细节以能够全面理解本发明构思。然而,应理解,本领域的普通技术人员可在没有这些具体细节的情况下实践本发明构思。在其他情况下,公知的方法、过程、组件、电路和网络未被具体地描述,以免使实施例的方面产生不必要的模糊。

将理解,虽然术语第一、第二等可在此用于描述各种元件,但是这些元件不应被这些术语所限定。这些术语仅用于对一个元件和另一个元件进行区别。例如,在不脱离本发明构思的范围的情况下,第一单元可被称为第二单元,类似地,第二单元可被称为第一单元。

在此本发明构思的描述中使用的术语仅为了描述特定的实施例并不意在限制本发明构思。如在本发明构思和附加的权利要求的描述中使用的,除非上下文另外有明确的指示,单数形式意在也包括复数形式。也将理解,如在此使用的术语“和/或”表示并包含一个或多个相关联的列出的项目的任意和全部可能的组合。将进一步理解,当在说明书中使用时,术语“包含”表示阐述的特征、证书、步骤、操作、元素和/或组件的存在,但是不排除一个或多个其他特征、证书、步骤、操作、元素、组件和/或它们的组的存在或添加。附图的组件和特征不一定按比例绘制。

本发明构思的实施例包括用于杠杆式利用(leverage)操作系统的页高速缓冲存储器(或缓冲器高速缓冲存储器)来加速数据访问的访问键-值的方法。键-值请求(或键-值系统命令)可被转换成可利用页高速缓冲存储器的文件系统请求。本发明构思的实施例也可将文件系统请求转换成键-值系统请求:例如,将页高速缓冲存储器readpage命令转换成键-值系统get和put命令。为了促进这些转换,键-值文件系统(kvfs)可包括它自身的内部页高速缓冲存储器,其可进一步减少存储装置的访问请求的数量,并也可处理部分读取和写入。存储装置也可存储需要最小开销时支持文件系统接口和功能的元数据对象。

通过利用现有的操作系统页高速缓冲存储器,本发明构思的实施例可提高键-值应用的数据访问性能。这个结果具有附加的好处:使多个应用能够共享页高速缓冲存储器并允许缓存的数据留存到应用重新开始。

本发明构思的实施例在不需要对操作系统的任何通用部分进行改变的情况下,能够使用标准操作系统页高速缓冲存储器和缓冲器高速缓冲存储器行为。为了实现这些结果,本发明构思的实施例引入两个新的组件:

1)在操作系统的用户空间内,可引入新的键-值文件系统(kvfs)垫片。kvfs垫片可覆盖应用可链接到的方法的小子集,实现对应用的透明改变。

2)在操作系统的文件系统层内,可引入kvfs驱动器(有时被称为kvfs层,或只被称为kvfs)。kvfs驱动器可符合操作系统所需要的标准文件系统接口(诸如,bsd的虚拟节点(vnode)或linux的vfs接口),并可将文件系统请求转化为键-值系统请求。

图1示出根据本发明构思的实施例的在访问键-值系统存储装置时能够使用操作系统的页高速缓冲存储器的系统。在图1中,计算机105被显示为包括处理器110、存储器115和存储装置120。处理器110可以是任何种类的处理器,例如,intelxeon或intelceleron处理器。存储器115可以是任何种类的存储器,诸如,非易失性存储器(例如,闪存)或静态随机存取存储器(ram),但通常是动态ram。存储装置120可以是不使用传统的块接口的任何种类的存储装置。本发明构思的实施例包括提供键-值(对象)接口的固态驱动器(ssd),但是本发明构思的其他实施例可支持其他形式的存储装置、其他形式的接口或二者。在下面的描述中,一般对“键-值”的任何引用,不论在接口的上下文、命令还是其他上下文中,可被适于不同的专用存储装置120的其他可选择替换物所替换。

存储器115可包括应用125,其可以是任何种类的应用。在本发明构思的一些实施例中,应用125可以是被设计为利用存储装置120的键-值接口的应用,但在本发明构思的其他实施例中,应用125可以是利用传统的文件系统的应用。如下面参照图3b所述,本发明构思的实施例可允许应用利用传统的文件系统命令来访问提供键-值接口的存储装置(诸如,存储装置120)。

存储器115也可包括操作系统130,其中,操作系统130可包括文件系统135。文件系统135可以是传统的文件系统,正如操作系统130可以是包括页高速缓冲存储器的传统的操作系统。(术语“页高速缓冲存储器”意在囊括由操作系统提供的用于存储针对应用的数据的任何高速缓冲存储器,它是更传统的缓冲器高速缓冲存储器或更现代的linux类型的页高速缓冲存储器。)为了能够在传统的文件系统命令与键-值系统命令之间转变,操作系统130可包括键-值文件系统(kvfs)垫片140和kvfs145。kvfs垫片140可将键-值系统命令转化为文件系统命令,而文件系统135可随后处理文件系统命令。kvfs145可将文件系统命令转化回键-值系统命令来与存储装置120进行交互(如上所述,存储装置120提供键-值系统接口而不是传统的块接口)。kvfs垫片140可被实现为覆盖被应用125正常调用的库函数的函数。

由于kvfs垫片140和kvfs145的实现的具体细节可能取决于包括操作系统130和文件系统135的特性、存储装置120接受的命令的变量,实现可通过不同的安装进行改变。在本发明构思的一些实施例中,kvfs垫片140和kvfs145可使用可插入函数(pluggablefunction)实现,其中,kvfs垫片140和kvfs145二者都包括一套完整的所有可能的函数的集合。然后,对于具体的实现,特定函数可被激活,剩余函数失活。例如,kvfs垫片140和kvfs145可包括用于针对所有可能的文件系统135而处理所有可能的文件系统命令的函数,以及用于针对所有可能的存储装置120而处理所有可能的键-值系统命令的函数。然后,当kvfs垫片140和kvfs145被安装在计算机105时,处理通过文件系统135和存储装置120识别的具体命令的函数可被激活,来实现计算机105需要的具体的kvfs垫片140和kvfs145。

当操作系统130可包括它本身的页高速缓冲存储器时,可对计算机105进行进一步的增强来减少对于从存储装置120访问数据的需要。例如,kvfs145可包括kvfs高速缓冲存储器150。kvfs高速缓冲存储器150可存储数据的复本(copy)155和元数据的复本160。复本155和复本160可以是存储在存储装置120中的数据对象165和元数据对象170的复本。如下面参照图3a至图8将进一步描述的,数据对象165可存储底层数据(underlyingdata),元数据对象170可存储文件的元数据。因此,数据对象165和元数据对象170可一起建立文件175。

包括kvfs高速缓冲存储器150的一个原因是解决部分读取和写入。键-值系统语法(semantic)可指定对象整体地被读取或写入:部分数据读取和写入可能不被允许。因此,如果从存储在存储装置120中的数据对象165需要任何数据,则必须读取整个数据对象165。类似地,如果将任何数据写入存储在存储装置120的数据对象165,则必须写入整个数据对象165。

但是文件系统语法可允许部分数据读取和写入。例如,文件系统命令可能只想从数据对象165读取数据字段。由于键-值系统语法要求读取整个数据对象165而不管实际使用多少数据,剩余的数据可被缓存在某处以防将来需要,避免需要重新读取数据对象165。但是由于来自操作系统130的文件系统命令仅请求应用125需要的特定数据,在操作系统130内的页高速缓冲存储器将不缓存来自数据对象165的剩余的数据。因此,kvfs高速缓冲存储器150提供了一种用于存储被丢弃的数据(即使在将来某个时刻可能需要)的手段。

当然,这意味着kvfs高速缓冲存储器150是一种具有对于任何高速缓冲存储器都存在的局限性的高速缓冲存储器。kvfs高速缓冲存储器150将具有由分配给kvfs高速缓冲存储器150的空间决定的有限的大小。如果kvfs被要求存储比分配的空间多的数据,则kvfs高速缓冲存储器150将需要轮流将数据转移出kvfs高速缓冲存储器150。kvfs高速缓冲存储器150可使用用于删掉旧数据来为新数据腾出空间的任何期望的算法(诸如,最不常用的(lfu)、最近最少时用的(lru)或任何其他调度)。

kvfs高速缓冲存储器150删掉旧数据的一个结果是:对于一些对象,kvfs高速缓冲存储器150可能仅包含数据的一部分。例如,考虑向大小为200mb的数据库请求数据的情况。由于从键-值系统存储装置整体地写入和读取对象,大小约为200mb的单个对象存储数据库。所以当读取数据库的一部分时,整个200mb的数据库将被载入kvfs高速缓冲存储器150。假设稍后出现读取大小为10kb的文件的请求,但是现在kvfs高速缓冲存储器150是满的。不管为了什么原因,kvfs高速缓冲存储器150决定删除10kb的数据库的数据来为请求的文件腾出空间。

现在进一步假设出现向数据库请求数据的另一个请求。在kvfs高速缓冲存储器150中仍然具有多于199mb的数据库,请求的数据仍然存在于kvfs高速缓冲存储器150中的几率是有可能的。如果这样,那么在无需访问存储装置120的情况下可从kvfs高速缓冲存储器150满足请求。但是如果当读取更小的文件时请求的数据恰好是从kvfs高速缓冲存储器150删除的那部分数据,则kvfs145将需要再次请求整个200mb数据库对象。

可类似地处理数据写入。当数据将被写入时,如果将被替换的数据存储在kvfs高速缓冲存储器150中,那么在kvfs高速缓冲存储器150内的数据可被更新且kvfs145可返回结果。稍后,kvfs145可将数据从kvfs高速缓冲存储器150写入到存储装置120,来确保数据在更加永久的存储器中被更新,在此之后,在kvfs高速缓冲存储器150的数据可被标记为可擦除。当然,如果当kvfs高速缓冲存储器150是满的时,新的数据将被载入kvfs高速缓冲存储器150,则kvfs高速缓冲存储器需要知道哪些数据已经被写入到存储装置120以及哪些数据没有写入,从而如果这些页从kvfs高速缓冲存储器150将被删掉则数据可被冲入(flush)到存储装置120。所以kvfs高速缓冲存储器150需要针对kvfs高速缓冲存储器150中的每一页跟踪脏位(dirtybit)。另一种选择或过程是在kvfs145返回数据写操作的结果之前,确保数据对象被写入到存储装置120:在那种情况下,kvfs高速缓冲存储器150可确定任何数据可被安全删掉。

数据对象165可具有对象名称180。对象名称180是可用于将数据对象165唯一定位在存储装置120中的数据。以类似的方式,元数据对象170可具有自己的名称,虽然如下面参照图5和图6所述,元数据对象170的名称可从数据对象165的名称180得到。通过使元数据对象170的名称从对象名称180衍生,元数据对象170总是可以知道对象名称180。

文件175也可具有文件名称185。文件名称185独立于对象名称180:文件名称185可在不改变对象名称180的情况下进行改变,反之亦然。

图2示出图1的计算机105的附加的细节。参照图2,通常,机器105包括一个或多个处理器110,其中,处理器110可包括可用于协调机器105的组件的操作的时钟220和存储器控制器215。处理器110也可结合到存储器115,其中,存储器115可包括作为示例的随机存取存储器(ram)、只读存储器(rom)或其他声明保存介质。处理器110也可结合到存储装置120以及网络连接器230,其中,网络连接器230可以是例如以太网连接器或无线连接器。处理器110也可被连接到在其他组件中的总线240,其中,总线240上连接有用户接口245和可使用输入/输出引擎250管理的输入/输出接口接口。

图3a至图3b示出命令和数据跨过图1的计算机的层的流动。在图3a中,示出本发明构思的一个实施例:应用125可发出存储装置120可识别的键-值系统命令。当应用125发出键-值系统命令305时,应用125可使用库函数。这个库函数可被kvfs垫片140所覆盖(override),而kvfs垫片140随后可接收键-值系统命令305。然后,kvfs垫片140可将键-值系统命令305映射到文件系统命令310。文件系统命令310可以是与键-值系统命令305类似的文件系统命令,但是是一种可被作为图1的操作系统的一部分的文件系统135处理的文件系统命令。文件系统135(或图1的操作系统130,依赖于图1的操作系统130和文件系统135的实现)可访问页高速缓冲存储器315以试图满足文件系统命令310。如果页高速缓冲存储器315可满足文件系统命令310,则文件系统135(或图1的操作系统130)可将结果320返回到kvfs垫片140。kvfs垫片140可接着将结果320映射至应用125期望的形式:应用125期望键-值系统命令305的结果,而所述结果可能采用与文件系统命令310的结果不同的形式。

如果文件系统135(或图1的操作系统130)使用页高速缓冲存储器315无法满足文件系统命令310,则文件系统135可将文件系统命令310发送到kvfs145。kvfs145接着可尝试使用kvfs高速缓冲存储器150来满足文件系统命令310。如果kvfs145使用kvfs高速缓冲存储器150可以满足文件系统命令310,则kvfs145可返回结果325。文件系统135(或图1的操作系统130)接着可进行对于页高速缓冲存储器315的任何需要的更新并可将结果325(如图3a中的结果320所示)返回到kvfs垫片140,可如前所述继续进行处理。

kvfs145也可能需要更新存储装置120。例如,如果文件系统命令310更新图1的文件175的元数据,则kvfs145可更新存储在存储装置120的元数据对象170。但是kvfs145是否需要对存储装置120进行任何改变取决于kvfs145、存储装置120的实现以及文件系统命令310的特性,且不一定针对所有的文件系统命令310都需要。

如果kvfs145使用kvfs高速缓冲存储器150无法满足文件系统命令310,则kvfs145可将文件系统命令310映射到键-值系统命令330。可期望的,键-值系统命令330通常将与应用125发出的键-值系统命令305等同,但是键-值系统命令330以某种方式不同于键-值系统命令305也是可以的。kvfs145接着可从存储装置120接收可被kvfs145作为结果335返回到文件系统135(或图1的操作系统130)的结果,之后可如前所述继续进行处理。kvfs145也可基于从存储装置120接收的结果335来更新图1的kvfs高速缓冲存储器150。例如,如果文件系统命令310涉及对图1的文件175进行重命名,且图1的kvfs高速缓冲存储器150还未存储图1的元数据对象170,则kvfs145可发出键-值系统命令330来检索图1的元数据对象170,将图1的元数据对象170的复本160存储在图1的kvfs高速缓冲存储器150中,并在图1的kvfs高速缓冲存储器150中更新图1的元数据对象170的复本160。kvfs145接着可发出附加的第二键-值系统命令330来从存储装置120删除图1的元数据对象170并将替换元数据对象170(诸如,元数据170的更新复本)存储在存储装置120,以使存储装置120包括更新的元数据。

图3b与图3a类似。但是在本发明构思的其他实施例中,应用125可发出文件系统命令310而不是图3a的键-值系统命令305。例如,应用125可以是一种不是被设计为利用存储装置120提供的键-值接口的应用,而不是期望使用传统的文件系统命令的应用。

因为应用125发出传统的文件系统命令,kvfs垫片140不需要将键-值系统命令转化为文件系统命令。因此,文件系统135(或图1的操作系统130)可基于文件系统命令310来利用页高速缓冲存储器315。但是kvfs145仍可将文件系统命令310映射到键-值系统命令330。通过使用kvfs145将文件系统命令310映射到键-值系统命令330,kvfs145对于文件系统135被表现为:存储装置120使用传统的块存储,而存储装置120实际使用对象存储。在本发明构思的这样的实施例中,尽管实际上存储装置120不使用传统的块存储,应用125也可杠杆式利用(leverage)页高速缓冲存储器315的好处。注意,文件系统135(和/或图1的操作系统130)、kvfs145(和图1的kvfs高速缓冲存储器150)以及存储装置120的操作与在图3a中的那些描述相同。

虽然图3a和图3b是作为本发明构思的可供选择的实施例而被介绍的,但是在图3a和图3b中陈述的本发明构思的实施例也可被组合。例如,本发明构思的实施例可在应用125发出键-值系统命令(诸如,图3a的键-值系统命令305)时如图3a所示进行操作,并可在应用125发出文件系统命令(诸如,图3b的文件系统命令310)时如图3b所示进行操作。因此,页高速缓冲存储器315和图1的kvfs高速缓冲存储器150可被应用125杠杆式利用而使用键-值系统命令或文件系统命令而,且数据可在图1的页高速缓冲存储器315和kvfs高速缓冲存储器150内通过这样的应用而被共享。

图4示出图1的键-值文件系统(kvfs)层145的细节。在图4中,除了上面参照图1和图3a至图3b描述的kvfs高速缓冲存储器150之外,kvfs145被示为包括接收单元405、映射单元410、命令单元415和返回单元420。接收单元405可从图1的操作系统中的其他层(诸如,图1的文件系统135)接收命令。映射单元410可将文件系统命令映射到键-值系统命令。命令单元415可向图1的存储装置120发出键-值系统命令。返回单元420可将结果返回到图1的操作系统130的调用层(诸如,图1的文件系统135)。注意的是:响应于所有的文件系统命令而并不是需要每一个单元。例如,如果从驻留在kvfs高速缓冲存储器150的数据可满足文件系统命令,则映射单元410和命令单元415可不需要从图1的存储装置120访问信息。

上面参照图3a至图3b讨论了文件系统命令到键-值系统命令的映射。为了实现这种映射,映射单元410可包括从文件系统命令至键-值系统命令的任何期望的映射。例如,映射单元410可包括指定哪个(哪些)键-值系统命令对应于给定的文件系统命令的表。注意的是:所述关联可以是一对多:单个文件系统命令可包括多个键-值系统命令。例如,在闪速ssd中,数据可不被覆写(overwritten)。改变数据包括使原始数据(可在任何适当的时间的ssd的垃圾收集的对象)失效和写入新的数据对象。因此,改变文件的任何元数据可需要kvfs145删除图1的元数据对象170(更准确地讲,kvfs145可使在存储装置120上的图1的元数据对象170失效,并使存储装置120执行垃圾收集来释放被旧对象占用的空间)并存储替换的元数据对象。

值得注意的是:在系统内的各种数据元素的名称之间可形成区别。暂时返回图1,数据对象165具有对象名称180,而文件175具有文件名称185。(如下面参照图5至图8讨论的,元数据对象170同样具有对象名称。但是由于元数据对象170的名称是一种对于计算机105的操作严格地内部的元素,所以元数据对象170的名称对于本讨论不重要。)对象名称180标识数据对象165;文件名称185标识文件175。文件名称185本身是存储在元数据对象170内的元数据:图1中所示的表示仅是象征意义的。文件175实际是文件系统135内的元素,而数据对象165是存储装置120的键-值系统内的元素。对象名称180和文件名称185是不同的:如果不是完全不可能,对于对象名称180和文件名称185是相同的将是极不寻常的。

此外,对象名称180和文件名称185可都在不影响其他的情况下被修改。例如,如果应用125决定对文件名称185进行重新命名,这种改变影响元数据对象170的内容,但不改变对象名称180。可选择地,如果对象名称180将被改变,这将影响数据对象165(并对元数据对象170有间接影响,元数据对象170的对象名称也将改变);但是文件名称185将保持不变。因此,保持对象名称和文件名称的概念分离是重要的:它们是相关的但不同的概念。

返回图4,kvfs145也可包括索引节点(inode)425。索引节点425可以是表示文件的数据结构。索引节点425可以是如在基于unix的系统中使用的传统的索引节点,或者索引节点425可以是新颖的数据结构。索引节点415可存储关于文件(诸如,图1的文件175)的信息。通常,索引节点415可存储文件元数据(诸如,文件名称185、文件创建的日期和时间、文件的所有者等)。但是索引节点425可包括适于实现的附加的信息。

图5示出图1的kvfs垫片140的细节。在图5中,kvfs垫片140可包括接收单元505、映射单元510、命令单元515以及返回单元520。接收单元505可从图1的应用125接收命令。映射单元510可将键-值系统命令映射到文件系统命令。命令单元515可向图1的文件系统135(或图1的操作系统130)发出文件系统命令。返回单元520可将结果返回到图1的应用125。注意的是,与图4的kvfs145不同,kvfs垫片140本身可能不满足键-值系统命令,而是将文件系统命令发送到图1的文件系统135(或图1的操作系统130)。

上面参照图3a至图3b讨论了键-值系统命令到文件系统命令的映射。为了实现这种映射,映射单元510可包括从键-值系统命令到文件系统命令的任何期望的映射。例如,映射单元510可包括指定哪个(哪些)文件系统命令对应于给定的键-值系统命令的表。但是与图4的映射单元410相比,kvfs垫片410中的映射单元510总体具有更简单的实现。当存在可被发出到图1的文件系统135的许多文件系统命令时,仅存在可被发出到键-值存储装置的三个键-值系统命令:get、put和delete。get命令从存储装置读取数据;put命令将数据写入存储装置;delete命令使存储装置上的数据失效。因此,考虑到更少数量的命令可被发出到键-值存储装置,映射单元510的实现趋于更加简单。另外,图1的文件系统135通常具有用于读取、写入和删除数据的类似的命令,使得从键-值系统命令到文件系统命令的映射相对简单。然而,取决于图1的操作系统130和图1的存储装置120的特性,单个键-值系统命令可映射到多个文件系统命令。

kvfs垫片140也可包括文件描述符查找表525。文件描述符是用于访问文件中的数据(用于写入或读取)的内部机制。kvfs垫片140可将针对文件描述符的标识符存储在文件描述符查找表525中:定位的文件描述符接着可作为针对文件系统命令的变元(argument)被传递到图1的文件系统135。在没有文件描述符查找表525的情况下,kvfs垫片140在每次需要访问文件时向图1的操作系统130查询文件描述符,或者另外打开一个文件,执行任何需要的命令,然后针对每一个键-值系统命令关闭文件。但是这两种方法都是耗时的。通过将文件描述符存储在文件描述符查找表525中,kvfs垫片140可快速确定地针对与接收的键-值系统命令对应的文件系统命令的文件描述符。下面参照图7进一步描述文件描述符查找表525。

kvfs垫片140还可包括名称生成器单元530。如上所述,元数据对象具有名称(对于能够访问对象是必要的),但是元数据对象名称仅在从对象转换到文件时重要,所以元数据对象的名称仅在图1的kvfs垫片140和kvfs145内重要。因此,可使用针对元数据对象生成名称的几乎任何期望的算法。

对于为元数据对象生成名称的过程,有一些期望的特征。第一,过程应该是确定的:给定相同的数据,应该总是得到相同的元数据名称。第二,过程应该避免冲突:给定不同的数据,应该得到不同的元数据名称。第三,由于对象名称可具有任意长度,过程应该能够处理任意潜在长度的数据。这些是应该出现在名称生成器单元530中的所有性质,其中,给定对象名称180,名称生成器单元530可生成针对图1的元数据对象170的名称。

图6示出图5的名称生成器单元530的细节,其可从图1的对象名称180生成针对图1的元数据对象170的名称。通过从对象名称180开始,名称生成器单元530可避免尝试从不一致的输入为图1的元数据对象170一致地生成相同的名称的复杂性。在图6中,名称生成器单元530可包括哈希单元605、ascii表示单元610和冲突索引单元615。哈希单元605可对对象名称180执行哈希。加密哈希算法(诸如,sha-1)提供针对名称生成期望的大部分性质,因此针对元数据对象生成名称而做出很好的选择。但是存在不是文件名称的一部分的一些字符(诸如,斜线,经常用于将文件和它的容器分隔开)。由于加密哈希算法的结果不一定如文件名称一样可用,所以ascii表示单元610可利用哈希单元605的结果并生成该结果的ascii表示。ascii表示单元610可从哈希单元605的结果消除任何有问题的字符。

当然,加密哈希算法不能保证哈希结果之间没有冲突。例如,不管输入数据的大小如何,sha-1产生160比特的哈希结果。因此,如果sha-1得到多于160比特的输入数据,则sha-1将产生160比特的哈希。对于大于160比特的任意输入大小,由于存在比输出多的可能的输入,所以冲突的可能性仍然存在,即使该可能性很小。为了处理该可能性,冲突索引单元615可将冲突索引添加到ascii表示,以防冲突发生。哈希单元605的结果的ascii表示与冲突索引的组合可避免在图1的元数据对象170的名称生成中的任意可能的冲突。

一旦图1的元数据对象170的名称已被生成,图1的kvfs垫片140和图1的kvfs145可使用该名称访问图1的元数据对象170。通过将put、get或delete请求连同生成的图1的元数据对象170的名称发送到图1的存储装置120,图1的kvfs垫片140和图1的kvfs145可可靠和一致地访问并使用图1的元数据对象170。

图7示出图5的文件描述符查找表525的细节。如上面参照图5所述,文件描述符查找表525提供针对图1的kvfs垫片140的机制来访问针对给定文件的文件描述符。在图7中,文件描述符查找表525可包括任何数量的哈希与文件描述符的关联。例如,第一哈希705与第一文件描述符710相关联,第二哈希715与第二文件描述符720相关联,以及第三哈希725与第三文件描述符730相关联。在图7中,文件描述符查找表525示出三个这样的关联,但是本发明构思的实施例可支持任意数量的这样的关联。给定哈希值,如果在文件描述符查找表525中存在,则kvfs垫片140可找到对应的文件描述符。

第一哈希705、第二哈希715和第三哈希725可存储由图1的操作系统130管理的文件的文件描述符。如果还没有文件描述符被打开,则图1的kvfs垫片140可打开文件并收回文件描述符。图1的kvfs垫片140接着可将哈希值和文件描述符添加到文件描述符查找表525以供以后使用。

图1的kvfs垫片140可将图1的元数据对象170的名称作为哈希而使用,以在文件描述符查找表525中进行查找。由于可通过使用图6的哈希单元605(连同其他过程)来生成图1的元数据对象170的名称,在文件描述符查找表525中两个不同的文件描述符与相同的哈希值相关联的可能性实际为零。

图8示出图1的元数据对象170的示例结构的细节。在图8中,元数据对象170可包括各种数据字段。这些数据字段可包括文件名称185、图1的文件175被创建的日期805(在此使用的“日期”意在包括日期和时间二者)、图1的文件175最后一次被修改的日期810、图1的文件175最后一次被访问的日期815、图1的文件175的类型820(例如,可执行文件、文档、文本文件或其他)、图1的文件175的大小825、存储图1的文件175的容器830以及图1的文件175的所有者835。

元数据对象170还可包括对象名称180。通过包括对象名称180,对元数据对象170的访问为系统提供了回到数据对象165的方式(重新调用使得元数据对象170的名称可从对象名称180生成)。在本发明构思的一些实施例中,元数据对象170可直接包括对象名称180。为了有效访问元数据对象170,元数据对象170应该具有固定的大小,这意味着为对象名称180分配的空间将不得不预先固定。但是由于对象名称的长度可能无限长,在元数据对象170内包括对象名称180可创造复杂:对象名称180将需要不超过分配给元数据对象170内的对象名称180的字段的大小。实际上,这不太可能是问题:分配给名称180的字段可包括任意期望数量的字符:200、1000、10000或更多。但是存在字段溢出的可能性,其可能在图1的操作系统内创建错误。

作为可供替换的选择,如图8所示,元数据对象170可包括可指向存储对象名称180位置的指针840。一旦系统知道对象名称180存储在何处以及对象名称180的长度845,则系统可检索到对象名称180。示出元数据对象170包括指向名称长度845的指针的原因是:读取固定大小的数据比读取未知大小的数据更高效。虽然图8示出与对象名称180一起存储的名称长度845,在本发明构思的其他实施例中名称长度845可被存储在元数据对象170内。

元数据对象170也可包括指向权限855的指针850。权限855指定对于图1的数据对象165存在哪些权限。权限855的结构可根据图1的操作系统130而变化。例如,在基于unix的系统中,权限855可指定图1的文件175的所有者、在包括图1的文件175的所有者的组中的其他用户以及其他是否可以读取、写入和执行文件。其他操作系统以其他形式指定权限855。虽然图8示出权限855是通过来自元数据对象170的指针850而被访问,然而在本发明构思的其他实施例中,权限可被存储在元数据对象170内。

图9a至图9e示出根据本发明构思的实施例的使用图1的计算机处理命令的示例过程的流程图。在图9a中,在块903处,图1的kvfs垫片140可从图1的应用125接收图3a的键-值系统命令305。在块906处,图1的kvfs垫片140可将图3a的键-值系统命令305映射到图3a的文件系统命令310。在块909处,图1的kvfs垫片140可搜索图5的文件描述符查找表525来查看期望的文件是否先前已经被打开。如上面参照图6所述,该搜索可使用由图5的名称生成器单元530生成的图1的元数据对象170的名称。

在块912(图9b)处,图1的kvfs垫片140可确定图5的文件描述符查找表525是否包含期望的文件描述符。如果图5的文件描述符查找表525包含期望的文件描述符,则在块915处,图4的kvfs垫片140可从图5的文件描述符查找表525访问期望的文件描述符。否则,在块918处,kvfs垫片140可通过打开期望的文件向图1的操作系统请求新的文件描述符。在块921处,图1的kvfs垫片140可接收新的文件描述符,以及在块924处,图1的kvfs垫片140可将新的文件描述符添加到图5的文件描述符查找表525以供将来使用。

无论哪种方式,一旦图1的kvfs垫片140具有期望的文件描述符,在块927(图9c)处,图1的kvfs145可从图1的文件系统135(更普遍地,从图1的操作系统130)接收图1的文件系统命令310。该块可涉及图1的kvfs垫片140将图3a的文件系统命令310发送到图1的操作系统130,以试图使用图3a的页高速缓冲存储器315来满足请求;如果图3a的页高速缓冲存储器315不能满足请求,则图1的操作系统130可将图3a的文件系统命令310转发到图1的kvfs145。

在块930处,kvfs145可进行检查以查看存储期望的元数据的图4的索引节点425是否存在。如果不存在,则在块933处,图1的kvfs145可向图1的存储装置120请求图1的针对文件175的元数据(更具体地,图1的kvfs145可向图1的存储装置120请求图1的元数据对象170)。在块936处,图1的kvfs145可从图1的存储装置120接收图1的针对文件175的元数据对象170。在块939处,图1的kvfs145可将元数据存储在图4的索引节点425中。

在块942处,不论存储期望的元数据的图4的索引节点425是否存在,图1的kvfs145可从图1的元数据对象170或从图4的索引节点425访问图1的对象名称180。在块945处,图1的kvfs145可将图3a的文件系统命令310映射到图3a的键-值系统命令330。

在块948(图9d)处,如果图3a的文件系统命令310以某种方式修改图1的文件175的元数据,则图1的kvfs145可修改图4的索引节点425。在块951处,图1的kvfs145可试图使用图1的kvfs高速缓冲存储器150来满足图3a的键-值系统命令330。

在块954处,图1的kvfs145可搜索图1的kvfs高速缓冲存储器150来查看图1的kvfs高速缓冲存储器150是否存储了期望的数据。在块957处,图1的kvfs145确定图1的kvfs高速缓冲存储器150是否存储了期望的数据。如果图1的数据对象165(或图1的数据对象165的一些相关部分)未被存储在图1的kvfs高速缓冲存储器150中,则在块960处,图1的kvfs145可将图3a的键-值系统命令330发送到图1的存储装置120来检索图1的数据对象165。在块963处,图1的kvfs145可从存储装置120接收图1的数据对象165,以及在块966处,图1的kvfs145可将图1的数据对象165的复本155存储在图1的kvfs高速缓冲存储器150中。当然,该存储块可涉及从图1的kvfs高速缓冲存储器150删掉一些数据来为新的数据腾出空间。图1的kvfs145可使用任何期望的算法来选择从图1的kvfs高速缓冲存储器150删掉的数据。

此时,图1的kvfs145可确定图1的kvfs高速缓冲存储器150存储了期望的数据。在块969(图9e)处,图1的kvfs145可从图1的kvfs高速缓冲存储器150访问图1的数据对象165的复本155的数据或一部分数据。如果数据被写入,该访问操作可涉及从图1的存储装置120删除图1的数据对象165并写入新的数据对象,或仅将图1的kvfs高速缓冲存储器150中的页标记为脏(以使所述页可在稍后的时间被冲刷(flush)到图1的存储装置120)。在块972处,图1的kvfs145可将图3a的结果335返回到图1的操作系统330,最终在块975处,作为图3a的结果320而传送到图1的应用125。

上面的描述非常复杂,因为考虑了在图1的操作系统130内的所有层次的操作:图1的kvfs垫片140、图1的文件系统135以及图1的kvfs145。分别回顾在图1的kvfs垫片140和图1的kvfs145的操作可能是有益的。(由于在本发明构思的实施例中图1的文件系统135保持不变,下面不在提供对于图1的文件系统135的操作的分析。)

图10a至图10b示出根据本发明构思的实施例的图1的kvfs垫片140的操作的示例过程的流程图。在图10a中,在块1005处,图5的接收单元505可从图1的应用125接收图3a的键-值系统命令305。在块1010处,图5的映射单元510可将图3a的键-值系统命令305映射到图3a的文件系统命令310。如下面参照图13所述,这可涉及针对图1的元数据对象170生成名称。在块1015处,图1的kvfs垫片140可搜索文件描述符查找表525来查看针对图1的文件175是否存在文件描述符。

在块1020(图10b)处,图1的kvfs垫片140可确定在图5的文件描述符查找表525中是否找到针对图1的文件175的文件描述符。如果在图5的文件描述符查找表525中找到针对图1的文件175的文件描述符,则在块1025处访问文件描述符。否则,在块1030处,图1的kvfs垫片140请求针对图1的文件175的新的文件描述符。该请求可包含要求图1的文件系统135打开图1的文件175。在块1035处,图1的kvfs垫片140可从图1的文件系统135接收新的文件描述符,以及在块1040处,图1的kvfs垫片140可将新的文件描述符(和图1的元数据对象170的名称)添加到图5的文件描述符查找表525。

无论哪种方式,一旦图1的kvfs垫片140具有针对图1的文件175的文件描述符,则在块1045处,图1的kvfs垫片140可向图1的存储装置120发送文件系统命令310(通过图1的操作系统130)。然后,在块1050处,图1的kvfs垫片140可将从图3a的操作系统130接收的图3a的结果325返回到图1的应用125。

再次注意的是:图1的kvfs垫片140负责将键-值系统命令转化为文件系统命令,使得图3a的操作系统130的本地页高速缓冲存储器315可被杠杆式利用(leverage)。如果应用125发出文件系统命令而不是键-值系统命令,则图1的kvfs垫片140可被绕开,且文件系统命令可直接传送到图1的操作系统130(以及图3b的结果325可被直接返回到图1的应用125)。

图11a至图11b示出根据本发明构思的实施例的图1的kvfs的操作的示例过程的流程图。在图11a中,在块1105处,图1的kvfs145可接收图3a的文件系统命令310。在块1110处,图1的kvfs145可搜索图4的索引节点425,其中,该索引节点425包括通过图3a的文件系统命令310标识的图1的文件175的元数据。在块1115处,图1的kvfs145可确定图4的索引节点425是否被定位。如果图4的索引节点425被定位,则在块1120处,图1的kvfs145可访问图4的索引节点425,以及在块1125处,图1的kvfs145可从图4的索引节点425访问对象名称180。

另一方面,如果在块1115处,图1的kvfs145未能定位图4的索引节点425,则在块1130(图11b)处,图1的kvfs145可向图1的存储装置120请求图1的元数据对象170。在块1135处,图1的kvfs145可从存储装置120接收图1的元数据对象170。在块1140处,图1的kvfs145可从图1的元数据对象170提取元数据。在块1145处,图1的kvfs145可从图1的元数据对象170访问图1的对象名称180。如果元数据对象170直接存储对象名称180,则这种提取可能是直接操作,或者其可能是间接操作:图1的kvfs145可能在载入对象名称180之前首先提取指向对象名称180的指针(和可能的名称长度845)。以及在块1150处,图1的kvfs145可创建图4的索引节点425。

不管图4的索引节点425是被定位还是被创建,在块1155处,如果在图1的kvfs高速缓冲存储器150中出现,则图1的kvfs145可试图对图1的数据对象165的复本155执行文件系统命令。最后,在块1160处,图1的kvfs145可返回命令的结果。

回顾图11a至图11b可能提出了:图1的kvfs145不将键-值系统命令发送到图1的存储装置120。如下面参照图12a至图12b所解释的,在图11b的块1155阐述的结论将是不正确的。

图12a至图12b示出根据本发明构思的实施例的使用图1的kvfs高速缓冲存储器150的示例过程的流程图。在图12a,在块1205处,图1的kvfs145可搜索图1的kvfs高速缓冲存储器150来查看图1的数据对象165的复本155和图1的元数据对象170的复本160是否在图1的kvfs高速缓冲存储器150中。在块1210处,图1的kvfs145可确定图1的kvfs高速缓冲存储器150是否存储了图1的数据对象165的复本155和图1的元数据对象170的复本160。注意,在上下文中,“存储复本”并不意味着存储图1的数据对象165的复本155和图1的元数据对象170的复本160的全部,乃至,存储图1的数据对象165和元数据对象170二者的一部分也不是必需的。所有需要的只是针对图1的kvfs高速缓冲存储器150存储图1的数据对象165和/或元数据对象170的应用了文件系统命令的那部分的复本。如果图1的kvfs高速缓冲存储器150存储图1的数据对象165和/或元数据对象170的所有的相关部分的复本,则即使图1的复本155和复本160不是图1的数据对象165和元数据对象170的完整的复本,图1的kvfs145也可推断出图1的kvfs高速缓冲存储器150存储图1的数据对象165的复本155和图1的元数据对象170的复本160。

如果图1的kvfs高速缓冲存储器150存储了图1的数据对象165的复本155和图1的元数据对象170的复本160,则在块1215处,图1的kvfs145可对图1的复本155和复本160执行图3a的文件系统命令310。如果文件系统命令310涉及改变针对图1的数据对象165或图1的元数据对象170的任何数据,则图1的kvfs145可将图1的kvfs高速缓冲存储器150中的受影响的页标记为脏,使得改变的数据可最终被冲刷到存储装置120,或者图1的kvfs145可立即删除存在的受影响的对象并将改变的对象的替换复本存储在存储装置120。

如果图1的kvfs高速缓冲存储器150未存储图1的数据对象165的复本155,则在块1220(图12b)处,图1的kvfs145可将图3a的文件系统命令310映射到图3a的键-值系统命令330。在块1225处,图1的kvfs145可将图3a的键-值系统命令330发送到图1的存储装置120。在块1230处,图1的kvfs145可从存储装置120接收被图3a的键-值系统命令330影响的对象的复本。在块1235处,图1的kvfs145可将图1的数据对象165的复本155和/或图1的元数据对象170的复本160存储在图1的kvfs高速缓冲存储器150中,其从图1的存储装置120接收。

在块1240处,不论图1的kvfs高速缓冲存储器150是否存储图1的复本155和/或复本160或图1的数据对象165和/或元数据对象170,命令已被执行。在块1240处,图1的kvfs145可修改图4的索引节点425来反映被图3a的文件系统命令330指示的任何变化。在块1245处,图1的kvfs145可从图1的kvfs高速缓冲存储器150访问来自图1的复本155和/或复本160中的一个或二者的相关部分的数据。在块1250处,图1的kvfs145可将访问部分的数据返回到图1的操作系统130。

图13示出根据本发明构思的实施例的使用图5的名称生成器单元530从对象名称180生成文件名称的示例过程的流程图。在图13中,在块1305处,图1的kvfs垫片140可接收对象名称180,从该对象名称180将生成文件名称。在块1310处,图6的哈希单元605可将哈希算法应用到图1的对象名称180来产生哈希值。在块1315处,图6的ascii表示单元610可生成哈希值的ascii表示,从而在图1的文件系统135内产生有效的文件名称。在块1320处,冲突索引单元615可将哈希值的ascii表示与冲突索引进行结合来产生针对图1的元数据对象170的被确保为在图1的操作系统130内是唯一的(或至少,在被假设包含图1的文件175的文件夹内是惟一)的名称。

图14示出根据本发明构思的实施例的在图1的系统中修改图1的元数据对象170的示例过程的流程图。回想一下,当图1的存储装置120是基于闪存的存储装置时,数据可不被覆写。相反,修改数据,则原始数据无效(并稍后遭受垃圾收集),包含修改数据的新的数据对象被写入。在图14中,在块1410处,图1的kvfs145可从图1的存储装置120删除图1的元数据对象170。在块1415处,图1的kvfs145可将替换元数据对象存储在图1的存储装置120。

在图9a至图14中,示出了本发明构思的一些实施例。但是本领域的技术人员将认识到,通过改变块的顺序、通过省略块或通过包括附图中未示出的链接,本发明构思的其他实施例也是可行的。无论是否明确地描述,流程图的所有这样的变化被认为是本发明构思的实施例。

下面的讨论意在提供对可实现本发明构思的特定方面的适用的机器的简洁的、通用的描述。通过来自传统的输入装置(诸如,键盘、鼠标等)的输入以及通过从另一个机器接收的指令、与虚拟现实(vr)环境的交互、生物反馈或其他输入信号,可至少部分地控制所述机器。如在此使用的,术语“机器”意在广泛地包含单个机器、虚拟机器或一起操作的通信结合的机器、虚拟机器或装置的系统。示例性的机器包括计算装置(诸如,个人计算机、工作站、服务器、便携式计算机、手持装置、手机、平板等)以及运输装置(诸如,个人或公共交通工具(例如,汽车、火车、出租车等))。

所述机器可包括嵌入式控制器,诸如可编程或非可编程逻辑装置或阵列、专用集成电路(asic)、嵌入式计算机、智能卡等。所述机器可利用针对一个或多个远程机器的一个或多个连接,诸如,通过网络接口、调制解调器或其他通信结合。通过物理和/或逻辑网络(诸如,内部网、互联网、局域网、广域网等),机器可以是互联的。本领域的技术人员可理解,网络通信可利用各种有线和/或无线短程或远程载体和协议,其包括射频(rf)、卫星、微波、电气和电子工程师协会(ieee)802.11、光纤、红外、电缆、激光等。

本发明构思的实施例可通过参考或结合相关联的数据而被描述,其中,相关联的数据包括当被机器访问时,引起机器执行任务或定义抽象的数据类型或低级硬件环境的函数、过程、数据结构、应用程序等。相关联的数据可被存储在例如易失性和/或非易失性存储器(例如,ram、rom等)或存储在其他存储装置以及它们相关联的存储介质(其包括硬盘、软盘、光存储、磁带、闪存、记忆棒、数字视频光盘、生物存储等)。相关联的数据可以以数据包、串行数据、并行数据、传播的信号等的形式通过包括物理和/或逻辑网络的传输环境而进行传送,并可以以压缩或加密的格式而被使用。相关联的数据可在分布式的环境中使用,并本地和/或远程存储以备机器访问。

本发明构思的实施例可包括包含由一个或多个处理器执行的指令的有形的、非暂时的机器可读介质,其中,所述指令包括如在此描述的用于执行本发明构思的元件的指令。

已经参考示出的实施例描述和示出了本发明构思的原理,将认识到,示出的实施例可在不脱离该原理的情况下对布置和细节进行修改,并可以以任何期望的方式组合。以及,虽然前面的讨论集中在具体的实施例,但时也考虑其他配置。特别地,即使在此使用诸如“根据本发明构思的实施例”的表达,这些短语意味着普遍参考实施例的可能性,并不意在将本发明构思限制到具体的实施例配置。如在此使用的,这些术语可参考被合并到其他实施例的相同的或不同的实施例。

上述示例性实施例不被解释为限制本发明构思。虽然已经描述了一些实施例,本领域的技术人员将很容易地理解,在不是实质地脱离本公开的新颖教导和优势的情况下,可对那些实施例进行很多修改。因此,所有这样的修改意在被包括在如权利要求定义的本发明构思的范围之内。

因此,考虑到在此描述的实施例的各种各样的排列,该具体实施方式和附件仅意在说明,且不应该被认为限制本发明构思的范围。所以,如本发明构思所要求的,所附权利要求及其等同物的范围和精神内可进行所有这样的修改。

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