HOWTO: Add platforms without fdatasync(2)
[fio.git] / HOWTO
diff --git a/HOWTO b/HOWTO
index 295dc10d9b038a6a46d7fae6556dcb856eb0e6b0..7884944a763d55436b365e8ca90c83cfbb9f5505 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -631,7 +631,8 @@ Job description
 
 .. option:: numjobs=int
 
-       Create the specified number of clones of this job. May be used to setup a
+       Create the specified number of clones of this job. Each clone of job
+       is spawned as an independent thread or process. May be used to setup a
        larger number of threads/processes doing the same thing. Each thread is
        reported separately; to see statistics for all clones as a whole, use
        :option:`group_reporting` in conjunction with :option:`new_group`.
@@ -732,11 +733,15 @@ Target file/device
 
        Fio normally makes up a `filename` 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 `filename` for each of them to override the default.  If the
-       ioengine is file based, you can specify a number of files by separating the
-       names with a ':' colon. So if you wanted a job to open :file:`/dev/sda` and
-       :file:`/dev/sdb` as the two working files, you would use
-       ``filename=/dev/sda:/dev/sdb``.
+       jobs with fixed file paths, specify a `filename` for each of them to override
+       the default. If the ioengine is file based, you can specify a number of files
+       by separating the names with a ':' colon. So if you wanted a job to open
+       :file:`/dev/sda` and :file:`/dev/sdb` as the two working files, you would use
+       ``filename=/dev/sda:/dev/sdb``. This also means that whenever this option is
+       specified, :option:`nrfiles` is ignored. The size of regular files specified
+       by this option will be :option:`size` divided by number of files unless
+       explicit size is specified by :option:`filesize`.
+
        On Windows, disk devices are accessed as :file:`\\\\.\\PhysicalDrive0` for
        the first device, :file:`\\\\.\\PhysicalDrive1` for the second etc.
        Note: Windows and FreeBSD prevent write access to areas
@@ -798,7 +803,12 @@ Target file/device
 
 .. option:: nrfiles=int
 
-       Number of files to use for this job. Defaults to 1.
+       Number of files to use for this job. Defaults to 1. The size of files
+       will be :option:`size` divided by this unless explicit size is specified by
+       :option:`filesize`. Files are created for each thread separately, and each
+       file will have a file number within its name by default, as explained in
+       :option:`filename` section.
+
 
 .. option:: openfiles=int
 
@@ -1061,7 +1071,8 @@ I/O type
 
        Start I/O at the given offset in the file. The data before the given offset
        will not be touched. This effectively caps the file size at `real_size -
-       offset`.
+       offset`. Can be combined with :option:`size` to constrain the start and
+       end range that I/O will be done within.
 
 .. option:: offset_increment=int
 
@@ -1093,7 +1104,7 @@ I/O type
 .. option:: fdatasync=int
 
        Like :option:`fsync` but uses :manpage:`fdatasync(2)` to only sync data and
-       not metadata blocks.  In FreeBSD and Windows there is no
+       not metadata blocks.  In Windows, FreeBSD, and DragonFlyBSD there is no
        :manpage:`fdatasync(2)`, this falls back to using :manpage:`fsync(2)`.
 
 .. option:: write_barrier=int
@@ -1496,15 +1507,19 @@ I/O size
 
 .. option:: size=int
 
-       The total size of file I/O for this job. Fio will run until this many bytes
-       has been transferred, unless runtime is limited by other options (such as
-       :option:`runtime`, for instance, or increased/decreased by
-       :option:`io_size`). Unless specific :option:`nrfiles` and :option:`filesize`
-       options are given, fio will divide this size between the available files
-       specified by the job. If not set, fio will use the full size of the given
+       The total size of file I/O for each thread of this job. Fio will run until
+       this many bytes has been transferred, unless runtime is limited by other options
+       (such as :option:`runtime`, for instance, or increased/decreased by :option:`io_size`).
+       Fio will divide this size between the available files determined by options
+       such as :option:`nrfiles`, :option:`filename`, unless :option:`filesize` is
+       specified by the job. If the result of division happens to be 0, the size is
+       set to the physical size of the given files or devices.
+       If this option is not specified, fio will use the full size of the given
        files or devices.  If the files do not exist, size must be given. It is also
        possible to give size as a percentage between 1 and 100. If ``size=20%`` is
        given, fio will use 20% of the full size of the given files or devices.
+       Can be combined with :option:`offset` to constrain the start and end range
+       that I/O will be done within.
 
 .. option:: io_size=int, io_limit=int
 
@@ -1523,6 +1538,8 @@ I/O size
        Individual file sizes. May be a range, in which case fio will select sizes
        for files at random within the given range and limited to :option:`size` in
        total (if that is given). If not given, each created file is the same size.
+       This option overrides :option:`size` in terms of file size, which means
+       this value is used as a fixed size or possible range of each file.
 
 .. option:: file_append=bool
 
@@ -1679,7 +1696,7 @@ I/O engine
                        files based on the offset generated by fio backend. (see the example
                        job file to create such files, use ``rw=write`` option). Please
                        note, you might want to set necessary environment variables to work
-                       with hdfs/libhdfs properly. Each jobs uses it's own connection to
+                       with hdfs/libhdfs properly.  Each job uses its own connection to
                        HDFS.
 
                **mtd**
@@ -1721,7 +1738,7 @@ caveat that when used on the command line, they must come after the
        reap events. The reaping mode is only enabled when polling for a minimum of
        0 events (e.g. when :option:`iodepth_batch_complete` `=0`).
 
-.. option:: hipri : [psyncv2]
+.. option:: hipri : [pvsync2]
 
        Set RWF_HIPRI on I/O, indicating to the kernel that it's of higher priority
        than normal.
@@ -2105,7 +2122,8 @@ Threads, processes and job synchronization
 .. option:: thread
 
        Fio defaults to forking jobs, however if this option is given, fio will use
-       :manpage:`pthread_create(3)` to create threads instead.
+       POSIX Threads function :manpage:`pthread_create(3)` to create threads instead
+       of forking processes.
 
 .. option:: wait_for=str
 
@@ -2337,6 +2355,18 @@ Verification
                **sha1**
                        Use optimized sha1 as the checksum function.
 
+               **sha3-224**
+                       Use optimized sha3-224 as the checksum function.
+
+               **sha3-256**
+                       Use optimized sha3-256 as the checksum function.
+
+               **sha3-384**
+                       Use optimized sha3-384 as the checksum function.
+
+               **sha3-512**
+                       Use optimized sha3-512 as the checksum function.
+
                **meta**
                        This option is deprecated, since now meta information is included in
                        generic verification header and meta verification happens by
@@ -2889,7 +2919,7 @@ Interpreting the output
 Fio spits out a lot of output. While running, fio will display the status of the
 jobs created. An example of that would be::
 
-    Jobs: 1: [_r] [24.8% done] [r=20992KiB/s,w=24064KiB/s,t=0KiB/s] [r=82,w=94,t=0 iops] [eta 00h:01m:31s]
+    Jobs: 1 (f=1): [_(1),M(1)][24.8%][r=20.5MiB/s,w=23.5MiB/s][r=82,w=94 IOPS][eta 01m:31s]
 
 The characters inside the square brackets denote the current status of each
 thread. The possible values (in typical life cycle order) are:
@@ -2934,14 +2964,15 @@ Fio will condense the thread string as not to take up more space on the command
 line as is needed. For instance, if you have 10 readers and 10 writers running,
 the output would look like this::
 
-    Jobs: 20 (f=20): [R(10),W(10)] [4.0% done] [r=20992KiB/s,w=24064KiB/s,t=0KiB/s] [r=82,w=94,t=0 iops] [eta 57m:36s]
+    Jobs: 20 (f=20): [R(10),W(10)][4.0%][r=20.5MiB/s,w=23.5MiB/s][r=82,w=94 IOPS][eta 57m:36s]
 
 Fio will still maintain the ordering, though. So the above means that jobs 1..10
 are readers, and 11..20 are writers.
 
 The other values are fairly self explanatory -- number of threads currently
-running and doing I/O, rate of I/O since last check (read speed listed first,
-then write speed), and the estimated completion percentage and time for the
+running and doing I/O, the number of currently open files (f=), the rate of I/O
+since last check (read speed listed first, then write speed and optionally trim
+speed), and the estimated completion percentage and time for the current
 running group. It's impossible to estimate runtime of the following groups (if
 any). Note that the string is displayed in order, so it's possible to tell which
 of the jobs are currently doing what. The first character is the first job