注:本文译自LWN.net的介绍性文章《A general caching filesystem》,corbet发表于2004年9月1日。翻译这篇文章没有任何目的,纯粹为了周末脑力活动。文章内容可能已过时。在Linux上,VFS是更好的选择。
一个通用的缓存文件系统
【corbet 发表于2004年9月1号,Garriot Zhang翻译】
很多文件系统都与一个相关的慢速后台存储一起运行。网络文件系统依赖于一个网络连接和一个远程服务器;从一个这样的文件系统中读取文件明显会比从本地读取慢。使用慢速本地介质(比如CDROM)的文件系统也会比那些使用快速硬盘的慢。正因为这个原因,缓存从这些文件系统获得的数据到本地硬盘成为一种必需。
然而,Linux却没有一种机制能让文件系统执行本地磁盘缓存。或者,至少它过去一直没有这样一种机制。David Howells的CacheFS补丁改变了这种状况。
使用CacheFS,系统管理员可以在块设备上分配一个分区用于文件缓存。CacheFS会提供一个供其他文件系统使用的接口。其中有一个基本的注册接口,和一个相当精致的索引分配机制。不同的文件系统用不同的方式来创建文件标志符,所以CacheFS尽可能地减少强加的策略,让这些文件系统代码想干什么就干什么。最终,当然,有一个接口用于缓存文件分页,记录改动,从缓存中移除分页,等等。
CacheFS的目的不是缓存整个文件;它必须能应付这种可能:有人想操作一个比整个缓存还要大的文件。实际上,它也不能保证能缓存所有东西;它必须能执行自己的空间管理,而且就算是缺少真正的缓存设备所有东西也能工作。这对大多数文件系统来说这都不应该是一个障碍;就本质而言,文件系统首先必须要准备好处理他们文件的真正来源。
CacheFS的目的是与其他文件系统协作,而不是作为一个独立文件系统使用。它的分区必须在使用前挂载,CascheFS使用挂载点向被缓存的文件系统提供一个视图。系统管理员甚至能通过简单地从被挂载的文件系统中删除文件的方式来手动地从缓存中将他们移除。
在用户和真正的文件系统中间插入一个缓存,明显的增加了一个可能导致数据丢失的破坏点。CacheFS通过缓存内容日志来处理这个问题。如果发生意外停机的情况,CacheFS可以重复执行所有的丢失操作直到所有的服务恢复工作。
现在,CacheFS只被AFS文件系统使用,但是兼容其他系统的工作也在进行中。NFS更是会从CacheFS得到很大好处,特别是当NFSv4开始使用的时候(NFSv4的设计允许本地缓存)。期待这个补丁能相对容易地被主流内核接受。如果想获得更多信息,请看补丁中的文档文件。












