linux fs源代码分析,BlueFs源代码分析报告.doc

BlueFs源代码分析报告

BlueFs源代码分析报告

一、什么是Bluefs

Bluefs是密歇根大学电子工程与计算机科学系的研究者们提出的一个分布式文件系统。由于移动存储技术的发展,诸如闪存之类的存储设备的出现,让人们可以轻而易举的随身携带大量的数据。然而传统的数据访问机制并没有考虑到移动存储的大量使用的情况,它们并不是为方便访问移动存储设备而设计的。使用传统的分布式文件系统所提供的数据存取机制访问移动存储设备可能造成高能耗和数据访问速度低的问题。Bluefs就是在这种状况下提出的。它让人们对移动存储设备的使用更加自由。

二、主要功能

首先,Bluefs首先是一个分布式文件系统,它必然有着一般分布式文件系统的共同特点。它必须能够将操作系统VFS的文件操作命令截获,然后传递给Bluefs自身进行处理。其次,它由客户机和服务器构成。服务器用来存储数据。客户机接受从VFS截获的文件操作命令,然后进行处理;客户机在进行操作的时候相应的文件需要从服务器获取或者提交到服务器。在Bluefs中,客户机和服务器的连接是通过RPC协议包实现的。Bluefs的系统结构如图1所示,服务器部分未画出。对我们研究的代码来说无论是客户机还是服务器都包含在一个软件包中,然而这并不是必须的。

图1 Bluefs的系统结构

其次,Bluefs又不同于以往的分布式文件系统,如NFS或者Coda。NFS只是简单的实现了上面提到的功能。Coda另外还支持无连接操作,也就是在连接不上服务器的时候本地磁盘有部分备份,可以在备份上进行文件操作,在重新连接到服务器后进行同步。Coda还通过cache的使用提高访问速度。Coda的这些技术都被Bluefs借鉴。然而Bluefs最大的特点是提供移动存储设备的支持,而且这也是Bluefs的设计目的所在。因此,Bluefs文件系统功能中最有特色的部分也在于此。

我们将在下面粗略的说明一下Bluefs对设备的支持功能特色。详细的说明将在后面分析代码的时候再进行。首先,Bluefs为每个移动存储设备(其实包括服务器和本地非移动存储)提供了一个“写队列”结构,来记录文件系统对此设备的操作。这种“写队列”的应用目的在于通过异步操作提高性能,并减少设备的状态切换从而省电。第二,读数据的时候从各个设备中找出读数据相对“性价比最高”的设备并从中读取数据。这里,“性价比高”意味着省电并且操作时时延相对较小。这部分功能也是由Bluefs客户机提供的。第三,enode cache结构的使用从而提高表现,防止从数据不存在的设备上读取数据。第四,在连接新设备或者去掉一个设备的时候需要有相应的处理操作。第五,有时我们需要某些文件必须能够存储到某个设备上去,这就是“Affinity”。Bluefs也提供了这部分功能。数据的经常备份复制必然产生不一致问题,怎样处理数据的不一致问题也是Bluefs必须提供的功能。Bluefs从Coda等文件系统借鉴了Callback机制。

三、典型工作流程

本节描述Bluefs的一个典型工作流程。

首先,我们要做的当然是启动Bluefs了。先启动Bluefs的服务器,然后启动客户机,它将会试图与服务器建立一个RPC连接。连接建立以后,我们就能顺利进行各种操作了。(其实无连接状态下也是可以操作的,但这不是Bluefs的主要功能)

现在某应用程序要存储一个文件到Bluefs文件夹下(即放在Bluefs文件系统中)。首先,应用程序要调用VFS的文件存储函数,应用程序期望VFS能够帮它完成其余的工作——把文件存储到Bluefs文件夹下。在这里,VFS的操作被传递到Bluefs的kernel模块儿。而kernel模块的功能也就是接受VFS的存储命令并把它传递给客户机(Wolverine模块)。几乎所有的处理工作都在Wolverine完成。上面我们从整体上说明了Bluefs的工作流程,下面我们将具体的分析bluefs的源代码,使我们对bluefs文件系统有一个更清楚,详细的认识。

四、源代码解析

4.1代码结构

Bluefs代码的结构如下所示:

Bluefs

Admin

bfs.c

Barnacle_lib

Dumb_diskcache——libDiskcache.c

Dumb_ptpcache——libPTPdevice.c

Forker——libforker.c

Id3merge——Libid3merge.c

Memleak——Libmemleak.c

Memstomp——Libmemstomp.c

Noop——Libnoop.c、Noop_pq.c

Radiohead——barnacle_ops.c、Id3ops.c、Libradiohead.c、performance_pq.c

Segfaul

你可能感兴趣的:(linux,fs源代码分析)