是否可以为文件系统提供缓存首选项?

是否可以为文件系统提供缓存首选项?

我有一个目录 ( /srv/data),其中包含大量 (20,000,000) 个小文件 (4-40KB)。这些文件都位于 的子目录中/srv/data,其中子目录名称和文件名的串联形成 UUID。例如,UUID833ac041-28c4-4ea4-9bac-81fe781732b4将映射到路径/srv/data/83/3a/c0/41-28c4-4ea4-9bac-81fe781732b4。对于每个子目录级别使用 2 个十六进制数字,扇出为 255。例如, 中有 255 个目录/srv/data,每个目录最多有 255 个子目录,并且每个目录最多有 255 个子目录。

是否可以告诉内核为这些文件或这些文件的子集提供缓存首选项?

例如,“嘿 Linux,缓存尽可能多的文件/srv/data。如果您不能将所有文件都放入内存中,请尽可能多地缓存,并且不要担心此目录之外的任何文件。如果您可以容纳它全部在内存中,然后随意使用剩余的内容来缓存此目录之外的文件。”

答案1

sysctl vm.vfs_cache_pressure=10可能有帮助。为了加快处理数千个小文件的速度,请在缓存中保留更多的目录项和索引节点,而不是文件的内容。最大的开销是在硬盘上定位小文件,这比从精确位置读取几千字节需要更多的读取操作(更多时间)。当内核已经知道存储在缓存中的物理位置时,文件管理将明显更快。

相关内容