在以下情况下,您将select哪种Linux文件系统以获得最佳速度 :
95%的阅读权限
注意:这些文件存储在深层次树中以避免大型目录。 每个叶目录包含大约一千个文件。
你会如何基准?
这里有一些比较所有主要的Linux FS和Bonnie ++的结果,你可以用它作为起点。
在随机寻找Reiser胜方面,其次是EXT4,其次是JFS。 我不确定这是否与目录查找完全相关,但它似乎是一个指标。 你将不得不为自己的testing做具体的事情。 EXT2比文件创build时间更胜一筹,可能是因为缺less日志,EXT4除了Reiser之外还有其他的一些,除了Reiser,由于hans目前的状态,你可能不想使用它。
您可能需要查看支持NCQ的驱动器,并确保已安装安装程序以使用它。 在沉重的追求下,应该提高速度。
最后,确保你的机器有一吨的RAM。 由于这些文件并不经常更新,所以如果有空闲空间的话,linux最终会caching大部分内存。 如果你的使用模式是正确的,这将给你一个巨大的速度提升。
我同意安德鲁说的大部分内容,除了我会推荐Reiser4或更老的(但是更好的支持) ReiserFS 。 由于这些testing(和ReiserFS的文档)指出,它是精心devise的,你正在问的情况(大量的小文件或目录)。 Gentoo和Ubuntu过去使用过ReiserFS,没有任何问题。
至于Hans Reiser的地位,我不认为这是代码或文件系统本身稳定性的问题。 Reiser4甚至得到了DARPA和Linspire的赞助,所以我同意Reiser文件系统的进一步发展是不确定的,我不应该决定是否应该使用它。
我知道这不是对你的问题的直接回答,但在这些情况下,我认为一个数据库可能更适合主持这个。 小文件可以以二进制格式存储在数据库表中,并可以被检索。 正在使用这些文件的软件应该能够支持这个虽然…
Unix StackExchange上的某个人创build了一个基准testing(与源代码)来testing这种情况:
问:什么是用于存储大量小文件(HDD,而不是SSD)的最高性能的Linux文件系统?
最好的阅读performance似乎来自ReiserFS。
根据我的经验,ext2将小文件从ext4中取出。 如果你不关心写作的完整性,那很好。 例如,Subversion会创build很多很多很多的小文件,ext4和其他文件系统(XFS)会扼杀(运行一个cron作业,每隔半小时从ext2将数据同步到ext4,几乎可以解决这个问题)。
运行这些命令使得ext2更快(即使这些选项中的大多数会在崩溃之后使文件系统不稳定,除非在崩溃之前运行同步)。 这些命令对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
我猜ext3(或ext4),也许JFS将是很好的解决scheme。 我会对ext4和btrfs保持警惕(文件系统是棘手的 – 如果你想使用最新的,最新的东西准备备份)。
还有各种参数,你可以调整在mkfs时间调整文件系统的喜好。
我肯定会build议对 XFS。 不是因为它是一个糟糕的文件系统,而是创build/删除是一个昂贵的操作。
为了避免目录search出现问题,请使用智能命名scheme,例如:
<first letter of id>_<last letter of id>/<id>
或类似的,更复杂的scheme。 这将加快您的目录search,从而整体访问速度。 (这是一个旧的unix技巧,从V7回来我认为)
大多数FS将在一个目录中扼杀超过65K的文件,我认为ext4仍然如此。 Reiser文件系统没有这个限制(为了确保这一点,mp3.com的人们付了钱)。 不知道其他什么,但这是ReiserFS的使用情况之一。