RedHat系统之磁盘IO性能测试工具-创新互联

#IOPS概念
   IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标。另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如电视台的视频编辑,视频点播VOD(Video On Demand),则更关注吞吐量指标。RedHat系统之磁盘IO性能测
试工具

#IOPS计算方法
   传统磁盘本质上一种机械装置,如FC, SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。
   寻道时间Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。
   旋转延迟Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。
   数据传输时间Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。因此,理论上可以计算出磁盘的大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论大值分别为,
   IOPS = 1000 / (3 + 60000/7200/2) = 140
   IOPS = 1000 / (3 + 60000/10000/2) = 167
   IOPS = 1000 / (3 + 60000/15000/2) = 200
   固态硬盘SSD是一种电子装置, 避免了传统磁盘在寻道和旋转上的时间花费,存储单元寻址开销大大降低,因此IOPS可以非常高,能够达到数万甚至数十万。实际测量中,IOPS数值会受到很多因素的影响,包括I/O负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘IOPS时,必须在同样的测试基准下进行,即便如何也会产生一定的随机不确定性。通常情况下,IOPS可细分为如下几个指标:
   Toatal IOPS,混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。
   1、Random Read IOPS,100%随机读负载情况下的IOPS。
   2、Random Write IOPS,100%随机写负载情况下的IOPS。
   3、Sequential Read IOPS,100%顺序负载读情况下的IOPS。
   4、Sequential Write IOPS,100%顺序写负载情况下的IOPS。
   IOPS的测试benchmark工具主要有Iometer, IoZone, FIO等,可以综合用于测试磁盘在不同情形下的IOPS。对于应用系统,需要首先确定数据的负载特征,然后选择合理的IOPS指标进行测量和对比分析,据此选择合适的存储介质和软件系统。

创新互联专注于下陆企业网站建设,响应式网站,购物商城网站建设。下陆网站建设公司,为下陆等地区提供建站服务。全流程定制网站设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

#下载http://freshmeat.net/projects/fio/

#安装fio-2.0.13.tar.gz之前需要安装开发工具包、libaio和libaio-devel

yum installgroup "Development tools"  OR:yum install  gccyum install libaio-0.3.107-10.el6.x86_64.rpm libaio-devel-0.3.107-10.el6.x86_64.rpm

#fio参数

filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。 
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。 
rw=randwrite 测试随机写的I/O 
rw=randrw 测试随机写和读的I/O 
bs=16k 单次io的块文件大小为16k 
bsrange=512-2048 同上,提定数据块的大小范围 
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。 
numjobs=30 本次的测试线程为30. 
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。 
ioengine=psync io引擎使用pync方式 
rwmixwrite=30 在混合读写的模式下,写占30% 
group_reporting 关于显示结果的,汇总每个进程的信息。 
此外 
lockmem=1g 只使用1g内存进行测试。 
zero_buffers 用0初始化系统buffer。 
nrfiles=8 每个进程生成文件的数量。 
bssplit=512/20:1k/20:2k/10:4k/40:8k/10
#2成512B,1KB,1成2KB,4成4KB,1成8KB的小文件进行测试
rw=randrw
rwmixread=80 #8成读,2成写
direct=1 #不使用io设备buffer
size=4g
numjobs=16 #产生16个进程
nrfiles=8 #每1个进程生成文件数量
ioengine=libaio
#IO engine,种类丰富,测试nfs,cpu,nic使用不同的引擎。
directory=/mnt
# IOMeter defines the server loads as the following:
# iodepth=1 Linear
# iodepth=4 Very Light
# iodepth=8 Light
# iodepth=64 Moderate
# iodepth=256 Heavy
iodepth=64 #每个文件io队列长度
lockmem=1g #fio只使用1g内存进行测试
zero_buffers 用0初始化系统buffer
一般fio配置文件和参数都是支持k/m/g的标识

#dd测试

1. dd if=/dev/zero of=test bs=64k count=16k
  这个很不准确的,因为命令结束的时候数据还没有真正写到磁盘上去
2. dd if=/dev/zero of=test bs=64k count=16k conv=fsync
  这个还算准确,数据已经写入磁盘
3. dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
  这个可以当成是模拟数据库插入操作,所以很慢
  接着让我们来看看buyvm的磁盘性能
dd if=/dev/zero of=test bs=64k count=16k
  1073741824 bytes (1.1 GB) copied, 2.99687 seconds, 358 MB/s
  第一种方式得到的结果貌似很快
dd if=/dev/zero of=test bs=64k count=16k conv=fsync
  1073741824 bytes (1.1 GB) copied, 13.9241 seconds, 77.1 MB/s
  这次慢了很多,这个数据才有参考价值
dd if=/dev/zero of=test bs=64k count=2k oflag=dsync
  134217728 bytes (134 MB) copied, 177.813 seconds, 755 kB/s
  这是buyvm的真正实力,我在84的vps上测可是有20M/s的

#HP DL2000 两块300G的SAS盘做成RAID1

1、直接读块设备,fio和dd测试吞吐量和IOPS

[root@localhost ~]# cat test.cfg
[global]
bs=1024k
ioengine=libaio
iodepth=4
size=1g
direct=1
filename=/dev/sda4
zero_buffers [seq-read] rw=read stonewall

测试结果:
read : io=1024.0MB, bw=183735KB/s, iops=179 , runt= 5707msec
[root@localhost ~]# dd if=/dev/zero of=/dev/sda4 bs=16k count=65536 conv=fsync
65536+0 records in65536+0 records out
1073741824 bytes (1.1 GB) copied, 5.85287 s, 183 MB/s

2、通过读ext4文件系统,fio和dd测试吞吐量和IOPS

[root@localhost ~]# cat test.cfg
[global]
bs=1024k
ioengine=libaio
iodepth=4
size=1g
direct=1
filename=file
directory=/mnt
zero_buffers [seq-read] rw=read stonewall 测试结果:
read : io=1024.0MB, bw=167264KB/s, iops=163 , runt=  6269msec
[root@localhost ~]# dd if=/dev/zero of=/mnt/file bs=16k count=65536 conv=fsync
65536+0 records in65536+0 records out
1073741824 bytes (1.1 GB) copied, 6.66798 s, 161 MB/s

#一起测试顺序读、随机读、顺序写、随机写

[seq-read]
rw=read
stonewall

[rand-read]
rw=randread
stonewall

[seq-write]
rw=write
stonewall

[rand-read]
rw=randwrite
stonewall

[read-write]
rw=randrw
stonewall

本文名称:RedHat系统之磁盘IO性能测试工具-创新互联
URL链接:http://hbruida.cn/article/dheogg.html