概念
fio,又称为Flexible IO Tester,是Jens Axboe编写的应用程序。
Jens是Linux Kernel中block IO subsystem的维护者。
FIO作为网络文件系统和磁盘的压测工具,多用于机型验证和文件系统的性能对比,本工具可以自动的分发fio命令到集群的机器列表,搜集小文件的iops和大文件的吞吐。
rw=[mode]
rwmixwrite=30 在混合读写的模式下,写占30%
mode
read 顺序读
write 顺序写
readwrite 顺序混合读写
randwrite 随机写
randread 随机读
randrw 随机混合读写
安装
yumdownloader --destdir=/tmp --resolve fio
rpm -ivh /tmp/*.rpm
rpm -ivh fio-3.7-2.el7.x86_64.rpm
说明
说明:
filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=16k 单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30 本次的测试线程为30.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
测试随机写带宽
fio --name=wbw --filename=/data/sui_ji_xie --numjobs=4
--bs=128k --size=4G --ioengine=libaio --direct=1 --randrepeat=0 --norandommap --rw=randwrite
--group_reporting --iodepth=512 --iodepth_batch=128 --iodepth_batch_complete=128 --gtod_reduce=1 --runtime=30
测试4K 随机写延迟:
fio --name=wlat --filename=/data/4k_sui_ji_xie --numjobs=1 --runtime=30
--bs=4k --size=4G --ioengine=libaio --direct=1 --norandommap --randrepeat=0
-rw=randwrite --group_reporting --iodepth=1 --iodepth_batch_complete=0
测试4k 随机写IOPS:
fio --name=wiops --filename=/data/4k_sui_ji_xie_iops --numjobs=4
--bs=4k --size=4G --ioengine=libaio --direct=1 --randrepeat=0 --norandommap
--rw=randwrite --group_reporting --iodepth=512 --iodepth_batch=128
--iodepth_batch_complete=128 --gtod_reduce=1 --runtime=30
测试4k 读带宽:
fio --name=rbw --filename=/data/4k_sui_ji_du --numjobs=4
--bs=128k --size=4G --ioengine=libaio --direct=1 --randrepeat=0 --norandommap
--rw=randread --group_reporting --iodepth=512 --iodepth_batch=128
--iodepth_batch_complete=128 --gtod_reduce=1 --runtime=30
测试4k 随机读延迟:
fio --name=rlat --filename=/data/4k_sui_ji_du_yanchi --numjobs=1 --runtime=30
--bs=4k --size=4G --ioengine=libaio --direct=1 --randrepeat=0 --rw=randread
--group_reporting --iodepth=1 --iodepth_batch_complete=0
测试4k 随机读IOPS:
fio --name=riops --filename=/data/4k_sui_ji_du_iops --numjobs=4
--bs=4k --size=4G --ioengine=libaio --direct=1 --randrepeat=0 --norandommap --rw=randread
--group_reporting --iodepth=512 --iodepth_batch=128 --iodepth_batch_complete=128 --gtod_reduce=1 --runtime=30
随机读:
fio -filename=/data/sui_ji_du -iodepth=1 -ioengine=libaio -direct=1 -rw=randread -bs=4k -size=1G -numjobs=10 -runtime=20 -group_reporting -name=test-rand-read
随机写:
fio -filename=/data/sui_ji_xie -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-write
顺序读:
fio -filename=/data/shun_xu_du -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合随机读写:
fio -filename=/data/hun_he_du_xie -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=10G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop
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.
in_queue=花费在队列上的总共时间.
util=磁盘利用率