服务器IO性能测试的笔记

iOSliang 2012-07-22

这今天一直在测一台新机器的存储性能以便为接下来的一个大项目的存储机选型。因为自己刚进入这个行业,对很多的东西都没经验,测试过程也是磕磕绊绊,但好在有同事的帮助,现在对这次测试做一个中途总结。

测试步骤神马的就不说了,测试目标主要是IOPS/bandwidth/响应时间等等一些,在做了raid的情况下磁盘个数由少到多的情况下,IOPS是不是呈线性增长。另外还有一个很重的测试:IO是不是比较稳定,比如说4块盘的RAID,我们最后算出IOPS为700,那是不是每块盘上差不都都是150+呢?存不存在某个时刻单块盘为0或是很小的情况呢? IOPS是不是急升急降等等

这次选择的测试工具主要是ORION,这是一个完全模拟Oracle数据库的IO操作代码写的一个软件,可以测IO性能,下载地址:点击这里。使用方法也不说了,google或者手册上都有的。利用ORION主要是测磁盘的随机读写性能(顺序读写就用dd),测试完后会有五种类型的文件*_iops.csv、*_lat.csv、*_mbps.csv、*_summary.txt、*_trace.txt。iops文件表示每个时间点(等下解释时间点)对应的iops,lat文件表示延迟,也就是每个时间点对应的响应时间,mbps文件表示带宽,summary文件是对这次测试做的一个总结,trace文件是跟踪了整个测试过程的文件。那么接下来解释时间点,时间点在ORION里面表示一个阶段,因为在ORION测试时,它是这样做的:在每个时间点(这个时间长度可以自己指定 --duration)跑n个线程,随着时间递增,这个n线程数会增加,也就是会加大压力(最后增大到多少个线程有--num_disks决定,根据观察,应该是一个指数增长,一般设置为被测磁盘数目的值)。然后ORION就会统计出每个时间点下的iops,latency,mbps,也就是生成了上面说的五种文件,然后你就可以进行数据分析了。

下面是我在测试中遇到的现象,感觉挺有用的:

1. ORION这个工具测出来的数据的确非常可靠,因为我的测试目标里面还需要测每个时间点内的IOPS等等是不是波动比较大(比如我设置的每个时间点60s,ORION统计出的只是这个60s的平均值,并没有里面每1s的值),所以我通过一个脚本利用vmstat/iostat抓取每1s的数据,然后进行分析,发现iostat/vmstat的数据最后和ORION统计出来的数据相当吻合。

2. 我处理iostat数据时中发现某些时间的IOPS急剧下降或是上升,刚开始的时候没有注意到,以为是波动比较大。后来仔细分析,我觉得这是一个假象,因为ORION在时间点的切换(增加线程,增加压力)时,这中间的数据会不准确,我然后统计了两次iostat统计出来的iops急剧变化的时间差是多少------60s,这就正好是我设置的--duration 60,所以这个iostat统计出来的iops急剧变化发生在时间点的切换时,因此不准确也就理所当然了。

3. 还有我在测试不同io size的iops时,又一个假象发生了:io_size=1024kb的时候竟然比io_size=8kb的时候还要高,我刚开始不知道原因,后来同事跟我说因为io_size=1024kb太大,很多时候系统都会讲其拆分,比如我这里就是拆成了4份,虽然本质上os对其进行了拆分,但还是统计了4次iops,因此就得到刚开始的假象了,其实我们通过iostat数据分析iops的时候,不能仅仅只看r/s,w/s这两者的和,这两者可能是假象,我们真正算iops是带宽/io_size。比如下面这个数据:

sdaa              0.00     0.00  259.00    0.00 66280.00     0.00   511.81     3.30   12.86   3.83  99.20

表面上看r/s=259,但实际上你会发现bw=66280kb,而测试时的io_size=1024kb,66280/1024=64,而259/64=4所以说在实际操作时,每个io_size=1024kb实际上是拆成了4个io的,我这里是io_size=1M时被拆分了,现实中很可能io_size>16kb就会被拆分了,所以以后分析iostat时一定不要被这个假象欺骗了。

相关推荐