一种分布式文件系统中元数据磁盘同步的方法

文档序号:6569389阅读:345来源:国知局
专利名称:一种分布式文件系统中元数据磁盘同步的方法
技术领域
本发明涉及分布式文件系统中元数磁盘同步,具体来说,涉及一种分布式文件系统中元数据磁盘同步的方法。
背景技术
随着存储技术的发展,越来越多的分布式文件系统应运而生。这其中,有完全基于内核态的文件系统,如NFS、Lustre、GPFS等;也有完全位于用户态的分布式文件系统,如近几年新兴的分布式文件系统Google FS、HDFS、M00SeFS等。基于内核态的分布式文件系统的优势在于效率相对较高,但是不足在于开发难度较高;而基于用户态的分布式文件系统, 则刚好相反,这类文件系统以一定的效率损失为代价,来换取开发和维护上的低成本。位于用户态的分布式文件系统,其总体结构和基于内核态的分布式文件比较相似,不同的是,其存储元数据和数据时,并不是直接面向块设备,而是基于本地文件系统之上,即将元数据或数据存储于文件当中。目前各种本地文件系统,为了加速访问效率,通常配备有各种元数据和数据缓存。在文件系统之上的修改,并非立即写入磁盘,而是先写到缓存中,在合适的时机由操作系统回写到磁盘,或者由用户程序触发回写,将数据刷回磁盘。对于元数据服务器而言,为了保证元数据的一致性,往往元数据管理需要引入日志系统,采用类似数据库的事务处理方案。对于元数据的修改,需要发起一次事务,先将修改记录成为日志,然后交由日志处理模块来完成后续的磁盘操作。日志系统需要先将日志写入日志设备,然后再将元数据写入元数据文件,最后完成元数据文件的磁盘同步后,才能够将记入日志设备的日志条目删除。通常情况下,日志设备的容量相对较小,因而能承载的日志条目有限,因此当日志设备没有空间时,只能等待元数据文件同步完成后,将日志空间释放出来,才能继续处理后续的元数据修改。因此,在元数据系统压力比较大时,回写磁盘的效率往往成为系统处理能力的关键。在用户态的元数据文件同步,由于Linux操作系统提供接口的限制,只能每次操作一个文件,当该文件同步完成后,才能继续处理下一个文件。而实际应用中,由于元数据的修改数据量通常较少,但修改次数相对较多,而且短时间内的修改往往涉及多个元数据文件。如果按文件一个个进行同步,则会导致对磁盘带宽不能充分利用。通常情况下,磁盘访问的时间大部分会消耗在磁头启动和寻道上了,如果写入文件在磁盘上的位置随机,且每次写入量不大的话,会造成磁头不断在前后移动,大大影响写入磁盘的性能。

发明内容
本发明旨在公开一种高效的元数据文件同步方案,该方案能够充分利用磁盘寻道的特性,有效提高元数据磁盘同步的效率,提高元数据服务器的负载能力。—种分布式文件系统中元数据磁盘同步的方法,用户态守护进程将要修改写入元数据文件的页面缓存在一起,一起将文件句柄和修改区间传递给内核态模块,内核态模块将修改数据传递给块设备,在所有文件同步完成后,返回用户态守护进程。优选的,所述内核态模块注册一个字符设备,所述用户态守护进程通过ioctl的方式与所述内核态模块通信。优选的,所述用户态守护进程将需要修改的元数据文件页面中连续的页面合并成一个区间。优选的,所述页面在提交到用户态守护进程后,需要在日志文件中记录该页面区间。优选的,所述内核态模块接收到ioctl请求后,从中取出需要同步的文件句柄和相应区间,先根据文件句柄获得文件的索引节点,然后根据索引节点进行排序。优选的,所述排序完成后,遍历所有所有节点,对需要同步的文件区间,向磁盘设备提交修改请求,并逐个等待期磁盘同步完成。本发明中,元数据服务器由内核态模块和用户态守护进程两部分组成。这两个模块通过字符设备进行通信,当用户态收集到一批需要同步的文件后,会将文件句柄和修改区间传递给内核态的模块,由内核态的模块将这些修改数据传递给块设备,然后统一等待完毕后,再返回用户态进程。实验数据显示,这种由内核态模块集中进行文件同步的方式, 能将文件同步的平均时间至少缩短一半,因而大大加快了前端元数据的处理能力。
具体实施例方式发明中的技术方案具体描述如下(1)内核态模块注册一个字符设备,用户态进程通过ioctl的方式来和该模块进行通信。(2)用户态进程对元数据事务的处理采用批处理的方式,即一次处理多个事务。将元数据文件的修改分为两步第一步,将修改写入元数据文件的页面缓存;第二步,进行磁盘同步。这两步由不同的线程来并行处理,以提高效率。(3)磁盘同步处理方式如下第一步,提取各个事务修改元数据所涉及的元数据文件,以及修改的区间。对于同一个文件的多个修改区间,尽可能合并成一个大的区间。然后将文件句柄和对应区间以 ioctl的方式传递给内核态模块。这里之所以按区间进行,是因为在同步磁盘的同时,其他线程还在不断修改元数据文件的页面缓存,为了在本次同步磁盘时,不会将其他写入文件页面缓存的修改也一起同步到磁盘,节省单次请求的处理时间,需要记录本次处理事务所涉及的文件区间。第二步,内核态模块接收到ioctl请求后,从其中取出需要同步的文件句柄和相应区间,先根据文件句柄获得文件的索引节点,然后根据索引节点进行排序。通常文件系统在创建文件时,文件在磁盘的排布总是尽可能的按照索引节点创建的先后顺序来进行,因此按照索引节点排序之后,能够基本保证同步磁盘时,磁头的移动是顺序进行的,这能够大大降低磁盘的寻道时间。在对索引节点排序完成后,将同步磁盘的操作分为两个阶段第一阶段,遍历所有的索引节的,对需要同步的文件区间,向磁盘设备提交修改请求;第二阶段,对所有索引节点的修改区间,逐个等待其磁盘同步完成。之所以将同步磁盘的动作分为两步,是为了充分
4利用磁盘的特性。磁盘在运转时,当给其提交的请求比较多时,它能够对请求进行合并和排序,同时能够保证磁头一直处于运转当中,而不会中断下来,在这种模式下,可以比较充分的利用磁盘的处理能力。
权利要求
1.一种分布式文件系统中元数据磁盘同步的方法,其特征在于用户态守护进程将要修改写入元数据文件的页面缓存在一起,一起将文件句柄和修改区间传递给内核态模块,内核态模块将修改数据传递给块设备,在所有文件同步完成后,返回用户态守护进程。
2.如权利要求1所述的方法,其特征在于所述内核态模块注册一个字符设备,所述用户态守护进程通过ioctl的方式与所述内核态模块通信。
3.如权利要求1所述的方法,其特征在于所述用户态守护进程将需要修改的元数据文件页面中连续的页面合并成一个区间。
4.如权利要求1或3所述的方法,其特征在于所述页面在提交到用户态守护进程后, 需要在日志文件中记录该页面区间。
5.如权利要求1所述的方法,其特征在于所述内核态模块接收到ioctl请求后,从中取出需要同步的文件句柄和相应区间,先根据文件句柄获得文件的索引节点,然后根据索引节点进行排序。
6.如权利要求5所述的方法,其特征在于所述排序完成后,遍历所有所有节点,对需要同步的文件区间,向磁盘设备提交修改请求,并逐个等待期磁盘同步完成。
全文摘要
本发明中,元数据服务器由内核态模块和用户态守护进程两部分组成。这两个模块通过字符设备进行通信,当用户态收集到一批需要同步的文件后,会将文件句柄和修改区间传递给内核态的模块,由内核态的模块将这些修改数据传递给块设备,然后统一等待完毕后,再返回用户态进程。实验数据显示,这种由内核态模块集中进行文件同步的方式,能将文件同步的平均时间至少缩短一半,因而大大加快了前端元数据的处理能力。
文档编号G06F17/30GK102567442SQ20111032601
公开日2012年7月11日 申请日期2011年10月25日 优先权日2011年10月25日
发明者刘新春, 张东阳, 杨浩, 王勇, 苗艳超, 邵宗有, 马振杰, 马照云 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1