粗略翻译了一下 Filesystems (ext3, reiser, xfs, jfs) comparison on Debian Etch 这篇文章。
有很多的关于linux文件系统比较的文章,但是他们大部分都是anecdotal的,都是基于人为的一些任务或者都是在老的内核下面完成的。这篇评论是基于11项真实存在于一台硬件比较老(奔腾 II/III ,EIDE硬盘)的文件服务器上的任务。
为什么会有另外一个测试?
我发现两个quantitative和reproductible(可重现的?)的测试,在使用2.6.x内核的时候(参见参考文章)。Benoit(2003)在一台有512M内存的奔腾II 500的服务器上使用大文件(超过1GB)进行了12次测试。这些测试非常有用,但是结果已经太老了(2.6.0内核),并且他们都是应用于操作专有大文件的(比如多媒体、科学、数据库)。
Piszcz(2006)进行了21项测试,在一台有768M内存,400G EIDE133硬盘的奔腾III 500的机器上模拟了一个变化的文件操作。到目前为止,这些测试似乎是在2.6内核上面最全面的了。然而,因为很多测试都是“人为”的(例如,复制和删除10000空的目录,创建10000文件,递归的分割文件),所以这些或许很难为现实世界带来什么结论。
所以,这个测试的目标就是完成Piszcz(2006)的一些结论,通过在小型商务文件系统服务器(参考测试描述)上面的实际操作。
测试设置
* 处理器 : Intel Celeron 533
* 内存 : 512MB RAM PC100
* 主板 : ASUS P2B
* 硬盘 : WD Caviar SE 160GB (EIDE 100, 7200 RPM, 8MB Cache)
* 控制器 : ATA/133 PCI (Silicon Image)
* 操作系统 Debian Etch (kernel 2.6.15), distribution upgraded on April 18, 2006
* 其它不需要的服务都关掉了 (cron,ssh,saMBa,etc.)
* 文件系统 Ext3 (e2fsprogs 1.38)
* ReiserFS (reiserfsprogs 1.3.6.19)
* JFS (jfsutils 1.1.8)
* XFS (xfsprogs 2.7.14)
对于选择的测试的描述
操作大文件(ISO文件,700M)
* 将ISO文件从第二块硬盘复制到测试硬盘上面。
* 在测试硬盘上面重新复制ISO文件。
* 删除两个复制的ISO。
操作一个目录树(7500个文件,900个目录,1.9G)
* 将目录树从第二块硬盘复制到测试硬盘上面。
* 在测试硬盘上面重新复制目录树。
* 删除两个复制的目录树。
在目录树中操作
* 用递归方式列出目录树中的所有内容,并且保存到测试硬盘上面。
* 在目录树中查找匹配指定通配符的文件。
关于文件系统的操作
* 创建文件系统(mkfs)(所有文件系统都使用默认设置创建)。
* 挂载文件系统。
* 卸载文件系统。
11项测试(从创建文件系统到卸载文件系统)的顺序是按照一个Bash脚本来运行的,总共运行三次(会报告平均时间)。每个序列大概需要7分钟。完成测试的时间,cpu占用百分比等都是通过GNU time utility(1.7版本)来计算的。
测试结果
分区容量
初始的(在创建文件系统之后)和剩余的(在删除所有文件之后)分区容量是使用可使用的blocks除以整个分区的blocks计算出来的。EXT3的初始分区容量最差,其它的都几乎可以使用最大的分区容量。有趣的是,Ext3和ReiserFS剩余分区容量和初始分区容量是一样的,JFS、XFS损失了0.02%的分区容量,(建议这些文件系统可以动态增长,但是不要在删除文件之后完全恢复他们的初始状态(和大小)。)


























 初始分区容量损失
Ext392.77%0
ReiserFS99.83%0
JFS99.82%0.02%
XFS99.95%0.02%

结论:想要使用分区的最大容量,请选择ReiserFS、JFS、XFS。
文件系统的创建,挂载和卸载
为20G的分区创建文件系统。














































 创建时间挂载时间卸载时间创建时CPU占用挂载时CPU占用卸载时CPU占用
Ext314.7s0.2s0.2s|6-9%37%
ReiserFS2.2s2.3s0.4s59%(Lo)|14%
JFS1.3s0.2s0.2s74%(Hi)|27%
XFS0.7s0.5s0.5s||45%

结论:为了快速创建、挂载和卸载文件系统,请使用JFS或者XFS。
操作大文件(ISO文件,700M)



















































第一次复制第二次复制删除文件第一次复制CPU占用第二次复制CPU占用删除时CPU占用minor page faults
Ext338.2s37.3s2.5s46-51%38-50%10%|
ReiserFS41.8s43.9s1.5s||49%661
JFS35.1s39.4s0.02s||10%|
XFS34.8s33.1s0.02s||10%600

结论:为了快速操作大文件,请使用JFS或者XFS。如果你需要最小的cpu占用,请使用JFS。
操作目录树(7500个文件,900个目录,1.9G)



















































第一次复制第二次复制删除第一次复制CPU占用第二次复制CPU占用删除时CPU占用minor page faults
Ext3158.3s120s22s27-36%|15%14000-1490
ReiserFS172.1s136.9s8.2s|45%(Hi)86%5843
JFS180.1s151s12.5s|29%(Lo)15%14000-1490
XFS166.1s135.2s10.5s||65%14000-1490

结论:为了快速操作大文件树,请选择Ext3或者XFS。其它作者的测试中显示,ReiserFS对于大量的小文件有优势。然而结果显示,操作包含上千的大小变化的文件(10K到5M)时建议使用Ext3或者XFS,他们或许更适合实际使用。JFS有最下的CPU占用,但是需要指出的是在操作大量文件的时候他也有值得注意的较高的延迟。
在之前的目录树中列表目录和文件查找









































列表目录文件查找列表目录CPU占用文件查找CPU占用minor page faults
Ext32.5s4.6s35%6%704-712
ReiserFS1.4s0.8s71%36%1991
JFS3.1s5.0s35%6%704-712
XFS1.8s2.8s70%10%704-712

结论:根据这些测试,ReiserFS和XFS操作速度快,但是有比较多的CPU占用,Ext3和JFS操作速度慢,但是有较少的CPU占用。XFS似乎是最好的选择,他有相对比较快的查找速度,中等的cpu占用,以及可以接受的page faults比率。
综合结论
这些结果重现了Piszcz(2006)关于Ext3是最少的可用分区容量的系统,ReiserFS是最长挂载时间的系统,Ext3创建时间最长的系统。此外,和这份报告中的内容一样,都发现JFS是CPU占用最少的系统。最后,这份报告是第一个显示ReiserFS在通常的文件操作中有较高的page faults。
认识到各个文件系统的优缺点之后,每个 分区/磁盘 只可以安装一个文件系统。基于上面的测试,XFS似乎是最适合于家用文件服务器或者小型商务服务器使用:
* 他可以最大限度的使用你的硬盘。
* 他是创建、挂载、卸载速度最快的文件系统。
* 他是操作大文件(>500M)速度最快的文件系统。
* 他对于大量的中小文件和目录的操作是第二快的。
* 在大的目录树列表和查找操作中,他在操作时间和CPU占用间找到了很好的平衡。
* 他不是占用资源最少的文件系统,但是他在比较老的硬件上面的资源占用还可以接受。
Piszcz(2006)没有明确的推荐XFS,他总结说“个人认为,我会因为性能和可靠性而选择XFS”。我支持他的结论。