当前位置: 首页 > 工具软件 > fio > 使用案例 >

Fio

李辉
2023-12-01

运行Fio

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如何工作

让fio模拟想要IO工作负荷的第一步就是编写描述特定setup的job文件。一份job文件可以包含任意数目的线程或者文件。job文件的典型布局:global区域用于定义共享参数,一个或者多个job区域描述job各自需要的参数。当运行时,fio解析job文件,按照job文件描述建立系统任务。如果把一份job自上来下分解开来,大致包含如下基本参数:

  • IO类型
    主要用于定义对文件操作的模式,比如我们可以对文件顺序读取,或者我们也可以进行随机写操作,亦或者读写混杂,顺序与随机混杂以及进行缓冲IO还是直接(raw)IO。
  • 块大小
    定义了我们在进行IO操作的块大小。它可以单个数值也可以一系列块大小。
  • IO大小
    定义了我们打算读或者写的数据量。
  • IO引擎
    定义了我们如何操作IO。我们可以是存储器映射到文件,也可以是常规读写,或使用splice, async IO,甚至是SG(SCSI generic sg)。
  • IO深度
    如果IO引擎是async,IO深度用于定于我们想要维持的队列深度。
  • 目标文件/设备
    定义了我们想把工作负荷分摊到多少文件上。
  • 线程,进程和job同步
    定义了我们需要把工作负荷分摊到多少进程或线程上。

上述基本参数可以定义一个工作负荷,此外,还有其他参数可以用来修改job运转的其他因素。

命令行选项


--debug=type
使能各种fio动作的详细跟踪类型,type可以是"all",即跟踪fio的所有类型跟踪;也可以是某一个或多个特定类型的组合(用逗号作为分隔符)。
比如:
--debug=file,mem 使能文件和存储器调试
额外的可得的日志选项:

  • process:转储与进程相关的信息
  • file:转储跟文件动作的信息
  • io:转储与IO队列相关的信息
  • mem:转储memory分配相关的信息
  • blktrace:转储与blktrace设置相关的信息
  • verify:转储跟IO验证相关的信息
  • all:开启所有debug选项
  • random:转储与随机偏移生成的信息
  • parse:转储与选项匹配和解析相关的信息
  • diskutil:转储与磁盘利用率更新相关的信息
  • job:x:转储与job x相关的信息
  • mutex:转储与互斥锁开启和关闭ops相关的信息
  • profile:转储与profile扩展相关的信息
  • time:转储与内部时间保持相关的信息
  • rate:转储与IO切换频率相关的信息
  • compress:转储与日志压缩和解压缩的信息
  • ?或者help:显示可用的debug选项

--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名字。job名字可以是任何ascii名字,除了global(它有特殊的含义)。紧随job名字后面的是零个或多个参数序列,每行一个参数,参数用于定义job的行为。如果某一行的第一个字符是";“或”#",那么这一行被认为是注释行。

global区域([global])用于设置文件中job的默认值。job可以改写global区域的参数,一个job文件可以包含多个global区域。job仅仅受位于自己之上的global区域影响。

 类似资料:

相关阅读

相关文章

相关问答