一种日志结构文件系统的设计与实现(一)
2010-03-01 16:54
507 查看
一种日志结构文件系统的设计与实现(一)
The Design and Implementation of a Log-Structured file systemMendel Rosenblum and John K.
Ousterhout
Electrical Engineering and Computer Sciences, Computer Science Division
University
of California
Berkeley
, CA
94720
mendel@sprite.berkeley.edu, ouster@sprite.berkeley.edu
邓辉
译
原文:
http://www.eecs.berkeley.edu/~brewer/cs262/LFS.pdf
摘要:
本文介绍了一种新的磁盘存储管理技术:日志结构文件系统
。在日志结构文件系统中,所有的修改都以顺序的方式写入一个类日志的结构中,因此既加快了写入的速度,同时也加快了崩溃恢复(
crash recovery
)的速度。日志是唯一存储在磁盘上的结构;其中包含了索引信息,可以提高从日志中读回文件内容的速度。为了提供快速写入所需要的“大块”(
large extents
)空闲磁盘空间,我们把日志分成段(
segments
)
,并用段清理器(
segments cleaner
)
来对分片严重的段中的有用信息进行压缩。我们进行了一系列的模拟测试以说明一个简单的、基于成本收益的清理策略的有效性。我们实现了一个日志结构文件系统原型:
Sprite LFS
;其在小文件写操作方面的性能比现有的
Unix
文件系统高一个数量级,在读以及大文件写方面也超过
Unix
的性能。即使把段清理的开销包括在内,
Sprite LFS
也可以在写入时使用到
70%
的磁盘带宽,而
Unix
文件系统一般只能使用到
5-10%
。
1、
介绍
在最近的10
年间,
CPU
的速度飞速增长,而磁盘的访问速度却增长缓慢。这个趋势很可能不会改变,因此,磁盘性能就成为越来越多应用的性能瓶颈。为了减少这个问题的影响,我们设计了一种新的磁盘存储管理技术,称为日志结构文件系统
,其使用磁盘的效率要比当前的文件系统高一个数量级。
日志结构文件系统的设计有一个假设前提:文件会被缓存在主内存中,因此增加内存大小会增加缓存在满足读请求方面的效率
[1]
。因此,写请求就成为磁盘的主要负载。日志结构文件系统把所有新的信息写入到磁盘中的一个称为日志
的顺序结构中。由于消除了几乎所有的寻道开销,因此这种方法可以极大地提升写入性能。同时,日志的顺序特性也加快了崩溃恢复的速度:一般来讲,当前的
Unix
文件系统在崩溃后必须得扫面整个磁盘以恢复数据的一致性,但是日记结构文件系统只需要检查日志中的最新部分即可。
日志并不是一个新的概念,很多近期的文件系统都已经把日志作为辅助结构融合于其中,用以加速写入和崩溃恢复
[2,3]
。但是,这些系统仅把日志用作临时存储;信息的持久存储地仍然为磁盘中的传统随机存取存储结构。相反,日志结构文件系统则把数据永久地存储在日志中:磁盘上只有这一个结构。日志中保存着索引信息,这样在读回文件内容时,其效率和当前文件系统不相上下。
为了使得日志结构文件系统高效运行,就必须得保证在写入新数据时,总有“大块”空闲磁盘空间可用。这是日记结构文件系统设计中所面临的最困难的挑战。在本文中,我们提出了一种基于被称为段
(
segments
)的“大块”的解决方案,其中段清理器
进程会不停地对分片严重的段进行压缩,重新产生出新的空闲段。我们使用一个模拟器来研究不同的清理策略,并发现了一个简单但是有效的基于成本收益的算法:把老一些的,变化慢一些的数据和新的、快速变化的数据分离,并在清理时对它们区别对待。
我们实现了一个称为
Sprite LFS
的日志结构文件系统原型,现在已经成为
Sprite
网络操作系统
[4]
产品的一部分。基准测试程序表明,对于小文件来说,
Sprite LFS
的原始写入速度超过
Unix
一个数量级以上。即使对于其他类型的测试,比如读取和大文件存取,
Sprite
LFS
也至少和
Unix
一样快(除了一种情况:文件随机写入后,再顺序读)。我们还度量了产品系统中清理工作的长期开销。总的来说,
Sprite LFS
在写入新数据时,可以利用到磁盘原始带宽的
65-75%
(其他的被用作清理)。而
Unix
系统只能把磁盘原始带宽的
5-10%
用于写入新数据;其他的时间都花费在寻道上面。
本文的剩余部分被分为
6
小节。第
2
节回顾了
1990’
s
时期计算机文件系统设计中的一些问题,第
3
节讨论了日志结构文件系统设计的可选方案,并导出了
Sprite LFS
的结构,主要关注于清理机制。第
4
节介绍
Sprite LFS
中的崩溃恢复。第
5
节基于基准测试程序和清理开销的长期度量对
Sprite LFS
进行评估。第
6
节比较了
Sprite LFS
和其他文件系统。我们在第
7
节进行了总结。
2
、
1990’
s
的文件系统设计
(待续)
相关文章推荐
- 一种日志结构文件系统的设计与实现(二)
- 一种日志结构文件系统的设计与实现(三)
- 一种Java日志系统框架的设计与实现(转)
- 一种Java日志系统框架的设计与实现
- 一种松耦合的分层插件系统的设计和实现
- “基于关键字匹配的文本过滤系统”配置文件的设计和实现(C/C++源码)
- C-链表实现,保存文件,评估-单项选择题系统课程设计---ShinePans
- ICE笔记(06):简单文件系统的设计、实现
- 系统操作日志设计-代码实现(转载)
- Linux MQ中间件/var/mqm文件系统结构与错误日志分析
- 操作系统实验四——文件系统的简单命令的设计与实现
- 系统操作日志设计-代码实现
- .NET 日志系统设计思路及实现代码
- 简洁常用权限系统的设计与实现(七):一种错误的不可行的构造树的方法
- 最大堆---实现一个简化的搜索提示系统。给定一个包含了用户query的日志文件,对于输入的任意一个字符串s,输出以s为前缀的在日志中出现频率最高的前10条query。
- 一种基于WiFi的室内定位系统设计与实现 _RFID世界网
- Linux下一个简单的日志系统的设计及其C代码实现
- 一种松耦合的分层插件系统的设计和实现
- ACE日志系统之本机日志系统的多文件实现
- 一种松耦合的分层插件系统的设计和实现