适用于数百万小文件的文件系统

适用于数百万小文件的文件系统

您会选择哪种 Linux 文件系统最佳速度在以下情况下:

  • 一亿个文件
  • 平均文件大小约为 2k
  • >95% 的读取访问率
  • 相当随机访问
  • 高并发(>100 个进程)

笔记:文件存储在深层次树中以避免目录过大。每个叶目录包含大约一千个文件。

您将如何对其进行基准测试?

答案1

在随机查找方面,Reiser 胜出,其次是 EXT4,然后是 JFS。我不确定这是否与目录查找完全相关,但似乎是一个指标。您必须为此进行自己的测试。EXT2 在文件创建时间方面胜过所有文件系统,可能是因为它没有日志,但 EXT4 仍然胜过除 Reiser 之外的所有文件系统,由于 hans reiser 的当前状态,您可能不想使用 Reiser。

您可能需要查看支持 NCQ 的驱动器,并确保您的安装已设置为使用它。在重度寻道下,它应该会提高速度。

最后,确保您的机器有大量的 RAM。由于文件不经常更新,如果有可用空间,Linux 最终会将大部分文件缓存到 RAM 中。如果您的使用模式正确,这将大大提高您的速度。

答案2

我同意安德鲁所说的大部分内容,但我建议赖泽4或更老的版本(但支持更好)雷泽文件系统。正如这些测试(以及 ReiserFS 的文档)所表明的那样,它正是为您询问的情况(大量小文件或目录)而设计的。我过去曾在 Gentoo 和 Ubuntu 上使用过 ReiserFS,没有任何问题。

至于 Hans Reiser 的状态,我不认为这是文件系统本身的代码或稳定性问题。Reiser4 甚至得到了 DARPA 和 Linspire 的赞助,因此,虽然我同意 Reiser 文件系统的进一步发展尚未确定,但我不认为这应该成为人们是否应该使用它的决定性因素。

答案3

我知道这不是对你问题的直接回答,但在这些情况下,我认为数据库可能更适合托管它。小文件可以以二进制格式存储在数据库表中并随时检索。使用这些文件的软件应该能够支持这一点……

答案4

根据我的经验,对于小文件,ext2 比 ext4 好很多。如果您不关心写入完整性,ext2 就很棒。例如,Subversion 创建了大量小文件,ext4 和其他文件系统 (XFS) 会因此而阻塞(运行一个 cron 作业,每半小时左右将数据从 ext2 rsync 到 ext4 几乎可以解决这个问题。)

运行这些命令可使 ext2 运行得更快(尽管大多数这些选项在崩溃后会使文件系统不稳定,除非您在崩溃前运行 sync)。这些命令对处理小文件的 ext4 几乎没有影响。

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure

相关内容