测试指标:
IOPS :每秒读写操作(I/O)的次数
Throughput:带宽,一般用MBPS,每秒传输的MB字节数来衡量
Latency:访问延时,完成一次i/o请求所需时间
Fio工具使用
参数 说明
filename=/dev/sda 磁盘路径,不能为文件夹路径
direct direct=1 表示测试的 IO 用直接 IO,即跳过文件系统高速缓存, 使测试结果更接近磁盘性能
iodepth IO 队列长度,典型值: 64 或 128, 值越大磁盘的 IO 负载越高,同时 IO 延迟也会增大,iodepth=1 用来测 IO 延迟
ioengine 设置 IO 引擎, 决定 fio 调用哪种 IO 库,通常用 libaio
rw IO 类型:read = 顺序读,write = 顺序写,randread = 随机读,randwrite = 随机写…
bs IO 块大小,即每个 IO 读写的数据量,通常 bs=1M 用于测试顺序读写带宽,bs=4K 用于测试随机读写的 IOPS
size IO 读写数据总量,如果 runtime 参数设置的时间到,则会停止
numjobs 同时读写的子进程数
runtime 读写时长,如果读写完 size 参数设置的数据量后还未到读写时长且没有设置 time_based 选项,则停止
name 本次测试任务的名字
Fio参数解释:
随机读:
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
顺序写:
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
随机写:
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合随机读写:
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop
测试混合随机读写:
[root@Dell]# fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest1
注意事项:
1.写操作时不要对有数据的盘进行测试会破坏数据
2.写操作时size值不要超过磁盘最大容量,会导致机器挂掉
3.命令参数之间要用空格分隔,有时网络复制命令可能会出错,较难发现异常
实例:
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=10G -numjobs=5 -runtime=200 -group_reporting -name=mytest -ioscheduler=noop
混合读写输出:
Starting 5 threads
Jobs: 5 (f=5): [m(5)][100.0%][r=1666KiB/s,w=698KiB/s][r=104,w=43 IOPS][eta 00m:00s]
mytest: (groupid=0, jobs=5): err= 0: pid=18019: Thu Jan 24 21:49:27 2019
read: IOPS=215, BW=3448KiB/s (3531kB/s)(674MiB/200136msec)
clat (usec): min=53, max=1542.9k, avg=19892.64, stdev=50617.29
lat (usec): min=53, max=1542.9k, avg=19893.33, stdev=50617.28
clat percentiles (usec):
| 1.00th=[ 57], 5.00th=[ 71], 10.00th=[ 101], 20.00th=[ 119],
| 30.00th=[ 135], 40.00th=[ 147], 50.00th=[ 172], 60.00th=[ 3556],
| 70.00th=[ 15926], 80.00th=[ 30016], 90.00th=[ 58459], 95.00th=[ 89654],
| 99.00th=[206570], 99.50th=[295699], 99.90th=[666895], 99.95th=[817890],
| 99.99th=[977273]
bw ( KiB/s): min= 5, max= 2139, per=19.24%, avg=663.32, stdev=428.31, samples=1926
iops : min= 0, max= 133, avg=41.01, stdev=26.77, samples=1926
write: IOPS=93, BW=1496KiB/s (1532kB/s)(292MiB/200136msec)
clat (usec): min=456, max=1050.0k, avg=7571.94, stdev=33210.46
lat (usec): min=457, max=1050.0k, avg=7573.59, stdev=33210.50
clat percentiles (usec):
| 1.00th=[ 570], 5.00th=[ 627], 10.00th=[ 685], 20.00th=[ 1057],
| 30.00th=[ 1516], 40.00th=[ 1680], 50.00th=[ 1958], 60.00th=[ 2376],
| 70.00th=[ 2835], 80.00th=[ 3916], 90.00th=[ 9241], 95.00th=[ 28181],
| 99.00th=[127402], 99.50th=[219153], 99.90th=[446694], 99.95th=[666895],
| 99.99th=[926942]
bw ( KiB/s): min= 5, max= 1080, per=20.00%, avg=299.20, stdev=206.41, samples=1854
iops : min= 0, max= 67, avg=18.26, stdev=12.91, samples=1854
lat (usec) : 100=6.87%, 250=32.98%, 500=1.42%, 750=4.39%, 1000=1.69%
lat (msec) : 2=9.85%, 4=9.12%, 10=5.90%, 20=7.47%, 50=11.06%
lat (msec) : 100=6.04%, 250=2.63%, 500=0.44%, 750=0.07%, 1000=0.06%
lat (msec) : 2000=0.01%
cpu : usr=0.05%, sys=7.02%, ctx=32168, majf=0, minf=4
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 rwt: total=43133,18713,0, short=0,0,0, dropped=0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=3448KiB/s (3531kB/s), 3448KiB/s-3448KiB/s (3531kB/s-3531kB/s), io=674MiB (707MB), run=200136-200136msec
WRITE: bw=1496KiB/s (1532kB/s), 1496KiB/s-1496KiB/s (1532kB/s-1532kB/s), io=292MiB (307MB), run=200136-200136msec
Disk stats (read/write):
sda: ios=43596/18740, merge=537/5, ticks=915366/105750, in_queue=1021774, util=99.95%
部分输入参数对iops影响:
加大队列深度-》提高利用率-》获得ipos和mbps峰值-》响应时间增加
2.size:寻址空间,寻址空间较小时iops会显著提高,因为寻址空间小时磁头需要移动的距离变小,每次io请求服务时间降低。要测试整盘性能所以寻址空间设置过小意义不大
Fio输出字段说明:
## Jobs: 1表示运行的IO线程数; [w(1)]表示使用模式, w为随机写; [100.0% done]表示当前进程执行的进度; [0KB/2092KB/0KB /s]表示吞吐率瞬时值; [0/523/0 iops]表示IOPS瞬时值; [eta 00m:00s]表示持续时间;命令执行期间,可看到值在实时变化
Jobs: 1 (f=1): [w(1)] [100.0% done] [0KB/47784KB/0KB /s] [0/11.1K/0 iops] [eta 00m:00s]
## 分别表示任务名称: (当前的GID, job个数): 错误个数; job对应的PID, 任务结束时间
KingStack EBS 4K randwrite test: (groupid=0, jobs=1): err= 0: pid=5424: Wed Jul 26 15:21:26 2017
## 输出结果: 模式为write, io大小为2794.3MB, 吞吐率为 47687KB/s, IOPS为11921, 执行时间为60s
write: io=2794.3MB, bw=47687KB/s, iops=11921, runt= 60003msec
## 提交响应时间
slat (usec): min=1, max=1550, avg= 4.95, stdev= 8.24
## 完成响应时间=提交时间+完成时间(avg较为重要)
clat (usec): min=27, max=25162, avg=1335.00, stdev=1015.81
## 响应时间
lat (usec): min=137, max=25166, avg=1340.28, stdev=1015.86
## 95.00th=[ 3440]: 表示95%的IO请求的响应时间小于等于3.44s clat percentiles (usec): | 1.00th=[ 247], 5.00th=[ 306], 10.00th=[ 354], 20.00th=[ 442], | 30.00th=[ 524], 40.00th=[ 660], 50.00th=[ 964], 60.00th=[ 1464], | 70.00th=[ 1704], 80.00th=[ 2192], 90.00th=[ 2928], 95.00th=[ 3440], | 99.00th=[ 3696], 99.50th=[ 3760], 99.90th=[ 4080], 99.95th=[ 4384], | 99.99th=[ 9536]
## 带宽情况
bw (KB /s): min=45333, max=55131, per=100.00%, avg=47722.74, stdev=1267.38
## Request延迟情况
lat (usec) : 50=0.01%, 100=0.01%, 250=1.12%, 500=25.93%, 750=16.29% lat (usec) : 1000=7.43% lat (msec) : 2=24.02%, 4=25.09%, 10=0.12%, 20=0.01%, 50=0.01%
## cpu使用率
cpu : usr=3.13%, sys=8.57%, ctx=86552, majf=0, minf=6
## IO队列深度分布
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
## 每次IO需要提交的IO个数
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
## 每次IO完成的IO个数
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
## 执行的读写IO操作的情况
issued : total=r=0/w=715339/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
## IO完成延迟的分布情况
latency : target=0, window=0, percentile=100.00%, depth=16
## IO操作情况汇总: 全部IO大小, group总带宽, 最小平均带宽, 最大平均带宽, group中的最短线程运行时间, group中的最长线程运行时间
Run status group 0 (all jobs):
WRITE: io=2794.3MB, aggrb=47686KB/s, minb=47686KB/s, maxb=47686KB/s, mint=60003msec, maxt=60003msec
## 所有group总共执行的IO情况: IO数量, IO合并情况, 表示磁盘繁忙的tick数量, 队列消耗时间, 磁盘使用率
Disk stats (read/write):
vdb: ios=59/714790, merge=0/0, ticks=28/915069, in_queue=914950, util=99.52%