`
jiagou
  • 浏览: 2537412 次
文章分类
社区版块
存档分类
最新评论

Lustre可靠性增强系统MTFS:第3篇 系统结构

 
阅读更多

MTFS是一种扇出式的内核层堆叠式文件系统。那么什么是堆叠式文件系统?堆叠式文件系统是一种轻量级的文件系统,它可安装在其他文件系统之上,从而为已有文件系统提供了一种增量式开发方法。堆叠式文件系统本身不提供数据存储功能,而是堆叠在下层文件系统之上,调用下层文件系统接口,完成文件系统操作。按照堆叠方式的不同,堆叠式文件系统可分为线性和非线性两类,非线性堆叠式文件系统又可分为扇入式(fan-in)和扇出式(fan-out)两类。其中线性堆叠式文件系统安装在下层文件系统的单个目录之上,而扇出式文件系统则将下层文件系统的多个目录作为分支。线性堆叠式文件系统可提供加密、数据完整性检查和入侵检测、防病毒、压缩、多版本、安全检测、跟踪及重放等各种功能。以扇出式堆叠式文件系统一般用来提供名字空间统一或数据冗余。

图1给出了MTFS执行同步写操作的流程。如图所示,MTFS把下层文件系统的若干目录作为各个分支,而向虚拟文件系统VFS提供普通的文件系统接口,因而实现了对用户进程的完全透明。在用户层执行操作时,MTFS通过调用下层文件系统接口,将操作应用在所有分支上,从而实现了副本的同步更新。

图 MTFS的写操作流程

MTFS采用模块化的设计和实现方式,其软件结构如下图所示。该系统由用户层工具包和内核层文件系统组成。用户层工具包的主要功能包括维护文件系统状态,修复文件无效分支等。内核层文件系统以ioctl、/proc等方式向用户层管理工具包提供管理接口。内核层文件系统由策略引擎、配置枢纽、操作复制器和分支抽象等模块组成。

图 MTFS的软件结构

3.1 策略引擎

策略引擎提供了一种基于策略的副本管理机制。由于文件具有不同的重要性,对所有文件采用一致的副本策略,会造成不必要的存储空间浪费和性能损失。为此,策略引擎实现了文件粒度的副本策略配置方法,可以控制每个文件的副本数目以及副本分布在哪些分支上。MTFS中的每个文件都拥有自己的策略属性,其策略属性是在新建时从父目录自动继承的,也可以被手动设置

策略引擎支持对不同类型的文件自动设置不同的策略属性,应用相应的副本策略,从而达到性能、空间和可靠性之间的平衡,提高存储系统的整体服务质量。例如,为了减少性能损失,可将临时文件设定为单副本方式,将源码、文档等重要文件设定为多副本方式;为了减少空间消耗,可对大小超过某个限度的大文件保存少量副本,而对小文件保存多份副本。

根据后缀名区分文件类型,并应用不同的副本策略,被认为是一种方便有效的方法。因此,MTFS实现了一种基于文件名后缀最长匹配的副本策略机制。该机制提供用户接口,可对不同的文件名后缀设定不同的副本属性。图3给出了该机制在设定了.html、.xhtml、.xml、.htm、.mht和.txt等6个后缀的副本策略之后,所构建的策略树。在新建文件时,该机制将查询这个策略树,匹配文件名的最长后缀,自动设置文件的副本属性,应用对应的副本策略。

图 基于文件名后缀最长匹配的策略树示例

3.2 配置枢纽

配置枢纽是为适应不同的配置而设计实现的一种连接机制。MTFS的安装模式不同,或下层文件系统类型不同,就对应着不同的配置方式。基于MTFS可以实现包括同步副本、异步副本、归档、数据缓存在内的多种功能,分别对应了不同的使用模式。配置枢纽使得在安装MTFS时可以选择不同的使用模式,实现不同的功能。

配置枢纽还使得MTFS可适用于不同类型的下层文件系统。传统的栈式文件系统在实现中通常没有区分下层文件系统的具体差异。然而,不同的文件系统不仅在提供的接口上存在着差异,而且在接口语义上也可能存在细微差异。例如一些文件系统为VFS的file_operations结构体提供了writev方法,而另一些文件系统则只提供了write方法。另外,每种文件系统都各自提供了独特的ioctl接口,这些接口在不同的文件系统之间无法通用。如果在调用这些接口时,没有注意下层文件系统的差异,不仅可能造成性能损失,而且可能造成语义错误。

MTFS的一个安装实例可以组合使用多种类型的下层文件系统。对于每种下层文件系统的类型组合,配置枢纽需要根据其特点,配置适用的文件系统方法。基于类似于VFS的思想,配置枢纽提供了若干一般化的方法。例如,配置枢纽为同步模式提供了mtfs_file_write函数和mtfs_file_write_nonwritev函数,分别适用于在file_operations结构体中定义了和未定义writev方法的下层文件系统。前者将直接调用下层文件系统的writev方法,后者将调用下层文件系统的write方法。通过配置使用MTFS提供的默认方法,可以很容易的增加对新型下层文件系统的支持。

配置枢纽还为定制适应下层文件系统类型的文件系统方法提供了必要的接口。例如,当使用MTFS的同步副本模式来提高并行文件系统Lustre的可靠性时,需要利用Lustre的底层机制来保证一致性语义,因而无法使用MTFS提供的默认方法,而需要通过配置枢纽定制文件系统方法。

MTFS核心模块维持一个配置枢纽列表。为MTFS新添配置支持,都以向内核添加核心模块的方式进行。这些模块会在该列表中注册对应的配置枢纽。在安装MTFS的每个实例时,都将根据下层文件系统的类型和配置的使用模式,匹配合适的配置枢纽,初始化本次安装实例的文件系统超级块。

3.3 操作复制器

操作复制器是在分支间反复进行文件系统操作的软件层。操作复制器根据文件系统操作是否会引起数据或元数据更改,将其分为写操作和读操作。在同步副本模式下,为了保持副本的实时一致,操作复制器将VFS发出的写操作应用到所有的分支上。操作复制器根据分支的数据或元数据是否最新,将其分为有效分支和无效分支。如果所有有效分支写操作失败,那么操作复制器将判定此次写操作失败。如果至少有一个有效分支写成功,操作复制器则判定操作成功,并将所有失败的分支设置为无效分支。在读操作时,操作复制器将连续读取有效分支,直至某次读操作成功,或者所有有效分支读取失败为止。

操作复制器可以根据配置模式的不同而应用不同的操作策略。例如,在异步副本模式下,为了达到性能提升,操作复制器采用与同步模式不同的策略,即在完成单个分支的修改后就返回写操作成功,其他分支则进行异步更新。

3.4 分支抽象

分支抽象是MTFS为屏蔽下层文件系统差异,向上层提供统一的操作接口而设计实现的软件层。一般来说,MTFS的分支是下层文件系统的目录,但通过把其他系统的接口抽象成分支接口,可以构建虚拟分支,实现特殊功能。例如,为了实现对文件系统的跟踪分析,可以实现基于跟踪日志的分支接口,将跟踪日志和待跟踪的目录分别作为MTFS的两个分支,从而可以在用户透明的前提下获得跟踪信息。

MTFS除了调用分支的文件系统接口外,还需要存储分支属性、策略属性等附加信息。一般来说,附加信息是以文件扩展属性的方式存储的。然而,不同的文件系统对扩展属性支持不一样。例如,ext2等文件系统只支持名字以“trusted.”开头的扩展属性,而ntfs-3g等文件系统则只支持名字以“user.”开头的扩展属性。分支抽象可以屏蔽这些差异,向上提供一致的附加信息存储方法。

本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics