本文章向大家介绍IO测试工具之fio详解,主要包括IO测试工具之fio详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目前主流的第三方IO测试工具有fio、iometer和Orion,这三种工具各有千秋。
fio在Linux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的IO测试软件,可在没有安装oracle数据库的情况下模拟oracle数据库场景的读写。
如下是在Linux系统上采用fio工具来对SAN存储进行的IO测试。
1、安装fio
下载源码包:wget -P https://brick.kernel.dk/snaps/fio-3.0.tar.gz
解压后./configure、make、make install之后就可以使用fio了。
2、fio参数解释
可以使用fio -help查看每个参数,具体的参数左右可以在官网查看how to文档,如下为几个常见的参数描述
filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb 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/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
100%随机,100%写, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
100%顺序,100%读 ,4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
100%顺序,100%写 ,4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
100%随机,70%读,30%写 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -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=磁盘利用率
原文:https://www.cnblogs.com/myss/p/14130969.html