Revamp file locking
[fio.git] / HOWTO
diff --git a/HOWTO b/HOWTO
index 7b717f7739664f44393d67b7b6521e8ca0404eae..3d9229338a11c9628f18d61a2a13e6cdc8b1c263 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -219,6 +219,25 @@ filename=str       Fio normally makes up a filename based on the job name,
 opendir=str    Tell fio to recursively add any file it can find in this
                directory and down the file system tree.
 
 opendir=str    Tell fio to recursively add any file it can find in this
                directory and down the file system tree.
 
+lockfile=str   Fio defaults to not doing any locking files before it does
+               IO to them. If a file or file descriptor is shared, fio
+               can serialize IO to that file to make the end result
+               consistent. This is usual for emulating real workloads that
+               share files. The lock modes are:
+
+                       none            No locking. The default.
+                       exclusive       Only one thread/process may do IO,
+                                       excluding all others.
+                       readwrite       Read-write locking on the file. Many
+                                       readers may access the file at the
+                                       same time, but writes get exclusive
+                                       access.
+
+               The option may be post-fixed with a lock batch number. If
+               set, then each thread/process may do that amount of IOs to
+               the file before giving up the lock. Since lock acqusition is
+               expensive, batching the lock/unlocks will speed up IO.
+
 readwrite=str
 rw=str         Type of io pattern. Accepted values are:
 
 readwrite=str
 rw=str         Type of io pattern. Accepted values are:
 
@@ -344,6 +363,8 @@ ioengine=str        Defines how the job issues io to the file. The following
 
                        psync   Basic pread(2) or pwrite(2) io.
 
 
                        psync   Basic pread(2) or pwrite(2) io.
 
+                       vsync   Basic readv(2) or writev(2) IO.
+
                        libaio  Linux native asynchronous io.
 
                        posixaio glibc posix asynchronous io.
                        libaio  Linux native asynchronous io.
 
                        posixaio glibc posix asynchronous io.
@@ -381,7 +402,10 @@ ioengine=str       Defines how the job issues io to the file. The following
                                cycles according to the cpuload= and
                                cpucycle= options. Setting cpuload=85
                                will cause that job to do nothing but burn
                                cycles according to the cpuload= and
                                cpucycle= options. Setting cpuload=85
                                will cause that job to do nothing but burn
-                               85% of the CPU.
+                               85% of the CPU. In case of SMP machines,
+                               use numjobs=<no_of_cpu> to get desired CPU
+                               usage, as the cpuload only loads a single
+                               CPU at the desired rate.
 
                        guasi   The GUASI IO engine is the Generic Userspace
                                Asyncronous Syscall Interface approach
 
                        guasi   The GUASI IO engine is the Generic Userspace
                                Asyncronous Syscall Interface approach
@@ -402,8 +426,9 @@ iodepth=int This defines how many io units to keep in flight against
                concurrency.
 
 iodepth_batch=int This defines how many pieces of IO to submit at once.
                concurrency.
 
 iodepth_batch=int This defines how many pieces of IO to submit at once.
-               It defaults to the same as iodepth, but can be set lower
-               if one so desires.
+               It defaults to 1 which means that we submit each IO
+               as soon as it is available, but can be raised to submit
+               bigger batches of IO at the time.
 
 iodepth_low=int        The low water mark indicating when to start filling
                the queue again. Defaults to the same as iodepth, meaning
 
 iodepth_low=int        The low water mark indicating when to start filling
                the queue again. Defaults to the same as iodepth, meaning
@@ -629,15 +654,6 @@ verify=str If writing to a file, fio can verify the file contents
                                (timestamp, block number etc.). The block
                                number is verified.
 
                                (timestamp, block number etc.). The block
                                number is verified.
 
-                       pattern Fill the IO buffers with a specific pattern,
-                               that we can use to verify. Depending on the
-                               width of the pattern, fio will fill 1/2/3/4
-                               bytes of the buffer at the time. The pattern
-                               cannot be larger than a 32-bit quantity. The
-                               given pattern is given as a postfix to this
-                               option, ala: verify=pattern:0x5a. It accepts
-                               both hex and dec values.
-
                        null    Only pretend to verify. Useful for testing
                                internals with ioengine=null, not for much
                                else.
                        null    Only pretend to verify. Useful for testing
                                internals with ioengine=null, not for much
                                else.
@@ -663,6 +679,14 @@ verify_interval=siint      Write the verification header at a finer granularity
                        size of header_interval. blocksize should divide this
                        evenly.
 
                        size of header_interval. blocksize should divide this
                        evenly.
 
+verify_pattern=int     If set, fio will fill the io buffers with this
+               pattern. Fio defaults to filling with totally random
+               bytes, but sometimes it's interesting to fill with a known
+               pattern for io verification purposes. Depending on the
+               width of the pattern, fio will fill 1/2/3/4 bytes of the
+               buffer at the time. The verify_pattern cannot be larger than
+               a 32-bit quantity.
+
 verify_fatal=bool      Normally fio will keep checking the entire contents
                before quitting on a block verification failure. If this
                option is set, fio will exit the job on the first observed
 verify_fatal=bool      Normally fio will keep checking the entire contents
                before quitting on a block verification failure. If this
                option is set, fio will exit the job on the first observed