X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.1;h=b7abc4b6f97f639e024b470b721598084ed2447b;hp=aae7657281a893f97b8cede4f4b5e59b23d3a5d8;hb=486332e567826eb284bfd9064440867f31fccd7f;hpb=ef71e317e6e1e96a4776610035cd67711603e1f8 diff --git a/fio.1 b/fio.1 index aae76572..b7abc4b6 100644 --- a/fio.1 +++ b/fio.1 @@ -20,8 +20,8 @@ list all available tracing options. .BI \-\-output \fR=\fPfilename Write output to \fIfilename\fR. .TP -.BI \-\-timeout \fR=\fPtimeout -Limit run time to \fItimeout\fR seconds. +.BI \-\-runtime \fR=\fPruntime +Limit run time to \fIruntime\fR seconds. .TP .B \-\-latency\-log Generate per-job latency logs. @@ -44,6 +44,9 @@ Display usage information and exit. .BI \-\-cmdhelp \fR=\fPcommand Print help information for \fIcommand\fR. May be `all' for all commands. .TP +.BI \-\-enghelp \fR=\fPioengine[,command] +List all commands defined by \fIioengine\fR, or print help for \fIcommand\fR defined by \fIioengine\fR. +.TP .BI \-\-showcmd \fR=\fPjobfile Convert \fIjobfile\fR to a set of command-line options. .TP @@ -67,7 +70,7 @@ Set the internal smalloc pool size to \fIkb\fP kilobytes. All fio parser warnings are fatal, causing fio to exit with an error. .TP .BI \-\-max\-jobs \fR=\fPnr -Set the maximum allowed number of jobs (threads/processes) to suport. +Set the maximum allowed number of jobs (threads/processes) to support. .TP .BI \-\-server \fR=\fPargs Start a backend server, with \fIargs\fP specifying what to listen to. See client/server section. @@ -142,9 +145,8 @@ than `./'. .B fio normally makes up a file name based on the job name, thread number, and file number. If you want to share files between threads in a job or several jobs, -specify a \fIfilename\fR for each of them to override the default. If the I/O -engine used is `net', \fIfilename\fR is the host and port to connect to in the -format \fIhost\fR/\fIport\fR. If the I/O engine is file-based, you can specify +specify a \fIfilename\fR for each of them to override the default. +If the I/O engine is file-based, you can specify a number of files by separating the names with a `:' character. `\-' is a reserved name, meaning stdin or stdout, depending on the read/write direction set. @@ -193,7 +195,7 @@ Random reads. .B randwrite Random writes. .TP -.B rw +.B rw, readwrite Mixed sequential reads and writes. .TP .B randrw @@ -202,7 +204,7 @@ Mixed random reads and writes. .P For mixed I/O, the default split is 50/50. For certain types of io the result may still be skewed a bit, since the speed may be different. It is possible to -specify a number of IO's to do before getting a new offset, this is one by +specify a number of IO's to do before getting a new offset, this is done by appending a `:\fI\fR to the end of the string given. For a random read, it would look like \fBrw=randread:8\fR for passing in an offset modifier with a value of 8. If the postfix is used with a sequential IO pattern, then the value @@ -279,7 +281,7 @@ because ZFS doesn't support it. Default: 'posix'. .RE .TP .BI fadvise_hint \fR=\fPbool -Disable use of \fIposix_fadvise\fR\|(2) to advise the kernel what I/O patterns +Use of \fIposix_fadvise\fR\|(2) to advise the kernel what I/O patterns are likely to be issued. Default: true. .TP .BI size \fR=\fPint @@ -357,6 +359,20 @@ contents to defeat normal de-dupe attempts. This is not enough to defeat more clever block compression attempts, but it will stop naive dedupe of blocks. Default: true. .TP +.BI buffer_compress_percentage \fR=\fPint +If this is set, then fio will attempt to provide IO buffer content (on WRITEs) +that compress to the specified level. Fio does this by providing a mix of +random data and zeroes. Note that this is per block size unit, for file/disk +wide compression level that matches this setting, you'll also want to set +\fBrefill_buffers\fR. +.TP +.BI buffer_compress_chunk \fR=\fPint +See \fBbuffer_compress_percentage\fR. This setting allows fio to manage how +big the ranges of random data and zeroed data is. Without this set, fio will +provide \fBbuffer_compress_percentage\fR of blocksize random data, followed by +the remaining zeroed. With this set to some chunk size smaller than the block +size, fio can alternate random and zeroed data throughout the IO buffer. +.TP .BI nrfiles \fR=\fPint Number of files to use for this job. Default: 1. .TP @@ -398,13 +414,7 @@ Basic \fIreadv\fR\|(2) or \fIwritev\fR\|(2) I/O. Will emulate queuing by coalescing adjacents IOs into a single submission. .TP .B libaio -Linux native asynchronous I/O. This engine also has a sub-option, -\fBuserspace_reap\fR. To set it, use \fBioengine=libaio:userspace_reap\fR. -Normally, with the libaio engine in use, fio will use the -\fIio_getevents\fR\|(3) system call to reap newly returned events. With this -flag turned on, the AIO ring will be read directly from user-space to reap -events. The reaping mode is only enabled when polling for a minimum of \fB0\fR -events (eg when \fBiodepth_batch_complete=0\fR). +Linux native asynchronous I/O. This ioengine defines engine specific options. .TP .B posixaio POSIX asynchronous I/O using \fIaio_read\fR\|(3) and \fIaio_write\fR\|(3). @@ -436,14 +446,14 @@ Doesn't transfer any data, just pretends to. Mainly used to exercise \fBfio\fR itself and for debugging and testing purposes. .TP .B net -Transfer over the network. \fBfilename\fR must be set appropriately to -`\fIhost\fR,\fIport\fR,\fItype\fR' regardless of data direction. \fItype\fR -is one of \fBtcp\fR, \fBudp\fR, or \fBunix\fR. For UNIX domain sockets, -the \fIhost\fR parameter is a file system path. +Transfer over the network. The protocol to be used can be defined with the +\fBprotocol\fR parameter. Depending on the protocol, \fBfilename\fR, +\fBhostname\fR, \fBport\fR, or \fBlisten\fR must be specified. +This ioengine defines engine specific options. .TP .B netsplice Like \fBnet\fR, but uses \fIsplice\fR\|(2) and \fIvmsplice\fR\|(2) to map data -and send/receive. +and send/receive. This ioengine defines engine specific options. .TP .B cpuio Doesn't transfer any data, but burns CPU cycles according to \fBcpuload\fR and @@ -462,7 +472,22 @@ and channel semantics (Send/Recv) for the InfiniBand, RoCE and iWARP protocols. .B external Loads an external I/O engine object file. Append the engine filename as `:\fIenginepath\fR'. +.TP +.B falloc + IO engine that does regular linux native fallocate callt to simulate data +transfer as fio ioengine +.br + DDIR_READ does fallocate(,mode = FALLOC_FL_KEEP_SIZE,) +.br + DIR_WRITE does fallocate(,mode = 0) +.br + DDIR_TRIM does fallocate(,mode = FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE) +.TP +.B e4defrag +IO engine that does regular EXT4_IOC_MOVE_EXT ioctls to simulate defragment activity +request to DDIR_WRITE event .RE +.P .RE .TP .BI iodepth \fR=\fPint @@ -499,6 +524,13 @@ Default: true. .BI offset \fR=\fPint Offset in the file to start I/O. Data before the offset will not be touched. .TP +.BI offset_increment \fR=\fPint +If this is provided, then the real offset becomes the +offset + offset_increment * thread_number, where the thread number is a counter +that starts at 0 and is incremented for each job. This option is useful if +there are several jobs which are intended to operate on a file in parallel in +disjoint segments, with even spacing between the starting points. +.TP .BI fsync \fR=\fPint How many I/Os to perform before issuing an \fBfsync\fR\|(2) of dirty data. If 0, don't sync. Default: 0. @@ -538,10 +570,6 @@ Sync file contents when job exits. Default: false. If true, sync file contents on close. This differs from \fBend_fsync\fR in that it will happen on every close, not just at the end of the job. Default: false. .TP -.BI rwmixcycle \fR=\fPint -How many milliseconds before switching between reads and writes for a mixed -workload. Default: 500ms. -.TP .BI rwmixread \fR=\fPint Percentage of a mixed workload that should be reads. Default: 50. .TP @@ -552,6 +580,32 @@ overrides the first. This may interfere with a given rate setting, if fio is asked to limit reads or writes to a certain rate. If that is the case, then the distribution may be skewed. Default: 50. .TP +.BI random_distribution \fR=\fPstr:float +By default, fio will use a completely uniform random distribution when asked +to perform random IO. Sometimes it is useful to skew the distribution in +specific ways, ensuring that some parts of the data is more hot than others. +Fio includes the following distribution models: +.RS +.TP +.B random +Uniform random distribution +.TP +.B zipf +Zipf distribution +.TP +.B pareto +Pareto distribution +.TP +.RE +.P +When using a zipf or pareto distribution, an input value is also needed to +define the access pattern. For zipf, this is the zipf theta. For pareto, +it's the pareto power. Fio includes a test program, genzipf, that can be +used visualize what the given input values will yield in terms of hit rates. +If you wanted to use zipf with a theta of 1.2, you would use +random_distribution=zipf:1.2 as the option. If a non-uniform model is used, +fio will disable use of the random map. +.TP .B norandommap Normally \fBfio\fR will cover every block of the file when doing random I/O. If this parameter is given, a new offset will be chosen without looking at past @@ -563,6 +617,26 @@ fails to allocate the map, if this option is set it will continue without a random block map. As coverage will not be as complete as with random maps, this option is disabled by default. .TP +.BI random_generator \fR=\fPstr +Fio supports the following engines for generating IO offsets for random IO: +.RS +.TP +.B tausworthe +Strong 2^88 cycle random number generator +.TP +.B lfsr +Linear feedback shift register generator +.TP +.RE +.P +Tausworthe is a strong random number generator, but it requires tracking on the +side if we want to ensure that blocks are only read or written once. LFSR +guarantees that we never generate the same offset twice, and it's also less +computationally expensive. It's not a true random generator, however, though +for IO purposes it's typically good enough. LFSR only works with single block +sizes, not with workloads that use multiple block sizes. If used with such a +workload, fio may read or write some blocks multiple times. +.TP .BI nice \fR=\fPint Run job with given nice value. See \fInice\fR\|(2). .TP @@ -611,6 +685,10 @@ is used for read vs write seperation. Average bandwidth for \fBrate\fR and \fBratemin\fR over this number of milliseconds. Default: 1000ms. .TP +.BI max_latency \fR=\fPint +If set, fio will exit the job if it exceeds this maximum latency. It will exit +with an ETIME error. +.TP .BI cpumask \fR=\fPint Set CPU affinity for this job. \fIint\fR is a bitmask of allowed CPUs the job may run on. See \fBsched_setaffinity\fR\|(2). @@ -618,6 +696,28 @@ may run on. See \fBsched_setaffinity\fR\|(2). .BI cpus_allowed \fR=\fPstr Same as \fBcpumask\fR, but allows a comma-delimited list of CPU numbers. .TP +.BI numa_cpu_nodes \fR=\fPstr +Set this job running on spcified NUMA nodes' CPUs. The arguments allow +comma delimited list of cpu numbers, A-B ranges, or 'all'. +.TP +.BI numa_mem_policy \fR=\fPstr +Set this job's memory policy and corresponding NUMA nodes. Format of +the argements: +.RS +.TP +.B [:] +.TP +.B mode +is one of the following memory policy: +.TP +.B default, prefer, bind, interleave, local +.TP +.RE +For \fBdefault\fR and \fBlocal\fR memory policy, no \fBnodelist\fR is +needed to be specified. For \fBprefer\fR, only one node is +allowed. For \fBbind\fR and \fBinterleave\fR, \fBnodelist\fR allows +comma delimited list of numbers, A-B ranges, or 'all'. +.TP .BI startdelay \fR=\fPint Delay start of job for the specified number of seconds. .TP @@ -708,6 +808,11 @@ If true, serialize file creation for the jobs. Default: true. .BI create_on_open \fR=\fPbool If true, the files are not created until they are opened for IO by the job. .TP +.BI create_only \fR=\fPbool +If true, fio will only run the setup phase of the job. If files need to be +laid out or updated on disk, only that will be done. The actual job contents +are not executed. +.TP .BI pre_read \fR=\fPbool If this is given, files will be pre-read into memory before starting the given IO operation. This will also clear the \fR \fBinvalidate\fR flag, since it is @@ -876,6 +981,13 @@ Same as \fBwrite_bw_log\fR, but writes IOPS. If no filename is given with this option, the default filename of "jobname_type.log" is used. Even if the filename is given, fio will still append the type of log. .TP +.BI log_avg_msec \fR=\fPint +By default, fio will log an entry in the iops, latency, or bw log for every +IO that completes. When writing to the disk log, that can quickly grow to a +very large size. Setting this option makes fio average the each log entry +over the specified period of time, reducing the resolution of the log. +Defaults to 0. +.TP .BI disable_lat \fR=\fPbool Disable measurements of total latency numbers. Useful only for cutting back the number of calls to gettimeofday, as that does impact performance at @@ -931,6 +1043,23 @@ entering the kernel with a gettimeofday() call. The CPU set aside for doing these time calls will be excluded from other uses. Fio will manually clear it from the CPU mask of other jobs. .TP +.BI ignore_error \fR=\fPstr +Sometimes you want to ignore some errors during test in that case you can specify +error list for each error type. +.br +ignore_error=READ_ERR_LIST,WRITE_ERR_LIST,VERIFY_ERR_LIST +.br +errors for given error type is separated with ':'. +Error may be symbol ('ENOSPC', 'ENOMEM') or an integer. +.br +Example: ignore_error=EAGAIN,ENOSPC:122 . +.br +This option will ignore EAGAIN from READ, and ENOSPC and 122(EDQUOT) from WRITE. +.TP +.BI error_dump \fR=\fPbool +If set dump every error even if it is non fatal, true by default. If disabled +only fatal error will be dumped +.TP .BI cgroup \fR=\fPstr Add job to this control group. If it doesn't exist, it will be created. The system must have a mounted cgroup blkio mount point for this to work. If @@ -955,6 +1084,27 @@ the thread/process does any work. .BI gid \fR=\fPint Set group ID, see \fBuid\fR. .TP +.BI flow_id \fR=\fPint +The ID of the flow. If not specified, it defaults to being a global flow. See +\fBflow\fR. +.TP +.BI flow \fR=\fPint +Weight in token-based flow control. If this value is used, then there is a +\fBflow counter\fR which is used to regulate the proportion of activity between +two or more jobs. fio attempts to keep this flow counter near zero. The +\fBflow\fR parameter stands for how much should be added or subtracted to the +flow counter on each iteration of the main I/O loop. That is, if one job has +\fBflow=8\fR and another job has \fBflow=-1\fR, then there will be a roughly +1:8 ratio in how much one runs vs the other. +.TP +.BI flow_watermark \fR=\fPint +The maximum value that the absolute value of the flow counter is allowed to +reach before the job must wait for a lower value of the counter. +.TP +.BI flow_sleep \fR=\fPint +The period of time, in microseconds, to wait after the flow watermark has been +exceeded before retrying operations +.TP .BI clat_percentiles \fR=\fPbool Enable the reporting of percentiles of completion latencies. .TP @@ -965,6 +1115,75 @@ the maximum length of the list is 20. Use ':' to separate the numbers. For example, \-\-percentile_list=99.5:99.9 will cause fio to report the values of completion latency below which 99.5% and 99.9% of the observed latencies fell, respectively. +.SS "Ioengine Parameters List" +Some parameters are only valid when a specific ioengine is in use. These are +used identically to normal parameters, with the caveat that when used on the +command line, the must come after the ioengine that defines them is selected. +.TP +.BI (libaio)userspace_reap +Normally, with the libaio engine in use, fio will use +the io_getevents system call to reap newly returned events. +With this flag turned on, the AIO ring will be read directly +from user-space to reap events. The reaping mode is only +enabled when polling for a minimum of 0 events (eg when +iodepth_batch_complete=0). +.TP +.BI (net,netsplice)hostname \fR=\fPstr +The host name or IP address to use for TCP or UDP based IO. +If the job is a TCP listener or UDP reader, the hostname is not +used and must be omitted. +.TP +.BI (net,netsplice)port \fR=\fPint +The TCP or UDP port to bind to or connect to. +.TP +.BI (net,netsplice)protocol \fR=\fPstr "\fR,\fP proto" \fR=\fPstr +The network protocol to use. Accepted values are: +.RS +.RS +.TP +.B tcp +Transmission control protocol +.TP +.B udp +User datagram protocol +.TP +.B unix +UNIX domain socket +.RE +.P +When the protocol is TCP or UDP, the port must also be given, +as well as the hostname if the job is a TCP listener or UDP +reader. For unix sockets, the normal filename option should be +used and the port is invalid. +.RE +.TP +.BI (net,netsplice)listen +For TCP network connections, tell fio to listen for incoming +connections rather than initiating an outgoing connection. The +hostname must be omitted if this option is used. +.TP +.BI (net, pingpong) \fR=\fPbool +Normal a network writer will just continue writing data, and a network reader +will just consume packages. If pingpong=1 is set, a writer will send its normal +payload to the reader, then wait for the reader to send the same payload back. +This allows fio to measure network latencies. The submission and completion +latencies then measure local time spent sending or receiving, and the +completion latency measures how long it took for the other end to receive and +send back. +.TP +.BI (e4defrag,donorname) \fR=\fPstr +File will be used as a block donor (swap extents between files) +.TP +.BI (e4defrag,inplace) \fR=\fPint +Configure donor file block allocation strategy +.RS +.BI 0(default) : +Preallocate donor's file on init +.TP +.BI 1: +allocate space immidietly inside defragment event, and free right after event +.RE +.TP .SH OUTPUT While running, \fBfio\fR will display the status of the created jobs. For example: @@ -1112,6 +1331,10 @@ Total time spent in the disk queue. Disk utilization. .RE .PD +.P +It is also possible to get fio to dump the current output while it is +running, without terminating the job. To do that, send fio the \fBUSR1\fR +signal. .SH TERSE OUTPUT If the \fB\-\-minimal\fR option is given, the results will be printed in a semicolon-delimited format suitable for scripted use - a job description @@ -1222,46 +1445,46 @@ To start the server, you would do: on that machine, where args defines what fio listens to. The arguments are of the form 'type:hostname or IP:port'. 'type' is either 'ip' (or ip4) -for TCP/IP v4, 'ip6' for TCP/IP v6, or 'sock' for a local unix domain socket. -'hostname' is either a hostname or IP address, and 'port' is the port to +for TCP/IP v4, 'ip6' for TCP/IP v6, or 'sock' for a local unix domain +socket. 'hostname' is either a hostname or IP address, and 'port' is the port to listen to (only valid for TCP/IP, not a local socket). Some examples: -1) fio --server +1) fio \-\-server Start a fio server, listening on all interfaces on the default port (8765). -2) fio --server=ip:hostname,4444 +2) fio \-\-server=ip:hostname,4444 Start a fio server, listening on IP belonging to hostname and on port 4444. -3) fio --server=ip6:::1,4444 +3) fio \-\-server=ip6:::1,4444 Start a fio server, listening on IPv6 localhost ::1 and on port 4444. -4) fio --server=,4444 +4) fio \-\-server=,4444 Start a fio server, listening on all interfaces on port 4444. -5) fio --server=1.2.3.4 +5) fio \-\-server=1.2.3.4 Start a fio server, listening on IP 1.2.3.4 on the default port. -6) fio --server=sock:/tmp/fio.sock +6) fio \-\-server=sock:/tmp/fio.sock Start a fio server, listening on the local socket /tmp/fio.sock. When a server is running, you can connect to it from a client. The client is run with: -fio --local-args --client=server --remote-args +fio \-\-local-args \-\-client=server \-\-remote-args -where --local-args are arguments that are local to the client where it is -running, 'server' is the connect string, and --remote-args and +where \-\-local-args are arguments that are local to the client where it is +running, 'server' is the connect string, and \-\-remote-args and are sent to the server. The 'server' string follows the same format as it does on the server side, to allow IP/hostname/socket and port strings. You can connect to multiple clients as well, to do that you could run: -fio --client=server2 --client=server2 +fio \-\-client=server2 \-\-client=server2 .SH AUTHORS .B fio