简介
fio 最初是为了让我在出于性能原因或查找/重现错误而想要测试特定工作负载时免去编写特殊测试用例程序的麻烦。 编写这样一个测试应用程序的过程可能会令人厌烦,尤其是当您必须经常这样做时。 因此,我需要一种能够模拟给定 I/O 工作负载的工具,而无需一次又一次地编写定制的测试用例。
但是,测试工作负载很难定义。 可以涉及任意数量的进程或线程,并且每个进程或线程都可以使用自己的方式生成 I/O。 您可能让某人弄脏内存映射文件中的大量内存,或者可能有多个线程使用异步 I/O 发出读取。 fio 需要足够灵活以模拟这两种情况,以及更多情况。
fio 生成许多线程或进程来执行用户指定的特定类型的 I/O 操作。 fio 有一些全局参数,每个参数都由线程继承,除非另外给它们的参数覆盖了给定的设置。 fio 的典型用途是编写一个与要模拟的 I/O 负载相匹配的作业文件。
安装
二进制包安装
下载地址:https://packages.fedoraproject.org/pkgs/fio/
利用包管理工具安装
yum:
yum install fio
dnf:
dnf install fio
编译安装
源代码地址:https://git.kernel.dk/cgit/fio/
编译命令:
$ ./configure
$ make
$ make install
fio参数详解
bw=平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟,提交该IO请求到kernel所花的时间(不包括kernel处理的时间)
clat=完成延迟, 提交该IO请求到kernel后,处理所花的时间
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=磁盘利用率
fio测试执行
命令行模式
根据不同的需求, 组织参数,执行命令。例:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
配置文件模式
除此之外,fio还提供配置文件驱动模式
配置文件示例如下:
[global]
ioengine=libaio
direct=1
size=50G
time_based=1
runtime=900
numjobs=1
filename=/dev/sdb
#IOPS Test include randwrite,mix rw70 and randread
#randwrite test
[4k-randwrite-iodepth16]
stonewall
iodepth=16
rw=randwrite
bs=4k
保存配置文件后,指定此配置文件执行
fio /path/to/config --output=/path/to/log
批量顺序执行fio测试
背景:在同一时间内, 在同一台机器上,最好只跑一个case/配置文件中stonewall也是配置顺序执行的参数, 以免因为CPU/MEM或者磁盘的干扰而导致测试数据不准确。
在面对要顺序执行多个配置文件的情况下, 如果不通过其他工具/脚本的辅助, 只能手动一个跑完后接着执行下一个。这样就会浪费时间和人力。通过脚本工具fio_run_all.sh,
可以依次顺序执行当前目录下的配置文件, 并将日志文件存放在指定目录中。
fio log文件分析
根据不同的测试条件和需求, 会选择fio log中的不同数据。大体会关注:IOPS,BW和Latency.
在测试数据比较大的情况下, 通过人工分析会比较麻烦。 可以通过下面的脚本来做一个fio LOG 分析。
该脚本可以把fio log里的有用参数都截取出来。以比较简单清爽的形式展现。