ubunut上磁盘IOPS测试


安装fio

apt install fio


开始测试

fio -filename=/nmt/fiotest.io -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=10G -numjobs=30 -runtime=10 -group_reporting -name=zfs-cache-test

测试结果:

Jobs: 30 (f=30): [w(30)][100.0%][w=153MiB/s][w=9782 IOPS][eta 00m:00s]
zfs-cache-test: (groupid=0, jobs=30): err= 0: pid=21034: Thu Jun  4 18:49:56 2020

  write: IOPS=11.1k, BW=173MiB/s (182MB/s)(1734MiB/10002msec); 0 zone resets
    clat (usec): min=5, max=88218, avg=2700.66, stdev=2176.33
     lat (usec): min=6, max=88218, avg=2700.98, stdev=2176.36
    clat percentiles (usec):
     |  1.00th=[   10],  5.00th=[   45], 10.00th=[   52], 20.00th=[  816],
     | 30.00th=[ 1696], 40.00th=[ 2311], 50.00th=[ 2737], 60.00th=[ 3130],
     | 70.00th=[ 3556], 80.00th=[ 3982], 90.00th=[ 4883], 95.00th=[ 6063],
     | 99.00th=[ 7373], 99.50th=[ 8291], 99.90th=[18220], 99.95th=[26346],
     | 99.99th=[53740]
   bw (  KiB/s): min= 3552, max=40271, per=3.33%, avg=5913.96, stdev=4550.90, samples=592
   iops        : min=  222, max= 2516, avg=369.60, stdev=284.39, samples=592
  lat (usec)   : 10=1.10%, 20=0.79%, 50=7.09%, 100=5.98%, 250=2.23%
  lat (usec)   : 500=0.92%, 750=1.26%, 1000=3.18%
  lat (msec)   : 2=11.54%, 4=46.17%, 10=19.38%, 20=0.29%, 50=0.07%
  lat (msec)   : 100=0.01%
  cpu          : usr=0.16%, sys=2.21%, ctx=205649, majf=0, minf=0
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,110988,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=173MiB/s (182MB/s), 173MiB/s-173MiB/s (182MB/s-182MB/s), io=1734MiB (1818MB), run=10002-10002msec 作者:村雨Mura https://www.bilibili.com/read/cv15021687 出处:bilibili

结果解读:

其中的IOPS为11.1K

write: IOPS=11.1k

w=153MiB/s    写入速度


w=9782 IOPS    写IOPS指标


IOPS=11.1k    IOPS值


BW=173MiB/s (182MB/s)(1734MiB/10002msec)    指带宽,平均值173,峰值182,1734MB 每10000微秒(10秒内总共走了1734M数据)


bw 小文件传输时的带宽数值


slat=提交延迟,提交该IO请求到kernel所花的时间(不包括kernel处理的时间)


clat=完成延迟, 提交该IO请求到kernel后,处理所花的时间


lat=响应时间,总共花了多少时间


后面是lat测试响应时间的一个分布情况:例如lat (msec)   : 2=11.54%, 4=46.17%, 10=19.38%, 20=0.29%, 50=0.07%,表示在2微秒内有11.54%,4微秒内的有46.17%...以此类推 作者:村雨Mura https://www.bilibili.com/read/cv15021687 出处:bilibili


扩展补充

硬盘性能衡量

衡量硬盘性能,最直观的就是IOPS和吞吐量。


1、IOPS,每秒处理的IO次数 指存储设备(HDD、SSD、SAN)单位时间内能处理的IO请求数量,对随机读写频繁的应用,如OLTP数据库、图片、是最关键的衡量指标。IOPS数值受读写比例、随机IO、IO大小、队列深度等因数影响。数据库通常访问一系列不连续的数据,根据文件物理位置,需要很多次IO才能完成。所以需要随机IO高的设备。


决定因素有:磁盘个数,cache命中率,阵列算法


2、Throughput,吞吐量 指单位时间内可以成功传输的数据数量,传输包括读和写的总和。对于大文件或者流媒体的应用,拥有大量顺序读写,则更关注数据吞吐量。数据吞吐量还受到存储设备接口速度限制,比如IDE、SATA、SAS、FC,SSD使用PCIE Nvme接口最佳,但同时期推出的接口都大于存储设备吞吐量上限。


决定因素有:阵列架构,光纤通道大小,硬盘个数


存储性能

1、机械硬盘的性能计算 


对机械硬盘来说,IOPS = 1000 / (寻道时间 + 旋转延时 + 传输时间)。 


 IOPS计算完整公式:


IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate


于是计算IOPS公式为:


IOPS = 1/IO Time 


= 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)


又因为1s=1000ms,通常时间都是ms级别的,下面公式就用1000来除了



寻道时间,磁头移动到对应磁道上的耗时。 Sata 7200RPM,平均寻道时间是9ms。 Sas 10000RPM,平均寻道时间是6ms。 Sas 15000RPM,平均寻道时间是4ms。  


旋转延时,盘片旋转至需要的扇区移至磁头下方耗时。 平均为磁盘旋转一周所需时间的一半,60 * 1000/7200/2。 Sata 7200RPM,旋转延时 60 * 1000 / 7200 / 2 = 4.17ms。 Sas 10000RPM,旋转延时3ms。 Sas 15000RPM,旋转延时约2ms。 


 传输时间,传输读写数据耗时。 平均数据大小除以接口传输率,耗时很小粗略计算可以忽略。 Sata,300~600MB/s。 Sas,3Gbit/s。 FC,2~4Gbit/s。 NVME,32Gbit/s。 根据上述信息,我们常用的Sas 15000RPM,MySQL应用16k块,机械硬盘IOPS = 1000 / (4 + 2 + 16K / 375K) = 165。


 作者:村雨Mura https://www.bilibili.com/read/cv15021687 出处:bilibili