基于微内核的可扩展文件系统及文件访问方法

文档序号:10724946阅读:262来源:国知局
基于微内核的可扩展文件系统及文件访问方法
【专利摘要】本发明公开了一种基于微内核的可扩展文件系统,包括用于读写磁盘的磁盘服务;用于在用户进程与文件服务进程之间拷贝文件数据,帮助磁盘服务执行内核态的特权IO指令的系统服务;目录服务进程:工作于单个处理核,管理全局的元数据,设置块缓存用于保存文件属性信息inode和目录信息dentry,接收用户进程的所有文件处理请求,执行目录遍历,处理所述文件处理请求中的操作元数据的请求,并将读写文件的请求路由至文件服务进程;多个文件服务进程:用于处理读写文件的请求,设置有缓存池用于缓存数据文件块。本发明还公开了一种基于微内核的可扩展文件系统的文件访问方法。本发明可避免大部分锁竞争开销,实现文件服务进程的负载均衡与弹性扩展。
【专利说明】
基于微内核的可扩展文件系统及文件访问方法
技术领域
[0001]本发明涉及一种文件系统及文件访问方法,尤其是涉及一种基于微内核的可扩展文件系统及文件访问方法,属于数据存储访问技术领域。
【背景技术】
[0002]对于网络服务器或大型的多核工作站,文件系统的并行性能至关重要。特别是随着云计算时代分布式存储系统的广泛应用,在多核的云存储系统中,对于每个核上的块(chunk)服务进程,块读写效率成为关键要素,这是因为通常需要在短时间内处理对大量文件的读写工作。
[0003]目前传统的文件系统在核数较少时可以很好地工作,但由于存在锁竞争开销,其性能会随着并行代码流的数量增加而大幅度降低。其锁竞争开销主要来自于以下两部分:
[0004](I)元数据。当多个目录查询代码流并行时,对文件系统的元数据(包括目录信息dentry、文件属性信息inode、超级块列表、块位图)中的目录信息dentry的缓存数据结构dcache和文件属性信息inode的缓存数据结构icache的访问会成为瓶颈。dcache按照树型结构,组织了系统中所有目录的基本信息,由锁对象dcachejock保护;icache缓存了系统中所有被引用到的文件属性信息inode节点,由锁对象inode_lock保护。当创建或打开一个文件时,系统会解析文件路径名,并按顺序分解为多个dentry与inode,并在dcache和icache中检索它们。该过程需要获取这些数据结构上的全局自旋锁以及每个dentry与inode上的互斥锁。
[0005](2)块缓存。当并行读写文件时,对文件系统中共享的块缓存也存在极大的竞争开销。除了全局锁,每个块缓存项由一个状态值控制(相当于互斥锁),以避免块被同时写,这使得写操作较多的程序扩展性更差。
[0006]同时,多个文件服务进程间的负载不均衡或用户请求量与服务进程的服务能力不匹配也会造成计算资源的使用不合理,从而导致文件系统整体性能的下降。

【发明内容】

[0007]本发明提供了一种基于微内核的并行且能够扩展至多核平台的文件系统以及基于该系统的文件访问方法,通过对文件系统的数据对象和操作的划分,避免大部分锁竞争开销。采用主从服务结构,实现文件服务进程的负载均衡与弹性扩展。
[0008]本发明技术方案如下:一种基于微内核的可扩展文件系统,包括:
[0009]磁盘服务:用于将磁盘上的数据加载至内存或将内存数据写回磁盘;
[0010]系统任务:用于在用户进程与文件服务进程之间拷贝文件数据,并在磁盘服务需要访问磁盘时帮助其执行内核态的特权10指令;
[0011]目录服务进程:工作于单个处理核,管理全局的元数据,设置块缓存用于保存文件属性信息inode和目录信息dentry,接收用户进程的所有文件处理请求,执行目录遍历,处理所述文件处理请求中的操作元数据的请求,并将读写文件的请求路由至文件服务进程;
[0012]多个文件服务进程:用于处理读写文件的请求,设置有缓存池用于缓存数据文件块,所述数据文件块包括数据块以及中间块。
[0013]进一步的,所述目录服务进程路由时根据读写数据量估计每个文件服务进程的负载值,并选取负载值最低的文件服务进程作为路由目标,所述目录服务进程在路由一个读写请求时增加相应文件服务进程的负载值,所述文件服务进程在取得一个排队的请求后并即将处理时减去相应负载值。
[0014]进一步的,所述目录服务进程监控文件服务进程的平均负载并调整文件服务进程数量。
[0015]所述元数据包括目录信息dentry、文件属性信息inode、超级块列表和块位图。
[0016]所述操作元数据的请求包括打开文件、关闭文件、创建文件、创建文件夹、进入文件夹和改变文件属性。
[0017]—种基于微内核的可扩展文件系统的文件访问方法,包括步骤:用户进程向目录服务进程发送文件访问请求,所述文件访问请求的参数包括文件描述符ID,缓冲区地址和文件请求的字节数;目录服务进程在用户进程的文件描述符表中检索inode指针,同时在路由表中检索目标文件服务进程;目标文件服务进程检索到文件inode并分析块映射图,从缓存中逐块读取与请求文件相关的间接块和数据块,在哈希表中没找到的块由磁盘服务加载;目标文件服务进程请求系统任务从文件服务进程的地址空间中拷贝数据至用户进程的缓冲区。
[0018]进一步的,所述目录服务在路由表中检索目标文件服务进程时根据读写数据量估计每个文件服务进程的负载值,并选取负载值最低的文件服务进程作为路由目标,所述目录服务进程在路由一个读写请求时增加相应文件服务进程的负载值,所述文件服务进程在取得一个排队的请求后并即将处理时减去相应负载值。
[0019]本发明所提供的技术方案的优点在于:
[0020](I)目录服务进程进行串行化目录操作,可以避免对元数据加锁,并移除缓存一致性协议所带来的开销。
[0021](2)对于一个已打开文件的读写请求,由目录服务进程路由至特定的文件服务进程进行处理,从而保证了不同文件服务进程操作的文件集合不相交。多个文件服务进程的分布的块缓存各自保存了不同的数据内容,所以它们之间是互相独立的,并且数据结构无需加锁。当多个用户进程试图访问同一个文件块时,读写过程均会由单个文件服务进程串行地执行,因而,每个块缓存上的互斥锁也可移除。
[0022](3)目录服务进程作为主服务进程,利用一个全局视图平衡文件服务进程(从服务进程)的负载,并动态地调节服务的规模以匹配用户进程的请求负荷。
[0023](4)文件系统的功能被分解并运行于特定的处理核,同时将高竞争度的数据结构分离,从而使每个服务进程的工作集几乎不相交,这样可以避免文件系统的大部分锁。
【附图说明】
[0024]图1为基于微内核的可扩展文件系统的架构示意图;
[0025]图2为基于微内核的可扩展文件系统的交互时序图。
【具体实施方式】
[0026]下面结合实施例对本发明作进一步说明,但不作为对本发明的限定。
[0027]如图1所示,本实施例所涉及的基于微内核的可扩展文件系统,包括:
[0028]磁盘服务:一个采用直接内存访问方式的块设备驱动,用于将磁盘上的数据加载至内存或将内存数据写回磁盘;
[0029]系统任务:运行于内核态,用于在用户进程与文件服务进程之间拷贝文件数据,并在磁盘服务需要访问磁盘时帮助其执行内核态的特权1指令;
[0030]目录服务进程与多个文件服务进程:通过与系统任务和磁盘服务进行交互来访问磁盘中的目录或文件数据,以及为用户进程提供文件服务。在主从结构中,目录服务进程可以视为本发明的主服务进程,而文件服务进程为从服务进程。
[0031]目录服务进程工作于单个处理核,管理内存中的元数据(包括目录信息dentry、文件属性信息inode、超级块列表、块位图),它作为访问入口向用户提供一组统一的接口,所有来自用户进程的请求都发往目录服务进程。其中操作元数据的请求,如打开文件、关闭文件、创建文件、创建文件夹、进入文件夹、改变文件属性等,由目录服务进程直接处理,而读写普通文件的请求则被路由至文件服务进程进行处理。
[0032]目录服务进程的路由策略操作依据一张哈希路由表完成,该表记录了由文件属性信息inode映射至文件服务进程的路由项。当用户进程请求打开一个新文件时,目录服务进程会为其选择多个文件服务进程中的一个文件服务进程,并创建一个新的路由项。随后访问该文件的请求都将被路由至该文件服务进程。当没有进程引用该文件时,其路由项才会被删除。这样的路由方式使得文件在其打开期间,其缓存的文件块始终存放于固定的文件服务进程。这期间其它文件服务进程不可能对该文件进行操作,从而保证了缓存数据与磁盘数据之间的一致性。为了避免不必要的路由操作,用户进程也缓存了路由项,使大部分文件请求可以不经过路由过程而被直接发送至文件服务进程。
[0033]部分竞争度较低的元数据虽然由目录服务进程维护,但也需要被文件服务进程访问。这些元数据包括超级块列表、块位图、icache,存储于目录服务进程,并被每个文件服务进程共享,这样可以使各文件服务进程都能方便快速地访问它们。系统任务在各个文件服务进程启动完成后,通过内存页映射的方式将这些元数据共享。
[0034]由于目录服务进程和文件服务进程无差别地访问所有的块数据,所以超级块列表和块位图都需要加锁同步。icache维护了当前所有进程引用到的inode索引节点,文件服务进程在读取一个文件前,需要检索一个inode的块映射图,其数据结构不需要加锁,这是因为在某个时刻,各服务进程操作的对象不相交:(I)文件服务进程只会访问一个inode的块映射图,而目录服务进程不访问inode的块映射图;(2)由于文件服务进程间的隔离性,一个inode在某一时刻只会被唯一的文件服务进程访问。
[0035]对于本发明提出的基于微内核的可扩展文件系统的负载均衡问题,如果一部分文件服务进程的工作量过载或空闲,那么整体性能会由于处理器的物理核没有得到合理利用而变得很差。文件服务进程必须能够弹性扩展,即服务整体可以随着用户请求的负荷动态地伸缩。本发明中目录服务进程为一个新打开的文件创建静态路由项时实施负载均衡策略。对于每个文件读写请求,利用读写的数据量来衡量负载。这是因为读写过程的时长与数据量近似成正比。文件服务进程使用环形缓冲来存储未处理的请求,并按顺序处理这些消息,因而这些未完成任务的总负载反映了一个文件服务进程当前的工作负载。目录服务进程在路由时首先估计每个文件服务进程的负载值,并选取负载值最低的作为路由目标。目录服务进程在路由一个读写请求时增加相应负载值,而文件服务进程在取得一个排队的请求后并即将处理时减去相应负载值。
[0036]目录服务进程还负责监控所有文件服务进程的平均负载,并定期调整文件服务进程的数量。当整体负载偏高时,它将请求微内核分配额外的核来运行新的文件服务进程。新的文件服务进程在初始化和更新状态之后才能开始工作。相反地,当整体负载过低时,一些文件服务进程会被终止,以回收其使用的处理器的物理核资源。在终止前,未处理的请求将被传送回目录服务进程,并重新路由,而其缓存的脏块(dirty block)将被重写回磁盘以确保数据的一致性。
[0037]请结合图2,本发明提出的基于微内核的可扩展文件系统的各个服务进程的交互过程是这样的:
[0038]1.目录服务进程――文件服务进程
[0039]在读文件之前,文件服务进程必须获得的元数据包括inode项以及文件描述符信息。用户进程发送的请求中包括了文件描述符ID,缓冲区地址和字节数,请求会被首先发送至目录服务进程的紧急缓冲区中,使其能被优先路由。然后,目录服务进程在用户进程的文件描述符表中检索inode指针,同时目标文件服务进程在路由表中被找到。最后,目录服务进程会将inode号和文件描述符传递该文件服务进程。
[0040]2.文件服务进程<>磁盘服务
[0041 ]接收到路由请求后,文件服务进程检索到文件inode并分析块映射图。接着,文件相关的间接块和数据块将被逐块从缓存中读取。如果一个块在哈希表中没找到,那么它将会由磁盘服务加载。脏块的写回策略包括两种:(I)定期写回;(2)当空闲缓存块不够时,使用最近最少使用(Least Recently Used,LRU)策略写回脏块。
[0042]考虑到在文件服务进程的多个工作线程内部存在一个同步问题,在线程加载一个未缓存的块并为其建立新的哈希表项的期间可能会发生数据的不一致。在哈希表建立前,线程会阻塞并等待磁盘服务为其读取块内容。如果随后调度的线程也试图读取相同的块,那么由于该块缓存尚未更新,会导致它再次请求磁盘并建立多余的哈希项。本发明的解决方法是:如果后来的线程试图读取相同块时,将被挂起。当块数据加载完毕后,挂起的线程才被唤醒,并直接从缓存中读取。目录服务进程在读取dentry和inode时也采用类似的方法。
[0043]3.磁盘服务<>系统任务
[0044]系统任务为磁盘服务提供了三个接口函数:接口函数I,根据一个端口号执行单次1/0指令;接口函数2,根据多个端口号执行一组1/0指令;接口函数3,开/关中断以及设置中断处理的策略。
[0045]磁盘服务利用上述接口执行直接内存访问操作。当磁盘中断发生时,系统注册的处理函数只是简单地通知磁盘服务。
[0046]4.文件服务进程<>系统任务
[0047]一旦文件服务进程成功读取到块,它会请求系统任务从文件服务进程的地址空间中拷贝数据至用户进程的缓冲区中。
【主权项】
1.一种基于微内核的可扩展文件系统,其特征在于,包括: 磁盘服务:用于将磁盘上的数据加载至内存或将内存数据写回磁盘; 系统任务:用于在用户进程与文件服务进程之间拷贝文件数据,并在磁盘服务需要访问磁盘时帮助其执行内核态的特权1指令; 目录服务进程:工作于单个处理核,管理全局的元数据,设置块缓存用于保存文件属性信息inode和目录信息den try,接收用户进程的所有文件处理请求,执行目录遍历,处理所述文件处理请求中的操作元数据的请求,并将读写文件的请求路由至文件服务进程; 多个文件服务进程:用于处理读写文件的请求,设置有缓存池用于缓存数据文件块,所述数据文件块包括数据块以及中间块。2.根据权利要求1所述的基于微内核的可扩展文件系统,其特征在于,所述目录服务进程路由时根据读写数据量估计每个文件服务进程的负载值,并选取负载值最低的文件服务进程作为路由目标,所述目录服务进程在路由一个读写请求时增加相应文件服务进程的负载值,所述文件服务进程在取得一个排队的请求后并即将处理时减去相应负载值。3.根据权利要求1所述的基于微内核的可扩展文件系统,其特征在于,所述目录服务进程监控文件服务进程的平均负载并调整文件服务进程数量。4.根据权利要求1所述的基于微内核的可扩展文件系统,其特征在于,所述元数据包括目录信息dentry、文件属性信息inode、超级块列表和块位图。5.根据权利要求1所述的基于微内核的可扩展文件系统,其特征在于,所述操作元数据的请求包括打开文件、关闭文件、创建文件、创建文件夹、进入文件夹和改变文件属性。6.—种基于微内核的可扩展文件系统的文件访问方法,其特征在于,包括步骤:用户进程向目录服务进程发送文件访问请求,所述文件访问请求的参数包括文件描述符ID,缓冲区地址和文件请求的字节数;目录服务进程在用户进程的文件描述符表中检索inode指针,同时在路由表中检索目标文件服务进程;目标文件服务进程检索到文件inode并分析块映射图,从缓存中逐块读取与请求文件相关的间接块和数据块,在哈希表中没找到的块由磁盘服务加载;目标文件服务进程请求系统任务从文件服务进程的地址空间中拷贝数据至用户进程的缓冲区。7.根据权利要求6所述的基于微内核的可扩展文件系统的文件访问方法,其特征在于,所述目录服务在路由表中检索目标文件服务进程时根据读写数据量估计每个文件服务进程的负载值,并选取负载值最低的文件服务进程作为路由目标,所述目录服务进程在路由一个读写请求时增加相应文件服务进程的负载值,所述文件服务进程在取得一个排队的请求后并即将处理时减去相应负载值。
【文档编号】G06F17/30GK106095817SQ201610378856
【公开日】2016年11月9日
【申请日】2016年6月1日
【发明人】钱振江, 汤力, 张雪伍, 周蕾, 王剑, 乐德广
【申请人】常熟理工学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1