这是我参与【第五届青训营】伴学笔记创作活动的第十二天
书接上文
3.3 路径名解析
UNIX文件系统使用open、create或者stat系统调用,一步步地把多部分路径名转为i节点引用 NFS服务器不进行路径名转换,需要由客户以==交互==的方式完成路径名的翻译 客户向远程服务器提交数个lookup请求,将指向远程安装目录的名字的每一部分转换为句柄
3.4 服务器缓存
UNIX文件系统: 预先读:将最近使用的页面装入内存; 延迟写:将缓冲区被其他页占用时才将该页的内容写入磁盘,周期性同步写,如每隔30s将改写的页面写道磁盘上 NFS服务器的读缓存:和本地文件系统相同 NFS服务器的写缓存: 写透:在给客户发送应答前将应答写入磁盘(先不给你说,先写进去再说) 内存缓存:写操作的数据存储在内存缓存中,当系统收到commit操作后,在将数据写入从盘
3.5 客户缓存
为了减少传输给服务器的请求数量,NFS客户模块将read、write等操作的结果缓存起来。 保持一致性:客户轮询服务器会检查他们所用的缓存数据是否最新
-
基于时间戳的缓存块验证
-
缓存中的每个数据块被标上两个时间戳
-
Tc:缓存条目上一次被验证的时间
-
Tm:服务器上一次修改文件块的时间
-
有效性条件: (T- Tc < t) 或者(Tmclient = Tmserver)
若T(当前时间)- Tc < t为真,无须进一步判断;若为假,则需要从服务器获得获 得Tmserver值(对服务器应用getattr操作)并比较Tmserve与Tmclient。
- t: 更新时间间隔,选择t是对一致性和效率进行折衷,如文件3~30秒,目录30~60秒,目录更新风险更低。
减少对服务器进行getattr操作的几种方法: 当客户收到一个新的Tmserver值时,将该值应用于所有相关文件派生的缓存项。 将每一个文件操作的结果同当前文件属性一起发送,如果Tmserver值改变,客户便可用它来更新缓存中与文件相关的条目。 采用自适应算法来设置更新间隔值t,对于大多数文件而言,可以极大地减少调用数量。