当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Get Information from Tracert Command
  • securecrt linux开发板,SecureCRT 登陆虚拟机中Ubuntu详解
  • 西直门交警
  • c语言文件分割与合并程序详解,如何实现将一个文件分割成多个小文件
  • 使用dbms_rowid包获得rowid的详细信息
  • 高斯消元法的应用
  • 小波 c语言实现,小波分析算法的公式与C语言实现
  • 输入一行数字把5都看成空格 C语言,算法设计习题整理112.doc
  • 值得尊敬的---抵抗之都费卢杰
  • 风潇潇兮
  • 单片机c语言基本类型修饰符,下列属于 C语言中类型修饰符的是()。
  • 不知如何走的立交桥(西直门交警一文背景)
  • 趣味c语言题目,C语言趣味程序设计题目百例.doc
  • android线程池不工作了,Android线程篇(二):Java线程池
  • CSDN Oracle电子杂志创刊号发布
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS基础之数据类型、对象、原型、原型链、继承
  • js继承的实现方法
  • js数组之filter
  • js写一个简单的选项卡
  • Linux快速复制或删除大量小文件
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Webpack 4x 之路 ( 四 )
  • 搭建gitbook 和 访问权限认证
  • 分享一份非常强势的Android面试题
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前嗅ForeSpider中数据浏览界面介绍
  • 悄悄地说一个bug
  • 区块链分支循环
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 数据仓库的几种建模方法
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 用Python写一份独特的元宵节祝福
  • 2017年360最后一道编程题
  • 如何用纯 CSS 创作一个货车 loader
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #1014 : Trie树
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #define与typedef区别
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (02)Unity使用在线AI大模型(调用Python)
  • (1)(1.13) SiK无线电高级配置(六)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C#)一个最简单的链表类
  • (pytorch进阶之路)扩散概率模型
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (亲测有效)解决windows11无法使用1500000波特率的问题