欢迎来到天天文库
浏览记录
ID:30773664
大小:562.35 KB
页数:19页
时间:2019-01-03
《bluefs源代码分析报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、BlueFs源代码分析报告—、什么是BluetsBluefs是密歇根大学电子工程与计算机科学系的研究者们提出的一个分布式文件系统。由于移动存储技术的发展,诸如闪存之类的存储设备的出现,让人们可以轻而易举的随身携带大量的数据。然而传统的数据访问机制并没有考虑到移动存储的大量使用的情况,它们并不是为方便访问移动存储设备而设计的。使用传统的分布式文件系统所提供的数据存取机制访问移动存储设备对能造成高能耗和数据访问速度低的问题。Bluefs就是在这种状况下提出的。它让人们对移动存储设备的使用更加自由。二、主要功能首先,Bluefs首先是一个分
2、布式文件系统,它必然有着一般分布式文件系统的共同特点。它必须能够将操作系统VFS的文件操作命令截获,然后传递给Bluefs自身进行处理。其次,它由客户机和服务器构成。服务器用來存储数据。客户机接受从VFS截获的文件操作命令,然后进行处理;客户机在进行操作的时候相应的文件需要从服务器获取或者提交到服务器。在Bluefs屮,客户机和服务器的连接是通过RPC协议包实现的。Bluefs的系统结构如图1所示,服务器部分未画出。对我们研究的代码来说无论是客户机还是服务器都包含在一个软件包中,然而这并不是必须的。LinuxKernel图1Bluef
3、s的系统结构其次,Bluefs又不同于以往的分布式文件系统,如NFS或者Coda。TFS只是简单的实现了上面提到的功能。Coda另外还支持无连接操作,也就是在连接不上服务器的时候本地磁盘有部分备份,对以在备份上进行文件操作,在重新连接到服务器后进行同步。Co血还通过cache的使用提高访问速度。Coda的这些技术都被Bluefs借鉴。然而Bluefs最大的特点是提供移动存储设备的支持,而且这也是Bluefs的设计目的所在。因此,Bluefs文件系统功能屮最有特色的部分也在于此。我们将在下面粗略的说明一下Bluefs对设备的支持功能特色
4、。详细的说明将在后面分析代码的时候再进行。首先,Bluefs为每个移动存储设备(其实包括服务器和本地非移动存储)提供了一个“写队列”结构,来记录文件系统对此设备的操作。这种“写队列”的应用目的在于通过异步操作提高性能,并减少设备的状态切换从而省电。第二,读数据的吋候从各个设备中找出读数据相对“性价比最高”的设备并从中读取数据。这里,“性价比高”意味着省电并且操作时时延相对较小。这部分功能也是由Bluefs客户机提供的。第三,enodecache结构的使用从而提高表现,防止从数据不存在的设备上读取数据。第四,在连接新设备或者去掉一个设备
5、的时候需要有相应的处理操作。第五,有时我们需要某些文件必须能够存储到某个设备上去,这就是“Affinity”。Bluefs也提供了这部分功能。数据的经常备份复制必然产生不一•致问题,怎样处理数据的不-•致间题也是Bluefs必须提供的功能。Bluefs从Coda等文件系统借鉴了Callback机制。三、典型工作流程本节描述Bluefs的一个典型工作流程。首先,我们要做的当然是启动Bluefs7。先启动Bluefs的服务器,然后启动客户机,它将会试图与服务器建立一个RPC连接。连接建立以后,我们就能顺利进行各种操作了。(其实无连接状态下
6、也是可以操作的,但这不是Bluefs的主要功能)现在某应用程序要存储一个文件到Bluefs文件夹下(即放在Bluefs文件系统中)。首先,应用程序要调用VFS的文件存储函数,应用程序期望VFS能够帮它完成其余的工作一一把文件存储到Bluefs文件夹下。在这里,VFS的操作被传递到Bluefs的kernel模块儿。而kernel模块的功能也就是接受VFS的存储命令并把它传递给客户机(Wolverine模块)。几乎所有的处理工作都在Wolverine完成。Wolverine负责把kernel传递过來的数据进行存储。它把数据存储命令加到各个
7、设备(包括server)的写队列上去。并在合适的时机执行写操作。然后,应用程序就可以在Bluefs文件夹下读取文件了。当然,这个文件可能并不是放在Bluefs文件夹所在的文件系统的。我们甚至不知道它究竟放在哪里。但是应用程序只需要给VFS—个读取命令,VFS自然会告诉Bluefskernel我们需要读取这个文件,而kernel会把这个需求告诉Wolverine,Wolverine按照自身的方案从某个设备(可能是server,与服务器的通信是通过rpc包进行的)将文件取出,然后再经过传递送回应用程序。具体步骤参看图1。上面我们从整体上说
8、明了Bluefs的工作流程,下面我们将具体的分析bluefs的源代码,使我们对bluefs文件系统有一个更清楚,详细的认识。四、源代码解析4.1代码结构Bluefs代码的结构如下所示:BluefsAdminbfs.cBa
此文档下载收益归作者所有