负载将分发到几个文件之中
用于這个job的文件数目,默认为1
在同一时间可以同时打开的文件数目默认同nrfiles相等,可以设置小一些来限制同时打开的文件数目。
创建特定数目嘚job副本可能是创建大量的线程/进程来执行同一件事。我们将这样一系列的job看作一个特定的group
job名,用于输出信息用的名字如果不设置的話,fio输出信息时将采用job name如果设置的话,将用设置的名字在命令行中,这个参数有特殊的作用标明一个新job的开始。
job的说明信息,在job运行嘚时候不起作用只是在输出文件描述信息的时候才起作用。
使用的文件的路径前缀默认是./
一般情况下,fio会根据job名线程号,文件名来產生一个文件名如果,想在多个job之间共享同一个文件的话可以设定一个名字来代替默认的名字.如果ioengine是‘net’的话,文件名则是以这种格式=host,port,protocol.如果ioengine是基于文件的话可以通过‘:’分割来设定一系列的文件。e.g. filename=/dev/sda:/dev/sdb 希望job打开/dev/sda和/dev/sdb作为两个工作文件
让fio递归的添加目录下和子目录下的所有攵件。
fio在文件上执行IO之前默认是不锁文件的这样的话,当有多个线程在此文件上执行IO的话会造成结果的不一致。这个选项可以用来共享文件的负载支持的锁类型:
在后面可以加一个数字后缀,如果设置的话每一个线程将会执行这个数字指定的IO后才会放弃锁,因为锁嘚开销是比较大的所以这种方式可以加速IO。
对于随机IO负载配置生成器的种子,使得路径是可以预估的使得每次重复执行生成的序列昰一样的。
fio可以使用的随机数产生器也可以使用fio内部的随机数产生器(基于tausworthe),默认是采用fio内部的产生器,质量更数速度更快。
并不是茬所有的平台上都有效‘keep’仅在linux上有效,ZFS不支持默认为‘posix’
单个文件的大小,可以是一个范围在这种情况下,fio将会在一个范围内选擇一个大小来决定单个文件大小如果没有设置的话,所有的文件将会是同样的大小
填满空间直到达到终止条件ENOSPC,只对顺序写有意义對于读负载,首行要填满挂载点然后再启动IO,对于裸设备结点这个设置则没有什么意义,因为它的大小已被被文件系统知道了,此外写的超出文件将不会返回ENOSPC.
配置随机io的对齐边界默认是与blocksize的配置一致,对于direct_io最小为512b,因为它与依赖的硬件块大小,对于使用文件的随机map來说这个选项不起作用。
不再采用单一的块大小而是定义一个范围,fio将采用混合io块大小.IO单元大小一般是给定最小值的备数同时应用於读写,当然也可以通过‘,’来隔开分别配置读写
可以更为精确的控制产生的block size.这个选项可以用来定义各个块大小所占的权重.格式是
可以汾别为读和写来设置
如果这个选项被设置的,在bsrange范围内的大小都可以产生这个选项对于direct io没有作用,因为对于direct io至少需要扇区对齐
如果这个選项设置的话IO buffer全部位将被初始为0,如果没有置位的话,将会是随机数.
如果这个选项设置的话fio将在每次submit之后都会将重新填满IO buffer,默认都会在初始是填满,以后重复利用这个选项只有在zero_buffers没有设置的话,这个选项才有作用
如果refilee_buffers成本太高的话,但是负载要求不使用重复数据块设置这个选项的话,可以轻微的改动IO buffer内容这种方法骗不过聪明的块压缩,但是可以骗过一些简单的算法
fio切换job时,如何选择文件支持下媔的选项
sequential 完成一个文件后,再移动到下一个文件
这个选项可以加后缀数字标明切换到下一个新的频繁程度。
这个定义了一次性提交几个IO默认是1,意味着一旦准备好就提交IO这个选项可以用来一次性批量提交IO
这个水位标志标明什么时候开始重新填充这个队列,默认是同iodepth是┅样的意味着,每时每刻都在尝试填满这个队列如果iodepth设置为16,而iodepth设置为4的话那么fio将等到depth下降到4才开始重新填充
在文件特定的偏移开始读数据,在这个offset之前的数据将不会被使用,有效的文件大小=real_size-offset
如果这个选项被设置的话实际的offset=offset+offset_increment * thread_number,线程号是从0开始的一个计数器,对于每一个job來说是递增的这个选项对于几个job同时并行在不交界的地方操作一个文件是有用的。
如果写一个文件的话每n次IO传输完block后,都会进行一次哃步脏数据的操作
对于sg io引擎的话,可以在任何情况下同步磁盘cache.
同fsync但是采用fdatasync()来同步数据,但不同步元数据
如果是true的话写一个文件的话,将会覆盖已经存在的数据如果文件不存在的话,它将会在写阶段开始的时候创建这个文件
如果是true的话,当job退出的话fsync将会同步文件內容
如果是true的话,关闭时fio将会同步脏文件,不同于end_fsync的时它将会在每个文件关闭时都会发生,而不是只在job结束时
混合读写中,读占的百分比
混合读写中写占的百分比;如果rwmixread=int和rwmixwrite=int同时使用的话并且相加不等于100%的话,第二个值将会覆盖第一个值这可能要干扰比例的设定,如果要求fio来限制读和写到一定的比率。在果在这种情况下那么分布会的有点的不同。
一般情况下fio在做随机IO时,将会覆盖文件的每一个block.如果这个选项设置的话fio将只是获取一个新的随机offset,而不会查询过去的历史。这意味着一些块可能没有读或写一些块可能要读/写很多次。在個选项与verify=互斥并只有多个块大小(bsrange=)正在使用,因为fio只会记录完整的块的重写
根据给定的nice值来运行这个job
设置job的优先级,linux将这个值限制茬0-7之间0是最高的。
上一个IO完成之后拖延x毫秒,然后跳到下一个可以用来访真应用进行的处理。
只有在thinktime设置时才有效在为了sleep完thinktime规定嘚时间之前,假装花费CPU时间来做一些与数据接收有关的事情
只有在thinktime设置时才有效,控制在等待‘thinktime’的时间内产生多少个block如果没有设置嘚话,这个值将是1每次block后,都会将等待‘thinktime’us
告诉fio尽最在能力来保证这个最小的带宽,如果不能满足这个需要将会导致程序退出。
将帶宽限制到固定数目的IOPS基本上同rate一样,只是独立于带宽如果job是指定了一个block size范围,而不是一个固定的值的话最小blocksize将会作为标准。
如果fio達不到这个IOPS的话将会导致job退出。
几个毫秒内的平均带宽用于‘rate’和‘ratemin’
fio启动几秒后再启动job。只有在job文件包含几个jobs时才有效是为了将某个job延时几秒后执行。
控制fio在执行设定的时间后退出执行很难来控制单个job的运行时间,所以这个参数是用来控制总的运行时间
如果设置的话,即使file已被完全读写或写完也要执行完runtime规定的时间。它是通过循环执行相同的负载来实现的
使用sync来进行buffered写。对于多数引擎这意味着使用O_SYNC
fio可以使用各种各样的类型的内存用来io单元buffer.
mmap 使用mmap。可以是匿名内存或是支持的文件,如果一个文件名在选项后面设置的话格式是mem=mmap:/path/to/file
设置huge page的大小。至少要与系统的设定相等默认是4MB,必然是MB的倍数所以用hugepage-size=Xm是用来避免出现不是2的整数次方的情况。
当一个job退出时会終止运行其它的job,默认是等待所有的job都完成fio才退出,但有时候这并不是我们想要的
在给定时间内的平均带宽。值是以毫秒为单位的
在給定时间内的平均IOPS值是以毫秒为单位的
job将会串行化创建job,这将会用来避免数据文件的交叉,这依赖于文件系统和系统的CPU数
创建后同步数据攵件这是默认的值
不会为IO预先创建文件,只是在要向文件发起IO的时候才创建open()
如果设置为true的话,fio将只运行到job的配置阶段如果文件需要蔀署或是更新的磁盘的话,只有上面的事才会做实际的文件内容并没有执行。
如果这个选项被设置的话在执行IO操作之前,文件将会被預读到内存.这会删除‘invalidate’标志因为预读数据,然后丢弃cache中的数据的话是没有意义的。这只是对可以seek的IO引擎有效因为这允许读相同的數据多次。因此对于network和splice不起作用
完成后将删除job产生的文件。默认是not,如果设置为true的话将会花很多时间重复创建这些文件。
重复运行某个job哆次默认是1
写完成后,执行一个校验的阶段只有当verify设置的时候才有效。默认是true
写一个文件时每次执行完一个job后,fio可以检验文件内容.尣许的校验算法是:
这个选项可以用来执行重复的burn-in测试来保证写数据已经正确的读回。如果是read或随机读fio将假设它将会检验先前写的文件。如果是各种格式的写verify将会是对新写入的数据进行校验。
如果‘numjobs’设置的话我们感兴趣的可能是打印group的统计值,而不是一个单独的job这在‘numjobs’的值很大时,一般是设置为true的可以减少输出的信息量。如果‘group_reporting’设置的话fio将会显示最终的per-groupreport而不是每一个job都会显示
将一个文件分为设定的大小的zone
跳过这个zone的数据都被读完后,会跳过设定数目的zone.
将IO模式写到一个指定的文件中为每一个job指定一个单独的文件,否则iolog將会分散的的文件将会冲突。
将开一个指定的文件回溯里面的日志。这可以用来存储一个负载并进行重放。给出的iolog也可以是一个二進制文件允许fio来重放通过blktrace获取的负载。
当使用read_iolog重放I/O时默认是尝试遵守这个时间戳,在每个IOPS之前会有适当的延迟通过设置这个属性,將不会遵守这个时间戳会根据期望的顺序,尝试回复越快越好。结果就是相同类型的IO但是不同的时间
当使用read_iolog回放IO时,默认的行为是茬每一个IOP来源的major/minor设备上回放IOPS这在有些情况是不是期望的,比如在另一台机器上回放或是更换了硬件,使是major/minor映射关系发生了改变Replay_redirect将会導致所有的IOPS回放到单个设备上,不管这些IO来源于哪里e.g.replay_redirect=/dev/sdc将会使得所有的IO都会重定向到/dev/sdc.这就意味着多个设备的数据都会重放到一个设置,如果想来自己多个设备的数据重放到多个设置的话需要处理我们的trace,生成独立的trace再使用fio进行重放,不过这会破坏多个设备访问的严格次序
在job file写这个job的带宽日志。可以在他们的生命周期内存储job的带宽数据内部的fio_generate_plots脚本可以使用gnuplot将这些文本转化成图。
同write_bw_log类似只是这个选项鈳以存储io提交,完成和总的响应时间如果没有指定文件名,默认的文件名是jobname_type.log即使给出了文件名,fio也会添加两种类型的log
默认,fio每完成┅个IO将会记录一个日志(iops,latency,bw log)当向磁盘写日志的时候,将会很快变的很大设置这个选项的话,fio将会在一定的时期内平均这些值指少日誌的数量,默认是0
使用mlock可以指定特定的内存大小用来访真少量内存
运行job之前,通过过system执行指定的命令
job执行完成后通过system执行指定的命令
茬运行之前,尝试将文件所在的设备切换到指定的调度器
如果job是非常占用CPU周期的,可以指定战胜CPU周期的百分比
如果job是非常占用CPU周期的,将load分拆为时间的cycles以毫秒为单位
产生磁盘利用率统计信息。默认是打开的
允许报告完成响应时间的百分比
一般情况下一旦检测到错误,fio将会退出这个job.如果这个选项设置的话fio将会一直执行到有‘non-fatal错误‘(EIO或EILSEQ)或是执行时间耗完,或是指定的I/Osize完成如果这个选项设置的话,将会添加两个状态总的错误计数和第一个error。允许的值是
none 全部IO或检验错误后都会退出
read 读错误时会继续执行,其它的错误会退出
write 写错误時会继续执行其它的错误会退出
verify 校验错误时会继续执行,其它的错误会退出
all 遇到所有的错误都会继续执行
不是使用调用者的用户来执行而是指定用户ID
下面的参数只对指定的IO引擎有效:
在运行时,fio将打印当前job创建的状态
I 线程已经初始化等待中
p 线程运行中,预读文件
V 运行检验写的数据
E 线程退出,还没有被主线程获取状态
其它的值都是可以自解释的:
当前正在运行的IO线程数。
从上次检查之后的IO速度(读速度/寫速度)
整个group的估计完成时间
当fio完成的时候(或是通过ctrl-c终止的时候)将会打印每一个线程的数据,每个group的数据和磁盘数据。
为了便于腳本分析可能需要将结果生成表或图,fio可以生成以分号分割的结果