免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1276 | 回复: 0
打印 上一主题 下一主题

ext2, ext3, xfs, reiserfs 文件系统性能测试 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-25 10:50 |只看该作者 |倒序浏览
文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保证,也就是保证写入磁盘的数据和随后读出的内容的一致性。除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间、属主、访问权限、文件大小和存储位置等等)。这些信息通常被称为元数据(metadata)。
                                    由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘操作被突然中断可能导致数据被丢失。例如如果出现这种情况:如果当你处理一个在linux的ext2文件系统上的文档,突然机器崩溃会出现什么情况?
                                    有这几种可能:
                                    
  • 当你保存文件以后,系统崩溃。这是最好的情况,你不会丢失任何信息。只需要重新启动计算机然后继续工作。
  • 在你保存文件之前系统崩溃。你会丢失你所有的工作内容,但是老版本的文档还会存在。
  • 当正在将保存的文档写入磁盘时系统崩溃。这是最糟的情况:新版文件覆盖了旧版本的文件。这样磁盘上只剩下一个部分新部分旧的文件。如果文件是二进制文件那么就会出现不能打开文件的情况,因为其文件格式和应用所期待的不同。

                                    
在最后这种情况下,如果系统崩溃是发生在驱动器正在写入元数据时,那么情况可能更糟。这时候就是文件系统发生了损坏,你可能会丢失整个目录或者整个磁盘分区的数据。
                                    
linux标准文件系统(ext2fs)在重新启动时会通过调用文件扫描工具fsck试图恢复损坏的元数据信息。由于ext2文件系统保存有冗余的关键元数据信息的备份,因此一般来说不大可能出现数据完全丢失。系统会计算出被损坏的数据的位置,然后或者是通过恢复冗余的元数据信息,或者是直接删除被损坏或是元数据信息损毁的文件。
                                    
很明显,要检测的文件系统越大,检测过程费时就越长。对于有几十个G大小的分区,可能会花费很长时间来进行检测。由于Linux开始用于大型服务器中越来越重要的应用,因此就越来越不能容忍长时间的当机时间。这就需要更复杂和精巧的文件系统来替代ext2。
                                    
因此就出现了日志式文件系统(journalling filesystems)来满足这样的需求。
                                    什么是日志式文件系统
                                    这里仅仅对日志式文件系统进行简单的说明。如果需要更深入的信息请参考文章
日志式文件系统
,或者是
日志式文件系统介绍

                                    
大多数现代文件系统都使用了来自于数据库系统中为了提高崩溃恢复能力而开发的日志技术。磁盘事务在被真正写入到磁盘的最终位置以前首先按照顺序方式写入磁盘中日志区(或是log区)的特定位置。
                                    
根据日志文件系统实现技术的不同,写入日志区的信息是不完全一样的。某些实现技术仅仅写文件系统元数据,而其他则会记录所有的写操作到日志中。
                                    
现在,如果崩溃发生在日志内容被写入之前发生,那么原始数据仍然在磁盘上,丢失的仅仅是最新的更新内容。如果当崩溃发生在真正的写操作时(也就是日志内容已经更新),日志文件系统的日志内容则会显示进行了哪些操作。因此当系统重启时,它能轻易根据日志内容,很快地恢复被破坏的更新。
                                    
在任何一种情况下,都会得到完整的数据,不会出现损坏的分区的情况。由于恢复过程根据日志进行,因此整个过程会非常快只需要几秒钟时间。
                                    
应该注意的是使用日志文件系统并不意味着完全不需要使用文件扫描工具fsck了。随机发生的文件系统的硬件和软件错误是根据日志是无法恢复的,必须借助于fsck工具。
                                    目前Linux环境下的日志文件系统
                                    

下面的内容里将讨论三种日志文件系统:第一种是ext3,由Linux内核Stephen
Tweedie开发。ext3是通过向ext2文件系统上添加日志功能来实现的,目前是redhat7.2的默认文件系统;Namesys开发的
ReiserFs日志式文件系统,可以从
www.namesys.com
下载,目前Mandrake8.1采用该日志式文件系统。SGI在2001年三月发布了XFS日志式文件系统。可以在
oss.sgi.com/projects/xfs/
下载。下面将对这三种日志文件系统采用不同的工具进行检测和性能测试。
                                    安装ext3
                                    
关于ext3文件系统技术方面的问题请参考Dr. Stephen Tweedie的
论文

访谈
。ext3日志式文件系统直接来自于其祖先ext2文件系统。其具有完全向后兼容的关键特性,实际上其仅仅是在ext2日志式文件系统上添加了日志功能。其最大的缺点是没有现代文件系统所具有的能提高文件数据处理速度和解压的高性能。
                                    
ext3从 2.2.19开始是作为一个补丁方式存在的。如果希望对内核添加对ext3文件系统的支持,就需要使用补丁,可以从
ftp.linux.org.uk/pub/linux/sct/fs/jfs

ftp.kernel.org/pub/linux/kernel/people/sct/ext3
得到补丁程序,一共需要如下文件:
                                    
                                    
拷贝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目录下,进行解压:
                                    mv linux linux-oldtar -Ixvf linux-2.2.19.tar.bz2tar -Ixvf ext3-0.0.7a.tar.bz2cd linuxcat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
                                    
首先对内核添加SGI的kdb内核调试器补丁,第二个是ext3文件系统补丁。下来就需要配置内核,对文件系统部分的"Enable Second extended fs development code"回答Yes。然后编译。
                                    
内核编译安装以后,需要安装e2fsprogs软件套件:
                                    tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2cd e2fsprogs-1.21./configuremakemake checkmake install
                                    
下来要做的工作就是在分区上创建一个ext3文件系统,使用新内核重新启动,这时候你有两种选择创建新的日志文件系统或者对一个已有的ext2文件系统升级到ext3日志文件系统。
                                    
  • 对于需要创建新ext3文件系统的情况下,只需要使用安装的e2fsprogs软件包中的mke2fs命令加-f参数就可以创建新的ext3文件系统:
                                            mke2fs -j /dev/xxx
    这里/dev/xxx是希望创建ext3文件系统的新分区。-j参数表示创建ext3而不是ext2文件系统。可以使用参数"-Jsize=
  • 升级一个已有的ext2,使用tune2fs就可以了:
                                            tune2fs -j /dev/xxx
    你可以对正在加载的文件系统和没有加载的文件系统进行升级操作。如果当前文件系统正在被加载,则文件.journal会在文件系统加载点的所在目录被创
    建。如果是升级一个当时没有加载的文件系统,则使用隐含的系统inode来记录日志,这时候文件系统的所有内容都会被保留不被破坏。

                                    你可以使用下面的命令加载ext3文件系统:
                                    mount -t ext3 /dev/xxx /mount_dir
                                    
由于ext3实际上是带有日志功能的ext2文件系统 ,因此一个ext3文件系统可以以ext2的方式被加载。
                                    安装XFS文件系统
                                    
如果需要从技术方面了解XFS文件系统,请参考SGI的
XFS文件系统

SGI信息页面
。也可以参考
FAQ

                                    
XFS
是一个SGI开发的linux环境下的日志文件系统,它是一个成熟的技术,最初是使用在IRIX系统上的文件系统。XFS遵循GPL版权申明。目前xfs
文件系统最新版本是1.02。可以http://linux-xfs.sgi.com/projects/xfs/102_release.html从下
载得到对内核xfs文件系统支持补丁或者直接下载RPM包方式的内核,下面我们就以补丁方式说明如何对2.4.14内核使用xfs。首先下载如下内容
                                    
                                    
拷贝Linux内核linux-2.4.2.tar.bz2到 /usr/src目录下,修改老的内核目录名,然后解压新内核:
                                    mv linux linux-oldtar -Ixf inux-2.4.2.tar.bz2
                                    
拷贝每个每个补丁到内核源码目录下(例如:/usr/src/linux),并打补丁:
                                    zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1 zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1
                                    
然后配置内核,打开文件系统部分的内核选项:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同时需要升级下面这些系统工具到下面或更高的版本:
                                    
                                    
安装新内核并重启服务器。
                                    
然后下载
xfs工具。
这个软件包包括下面的命令来处理文件系统,使用下面的命令来安装该软件包::
                                    tar -zxf  xfsprogs-1.2.0.src.tar.gzcd xfsprogs-1.2.0make configure make make install
                                    安装这些命令以后,就可以创建新的XFS文件系统:
                                    mkfs -t xfs /dev/xxx
                                    
如果xxx是一个已经存在的文件系统,那么就需要使用"-f"参数来创建新分区,但是记得这将会破坏该分区的所有数据。
                                    mkfs -t xfs -f /dev/xxx
                                    创建以后就可以使用基于下面的命令加载新文件系统:
                                    mount -t xfs /dev/xxx /mount_dir
                                    安装ReiserFS文件系统
                                    如果希望更多地从技术方面了解reiserFS文件系统,请参考
NAMESYS

FAQ

                                    
ReiserFS
文件系统从2.4.1-pre4开始就是Linux内核的正式支持的文件系统了。为了使用reiserFS文件系统那你首先需要在系统上安装文件系统支持
工具(如:创建ReiserFS文件系统的mkreiserfs工具)。最新的ReiserFS文件系统版本可以以补丁的方式添加到2.2.x或者
2.4.x内核中。这里我们以2.2.19为例:
                                    
第一步,首先下在内核源码,并下在
ReiserFS文件系统的2.2.19补丁
,目前补丁最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2。同时应该下载工具软件包:
reiserfsprogs-3.x.0j.tar.gz

                                    
然后解压内核源码和补丁包到/usr/src中:
                                    tar -Ixf linux-2.2.19.tar.bz2bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0
                                    编译内核支持reiserfs,安装内核。然后安装文件系统工具软件:
                                    cd /usr/src/linux/fs/reiserfs/utils makemake install
                                    
安装新内核并重新启动。现在就可以创建新的reiserfs文件系统,并加载:
                                    mkreiserfs /dev/xxxx
                                    mount -t reiserfs /dev/xxx /mount_dir
                                    文件系统性能测试
                                    

试环境使用的计算机环境如下:Pentium III - 16 Mb RAM - 2 Gb
HD,操作系统为RedHat6.2。所有的文件系统都能正常工作,所以就进行benchmark分析来对它们进行性能比较。首先我直接拔掉系统电源以模
拟系统掉电情况,以测试日志文件系统恢复过程。所有的文件系统都成功地经过了文件扫描检测阶段,在数秒以后系统都经过了扫描然后正常启动了系统。
                                    

一步就采用了bonnie++性能测试程序(www.coker.com.au/bonnie++)进行测试,这个程序对一个文件进行数据库类型的访问,
进行了创建、读和删除小文件,这些操作对于Squid、INN或者Maildir格式的邮件服务器程序(qmail)是最常见的操作。性能测试命令为:
                                    
bonnie++ -d/work1 -s10 -r4 -u0
                                    
其对加载在/work1目录下的文件系统进行了10Mb(-s10)的测试。因此在执行测试之前必须创建适当类型的文件系统并加载到目录/work1下。其他的参数指定内存大小(-r4)的M数,和以root身份运行测试程序,测试结果如下:
                                    
                                    
                                       
                                            
                                                
                                                Sequential Output
                                                Sequential Input
                                                Random
Seeks
                                            
                                            
                                                
                                                Size:Chunk Size
                                                Per Char
                                                Block
                                                Rewrite
                                                Per Char
                                                Block
                                            
                                            
                                                
                                                K/sec
                                                % CPU
                                                K/sec
                                                % CPU
                                                K/sec
                                                % CPU
                                                K/sec
                                                % CPU
                                                K/sec
                                                % CPU
                                                / sec
                                                % CPU
                                            
                                            
                                                ext2
                                                10M
                                                1471
                                                97
                                                14813
                                                67
                                                1309
                                                14
                                                1506
                                                94
                                                4889
                                                15
                                                309.8
                                                10
                                            
                                            
                                                
                                                
                                                
                                            
                                            
                                                ext3
                                                10M
                                                1366
                                                98
                                                2361
                                                38
                                                1824
                                                22
                                                1482
                                                94
                                                4935
                                                14
                                                317.8
                                                10
                                            
                                            
                                                
                                                
                                                
                                            
                                            
                                                xfs
                                                10M
                                                1206
                                                94
                                                9512
                                                77
                                                1351
                                                33
                                                1299
                                                98
                                                4779
                                                80
                                                229.1
                                                11
                                            
                                            
                                                
                                                
                                                
                                            
                                            
                                                reiserfs
                                                10M
                                                1455
                                                99
                                                4253
                                                31
                                                2340
                                                26
                                                1477
                                                93
                                                5593
                                                26
                                                174.3
                                                5
                                            
                                       
                                    
                                    
                                    
                                    
                                       
                                            
                                                
                                                Sequential Create
                                                Random Create
                                            
                                            
                                                
                                                Num Files
                                                Create
                                                Read
                                                Delete
                                                Create
                                                Read
                                                Delete
                                            
                                            
                                                
                                                
                                                / sec
                                                % CPU
                                                / sec
                                                % CPU
                                                / sec
                                                % CPU
                                                / sec
                                                % CPU
                                                / sec
                                                % CPU
                                                / sec
                                                % CPU
                                            
                                            
                                                ext2
                                                16
                                                94
                                                99
                                                278
                                                99
                                                492
                                                97
                                                95
                                                99
                                                284
                                                100
                                                93
                                                41
                                            
                                            
                                                ext3
                                                16
                                                89
                                                98
                                                274
                                                100
                                                458
                                                96
                                                93
                                                99
                                                288
                                                99
                                                97
                                                45
                                            
                                            
                                                xfs
                                                16
                                                92
                                                99
                                                251
                                                96
                                                436
                                                98
                                                91
                                                99
                                                311
                                                99
                                                90
                                                41
                                            
                                            
                                                reiserfs
                                                16
                                                1307
                                                100
                                                8963
                                                100
                                                1914
                                                99
                                                1245
                                                99
                                                9316
                                                100
                                                1725
                                                100
                                            
                                       
                                    
                                    
                                    

种测试都有两组数据:文件系统速度(K/sec)和CPU占用率(%CPU)。速度越高,文件系统越好。而对于CPU率来说,数字越小性能越好。可以看到
Reiserfs文件系统在文件操作方面(Sequential Create和Random Create部分的)
的性能最好,超出其他文件系统10倍之多。在其他方面(Sequential Output和Sequential
Input)则和其他文件系统性能不相上下。对于其他文件系统则没有特别明显的区别。XFS性能接近ext2文件系统,ext3文件系统则比ext2要稍
微慢上一些(因为记录日志需要一些额外的时间)。最后使用从www.namesys.com得到的性能测试程序mongo,并对其进行了修改以对三种日志
文件系统进行测试。这里在mongo.pl程序中添加了添加了加载xfs和ext3文件系统的命令,并对其进行格式化处理,然后就开始性能测试分析。该脚
本格式划分区/dev/xxxx,加载其并在每个阶段运行指定数目的进程:创建、拷贝、符号连接处理、读、显示文件状态信息、重命名和删除文件。同时,该
程序在创建和拷贝阶段以后会计算分段数(fragmentation)。
                                    
Fragm = number_of_fragments / number_of_files
                                    
可以在结果文件中得到同样的测试比较结果:
                                    
log - 原始结果
log.tbl - 比较程序的输出结果
log_table - 表格式的结果
                                    
下面的命令进行测试:
                                    
mongo.pl ext3 /dev/hda3 /work1 logext3 1
                                    
如果要测试其他文件系统,就需要把上面命令的参数中的ext3修改为reiserfs或xfs。其他参数分别为要加载的分区,加载路径,保存测试结果的文件名及启动的进程数。
                                    
下面的表格是测试结果。数据单位为秒。值越低性能越好。第一个表格测试使用的数据块大小为100字节,第二个表格为1000字节,最后一个为10000字节
                                    
                                    
                                       
                                            
                                                
                                                ext3
files=68952
size=100 bytes
dirs=242
                                                XFS
files=68952
size=100 bytes
dirs=241
                                                reiserFS
files=68952
size=100 bytes
dirs=241
                                            
                                            
                                                Create
                                                90.07
                                                267.86
                                                53.05
                                            
                                            
                                                Fragm.
                                                1.32
                                                1.02
                                                1.00
                                            
                                            
                                                Copy
                                                239.02
                                                744.51
                                                126.97
                                            
                                            
                                                Fragm.
                                                1.32
                                                1.03
                                                1.80
                                            
                                            
                                                Slinks
                                                0
                                                203.54
                                                105.71
                                            
                                            
                                                Read
                                                782.75
                                                1543.93
                                                562.53
                                            
                                            
                                                Stats
                                                108.65
                                                262.25
                                                225.32
                                            
                                            
                                                Rename
                                                67.26
                                                205.18
                                                70.72
                                            
                                            
                                                Delete
                                                23.80
                                                389.79
                                                85.51
                                            
                                       
                                    
                                    
                                    
                                    
                                       
                                            
                                                
                                                ext3
files=11248
size=1000 bytes
dirs=44
                                                XFS
files=11616
size=1000 bytes
dirs=43
                                                ReiserFS
files=11616
size=1000 bytes
dirs=43
                                            
                                            
                                                Create
                                                30.68
                                                57.94
                                                36.38
                                            
                                            
                                                Fragm.
                                                1.38
                                                1.01
                                                1.03
                                            
                                            
                                                Copy
                                                75.21
                                                149.49
                                                84.02
                                            
                                            
                                                Fragm.
                                                1.38
                                                1.01
                                                1.43
                                            
                                            
                                                Slinks
                                                16.68
                                                29.59
                                                19.29
                                            
                                            
                                                Read
                                                225.74
                                                348.99
                                                409.45
                                            
                                            
                                                Stats
                                                25.60
                                                46.41
                                                89.23
                                            
                                            
                                                Rename
                                                16.11
                                                33.57
                                                20.69
                                            
                                            
                                                Delete
                                                6.04
                                                64.90
                                                18.21
                                            
                                       
                                    
                                    
                                    
                                    
                                       
                                            
                                                
                                                ext3
files=2274
size=10000 bytes
dirs=32
                                                XFS
files=2292
size=10000 bytes
dirs=31
                                                reiserFS
files=2292
size=10000 bytes
dirs=31
                                            
                                            
                                                Create
                                                27.13
                                                25.99
                                                22.27
                                            
                                            
                                                Fragm.
                                                1.44
                                                1.02
                                                1.05
                                            
                                            
                                                Copy
                                                55.27
                                                55.73
                                                43.24
                                            
                                            
                                                Fragm.
                                                1.44
                                                1.02
                                                1.12
                                            
                                            
                                                Slinks
                                                1.33
                                                2.51
                                                1.43
                                            
                                            
                                                Read
                                                40.51
                                                50.20
                                                56.34
                                            
                                            
                                                Stats
                                                2.34
                                                1.99
                                                3.52
                                            
                                            
                                                Rename
                                                0.99
                                                1.10
                                                1.25
                                            
                                            
                                                Delete
                                                3.40
                                                8.99
                                                1.84
                                            
                                       
                                    
                                    
                                    
从上面的表格可以看到ext3在状态删除和重命名方面要性能更好一些,而ReiserFS文件系统在文件创建和拷贝性能表现更出色。同时也可以看到reiserFS正如其技术文档提到的其在小文件处理方面性能相当出色。
                                    结论
                                    
目前Linux至少有两个健壮可靠的日志文件系统可供选择(XFS和reiserFS),其都得到了广泛的应用。例如Mandrake8.1就默认支持reiserFS文件系统。
                                    
从性能测试的结果可以看到,reiserFS是最好的选择。
                                    
                                    
                                    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=178414
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34937/showart_1146362.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP