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