1 引言
20 世纪 90 年代初,伯克利分校的一个由 John Ousterhout 教授和研究生 Mendel Rosenblum 领导的小组开发了一种新的文件系统,称为日志结构文件系统 。他们这样做的动机基于以下观察:
系统内存不断增长 :随着内存变大,内存中可以缓存更多数据。随着越来越多的数据被缓存,磁盘流量越来越多地由写入组成,因为读取由缓存提供服务。因此,文件系统的性能很大程度上取决于其写入性能。随机I/O 性能和顺序I/O 性能之间存在很大差距 :多年来硬盘传输带宽大幅增加;随着更多的位被封装到驱动器的表面,访问所述位时的带宽增加。然而,寻道和旋转延迟成本却缓慢下降;让廉价的小型电机更快地旋转盘片或更快地移动磁盘臂是一项挑战。因此,如果您能够以顺序方式使用磁盘,那么与导致寻道和旋转的方法相比,您将获得相当大的性能优势。现有文件系统在许多常见工作负载上表现不佳 :例如,FFS将执行大量写入来创建一个大小为一个块的新文件:一个用于新的inode,一个用于更新inode位图,一个用于包含该文件的目录数据块,一个用于更新目录inode,一个用于作为新文件一部分的新数据块,并且还需要对数据位图进行一次写入以标记数据块已被分配。因此,尽管 FFS 将所有这些块放置在同一块组内,但 FFS 需要进行许多短寻道和随后的旋转延迟,因此性能远低于峰值顺序带宽。文件系统不支持RAID :例如,RAID-4 和RAID-5 都存在小写入问题 ,即对单个块的逻辑写入会导致发生4 个物理I/O。现有文件系统不会尝试避免这种最坏情况的 RAID 写入行为。因此,理想的文件系统将关注写入性能,并尝试利用磁盘的顺序带宽。此外,它在常见工作负载上表现良好,这些工作负载不仅写出数据,而且还经常更新磁盘上的元数据结构。最后,它在 RAID 和单个磁盘上都能很好地工作。 Rosenblum 和 Ousterhout 推出的新型文件系统称为 LFS ,是日志结构文件系统 的缩写。当写入磁盘时,LFS 首先将所有更新(包括元数据!)缓冲在内存段中;当该段已满时,它会通过一次长的、顺序的传输写入未使用的磁盘部分。 LFS 永远不会覆盖现有数据,而是始终将段写入空闲位置。由于段很大,因此磁盘(或 RAID)可以得到有效利用,文件系统的性能也接近顶峰。