fio语法如下:
fio [options] [jobfile] ... [jobfile]
jobfile用于描述fio运行任务的参数设置。一条fio命令中可以执行多个jobfile文件。fio将会逐条执行这些文件,这与在jobfile文件中内部参数区使用stonewall参数是一样的。
如果在job文件中仅仅包含一个job,那么可以仅仅在命令行设置参数即可。命令行参数与job控制全局参数的job参数是一样的。比如,job文件参数iodepth=2
,那么对应的命令行选项可以是iodepth 2
或者iodepth=2
.
fio --iodepth 2 or fio -iodepth=2
; -- start job file --
[global]
rw=randread
size=128m
[random-writers]
ioengine=libaio
也可以使用命令行给出多个job输入,对于每个fio看到的--name
,那么fio将以name为名开启一个新的job。跟在--name
后面的命令行输入仅适用于name job,直到新的--name
输入为止。
fio --name name1 [parameter] --name name2 [parameter] ... --name nameN [parameter]
让fio模拟想要IO工作负荷的第一步就是编写描述特定setup的job文件。一份job文件可以包含任意数目的线程或者文件。job文件的典型布局:global区域用于定义共享参数,一个或者多个job区域描述job各自需要的参数。当运行时,fio解析job文件,按照job文件描述建立系统任务。如果把一份job自上来下分解开来,大致包含如下基本参数:
上述基本参数可以定义一个工作负荷,此外,还有其他参数可以用来修改job运转的其他因素。
--debug=type
使能各种fio动作的详细跟踪类型,type可以是"all",即跟踪fio的所有类型跟踪;也可以是某一个或多个特定类型的组合(用逗号作为分隔符)。
比如:
--debug=file,mem 使能文件和存储器调试
额外的可得的日志选项:
--parse-only:仅仅解析选项,并不启动任何IO
--merge-blktrace-only:仅仅合并blktraces,并不启动任何IO
--output=filename:写输入到filename指定的文件中
--output-format=format:报告格式可以设置为正常,简洁,json或json+,也可以选定多个格式,选项之间用逗号作为分隔符。简洁模式使用CSV格式,json+ is like json, except it adds a full dump of the latency buckets.
--bandwidth-log:产生聚合带宽日志
--minimal:以CSV和分号分隔符格式打印统计信息
--append-terse:以被弃用,不建议使用
--terse-version=version:设置简洁模式版本输出格式(默认为3,可选:2,4,5)
--version:打印版本信息,然后退出
--help
job文件的格式是经典的初始化文件格式,由方括号包围的名字定义了job名字。job名字可以是任何ascii名字,除了global(它有特殊的含义)。紧随job名字后面的是零个或多个参数序列,每行一个参数,参数用于定义job的行为。如果某一行的第一个字符是";“或”#",那么这一行被认为是注释行。
global区域([global])用于设置文件中job的默认值。job可以改写global区域的参数,一个job文件可以包含多个global区域。job仅仅受位于自己之上的global区域影响。