1.raid的stripe size设置越大,通过多块磁盘响应更少的I/O请求,这样提高IO吞吐的带宽;
2.raid的stripe size设置越小,通过多块磁盘响应更多的I/O请求,这样提高IO吞吐的iops;
3.我们知道顺序和随机对于带宽和iops的需求成反比,即顺序的读写比较消耗带宽,随机的读写比较消耗iops;
4.假设我们有10块硬盘做raid5+hotspare,那么stripe的width就是10-1-1=8,现在假设有7MB的文件要写入,那么就是7*1024/8=896k,平均每个硬盘需要承担896k的数据写入,此时如果我们的设定的stripe size为64k,就有14个block被写入数据,如果stripe size设定成128k,就有7个block被写入数据;
5.从上面得到的结论可以看出,当stripe size设定的越大,平均写入的block就越少,带宽吞吐能力就越强,但iops能力就越弱。做一个不恰当的比喻:这里可以想象stripe size是一个房间的门,如果是一个整齐的军队进入这个门(顺序读写),那么这个门越宽大越好,这样才可以容纳更多的士兵同时进入;相反,如果是一个酒吧的门,因为进入的人都是三三两两(随机读写),那么这个门灵活越容易推开越好;
6.那么回到文件系统,文件系统的block size是磁盘在被格式化后,文件系统赋予的最小单元,应该属于一个抽象的概念,对于它来说,它是不知道stripe size的存在的,因为它是原生于文件系统之上的,stripe size对于它来说是透明的,所以直接的评价block size和stripe size关系,不是很妥;
7.还没有完,文件系统之上,还有应用,比如DB,那么DB的block size又是怎样呢?比如说是oracle,oracle在基于文件系统的方式,block size应该设定为文件系统block size的整数倍;
8.但是,是不是就没有一个方法可以评估了呢?也不是,这也是今天我所讲的经验值,根据我们实际的测试,在linux ext3的文件系统下,视频媒体文件建议设定在128k stripe size,数据库文件建议设定在32k或64k的stripe size。但这个也不少绝对的,还是要根据实际情况作一些对比测试,才能找到适合你应用的最佳stripe size。其指导的理论就是看你的应用是属于随机还是顺序。但是光是stripe size调整到最佳还远远不够,这只是万里长征第一步,从底层通讯协议,应用程序优化,文件系统选择等等,这是一个系统化的工程,是需要实战经验中慢慢摸索出最佳方案的。
阅读(4827) | 评论(1) | 转发(0) |