Sprite File System是早期比较有特色的分布式文件系统。与NFS相比,Sprite File System在服务器端和客户端都设置缓存,大大提高了系统性能。它通过简单的读写锁保证整个系统的缓存一致性,并且通过和虚拟存储部分交互,尽量多地缓存数据。本文主要调研了Sprite File System缓存的设计方案,以及讲SFS缓存一致性的思想移植到NFS的具体做法。
1 Sprite File System缓存设计
1.1 写回策略
缓存的对磁盘或服务器的写回机制有两个策略可以采用:写直达和延迟写。写直达(write through),就是当数据被缓存的话,就立即写回。它的优势在于稳定性,NFS采用这样的方式,缺点是写性能低下。延迟写(delay write-back),数据被更改时仅写入cache,在以后的某个时间再写回磁盘或服务器。它有两个优势,写的速度快,写回前可能被删除(在某一特定环境下),缺点是可靠性差。Sprite采用的时延迟写策略。
1.2 缓存一致性
1.2.1 NFS策略
NFS采用的策略:当文件关闭时所有的数据都写回服务器端;如果一个客户端打开了被其他客户端缓存的文件,所有的缓存都将被更新为新的版本。在顺序写共享(sequential write sharing)的情况下,一个被多个客户端共享的文件不会同时被不同的客户端进行读和写操作,每个客户端看到的都是文件的最新版本。但是,如果一个NFS或者 Andrew的文件被一些客户端同时打开,并且同时对文件进行了修改,系统将会警告用户不允许这种共享,我们称作实时写共享(concurrent write sharing)。
1.2.2 Sprite策略
Sprite支持两种共享模式。对于实时写共享的处理是,系统通过锁和其他机制的操作,使得所有客户端的读和写操作以一个合理的方式进行。
实时写共享:当一个文件被不同的用户打开,并且至少有一个用户对此文件进行写操作,那么这个文件被多个客户端实时写共享。Sprint通过禁止用户缓存此文件来解决这个问题,使得所有对此文件进行读和写的操作必须经过服务器。当服务器识别到某个文件非实时写共享即将发生时,它采取两项操作:(1)、它通知所有打开这个文件进行那个写操作的用户,告诉它们将所有的脏数据写回服务器。这样的客户端至多有一个。(2)、服务器通知所有已打开文件的用户&#