Linux 的最佳文件系统,可处理数以万计的文件,且不会造成系统 I/O 过载

Linux 的最佳文件系统,可处理数以万计的文件,且不会造成系统 I/O 过载

众所周知,某些 AMD64 Linux 在高磁盘 I/O 负载下容易失去响应(请参阅Gentoo 论坛:AMD64 系统在磁盘访问期间运行缓慢/无响应(第 2 部分)),很不幸有这么一个。

我想将/var/tmp/portage/usr/portage放入单独的分区,但该为它选择什么 FS?

要求:

* for journaling, performance is preffered over safe data read/write operations
* optimized to read/write 10000 of small files 

候选人:

* ext2 without any journaling
* BtrFS

在 Phoronix 测试中,文件系统已经展示了良好的随机访问性能(比 XFS 好很多,因此 CPU 占用率可能更低)。但是,使用 XFS 解包操作似乎更快,但测试表明,将内核树解包到 XFS 会使我的系统反应变慢 51%,无论是否有任何重新优化的进程和/或调度程序。

为什么没有 ReiserFS?Google 了一下 (q: reiserfs ext2 cpu): 1 Apr 2006 ... Surprisingly, the ReiserFS and the XFS used significantly more CPU to remove file tree (86% and 65%) when other FS used about 15% (Ext3 and ... 现在一样吗?

答案1

Ext4、Btrfs、Reiser4、Reiser3(带有 notail 选项)。XFS 不适合元数据密集型操作(例如 rm 大量文件)。

答案2

您实际上不需要对这些目录进行日志记录(因为它们可以轻松恢复),因此无论您选择哪个文件系统,您都可以禁用日志记录。

当我使用 Gentoo 时,我为 /usr/portage 使用 ReiserFS 3。原因很简单:它非常快,而且在处理大量非常小的文件时,与其他文件系统相比,它节省了大量空间。(当然,使用“notail”选项会消除这一好处)我确实注意到,随着时间的推移,该文件系统的性能会下降。这是因为 /usr/portage 上的写入/删除非常频繁,而且无论您使用什么文件系统,一段时间后碎片都会使其变慢。所以有时我只是从 /usr/portage 中获取一个 targz,重新格式化分区,然后再次解压 targz...这会为您提供一个没有碎片的新 /usr/portage。

我不知道现在是否还会使用 ReiserFS... 我可能会选择 ext4 (禁用日志功能) 或 ext2。

关于 /var/tmp/portage... 如果您有足够的 RAM,您可能希望将其映射到 tmpfs 上。这样,它将尽可能多地使用 RAM,但当数据无法装入 RAM 时,就会转到交换区。

答案3

与其他操作系统相比,Ext2 速度较慢,处理大量文件时也会出现问题。我强烈建议不要使用它 - 关闭日志功能的 ext4 则完全是另一回事。

就我个人而言,对于包含大量小文件的文件系统,我倾向于使用 Reiserfs - 它专门针对此类操作进行了优化。但我主要使用 Web 服务器 - 访问主要是只读(我使用 ext4 作为数据库)。它使用 CPU 的速率并不是什么大问题 - 事实上,更高的 CPU 是一个很好的指标,表明完成操作所需的实际文件 I/O 更少!

查阅原始文章 - 您引用的评论特别涉及大文件的行为 - 我不是 Gentoo 专家,但我认为这与 portage 无关。

相关内容