Add fill_fs alias for fill_device
[fio.git] / HOWTO
diff --git a/HOWTO b/HOWTO
index 7cb24dd8c12e764a7ff5c5c5c813efc775418311..d4e70923facf5b0b3ed322a551bee9a445fc3046 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -271,12 +271,14 @@ filename=str      Fio normally makes up a filename based on the job name,
                can specify a number of files by separating the names with a
                ':' colon. So if you wanted a job to open /dev/sda and /dev/sdb
                as the two working files, you would use
-               filename=/dev/sda:/dev/sdb. If the wanted filename does need to
-               include a colon, then escape that with a '\' character. For
-               instance, if the filename is "/dev/dsk/foo@3,0:c", then you would
-               use filename="/dev/dsk/foo@3,0\:c". '-' is a reserved name,
-               meaning stdin or stdout. Which of the two depends on the read/write
-               direction set.
+               filename=/dev/sda:/dev/sdb. On Windows, disk devices are accessed
+               as \\.\PhysicalDrive0 for the first device, \\.\PhysicalDrive1
+               for the second etc.  If the wanted filename does need to 
+               include a colon, then escape that with a '\' character. 
+               For instance, if the filename is "/dev/dsk/foo@3,0:c", 
+               then you would use filename="/dev/dsk/foo@3,0\:c". 
+               '-' is a reserved name, meaning stdin or stdout. Which of the 
+               two depends on the read/write direction set.
 
 opendir=str    Tell fio to recursively add any file it can find in this
                directory and down the file system tree.
@@ -349,7 +351,8 @@ randrepeat=bool     For random IO workloads, seed the generator in a predictable
 fallocate=bool By default, fio will use fallocate() to advise the system
                of the size of the file we are going to write. This can be
                turned off with fallocate=0. May not be available on all
-               supported platforms.
+               supported platforms.  If using ZFS on Solaris this must be
+               set to 0 because ZFS doesn't support it.
 
 fadvise_hint=bool By default, fio will use fadvise() to advise the kernel
                on what IO patterns it is likely to issue. Sometimes you
@@ -372,10 +375,15 @@ filesize=int      Individual file sizes. May be a range, in which case fio
                and limited to 'size' in total (if that is given). If not
                given, each created file is the same size.
 
-fill_device=bool Sets size to something really large and waits for ENOSPC (no
+fill_device=bool
+fill_fs=bool   Sets size to something really large and waits for ENOSPC (no
                space left on device) as the terminating condition. Only makes
                 sense with sequential write. For a read workload, the mount
-               point will be filled first then IO started on the result.
+               point will be filled first then IO started on the result. This
+               option doesn't make sense if operating on a raw device node,
+               since the size of that is already known by the file system.
+               Additionally, writing beyond end-of-device will not return
+               ENOSPC there.
 
 blocksize=int
 bs=int         The block size used for the io units. Defaults to 4k. Values
@@ -492,6 +500,8 @@ ioengine=str        Defines how the job issues io to the file. The following
 
                        solarisaio Solaris native asynchronous io.
 
+                       windowsaio Windows native asynchronous io.
+
                        mmap    File is memory mapped and data copied
                                to/from using memcpy(3).
 
@@ -549,7 +559,14 @@ ioengine=str       Defines how the job issues io to the file. The following
 iodepth=int    This defines how many io units to keep in flight against
                the file. The default is 1 for each file defined in this
                job, can be overridden with a larger value for higher
-               concurrency.
+               concurrency. Note that increasing iodepth beyond 1 will not
+               affect synchronous ioengines (except for small degress when
+               verify_async is in use). Even async engines may impose OS
+               restrictions causing the desired depth not to be achieved.
+               This may happen on Linux when using libaio and not setting
+               direct=1, since buffered IO is not async on that OS. Keep an
+               eye on the IO depth distribution in the fio output to verify
+               that the achieved depth is as expected. Default: 1.
 
 iodepth_batch_submit=int
 iodepth_batch=int This defines how many pieces of IO to submit at once.
@@ -574,7 +591,7 @@ iodepth_low=int     The low water mark indicating when to start filling
                the depth drain down to 4 before starting to fill it again.
 
 direct=bool    If value is true, use non-buffered io. This is usually
-               O_DIRECT.
+               O_DIRECT. Note that ZFS on Solaris doesn't support direct io.
 
 buffered=bool  If value is true, use buffered io. This is the opposite
                of the 'direct' option. Defaults to true.
@@ -914,6 +931,11 @@ verify_fatal=bool  Normally fio will keep checking the entire contents
                option is set, fio will exit the job on the first observed
                failure.
 
+verify_dump=bool       If set, dump the contents of both the original data
+               block and the data block we read off disk to files. This
+               allows later analysis to inspect just what kind of data
+               corruption occurred. On by default.
+
 verify_async=int       Fio will normally verify IO inline from the submitting
                thread. This option takes an integer describing how many
                async offload threads to create for IO verification instead,
@@ -981,7 +1003,8 @@ zoneskip=int       Skip the specified number of bytes when zonesize data has
                io on zones of a file.
 
 write_iolog=str        Write the issued io patterns to the specified file. See
-               read_iolog.
+               read_iolog.  Specify a separate file for each job, otherwise
+               the iologs will be interspersed and the file may be corrupt.
 
 read_iolog=str Open an iolog with the specified file name and replay the
                io patterns it contains. This can be used to store a