Add support for O_ATOMIC
[fio.git] / HOWTO
diff --git a/HOWTO b/HOWTO
index eab53d22cf8774166bde8f079ec7ba6fbffd959e..250bc582f548640a92087a6d2119962d5f63d81e 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -443,9 +443,11 @@ bs=int             The block size used for the io units. Defaults to 4k. Values
                can be given for both read and writes. If a single int is
                given, it will apply to both. If a second int is specified
                after a comma, it will apply to writes only. In other words,
-               the format is either bs=read_and_write or bs=read,write.
-               bs=4k,8k will thus use 4k blocks for reads, and 8k blocks
-               for writes. If you only wish to set the write size, you
+               the format is either bs=read_and_write or bs=read,write,trim.
+               bs=4k,8k will thus use 4k blocks for reads, 8k blocks for
+               writes, and 8k for trims. You can terminate the list with
+               a trailing comma. bs=4k,8k, would use the default value for
+               trims.. If you only wish to set the write size, you
                can do so by passing an empty read size - bs=,8k will set
                8k for writes and leave the read default value.
 
@@ -503,6 +505,11 @@ bs_unaligned       If this option is given, any byte size value within bsrange
                may be used as a block range. This typically wont work with
                direct IO, as that normally requires sector alignment.
 
+bs_is_seq_rand If this option is set, fio will use the normal read,write
+               blocksize settings as sequential,random instead. Any random
+               read or write will use the WRITE blocksize settings, and any
+               sequential read or write will use the READ blocksize setting.
+
 zero_buffers   If this option is given, fio will init the IO buffers to
                all zeroes. The default is to fill them with random data.
 
@@ -568,6 +575,8 @@ ioengine=str        Defines how the job issues io to the file. The following
 
                        vsync   Basic readv(2) or writev(2) IO.
 
+                       psyncv  Basic preadv(2) or pwritev(2) IO.
+
                        libaio  Linux native asynchronous io. Note that Linux
                                may only support queued behaviour with
                                non-buffered IO (set direct=1 or buffered=0).
@@ -686,6 +695,11 @@ direct=bool        If value is true, use non-buffered io. This is usually
                O_DIRECT. Note that ZFS on Solaris doesn't support direct io.
                On Windows the synchronous ioengines don't support direct io.
 
+atomic=bool    If value is true, attempt to use atomic direct IO. Atomic
+               writes are guaranteed to be stable once acknowledged by
+               the operating system. Only Linux supports O_ATOMIC right
+               now.
+
 buffered=bool  If value is true, use buffered io. This is the opposite
                of the 'direct' option. Defaults to true.
 
@@ -700,6 +714,13 @@ offset_increment=int       If this is provided, then the real offset becomes
                which are intended to operate on a file in parallel in disjoint
                segments, with even spacing between the starting points.
 
+number_ios=int Fio will normally perform IOs until it has exhausted the size
+               of the region set by size=, or if it exhaust the allocated
+               time (or hits an error condition). With this setting, the
+               range/size can be set independently of the number of IOs to
+               perform. When fio reaches this number, it will exit normally
+               and report status.
+
 fsync=int      If writing to a file, issue a sync of the dirty data
                for every number of blocks given. For example, if you give
                32 as a parameter, fio will sync the file for every 32
@@ -766,6 +787,15 @@ random_distribution=str:float      By default, fio will use a completely uniform
                random_distribution=zipf:1.2 as the option. If a non-uniform
                model is used, fio will disable use of the random map.
 
+percentage_random=int  For a random workload, set how big a percentage should
+               be random. This defaults to 100%, in which case the workload
+               is fully random. It can be set from anywhere from 0 to 100.
+               Setting it to 0 would make the workload fully sequential. Any
+               setting in between will result in a random mix of sequential
+               and random IO, at the given percentages. It is possible to
+               set different values for reads, writes, and trim. To do so,
+               simply use a comma separated list. See blocksize.
+       
 norandommap    Normally fio will cover every block of the file when doing
                random IO. If this option is given, fio will just get a
                new random offset without looking at past io history. This
@@ -817,11 +847,15 @@ thinktime_spin=int
                to sleeping for the rest of the period specified by
                thinktime.
 
-thinktime_blocks
+thinktime_blocks=int
                Only valid if thinktime is set - control how many blocks
                to issue, before waiting 'thinktime' usecs. If not set,
                defaults to 1 which will make fio wait 'thinktime' usecs
-               after every block.
+               after every block. This effectively makes any queue depth
+               setting redundant, since no more than 1 IO will be queued
+               before we have to complete it and do our thinktime. In
+               other words, this setting effectively caps the queue depth
+               if the latter is larger.
 
 rate=int       Cap the bandwidth used by this job. The number is in bytes/sec,
                the normal suffix rules apply. You can use rate=500k to limit
@@ -841,11 +875,11 @@ rate_iops=int     Cap the bandwidth to this number of IOPS. Basically the same
                as rate, just specified independently of bandwidth. If the
                job is given a block size range instead of a fixed value,
                the smallest block size is used as the metric. The same format
-               as rate is used for read vs write seperation.
+               as rate is used for read vs write separation.
 
 rate_iops_min=int If fio doesn't meet this rate of IO, it will cause
                the job to exit. The same format as rate is used for read vs
-               write seperation.
+               write separation.
 
 max_latency=int        If set, fio will exit the job if it exceeds this maximum
                latency. It will exit with an ETIME error.
@@ -1122,9 +1156,6 @@ verify_backlog=int        Fio will normally verify the written contents of a
                holding this meta data. If this option is enabled, fio
                will write only N blocks before verifying these blocks.
 
-               will verify the previously written blocks before continuing
-               to write new ones.
-
 verify_backlog_batch=int       Control how many blocks fio will verify
                if verify_backlog is set. If not set, will default to
                the value of verify_backlog (meaning the entire queue
@@ -1134,7 +1165,7 @@ verify_backlog_batch=int  Control how many blocks fio will verify
                blocks will be verified more than once.
 
 stonewall
-wait_for_previous Wait for preceeding jobs in the job file to exit, before
+wait_for_previous Wait for preceding jobs in the job file to exit, before
                starting this one. Can be used to insert serialization
                points in the job file. A stone wall also implies starting
                a new reporting group.
@@ -1190,7 +1221,7 @@ replay_no_stall=int When replaying I/O with read_iolog the default behavior
 replay_redirect=str While replaying I/O patterns using read_iolog the
                default behavior is to replay the IOPS onto the major/minor
                device that each IOP was recorded from.  This is sometimes
-               undesireable because on a different machine those major/minor
+               undesirable because on a different machine those major/minor
                numbers can map to a different device.  Changing hardware on
                the same system can also result in a different major/minor
                mapping.  Replay_redirect causes all IOPS to be replayed onto
@@ -1219,13 +1250,10 @@ write_lat_log=str Same as write_bw_log, except that this option stores io
 
                write_lat_log=foo
 
-               The actual log names will be foo_slat.log, foo_slat.log,
+               The actual log names will be foo_slat.log, foo_clat.log,
                and foo_lat.log. This helps fio_generate_plot fine the logs
                automatically.
 
-write_bw_log=str If given, write an IOPS log of the jobs in this job
-               file. See write_bw_log.
-
 write_iops_log=str Same as write_bw_log, 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,
@@ -1244,20 +1272,16 @@ lockmem=int     Pin down the specified amount of memory with mlock(2). Can
                The amount specified is per worker.
 
 exec_prerun=str        Before running this job, issue the command specified
-               through system(3).
+               through system(3). Output is redirected in a file called
+               jobname.prerun.txt.
 
 exec_postrun=str After the job completes, issue the command specified
-                though system(3).
+                though system(3). Output is redirected in a file called
+                jobname.postrun.txt.
 
 ioscheduler=str        Attempt to switch the device hosting the file to the specified
                io scheduler before running.
 
-cpuload=int    If the job is a CPU cycle eater, attempt to use the specified
-               percentage of CPU cycles.
-
-cpuchunks=int  If the job is a CPU cycle eater, split the load into
-               cycles of the given time. In microseconds.
-
 disk_util=bool Generate disk utilization statistics, if the platform
                supports it. Defaults to on.
 
@@ -1417,14 +1441,28 @@ that defines them is selected.
                enabled when polling for a minimum of 0 events (eg when
                iodepth_batch_complete=0).
 
+[cpu] cpuload=int Attempt to use the specified percentage of CPU cycles.
+
+[cpu] cpuchunks=int Split the load into cycles of the given time. In
+               microseconds.
+
 [netsplice] hostname=str
 [net] hostname=str 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.
+               used and must be omitted unless it is a valid UDP multicast
+               address.
 
 [netsplice] port=int
 [net] port=int The TCP or UDP port to bind to or connect to.
 
+[netsplice] interface=str
+[net] interface=str  The IP address of the network interface used to send or
+               receive UDP multicast
+
+[netsplice] ttl=int
+[net] ttl=int  Time-to-live value for outgoing UDP multicast packets.
+               Default: 1
+
 [netsplice] nodelay=bool
 [net] nodelay=bool     Set TCP_NODELAY on TCP connections.
 
@@ -1445,7 +1483,7 @@ that defines them is selected.
 [net] 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.
-[net] pingpong Normal a network writer will just continue writing data, and
+[net] pingpong Normaly 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
@@ -1453,6 +1491,9 @@ that defines them is selected.
                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.
+               For UDP multicast traffic pingpong=1 should only be set for a
+               single reader when multiple readers are listening to the same
+               address.
 
 [e4defrag] donorname=str
                File will be used as a block donor(swap extents between files)
@@ -1601,6 +1642,9 @@ util=             The disk utilization. A value of 100% means we kept the disk
 
 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 USR1 signal.
+You can also get regularly timed dumps by using the --status-interval
+parameter, or by creating a file in /tmp named fio-dump-status. If fio
+sees this file, it will unlink it and dump the current output status.
 
 
 7.0 Terse output
@@ -1645,9 +1689,9 @@ Split up, the format is as follows:
                          Read merges, write merges,
                          Read ticks, write ticks,
                          Time spent in queue, disk utilization percentage
-       Additional Info (dependant on continue_on_error, default off): total # errors, first error code
+       Additional Info (dependent on continue_on_error, default off): total # errors, first error code
 
-       Additional Info (dependant on description being set): Text description
+       Additional Info (dependent on description being set): Text description
 
 Completion latency percentiles can be a grouping of up to 20 sets, so
 for the terse output fio writes all of them. Each field will look like this:
@@ -1722,7 +1766,7 @@ trim       trim the given file from the given 'offset' for 'length' bytes
 
 
 9.0 CPU idleness profiling
-
+--------------------------
 In some cases, we want to understand CPU overhead in a test. For example,
 we test patches for the specific goodness of whether they reduce CPU usage.
 fio implements a balloon approach to create a thread per CPU that runs at