Con*_*ion 5 linux performance filesystems hard-drive
根据Facebook 的 Haystack 上的这篇论文:
"由于 NAS 设备管理目录元数据的方式,将数千个文件放置在一个目录中的效率极低,因为目录的块图太大而无法被设备有效缓存。因此,通常会发生 10 次以上的磁盘操作检索单个图像。将目录大小减少到每个目录数百个图像后,生成的系统通常仍会产生 3 个磁盘操作来获取图像:一个将目录元数据读入内存,第二个将 inode 加载到内存中,第三次阅读文件内容。 ”
我曾假设文件系统目录元数据和 inode 将始终由操作系统缓存在 RAM 中,并且文件读取通常只需要 1 个磁盘 IO。
这篇论文中概述的“多个磁盘 IO 读取单个文件”问题是 NAS 设备独有的,还是 Linux 也有同样的问题?
我计划运行一个 Linux 服务器来提供图像。有什么办法可以最大限度地减少磁盘 IO 的数量 - 理想情况下确保操作系统将所有目录和 inode 数据缓存在 RAM 中,并且每个文件读取只需要不超过 1 个磁盘 IO?
sys*_*138 12
这取决于正在使用的文件系统。一些文件系统比其他文件系统更擅长处理大目录问题,是的,缓存确实会影响使用。
旧版本的 EXT3 在处理包含数千个文件的目录时有一个非常糟糕的问题,这个问题在引入 dir_indexes 时得到了修复。如果不使用 dir_index,从包含数千个文件的目录中检索文件可能会非常昂贵。在不知道细节的情况下,我怀疑这就是文章中的 NAS 设备所使用的。
现代文件系统(最新的 ext3、ext4、xfs)比过去更好地处理大目录问题。一些 inode 可能会变大,但通常用于索引目录的 b 树可以非常快速地使用fopen。
我曾假设文件系统目录元数据和 inode 将始终缓存在 RAM 中
是的,但你没有学会正确阅读。在您自己引用的段落中,它清楚地说明了:
由于 NAS 设备管理目录元数据的方式,将数千个文件放置在一个目录中的效率极低,因为目录的块图太大而无法由设备有效缓存。
电器是低端硬件。太多元数据 + 太少 RAM = 无法缓存。
如果您运行大型文件服务器,请购买一台,而不是低端设备。