什么是开发人员构建最快的文件系统?


10

我正在组装一个Linux盒子,它将充当持续集成构建服务器。我们将主要构建Java东西,但是我认为这个问题适用于任何编译语言。

我应该使用什么文件系统和配置设置?(例如,我知道我不需要花时间!)构建服务器将花费大量时间读取和写入小文件,并扫描目录以查看哪些文件已被修改。

更新:在这种情况下,数据完整性是低优先级;这只是一台构建机器……最终的工件将被压缩并存档在其他地方。如果构建机器上的文件系统损坏并丢失了所有数据,我们可以擦除并重新映像;构建将继续像以前一样运行。



请阅读gravyface给出的链接,但也请务必留出要进行构建的分区,然后可以测试此处获得的答案。如果你有没有钱,看你能不能使用磁盘(使用RAMDISK,或者tmpfs的放弃 cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
becomingwisest

Answers:


6

使用ext4fs作为基本文件系统,并提供一些加速选项,例如

noatime,data=writeback,nobh,barrier=0,commit=300

然后,union在其上安装一个tmpfs ramdisk,以便在构建过程中写入的文件获得ramdisk的好处。在构建结束时,可以更改构建过程以将生成的二进制文件从tmpfs中移出,或者将tmpfs合并回ext4fs中,然后再进行卸载。


尽管速度更快,但值得注意的是:barrier=0从Arch Wiki:“在断电情况下无法保证磁盘无法正确写入高速缓存时禁用障碍会导致严重的文件系统损坏和数据丢失。”
ideaman42

6

最快的文件系统?将tmpfs从可用RAM中装入,并进行noatime设置。

仅当您具有检出构建源树所需的一切的过程(因为重新启动时tmpfs文件系统的内容将消失)并且源和对象都位于可用RAM的合理位置时,此方法才可行(还剩下足够的钱来运行您的编译器和链接器而无需交换)。那就是说,您无法击败为了提高速度而在RAM中工作。


这是一个很好的答案,但不是我要找的答案。那是我无法承受的更多内存。(也许几年后,RAM的价格会降低一半!)
Dan Fabulich 2011年

@Dan-您的源代码树有多大?:-)
voretaq7'2

源代码树不是很大,但是构建的对象和测试文件太大而无法装入内存而无需交换。
Dan Fabulich 2011年

2

我可以补充一下Michael Dillon的答案,您可以用很少的选择创建ext4文件系统:

mkfs.ext4 -O dir_index,extent -i 8096 /dev/<disk>


dir_index
    Use hashed b-trees to speed up lookups in large directories.

extent 
    Instead of using the indirect block scheme for storing the location of data blocks in an inode, use extents instead.  This is a  much  more  efficient  encoding  which  speeds  up filesystem access, especially for large files.

-i 8096为您提供每个大小更多的索引节点,这很有用,因为构建环境会创建许多文件。


0

对于源,最好具有即时压缩支持,即Reiser4Btrfs。尽管我听说有人大量且愉快地使用这两种FS,但两者都尚未“用于生产”。:-)

下一个选择(我通常这样做)是Reiser3,而不是Ext3。EXT3可以是有点快时下,但Reiser3不具有i节点格式的时间限制,支撑件在线“数据=”选项的改变。它具有“尾部”支持,可以收紧更小的文件,但是,如果您担心速度,可以“不尾部”。

对于“很多小文件”来说,XFS和JFS都会很麻烦,特别是如果您需要rm'ing它们的话。

(忘了提及EXT4:是的,它甚至比EXT3还要快。但是上述EXT3的所有局限性也是EXT4的)。


0

您描述的操作提供了一些关键的提示,说明理想的文件系统需要能够执行的操作:

  • 在构建过程中大规模随机访问r / w。
  • 许多文件会在短期内更新,因此快速的元数据操作至关重要。
  • 在可能非常繁重的文件系统上有效处理许多小文件。
  • 足够成熟,以免在不常见和晦涩的情况下冒着数据丢失的风险。

Btrfs和Ext4是上面的三个,第四个是有问题的。Ext4可能已经足够成熟,但是btrfs尚未完成烘烤。noatime有助于提高元数据操作的效率,但是当您创建大量新文件时,仍然需要元数据操作来快速地尖叫。

那时,基础存储开始成为一个因素。XFS元数据操作倾向于集中在几个块中,这可能会使操作紧张。Ext样式的文件系统最好使元数据更接近其描述的数据。但是,如果您的存储足够抽象(您正在VPS上运行,或者已连接到SAN),那就没关系了

每个文件系统几乎没有提速,可以加快速度以获取更多的百分点。基础存储的性能如何将极大地影响您将看到的收益。

用存储的话来说,如果存储中有足够的I / O操作开销,那么文件系统的低效率就不再那么重要了。如果您将SSD用作构建分区,那么选择文件系统的重要性就不如您更习惯使用文件系统。


我实际上并不那么在乎数据丢失。(更新该问题以进行澄清。)我的意思是,数据丢失不是一件好事,但我没有存储关键数据。我正在处理大量文件,并将数据移到其他地方。如果我负担得起RAM,我将使用tmpfs作为上面建议的voretaq7。
Dan Fabulich 2011年

0

对于很多小文件,我建议在ext3,xfs,jfs ...上使用Reiser,尽管我听说ext4比以前的版本更适合这种访问方式。

Reiser将大量文件结构推入了inode树-因此,在处理小文件时,它确实工作得很好。

但是,与通过拥有足够的物理内存来有效地缓存/缓冲所获得的收益相比,领先的文件系统之间的行为差​​异相对较小。

并扫描目录以查看哪些文件已被修改。

这是解决问题的a脚方法,尽管它相对简单。如果那很重要,请考虑编写一个inotify处理程序来索引mod。

OTOH,如果您使用的是闪存固态硬盘(这将使您的寻道时间非常短),我建议您使用fs来延长寿命,从而更有效地分配写入数据-例如JFFS2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.