快速业务通道

Linux文件系统性能优化

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-24

各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性.然而在特定应用下,这种配置往往在I/O性能方面不能达到最优.因此,如果应用对I/O性能要求较高,除了采用性能更高的硬件(如磁盘、HBA卡、CPU、MEM等)外,我们还可以通过对文件系统进行性能调优,来获得更高的I/O性能提升.总的来说,主要可以从三个方面来做工作:

1、Disk相关参数调优

2、文件系统本身参数调优

3、文件系统挂载(mount)参数调优

当然,负载情况不同,需要结合理论分析与充分的测试和实验来得到合理的参数.下面以SAS(Serial attached SCSI)磁盘上的EXT3文件系统为例,给出Linux文件系统性能优化的一般方法.请根据自身情况作适合调整,不要生搬硬套.

1、Disk相关参数

1.1 Cache mode:启用WCE=1(Write Cache Enable), RCD=0(Read Cache Disable)模式

sdparm -s WCE=1, RCD=0 -S /dev/sdb

1.2 Linux I/O scheduler算法

经过实验,在重负载情形下,deadline调度方式对squidI/O负载具有更好的性能表现.其他三种为noop(fifo), as, cfq,noop多用于SAN/RAID存储系统,as多用于大文件顺序读写,

cfq适于桌面应用.

echo deadline > /sys/block/sdb/queue/scheduler

1.3 deadline调度参数

对于redhat linux建议 read_expire = 1/2 write_expire,对于大量频繁的小文件I/O负载,应当这两者取较小值.更合适的值,需要通过实验测试得到.

echo 500 > /sys/block/sdb/queue/iosched/read_expire

echo 1000 > /sys/block/sdb/queue/iosched/write_expire

1.4 readahead 预读扇区数

预读是提高磁盘性能的有效手段,目前对顺序读比较有效,主要利用数据的局部性特点.比如在我的系统上,通过实验设置通读256块扇区性能较优.

blockdev --setra 256 /dev/sdb

2、EXT3文件系统参数

2.1 block size = 4096 (4KB)

mkfs.ext3 -b指定,大的数据块会浪费一定空间,但会提升I/O性能.EXT3文件系统块大小可以为1KB、2KB、4KB.

2.2 inode size

这是一个逻辑概念,即一个inode所对应的文件相应占用多大物理空间.mkfs.ext3 -i指定,可用文件系统文件大小平均值来设定,可减少磁盘寻址和元数据操作时间.

2.3 reserved block

mkfs.ext3 -m指定,缺省为5%,可调小该值以增大部分可用存储空间.

2.4 disable journal

对数据安全要求不高的应用(如web cache),可以关闭日志功能,以提高I/O性能.

tune2fs -O^has_journal /dev/sdb

3、mount参数

3.1 noatime, nodirtime

访问文件目录,不修改访问文件元信息,对于频繁的小文件负载,可以有效提高性能.

3.2 async

异步I/O方式,提高写性能.

3.3 data=writeback (if journal)

日志模式下,启用写回机制,可提高写性能.数据写入顺序不再保护,可能会造成文件系统数据不一致性,重要数据应用慎用.

3.4 barrier=0 (if journal)

barrier=1,可以保证文件系统在日志数据写入磁盘之后才写commit记录,但影响性能.重要数据应用慎用,有可能造成数据损坏.

4、小结

以/dev/sdb为例,优化操作方法如下,参数请自行调整.

sdparm -s WCE=1, RCD=0 -S /dev/sdb

echo deadline > /sys/block/sdb/queue/scheduler

echo 500 > /sys/block/sdb/queue/iosched/read_expire

echo 1000 > /sys/block/sdb/queue/iosched/write_expire

blockdev --setra 256 /dev/sdb

mkfs.ext3 -b 4096 -i 16384 -m 2 /dev/sdb1

tune2fs -O^has_journal /dev/sdb1

mount /dev/sdb1 /cache1 -o defaults,noatime,nodirtime,async,data=writeback,barrier=0 (if with journal)

mount /dev/sdb1 /cache1 -o defaults,noatime,nodirtime,async (if without journal)

请大家注意不要模仿,每台服务器的业务不一样,情况不一样,不要在线上的服务器试验.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号