我正在使用安装在 的远程并行文件系统 (CephFS) /mnt/mycephfs/
,其中包含大量小文件 (200 GB+)。我的应用程序在这些文件上进行训练,但/mnt/mycephfs/
由于并行文件系统争用和网络延迟,直接从中读取速度很慢。
我正在寻找一个基于 FUSE 的解决方案,它可以:1. 获取应用程序所需的文件列表。2. 预取并缓存这些文件到本地挂载点(例如/mnt/prefetched/
),而无需复制整个远程存储(因为我的本地 RAM 和磁盘空间有限)。
期望的行为:• 如果文件(例如/mnt/mycephfs/file
)已缓存在/mnt/prefetched/file
,则应从缓存中提供该文件。• 如果未缓存,解决方案应获取该文件(以及预取列表中的其他文件),将其缓存在/mnt/prefetched/
,然后从那里提供该文件。
是否存在现有的工具或框架支持使用 FUSE 进行这种选择性缓存和预取?
我认为您不需要任何 FUSE(而且无论如何,FUSE 对高性能操作没有什么帮助)。
相反,只需将您的 Ceph 存储挂载在 /a 上,将您知道需要的路径复制到本地目录 /b,然后使用 OverlayFS,以 /a 作为后备存储,以 b/ 作为上层。
仅当文件不在 b/ 中时,读取才会转到 a/。
但在此之前,我会检查是否仅使用常规 Ceph 挂载并读取所有相关文件(但不将它们复制到任何地方,例如,只是执行
cat /a/filename > /dev/null
)就足以让内核透明地将其内容缓冲在 RAM 中。