第 10 章 FS-Cache
FS-Cache 是一种永久的本地缓存,可供文件系统用于通过网络检索数据并将其缓存在本地磁盘上。这有助于最小化网络流量,以便用户从通过网络(例如 NFS)挂载的文件系统来访问数据。
下图显示了 FS-Cache 的工作原理:
图 10.1. FS-Cache 概述
[D]
FS-Cache 旨在对系统的用户和管理员尽可能透明。与 Solaris 上的 cachefs 不同,FS-Cache 允许服务器上的文件系统直接与客户端的本地缓存交互,而无需创建过度挂载的文件系统。使用 NFS 时,挂载选项指示客户端挂载启用了 FS-cache 的 NFS 共享。
FS-Cache 不会改变通过网络进行的文件系统的基本操作 - 它只是为文件系统提供一个永久的、可以缓存数据的地方。例如,客户端仍然可以挂载 NFS 共享,无论是否启用了 FS-Cache。此外,缓存的 NFS 可以处理不适合缓存的文件(无论是单独的还是全部的),因为文件可以部分缓存,且无需事先完全读取。FS-Cache 还会隐藏发生在客户端文件系统驱动程序的缓存中的所有 I/O 错误。
要提供缓存服务,FS-Cache 需要 缓存后端。缓存后端是配置为提供缓存服务(例如 cachefiles)的存储驱动程序。在这种情况下,FS-Cache 需要一个挂载的基于块的文件系统,它支持 bmap 和扩展属性(如 ext3)作为其缓存后端。
FS-Cache 无法任意缓存任何文件系统,无论是通过网络还是通过其他方式:必须更改共享文件系统的驱动程序,以允许与 FS-Cache、数据存储/检索以及元数据设置和验证进行交互。FS-Cache 需要来自缓存文件系统的 索引密钥 和 一致性数据 来支持持久性:索引密钥将文件系统对象与缓存对象匹配,一致性数据确定缓存对象是否仍然有效。
注意
在 Red Hat Enterprise Linux 7 中,默认情况下不安装 cachefilesd 软件包,需要手动安装。
10.1. 性能保证
FS-Cache 不 保证性能的提高,但它通过避免网络拥塞来确保一致的性能。使用缓存后端会导致性能下降:例如,缓存的 NFS 共享会为跨网络查找添加磁盘访问。虽然 FS-Cache 尝试尽可能异步,但有一些同步路径(例如读取)是不可能的。
例如,使用 FS-Cache 通过其它未装载的 GigE 网络在两台计算机之间缓存 NFS 共享,将不会在文件访问方面显示出任何性能改进。相反,通过服务器内存而不是本地磁盘可以更快地满足 NFS 请求。
因此,使用 FS-Cache 是各种因素之间的 折衷。例如,如果使用 FS-Cache 来缓存 NFS 流量,它可能会减慢一点儿客户端的速度,但通过满足本地的读请求而无需消耗网络带宽,可以大量减少网络和服务器加载。