50MB/3s == 17MB/s,这个速度理论上你的盘应该是可以承受的。
从你的描述,行和不行的关键差别在两处:
1. 是你写到1个文件还是800个文件。
2. 是你这800个文件是很小还是很大。
文件小和大的区别对于磁盘写性能应该不会有太大的区别。我能想到的区别可能是文件过大后造成你的page cache miss。你可以观察一下文件增长过程中的内存变化情况来判断是否发生这个情况。
至于800个与1个的差别,前面有兄弟说了,800个请求一定不能并行,那等于800个线程同时写磁盘。你得自己排一下队。我个人的看法,就算你排好了队,把整个过程序列化,也等于是写了800个小文件。这个开销比你往一个文件里写本身就大很多。。。之所以文件小的时候行,文件大了不行,很有可能是文件小的时候全部写到cache里面去了,后面的动作是kernel帮你flush到磁盘的。
你既然有RAID卡,做成strip,iops就上去了,对于你这么多小请求的情况,应该小有帮助。
【 在 blitz (blitz) 的大作中提到: 】
: 标 题: 请教磁盘性能优化
: 发信站: 水木社区 (Sat Feb 18 15:37:46 2012), 站内
: 遇到一个问题,有一个数据采集系统,每三秒钟往硬盘里面写大约50 MB的数据,但不是往一个文件里写,而是均分到八百多个文件。每个文件的最终大小会达到1GB多。
: 硬盘目前采用的是 WD 2T 绿盘,挂在一个raid卡上,但是没有组成raid,而是作单盘用。
: 以前系统运行良好,但是最近新买了一批硬盘,还是WD 2T 绿盘,发现当但个文件达到数百MB的时候,磁盘的速度明显下降,经常发生阻塞。造成在内存里面开辟的缓冲区溢出。
: 文件系统是xfs,也尝试过ext4和reiserfs,都会发生这个问题。如果挂载xfs的时候加上nobarrier参数,情况能好转,也就是发生阻塞时的但个文件大小能达到较大的尺寸,但仍然不能解决。
: 如果将写入方式改为每三秒写入的50 MB不均分到八百个文件,而是每三秒写入到一个文件则不会发生上述情况。
: 内核版本:2.6.34
: 请问有没有什么方法能优化磁盘性能?谢谢!
: --