本发明涉及存储技术领域,具体地,涉及一种基于非易失性内存的用户态文件系统设计方法及系统。
背景技术:
文件系统在计算机系统中对存储资源进行管理,并将存储资源以文件的形式提供给应用程序使用。由于磁盘、ssd等块设备存储的访问需要特殊权限,且为了保证资源的隔离和控制,文件系统通常实现在内核中,是内核代码中重要的一部分。然而内核态程序较用户态程序更难以编码、除错和维护,用户态文件系统被提出。专利文献cn109445685a公开了一种用户态文件系统请求的处理方法,包括:若为实际文件写请求,则先向内核守护进程发送数据写请求,以使得内核守护进程直接将待写入的数据写入数据文件中,并根据被访问实际文件与数据文件之间的映射关系建立映射表;然后向内核守护进程发送元数据写请求,以使得内核守护进程将所建立的映射表写入元数据文件中;若为实际文件读请求,则先向内核守护进程发送元数据读请求,以使得内核守护进程从元数据文件中读取映射表;然后向内核守护进程发送数据读请求,以使得内核守护进程根据所读取的映射表直接从数据文件中读取所请求的数据。
然而由于用户态文件系统需要fuse等框架,其处理文件系统请求时需将请求和数据在内核空间和用户空间之间多次传递,导致用户态文件系统的性能较内核态文件系统会有巨大差距。因而长期以来用户态文件系统仅仅被用来测试文件系统设计原型和以文件系统的接口实现一些特殊的功能。
随着存储技术的发展,非易失性内存已经逐步进入了商业化。非易失性内存同时具备了内存和存储的优势。其被插在内存总线上,提供了同传统内存一样的字节寻址的能力,且具有同传统内存可比拟的低延迟和高吞吐量。同时非易失性内存具有非易失性,其中保存的数据在断电后依然可以被保存。此外,非易失性内存的密度要大于传统内存,单条可以达到512gb甚至更高的存储容量。
这些独特的特点,给非易失性内存上文件系统的设计和实现带来了很多不同,同样也使得用户态文件系统的设计发生改变。由于非易失性内存可以像传统内存一样直接被处理器以load、store指令访问,因而用户态代码可以不进入内核态就完成存储操作。然而现有为非易失性内存设计的文件系统,均没有给用户态文件系统足够的权限:在进行数据或元数据更新时,用户态文件系统需通过系统调用,将元数据的更改交给内核中的文件系统模块进行。在非易失性内存具有的超高性能下,这些系统调用成为了用户态文件系统的瓶颈,使得非易失性内存的超高性能无法被充分发挥。如何进一步提升用户态文件系统的性能,避免或减少非易失性内存上用户态文件系统中的系统调用开销,是一个亟待解决的技术问题。
技术实现要素:
针对现有技术中的缺陷,本发明的目的是提供一种基于非易失性内存的用户态文件系统设计方法及系统。
根据本发明提供的一种基于非易失性内存的用户态文件系统设计方法,包括:
coffer抽象步骤:将具有相同用户/组和权限的文件放在同一个coffer中,整个用户态文件系统树由coffer组成;
内核态文件系统管理模块工作步骤:内核态文件系统管理模块以coffer的粒度对整个文件系统进行管理;
用户态文件系统库工作步骤:用户态文件系统库通过发起对coffer的映射请求,获得对coffer的访问权限,从而直接管理coffer内部的任意数据和元数据,在用户态完成文件系统所提供的各种操作;
交互步骤:用户态文件系统库与内核态文件系统管理模块通过系统调用进行交互;
空间管理步骤:双层的内存管理,由内核态文件系统对整个文件系统进行整体空间管理,并将部分空间划归给各个用户态文件系统库。
优选地,所述coffer抽象步骤中的文件包括文件的数据、元数据和可管理分配的空闲空间。
优选地,所述内核态文件系统管理模块工作步骤中,以coffer粒度对文件和非易失性内存资源进行权限检查和控制。
优选地,所述内核态文件系统管理模块工作步骤中,对coffer的元数据进行管理和保护,将元数据修改限定于指定的请求和接口。
优选地,所述空间管理步骤中,非易失性内存空间由内核态文件系统管理模块分配给用户态文件系统库之后,由用户态文件系统库自行管理使用。
根据本发明提供的一种基于非易失性内存的用户态文件系统设计系统,包括:
coffer抽象模块:将具有相同用户/组和权限的文件放在同一个coffer中,整个用户态文件系统树由coffer组成;
内核态文件系统管理模块:内核态文件系统管理模块以coffer的粒度对整个文件系统进行管理;
用户态文件系统库:用户态文件系统库通过发起对coffer的映射请求,获得对coffer的访问权限,从而直接管理coffer内部的任意数据和元数据,在用户态完成文件系统所提供的各种操作;
交互模块:用户态文件系统库与内核态文件系统管理模块通过系统调用进行交互;
空间管理模块:双层的内存管理,由内核态文件系统对整个文件系统进行整体空间管理,并将部分空间划归给各个用户态文件系统库。
优选地,所述coffer抽象模块中的文件包括文件的数据、元数据和可管理分配的空闲空间。
优选地,所述内核态文件系统管理模块中,以coffer粒度对文件和非易失性内存资源进行权限检查和控制。
优选地,所述内核态文件系统管理模块中,对coffer的元数据进行管理和保护,将元数据修改限定于指定的请求和接口。
优选地,所述空间管理模块中,非易失性内存空间由内核态文件系统管理模块分配给用户态文件系统库之后,由用户态文件系统库自行管理使用。
与现有技术相比,本发明具有如下的有益效果:
本发明采用coffer的抽象,用于保存相同用户/组权限的一组文件,同时内核态文件系统模块以coffer作为管理粒度,而用户态文件系统库在映射coffer之后,可在用户态直接操作coffer内的数据和元数据,完成文件系统的相应操作,减少系统调用造成的性能开销,充分发挥非易失性内存的高性能。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明的流程图;
图2为本发明中的coffer抽象以及coffer组成的一个完整文件系统树的示意图;
图3为本发明中对coffer、用户态文件系统库以及内核态文件系统模块三者的示意图;
图4为本发明中对于coffer内部结构的示意图;
图5为本发明中对于用户态文件系统库对于coffer内部操作和跨coffer操作的示意图;
图6为本发明中对于用户态文件系统库向内核态文件系统模块获取更多空间的示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
如图1所示,本发明提供的一种基于非易失性内存的用户态文件系统设计方法,包括:
一,采用coffer抽象,将具有相同用户/组和权限的文件(如图2和图4,广义上的文件,包括目录和设备等特殊文件)放在同一个coffer中。整个文件系统树由coffer组成。如图2,“/”、“/src”和“/home”三个目录保存在最上层的coffer中,其中有子文件保存在子coffer中,包括“/privkey”、“/home/ding”、“/home/data”以及“/home/src/linux”4个子coffer。其他coffer同理。
二,内核态文件系统管理模块工作步骤:内核态文件系统管理模块以coffer的粒度对整个文件系统进行管理。其记录了所有coffer相关的元数据,用于响应用户态文件系统库所发起的coffer操作,包括增删改查、映射(map)和取消映射(unmap)等。如图3中,内核态文件系统模块在非易失性内存中保存了元数据,如整个文件系统的超级块、空间分配信息、各个coffer所占用的空间信息、以及每个coffer的元数据,包括路径、权限、用户/组信息等。同时,内核态文件系统负责处理由用户态文件系统库发起的coffer系统调用,例如coffer的创建、删除、扩容、缩容、分裂、合并、恢复、映射和取消映射等。在处理每个操作时,文件系统管理模块将先根据coffer的权限进行检查,仅当权限检查通过之后,操作才继续进行。
三,用户态文件系统库工作步骤:用户态文件系统库通过发起对coffer的映射请求,获得对coffer的访问权限,从而可以直接管理coffer内部的任意数据和元数据,在用户态完成文件系统所提供的各种操作,无需使用系统调用。图3表现了两个coffer被映射到一个用户态文件系统库所在的进程空间中。图4则进一步展示了一个由用户态文件系统库所管理的coffer的例子。其中包括一个coffer根文件,以及若干子文件。coffer中的文件可以通过多种方式进行组织,如使用ext2中简单的文件管理。同时用户态文件系统库还对每个coffer中的空闲空间进行管理。
四,用户态文件系统库与内核态文件系统管理模块的交互:两个模块通过系统调用进行交互,用户态文件系统库可以提交基于coffer的系统调用,如上文提出的coffer的创建、删除、扩容、缩容、分裂、合并、恢复、映射和取消映射等。图5举例介绍了几种常见文件系统的操作的处理过程。在最初始状态下,整个文件系统的中只有一个coffer,其用户/组为root/root,权限为0644。coffer中包含了根目录“/”,以及其下的文件1到4和目录1到3。本地空闲空间中有少量的空闲空间。在进行第一个操作(1)创建“/目录4”时,由于其用户/组和权限与coffer相同,用户态文件系统库先尝试在本地进行创建操作。其在本地空闲空间中分配出一些空间,并在根目录下创建出新的目录。所有操作均在coffer内部完成,无需使用系统调用。在这种情况下,用户态文件系统可以极大发挥非易失性内存的性能优势。对于第二个操作(2)创建“/目录4/文件5”,用户态文件系统库同样尝试在coffer内部进行。然而由于本地空闲空间已经不够完成创建操作,其会首先出发coffer的扩容操作,从内核态文件系统获得更多的空闲空间。在得到足够的空间之后,用户态文件系统库可以在coffer内完成文件创建操作。对于第三个操作(3)改变“/目录1”的权限,由于涉及到跨coffer的操作,用户态文件系统库发出系统调用,请求改变目录1以及其子文件的权限,内核态文件系统模块则将coffer进行拆分,并赋予新的coffer新的权限。
五,空间管理:双层的内存管理,由内核态文件系统对整个文件系统进行整体空间管理,并将部分空间划归给各个用户态文件系统库。用户态文件系统库可以对自己获得的空间进行更细粒度的管理和使用。如图6所示,内核态文件系统模块中保存了全局空闲空间资源,同时每个coffer中对本地空闲空间进行管理。当coffer中本地空闲空间不足时,用户态文件系统库会发出系统调用,向内核态文件系统模块请求更多的空间资源。而当本地空闲空间超多一定阈值时,用户态文件系统库会主动归还一些空间资源到全局。
在上述一种基于非易失性内存的用户态文件系统设计方法的基础上,本发明还提供一种基于非易失性内存的用户态文件系统设计系统,包括:
coffer抽象模块:将具有相同用户/组和权限的文件放在同一个coffer中,整个用户态文件系统树由coffer组成;
内核态文件系统管理模块:内核态文件系统管理模块以coffer的粒度对整个文件系统进行管理;
用户态文件系统库:用户态文件系统库通过发起对coffer的映射请求,获得对coffer的访问权限,从而直接管理coffer内部的任意数据和元数据,在用户态完成文件系统所提供的各种操作;
交互模块:用户态文件系统库与内核态文件系统管理模块通过系统调用进行交互;
空间管理模块:双层的内存管理,由内核态文件系统对整个文件系统进行整体空间管理,并将部分空间划归给各个用户态文件系统库。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。