延续前面的服务器IO性能测试《服务器IO性能测试笔记[一] :ORION 》见,因为之前的测试结果一直不是很理想:24块SAS盘做24个raid0测出来的随机写波动相当大。读则比较稳定,在利用orion测试过程中随着磁盘数目的增加,iops基本上呈线性增长。接下来又测了raid1,24块SAS盘组成12个raid1,然后继续用orion测随机读写,这次结果基本上与上次raid0相似,不同点在于随机写的波动较raid0较小。这里我就有一个疑问了,一般像随机读写,或者说随机读、随机写波动在什么范围内才叫正常?
这几天又测了一下raid10下的随机读写(不过可能是由于raid卡的原因24块SAS盘不能做成一个raid10,而是两套raid10,也就是最终看到的是2个盘,而不是1个盘),为了测试随着磁盘数目增加观察iops是否呈线性增长这点,于是将每个raid10分成了6个区(一个raid盘阵是3.3T)这样就将一个分区当成一个磁盘来测试,在分区时还遇到了点小麻烦,如果用fdisk分区的话会报错,因为fdisk不支持大于2.2T的盘,最根本的原因应该是MBR记录不了那么大物理地址(平常说的主分区不能超过4个也是这个原因,如果需要多个分区一般都是3主+1扩展分区,然后在扩展分区里面继续分),不过还好的是在fdisk报错时,它就告诉我们可以用GPT来分区,于是装一个GPT工具,然后就搞定了,关于GPT和MBR,参见这里。这里说明的是用GPT分区后,如果用fdisk -l查看,只能看到第一个分区,比如/dev/sda分区后可能是/dev/sda1; /dev/sda2;/dev/sda3;/dev/sda4;用fdisk -l查看则只能看到/dev/sda1这个分区。要查看所有分区有两种方式:第一,parted /dev/sda 进入后执行print;第二,ls -l /dev/;
接下来再谈谈raid10的测试结果。首先raid10是这么个回事:
底层是raid1,然后所有的raid1再合起来组成一个raid0,也就是最终的raid10,raid10相对raid01更可靠,raid10相当于做了数据备份,底层的raid1只要不互为镜像的盘同时坏掉,这个raid10就不会失败,而且读写速度都还不错,就是磁盘数目冗余比较多。raid01则不是很可靠,因为是先raid0在raid1所以就相当于raid0的任何一个盘坏了整个raid01就必须得重建。
今天的raid10测试大概是这样的:一个raid10 /dev/sda分成/dev/sda1;/dev/sda2; /dev/sda3; /dev/sda4; /dev/sda5; /dev/sda6 另一个raid10 /dev/sdb 分成/dev/sdb1; /dev/sdb2 ;/dev/sdb3; /dev/sdb4; /dev/sdb5; /dev/sdb6。测试一个磁盘性能时sda或sdb里面选取一个分区,测4个盘时sda、sdb各选两个,测8个磁盘时各选4个,12个盘事各选6个分区(orion这个工具可以指定你要测试的磁盘名称,然后对其进行随机读写,然后会有测试结果统计)。结果测出来的结果发现在4个盘的时候达到了最高值,而8个盘、12个盘的时候反而开始下降,这是什么原因呢?后来想想原因可能是这样的:我们这个sda是raid10看到的磁盘名称,它的大小是下面几个raid1的和,于是在接下来给这个raid10分区的时候,每个分区的磁盘空间是底层几个磁盘的一部分磁盘空间之和,而不是底层某个磁盘全部空间+另外磁盘的完整空间(当分区大小大于单个磁盘空间的时候),也就是说每个分区的磁盘空间是平均分散到了多个底层的物理磁盘上的。而恰好我这次的这个raid10分区时,4个分区(每个raid10各2个分区)恰好就覆盖了底层所有的物理磁盘,因为在此时达到了最大值,至于为什么大于4个分区的时候iops反而下降呢?这个还没找到很好的解释,可能是由于超过4个分区就达到了瓶颈,举个形象点的例子:过一个楼梯口,如果排队有序的过速度会比较快,但是如果大家都争相的强速度,可以就会造成拥挤、竞争,从而速度下降。
这就是这次测试的一点点心得了,对于我刚才的问题如果你有更好的解释,欢迎交流。另外如果哪位大虾经验丰富,对一些服务器端io性能标准比较有经验,一定记得留言,自己经验太少,很多时候遇到了一些问题不知道是好是坏,没有一个基本的标准去参考。