Fast File System
不扯淡了,直接来写吧,一天一共要写三篇博客,还有两篇呢。
1. 这篇博客讲什么?
Fast File System(FFS)快速文件系统,基本思想已经在在上一篇博客File System Implementation 里面说明了,FFS是对VSFS的一种优化改进使其可以被实际使用。
2. FFS基于VSFS的改进思想是什么?
这个呢,VSFS在存储文件的时候,根本没有考虑磁盘的寻址时间,把磁盘当做了一种随机存储介质!事实上由于局域性原理的存在,依据局域性而对存储做相应改进是非常有助于性能提升的。FFS则正是看到了这一点,其改进是将磁盘划分为多个子区域(Cylinder Groups),存储文件的时候同一文件夹下的文件尽可能放在同一个Group。Cylinder Groups是FFS最大的改进来源。
3. FFS文件系统的实现
首先,FFS将磁盘划分为很多子区域,也就是很多个Cylinder Groups,如下图:
每个组内的结构跟VSFS基本一样,下图:
对于这里面的SuperBlock每个组都会有。文件存储 既然FFS号称利用局域性原理,那么具体是什么操作的呢?
- 对于文件夹,它会选择一个包含文件夹少而且剩余的空闲inode数目多的组来存储;
- 对于文件,它确保一个文件的inode和data是属于同一个组的;而且,将同一文件夹的文件尽量放在一个组,这里面的“尽量”是考虑到大文件可能需要被存在好几个组。
- 大文件 大文件是需要特殊处理的,因为否则的话因为组内空间被大文件大量占用,这就会使得很难实现“相关文件放一起”的那个使用局域性原理的设计。那么大文件就必须被“分割”为多块分别存储在各个组内,那么如何设定这个切割的大小呢,或者说大文件的每一块设置为多大。
这个需要一点计算。设置大文件切割大小核心在于,设置的太小了,那么读取它的时候影响效率(因为是需要额外寻址的,如果太小,这总的传输效率低)。假设磁盘的平均寻址时间是10ms,那么为了达到一半的传输效率,这意思是说磁盘真正用来传数据的时候和寻址时间相同,假设磁盘传输效率是40MB/s,那么10ms传输的数据是409.6KB。换句话说,只需要409KB,就可使的传输效率为50%。事实上,大约3.7MB就可使得磁盘平均传输效率为90%。所以,切割大小设置为4M左右就可以了。
FFS的设计者挺聪明的,其实按照之前的VSFS的设计,每个inode里面会有15个块指针用来索引文件占用磁盘块的,前面12个直接索引可表示12*4KB=48KB的空间,而一级间接索引就可表示4M的空间。所以除了前48KB,之后的每4M数据均放置在不同的组内,这个刚好可以使用一一级间接索引表示。
4. FFS设计细节
- 小文件问题 这个是说很多文件太小了,用一个磁盘块(4KB)存储有点浪费空间啊!!所以呢,FFS引入sub-blocks这个概念,一般是512B,也就是一个sector扇区的大小。那么这样一来又会使得写小文件的操作台低效了,哈哈,不用担心,我们可以写文件的时候现在Cache中缓存一下,等到收集了4KB的数据再一次性写入。这就是FFS提供的libc库的作用啦。
- parameterized placement 这个呢,有点难理解,先看这个图吧:
假设一个这个文斌就包含了12个磁盘块,而且如左边显示的那样存储于一个磁道上面。那么序列读取数据的时候就会有一个很小的问题:当磁头达到0块的时候读取数据,可是等它读完了准备读1块的数据的时候,磁头早就转过去了(假设转到2块的位置),于是需要接着等磁头转回来!!这样是不是很慢,事实上磁盘会将一个磁道的数据一下子缓存在磁盘里面,但是即使是这样,也需要两圈才能读完。因为你在等1快的数据的时候,磁盘转了一圈读出了整个磁道的数据,然后你获得了1块的数据,可是还是需要转一圈才能依次获得每一块的数据。于是乎就很聪明的将数据排列成右边那个样子,这样一来就只需要一圈啦。。。。
5. 参考文献
❝
- http://pages.cs.wisc.edu/~remzi/OSTEP/file-ffs.pdf
❞
Fast File System的更多相关文章
- Storage System and File System Courses
I researched a lot about storage system classes given at good universities this year. This had two r ...
- File System Design Case Studies
SRC=http://www.cs.rutgers.edu/~pxk/416/notes/13-fs-studies.html Paul Krzyzanowski April 24, 2014 Int ...
- 谷歌三大核心技术(一)The Google File System中文版
谷歌三大核心技术(一)The Google File System中文版 The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个 ...
- HDFS分布式文件系统(The Hadoop Distributed File System)
The Hadoop Distributed File System (HDFS) is designed to store very large data sets reliably, and to ...
- Low-overhead enhancement of reliability of journaled file system using solid state storage and de-duplication
A mechanism is provided in a data processing system for reliable asynchronous solid-state device bas ...
- Google File System中文版
英文原文地址: Google File system 译文原文地址: The Google File System中文版 Google File System中文版 摘要 我们设计并实现了Google ...
- The Google File System论文拜读
The Google File System Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung Google∗ 摘要 我们设计并实现了谷歌文件系统 ...
- The disk contains an unclean file system
Ubuntu : Status 14: The disk contains an unclean file system By mkyong | July 23, 2014 | Viewed : 10 ...
- PatentTips – EMC Virtual File System
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention generally relates to net ...
随机推荐
- iOS- 如何建立索引实现本地文本搜索引擎,允许容错搜索?
1.前言 实现一个本地搜索引擎,允许容错搜索,也就是搜索结果不需要和搜索的关键字完全精准匹配.比如,搜索”eric wang“,搜索结果可以包括Erica Watts等等.搜索效率十分高. 这里我们需 ...
- [2017BUAA软工]第三次博客作业:案例分析
第三次博客作业:案例分析 1. 调研和评测 1.1 BUG及设计缺陷描述 主要测试博客园在手机端上的使用情况. [BUG 01] 不能后退到上一界面(IOS) 重现步骤:打开博客首页中任意博文,点击博 ...
- C#获取当前路径的方法如下
1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径. 2. System.Environm ...
- hdu-题目:1058 Humble Numbes
http://acm.hdu.edu.cn/showproblem.php?pid=1058 Problem Description A number whose only prime factors ...
- 第97天:CSS3渐变和过渡详解
一.渐变 渐变是CSS3当中比较丰富多彩的一个特性,通过渐变我们可以实现许多炫丽的效果,有效的减少图片的使用数量,并且具有很强的适应性和可扩展性. 可分为线性渐变.径向渐变 1. 线性渐变 (grad ...
- bzoj1007-水平可见直线
题目 在平面直角坐标系上以\(y=kx+b\)的形式给出\(n (n\le 50000)\)条直线,求从无限高的地方能看到多少条直线. 分析 举几个例子发现我们要求的直线组成一个下凸的形状.所以我们只 ...
- [SCOI2016]幸运数字 线性基
题面 题面 题解 题面意思非常明确:求树上一条链的最大异或和. 我们用倍增的思想. 将这条链分成2部分:x ---> lca , lca ---> y 分别求出这2个部分的线性基,然后合并 ...
- 光荣之路测试开发面试linux考题之四:性能命令
Hi,大家好我是tom,I am back.今天要给大家讲讲linux系统一些性能相关命令. 1.fdisk 磁盘管理 是一个强大的危险命令,所有涉及磁盘的操作都由该命令完成,包括:新增磁盘.增删改磁 ...
- Hbase(五) hbase内部原理
一.系统架构 客户端连接hbase依赖于zookeeper,hbase存储依赖于hadoop client: 1.包含访问 hbase 的接口, client 维护着一些 cache(缓存) 来加快对 ...
- [持续更新][备份]GDB调试工具常用命令
一.前言 ACM开赛在即,得知dev-cpp不适用之后,不得不再次重拾gdb基本操作... 辗转Emacs和Code::blocks数次之后,感觉还是Emacs更适合我的风格,尽管配置稍显麻烦,但其开 ...