本页面详细介绍了 Cloud Storage FUSE 可用的缓存选项,以及如何配置每种缓存类型。
为了帮助提高数据检索的性能,Cloud Storage FUSE 提供四种类型的可选缓存:
注意事项
启用文件缓存、统计信息缓存、类型缓存或列表缓存可以提高性能,但会降低一致性,这通常发生在您使用多个更改频率较高的客户端访问同一存储桶时。为减少对一致性的影响,我们建议将存储桶装载为只读。如需详细了解缓存行为,请参阅 GitHub 上的 Cloud Storage FUSE 语义文档。
如果文件缓存条目尚未根据其存留时间 (TTL) 过期,并且文件位于缓存中,则对该文件的读取操作将从本地客户端缓存传送,而不会向 Cloud Storage 发出任何请求。
如果文件缓存条目根据其 TTL 过期,则系统首先对 Cloud Storage 发出“
GET
元数据”调用,如果文件不在缓存中,则从 Cloud Storage 检索文件。这两种操作都会受到网络延迟的影响。如果元数据条目已失效,但文件在缓存中,并且其对象世代没有更改,则只有在发出“GET
元数据”调用来检查数据是否有效之后,才会从缓存中传送该文件。如果 Cloud Storage FUSE 客户端修改缓存文件或其元数据,则文件会立即失效,并在同一客户端进行的后续读取中确保一致性。但是,如果不同的客户端访问同一文件或其元数据,并且缓存了其条目,则将读取文件或元数据的缓存版本而不是更新版本,直到该特定客户端的 TTL 设置使该文件无效。
为避免缓存抖动,请确保整个数据集不超过缓存容量。此外,请考虑缓存介质可以提供的最大容量和性能。如果达到预配缓存的最大性能和/或容量限制,则直接从 Cloud Storage 读取会很有帮助,因为限制比 Cloud Storage FUSE 高得多。
缓存数据的读取路径
Cloud Storage FUSE 缓存会在将重复读取提取到缓存后加快这些读取的速度。在首次读取以及缓存未命中时,都会直接转到 Cloud Storage,且受到正常 Cloud Storage 网络延迟时间的限制。 如需提高首次读取性能,请参阅预先填充元数据缓存。
文件缓存概览
Cloud Storage FUSE 文件缓存是基于客户端的读取缓存,可从由本地文件系统提供支持的缓存存储空间中传送重复文件读取。如需详细了解文件缓存,请参阅文件缓存页面。
并行下载
启用文件缓存后,Cloud Storage FUSE 2.12 及更高版本会自动启用并行下载。并行下载功能可加快大小超过 1 GB 的大型文件(包括首次读取)的读取性能,它使用多个工作器并行下载文件,并将文件缓存目录用作预提取缓冲区。并行下载可用于优化人工智能 (AI) 和机器学习 (ML) 工作负载(例如模型服务、检查点恢复和大型对象训练)的性能。如需详细了解并行下载,请参阅并行下载。
配置文件缓存
如需了解如何配置文件缓存,请参阅使用 Cloud Storage FUSE 文件缓存。
统计信息缓存概览
Cloud Storage FUSE 统计信息缓存是用于对象元数据的缓存,可提高特定于文件属性(例如大小、修改时间或权限)的操作的性能。利用统计信息缓存,可通过使用缓存的数据执行操作(而不是向 Cloud Storage 发送统计信息对象请求)来缩短延迟时间。如需详细了解统计信息缓存,请参阅 GitHub 上的语义文档。
配置统计信息缓存
统计信息缓存默认处于启用状态,并且可以使用 Cloud Storage FUSE 配置文件进行配置。缓存的最大大小可通过以下方法之一进行控制:
如需详细了解用于配置统计信息缓存的默认值和建议值,请参阅 Cloud Storage FUSE CLI 选项和配置文件页面。
配置负统计信息缓存
Cloud Storage FUSE 还提供负统计信息缓存功能,可让您为不存在的文件或负结果的统计信息缓存条目设置 TTL。负统计信息缓存的 TTL 可通过以下方法之一进行控制:
类型缓存概览
Cloud Storage FUSE 类型缓存是元数据缓存,可加快用于检查文件或目录是否存在的特定元数据操作的性能。使用类型缓存可通过在本地存储相关信息,减少为检查文件或目录是否存在而向 Cloud Storage 发出的请求数量,从而缩短延迟时间。如需详细了解类型缓存,请参阅 GitHub 上的语义文档。
配置类型缓存
类型缓存默认处于启用状态,并且可以使用 Cloud Storage FUSE 配置文件或 Cloud Storage FUSE CLI 进行配置。缓存的最大大小通过以下方法之一进行控制:
如需详细了解类型缓存和建议值,请参阅 CLI 选项或配置文件页面。
缓存的 TTL 可通过以下方法之一进行控制:
列表缓存概览
Cloud Storage FUSE 列表缓存适用于目录和文件列表或 ls
响应,可提高列表操作速度。对于在执行过程中重复显示完整目录列表的工作负载(例如 AI/机器学习训练运行),列表缓存尤其有用。
列表缓存保留在页面缓存的内存中,由内核根据内存可用性进行控制,而状态和类型缓存则保留在机器的内存中,由 Cloud Storage FUSE 控制。
配置列表缓存
您可以使用以下方法之一启用列表缓存:
如需启用和配置列表缓存,请参阅 Cloud Storage FUSE 配置文件或 Cloud Storage FUSE CLI 选项页面。
配置文件、统计信息和类型缓存失效
以下部分介绍了如何为所有缓存类型配置缓存失效。
对于文件、统计信息和类型缓存,请使用以下方法之一来指定缓存元数据的存留时间 (TTL)(以秒为单位),即从 Cloud Storage 中提取到过期并需要刷新之间的时间:
如果指定的值大于 0
,则文件缓存的元数据仅在您指定的时间内有效。对于文件缓存,我们建议您在平衡一致性需求的同时,根据两次重复读取之间的预期时间来增加该值。根据数据更改的重要性和频率,我们建议您将该值设置为您的工作负载允许的最高值。当元数据条目无效时,系统将从 Cloud Storage 查询后续读取操作。
除了接受表示缓存的元数据过期并需要刷新的特定 TTL 值(以秒为单位)之外,您还可以使用以下值来指定文件的读取方式:
0
:通过向 Cloud Storage 发出GET
元数据调用来确保读取包含最新数据的文件,该调用可检查从中传送数据的文件,以确保缓存保持一致。如果缓存中的文件是最新的,则会直接从缓存传送。指定0
以外的值可能会导致性能降低,因为必须始终先调用 Cloud Storage 来优先检查元数据。如果文件位于缓存中并且未更改,则在发出“GET
元数据”调用后从缓存中传送文件并保持一致性。-1
:确保始终从缓存中读取文件(如果有),而不检查一致性。在不检查一致性的情况下传送文件可能会提供不一致的数据,只能临时用于数据未更改的作业中运行的工作负载。例如,使用-1
值对于机器学习训练很有用,其中系统会跨多个周期读取相同的数据而不进行任何更改。
列出缓存失效操作
通过使用以下任一方法指定大于 0
的值来设置列表缓存失效:
--kernel-list-cache-ttl-secs
CLI 选项file-system:kernel-list-cache-ttl-secs
字段
目录列表响应会保留在内核的页面缓存中,并在您指定的时间内保持有效。如果您指定值 -1
,Cloud Storage FUSE 会停用列表缓存到期时间,并在缓存可用时从缓存中返回列表响应。指定值 0
会停用列表缓存。