IO测试工具之fio详解
IO测试工具之fio详解
本文章向大家介绍IO测试工具之fio详解,主要包括IO测试工具之fio详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目前主流的第三方IO测试工具有fio、iometer和Orion,这三种工具各有千秋。
fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的IO测试软件,可在没有安装oracle数据库的情况下模拟oracle数据库场景的读写。
如下是在Linux系统上采用fio工具来对磁盘进行的IO测试。请在进行测试前先看下第4点的注意事项。
1、安装fio
下载源码包:
wget -P /tmp/ https://brick.kernel.dk/snaps/fio-3.0.tar.gz
tar -xzvf /tmp/fio-3.0.tar.gz
cd /tmp/fio-3.0
./configure&&make&&make install
之后就可以使用fio了。
2、fio参数解释
可以使用fio -help查看每个参数,具体的参数左右可以在官网查看how to文档,如下为几个常见的参数描述
filename=/dev/vdb 支持文件系统或者裸设备,-filename=/dev/sdb或-filename=/data/fiotest
direct=1 测试过程绕过机器自带的buffer,使测试结果更真实
rw=randwread 测试随机读的I/O
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机混合写和读的I/O
rw=read 测试顺序读的I/O
rw=write 测试顺序写的I/O
rw=rw 测试顺序混合写和读的I/O
bs=4k 单次io的块文件大小为4k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试
numjobs=30 本次的测试线程为30
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息
此外
lockmem=1g 只使用1g内存进行测试
zero_buffers 用0初始化系统buffer
nrfiles=8 每个进程生成文件的数量
3、fio测试场景及生成报告详解
测试场景:
100%随机,100%读, 4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
100%随机,100%写, 4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
100%顺序,100%读 ,4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
100%顺序,100%写 ,4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
100%随机,70%读,30%写 4K
fio -filename=/dev/vdb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k
结果报告查看:
[root@my_test]# fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=60G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
rand_100write_4k: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
...
fio-3.0
Starting 50 threads
rand_100write_4k: (groupid=0, jobs=50): err= 0: pid=6793: Fri Dec 11 14:32:00 2020
write: IOPS=1945, BW=7782KiB/s (7969kB/s)(1368MiB/180028msec)
clat (usec): min=282, max=1522.2k, avg=25587.08, stdev=79681.76
lat (usec): min=282, max=1522.2k, avg=25587.68, stdev=79681.83
clat percentiles (usec):
| 1.00th=[ 334], 5.00th=[ 355], 10.00th=[ 367],
| 20.00th=[ 383], 30.00th=[ 400], 40.00th=[ 416],
| 50.00th=[ 437], 60.00th=[ 461], 70.00th=[ 506],
| 80.00th=[ 586], 90.00th=[ 106431], 95.00th=[ 196084],
| 99.00th=[ 362808], 99.50th=[ 404751], 99.90th=[ 750781],
| 99.95th=[ 994051], 99.99th=[1317012]
bw ( KiB/s): min= 7, max= 1701, per=2.07%, avg=161.41, stdev=159.66, samples=17455
iops : min= 1, max= 425, avg=40.19, stdev=39.80, samples=17455
lat (usec) : 500=69.21%, 750=14.97%, 1000=0.96%
lat (msec) : 2=1.40%, 4=0.17%, 10=0.06%, 20=0.22%, 50=0.38%
lat (msec) : 100=2.15%, 250=7.11%, 500=3.15%, 750=0.11%, 1000=0.05%
lat (msec) : 2000=0.05%
cpu : usr=0.03%, sys=0.23%, ctx=700195, majf=0, minf=13
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=0,350237,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):
WRITE: bw=7782KiB/s (7969kB/s), 7782KiB/s-7782KiB/s (7969kB/s-7969kB/s), io=1368MiB (1435MB), run=180028-180028msec
Disk stats (read/write):
vdb: ios=0/350018, merge=0/35, ticks=0/167514, in_queue=167395, util=93.03%
结果解析
io=执行了多少M的IO
bw=平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟
clat=完成延迟
lat=响应时间
bw=带宽
cpu=利用率
IO depths=io队列
IO submit=单个IO提交要提交的IO数
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延迟的分布
io=总共执行了多少size的IO
aggrb=group总带宽
minb=最小.平均带宽.
maxb=最大平均带宽.
mint=group中线程的最短运行时间.
maxt=group中线程的最长运行时间.
ios=所有group总共执行的IO数.
merge=总共发生的IO合并数.
ticks=Number of ticks we kept the disk busy.
io\_queue=花费在队列上的总共时间.
util=磁盘利用率
4、注意事项
参数-filename= 后如果接的是裸设备,如:-filename=/dev/vdb那么FIO命令对硬盘的写入是覆盖写入,写入的地方原有数据将被全部覆盖不可修复,此时你会发现你正在测试的磁盘所在的文件系统崩溃了或者数据库的数据被删除数据库奔溃。所以在测试前一定要注意这一点,知道自己在做什么。已经格式化成文件系统的盘-filename= 后面不要写盘符,也劲量不要去生产系统做这样的测试,否则有可能会一失足成千古恨。
如果要测试的是已经挂载的文件系统可以这样写 -filename=/data/fiotest ,/data是你的挂载点,fiotest替换成你要读写数据的文件名,可以随便给个名字(不能和已有文件名重复哦,重复了原有数据又该被删除了),这样在测试时对文件系统/data下的数据是没有影响的。
另外fio测试读写的数据量最好不要超过文件系统剩余的可用容量。
永远年轻,永远热泪盈眶