Provided by: stress-ng_0.11.07-1ubuntu2_amd64 bug

NAME

       stress-ng - a tool to load and stress a computer system

SYNOPSIS

       stress-ng [OPTION [ARG]] ...

DESCRIPTION

       stress-ng  will  stress  test  a  computer system in various selectable ways. It was designed to exercise
       various physical subsystems of a computer as well as the  various  operating  system  kernel  interfaces.
       stress-ng  also  has a wide range of CPU specific stress tests that exercise floating point, integer, bit
       manipulation and control flow.

       stress-ng was originally intended to make a machine work hard and trip hardware issues  such  as  thermal
       overruns  as  well  as  operating  system  bugs that only occur when a system is being thrashed hard. Use
       stress-ng with caution as some of the tests can make a system run hot on  poorly  designed  hardware  and
       also can cause excessive system thrashing which may be difficult to stop.

       stress-ng  can  also  measure  test  throughput  rates; this can be useful to observe performance changes
       across different operating system releases or types of hardware. However, it has never been  intended  to
       be used as a precise benchmark test suite, so do NOT use it in this manner.

       Running  stress-ng  with  root privileges will adjust out of memory settings on Linux systems to make the
       stressors unkillable in low memory situations, so use this judiciously.  With the appropriate  privilege,
       stress-ng  can  allow  the ionice class and ionice levels to be adjusted, again, this should be used with
       care.

       One can specify the number of processes to invoke per type of stress test; specifying a negative or  zero
       value will select the number of processors available as defined by sysconf(_SC_NPROCESSORS_CONF).

OPTIONS

       General stress-ng control options:

       --abort
              this option will force all running stressors to abort (terminate) if any other stressor terminates
              prematurely because of a failure.

       --aggressive
              enables more file, cache and memory  aggressive  options.  This  may  slow  tests  down,  increase
              latencies and reduce the number of bogo ops as well as changing the balance of user time vs system
              time used depending on the type of stressor being used.

       -a N, --all N, --parallel N
              start N instances of all stressors in parallel. If N is less than zero, then the  number  of  CPUs
              online  is  used for the number of instances.  If N is zero, then the number of CPUs in the system
              is used.

       -b N, --backoff N
              wait N microseconds between the start of each stress worker process. This allows one  to  ramp  up
              the stress tests over time.

       --class name
              specify  the class of stressors to run. Stressors are classified into one or more of the following
              classes: cpu, cpu-cache, device, io, interrupt, filesystem, memory, network, os,  pipe,  scheduler
              and  vm.   Some  stressors fall into just one class. For example the 'get' stressor is just in the
              'os' class. Other stressors fall into more than one class, for  example,  the  'lsearch'  stressor
              falls into the 'cpu', 'cpu-cache' and 'memory' classes as it exercises all these three.  Selecting
              a specific class will run all the stressors that fall into that  class  only  when  run  with  the
              --sequential option.

              Specifying  a  name  followed  by a question mark (for example --class vm?) will print out all the
              stressors in that specific class.

       -n, --dry-run
              parse options, but do not run stress tests. A no-op.

       -h, --help
              show help.

       --ignite-cpu
              alter kernel controls to try and maximize the CPU. This requires root privilege to  alter  various
              /sys  interface  controls.   Currently  this  only  works for Intel P-State enabled x86 systems on
              Linux.

       --ionice-class class
              specify ionice class (only on Linux). Can be idle (default), besteffort, be, realtime, rt.

       --ionice-level level
              specify ionice level (only on Linux). For idle, 0 is the only possible option. For  besteffort  or
              realtime values 0 (highest priority) to 7 (lowest priority). See ionice(1) for more details.

       --job jobfile
              run  stressors  using  a  jobfile.  The jobfile is essentially a file containing stress-ng options
              (without the leading --) with one option per line. Lines  may  have  comments  with  comment  text
              proceeded by the # character. A simple example is as follows:

              run sequential   # run stressors sequentially
              verbose          # verbose output
              metrics-brief    # show metrics at end of run
              timeout 60s      # stop each stressor after 60 seconds
              #
              # vm stressor options:
              #
              vm 2             # 2 vm stressors
              vm-bytes 128M    # 128MB available memory
              vm-keep          # keep vm mapping
              vm-populate      # populate memory
              #
              # memcpy stressor options:
              #
              memcpy 5         # 5 memcpy stressors

              The job file introduces the run command that specifies how to run the stressors:

              run sequential - run stressors sequentially
              run parallel - run stressors together in parallel

              Note that 'run parallel' is the default.

       -k, --keep-name
              by  default,  stress-ng will attempt to change the name of the stress processes according to their
              functionality; this option disables this and keeps the process names to be the name of the  parent
              process, that is, stress-ng.

       --log-brief
              by default stress-ng will report the name of the program, the message type and the process id as a
              prefix to all output. The --log-brief option will output messages without these fields to  produce
              a less verbose output.

       --log-file filename
              write messages to the specified log file.

       --maximize
              overrides  the  default  stressor settings and instead sets these to the maximum settings allowed.
              These defaults can always be overridden by the per stressor settings options if required.

       --metrics
              output number of bogo operations in total performed by the stress processes.  Note that these  are
              not  a  reliable  metric  of  performance  or throughput and have not been designed to be used for
              benchmarking whatsoever. The metrics are just a useful way to observe how a  system  behaves  when
              under various kinds of load.

              The following columns of information are output:

              Column Heading             Explanation
              bogo ops                   number  of iterations of the stressor during the run. This is metric of
                                         how much overall "work" has been achieved in bogo operations.
              real time (secs)           average wall clock duration (in seconds) of the stressor. This  is  the
                                         total  wall clock time of all the instances of that particular stressor
                                         divided by the number of these stressors being run.
              usr time (secs)            total user time (in seconds) consumed running all the instances of  the
                                         stressor.
              sys time (secs)            total  system  time  (in seconds) consumed running all the instances of
                                         the stressor.
              bogo ops/s (real time)     total bogo operations per second based on wall clock run time. The wall
                                         clock  time reflects the apparent run time. The more processors one has
                                         on a system the more the work load can be distributed  onto  these  and
                                         hence  the  wall  clock  time  will  reduce  and the bogo ops rate will
                                         increase.  This is essentially the "apparent"  bogo  ops  rate  of  the
                                         system.
              bogo ops/s (usr+sys time)  total  bogo  operations  per second based on cumulative user and system
                                         time.  This is the real  bogo  ops  rate  of  the  system  taking  into
                                         consideration the actual time execution time of the stressor across all
                                         the  processors.   Generally  this  will  decrease  as  one  adds  more
                                         concurrent  stressors  due  to  contention  on cache, memory, execution
                                         units, buses and I/O devices.

       --metrics-brief
              enable metrics and only output metrics that are non-zero.

       --minimize
              overrides the default stressor settings and instead sets these to the  minimum  settings  allowed.
              These defaults can always be overridden by the per stressor settings options if required.

       --no-madvise
              from  version  0.02.26  stress-ng automatically calls madvise(2) with random advise options before
              each mmap and munmap to stress the the vm subsystem a little harder. The --no-advise option  turns
              this default off.

       --no-rand-seed
              Do  not  seed  the  stress-ng  pseudo-random  number generator with a quasi random start seed, but
              instead seed it with constant values. This forces tests to run each  time  using  the  same  start
              conditions which can be useful when one requires reproducible stress tests.

       --oomable
              Do  not  respawn  a  stressor  if  it  gets killed by the Out-of-Memory (OOM) killer.  The default
              behaviour is to restart a new instance of a stressor if  the  kernel  OOM  killer  terminates  the
              process. This option disables this default behaviour.

       --page-in
              touch  allocated  pages  that are not in core, forcing them to be paged back in.  This is a useful
              option to force all the allocated pages to be paged  in  when  using  the  bigheap,  mmap  and  vm
              stressors.   It  will  severely degrade performance when the memory in the system is less than the
              allocated buffer sizes.  This uses mincore(2) to determine the pages that  are  not  in  core  and
              hence need touching to page them back in.

       --pathological
              enable  stressors that are known to hang systems.  Some stressors can quickly consume resources in
              such a way that they can rapidly hang a  system  before  the  kernel  can  OOM  kill  them.  These
              stressors  are not enabled by default, this option enables them, but you probably don't want to do
              this. You have been warned.

       --perf measure processor and system activity using perf events. Linux only and caveat  emptor,  according
              to  perf_event_open(2):  "Always  double-check  your  results! Various generalized events have had
              wrong values.".  Note that with Linux 4.7 one needs to have CAP_SYS_ADMIN  capabilities  for  this
              option  to  work,  or  adjust  /proc/sys/kernel/perf_event_paranoid to below 2 to use this without
              CAP_SYS_ADMIN.

       -q, --quiet
              do not show any output.

       -r N, --random N
              start N random stress workers. If N is 0, then the number of configured processors is used for N.

       --sched scheduler
              select the named scheduler (only on Linux). To see the list of available schedulers use: stress-ng
              --sched which

       --sched-prio prio
              select  the  scheduler priority level (only on Linux). If the scheduler does not support this then
              the default priority level of 0 is chosen.

       --sequential N
              sequentially run all the stressors one by one for a default of 60 seconds. The number of instances
              of  each  of the individual stressors to be started is N.  If N is less than zero, then the number
              of CPUs online is used for the number of instances.  If N is zero, then the number of CPUs in  the
              system is used.  Use the --timeout option to specify the duration to run each stressor.

       --stressors
              output the names of the available stressors.

       --syslog
              log output (except for verbose -v messages) to the syslog.

       --taskset list
              set  CPU  affinity  based  on the list of CPUs provided; stress-ng is bound to just use these CPUs
              (Linux only). The CPUs to be used are specified by a comma separated list of CPU (0 to  N-1).  One
              can specify a range of CPUs using '-', for example: --taskset 0,2-3,6,7-11

       --temp-path path
              specify  a  path  for stress-ng temporary directories and temporary files; the default path is the
              current working directory.  This path must have read and write access  for  the  stress-ng  stress
              processes.

       --thrash
              This  can  only  be  used  when  running  on  Linux  and with root privilege. This option starts a
              background thrasher process that works through all the processes on a system and tries to page  as
              many pages in the processes as possible.  This will cause considerable amount of thrashing of swap
              on an over-committed system.

       -t N, --timeout T
              stop stress test after T seconds. One can also specify the units  of  time  in  seconds,  minutes,
              hours,  days  or  years  with the suffix s, m, h, d or y.  Note: A timeout of 0 will run stress-ng
              without any timeouts (run forever).

       --timestamp
              add a timestamp in hours, minutes, seconds and hundredths of a second to the log output.

       --timer-slack N
              adjust the per process timer slack to N nanoseconds  (Linux  only).  Increasing  the  timer  slack
              allows  the kernel to coalesce timer events by adding some fuzziness to timer expiration times and
              hence reduce wakeups.  Conversely, decreasing the timer slack will increase wakeups.  A value of 0
              for the timer-slack will set the system default of 50,000 nanoseconds.

       --times
              show the cumulative user and system times of all the child processes at the end of the stress run.
              The percentage of utilisation of available CPU time is also calculated from the number of  on-line
              CPUs in the system.

       --tz   collect  temperatures  from the available thermal zones on the machine (Linux only).  Some devices
              may have one or more thermal zones, where as others may have none.

       -v, --verbose
              show all debug, warnings and normal information output.

       --verify
              verify results when a test is run. This is not available on all tests. This will sanity check  the
              computations or memory contents from a test run and report to stderr any unexpected failures.

       -V, --version
              show version of stress-ng, version of toolchain used to build stress-ng and system information.

       -x, --exclude list
              specify  a list of one or more stressors to exclude (that is, do not run them).  This is useful to
              exclude specific stressors when one selects many  stressors  to  run  using  the  --class  option,
              --sequential,  --all  and  --random options. Example, run the cpu class stressors concurrently and
              exclude the numa and search stressors:

              stress-ng --class cpu --all 1 -x numa,bsearch,hsearch,lsearch

       -Y, --yaml filename
              output gathered statistics to a YAML formatted file named 'filename'.

       Stressor specific options:

       --access N
              start N workers that work through various settings of file mode bits (read,  write,  execute)  for
              the file owner and checks if the user permissions of the file using access(2) and faccessat(2) are
              sane.

       --access-ops N
              stop access workers after N bogo access sanity checks.

       --affinity N
              start N workers that rapidly change CPU affinity (only on Linux). Rapidly switching  CPU  affinity
              can contribute to poor cache behaviour.

       --affinity-ops N
              stop affinity workers after N bogo affinity operations (only on Linux).

       --affinity-rand
              switch CPU affinity randomly rather than the default of sequentially.

       --af-alg N
              start  N  workers  that  exercise the AF_ALG socket domain by hashing and encrypting various sized
              random messages. This exercises the availble hashes, ciphers, rng and aead crypto engines  in  the
              Linux kernel.

       --af-alg-ops N
              stop af-alg workers after N AF_ALG messages are hashed.

       --af-alg-dump
              dump  the internal list representing cryptographic algorithms parsed from the /proc/crypto file to
              standard output (stdout).

       --aio N
              start N workers that issue multiple small asynchronous I/O writes and reads on a relatively  small
              temporary  file  using the POSIX aio interface.  This will just hit the file system cache and soak
              up a lot of user and kernel time in issuing and handling I/O requests.  By  default,  each  worker
              process will handle 16 concurrent I/O requests.

       --aio-ops N
              stop POSIX asynchronous I/O workers after N bogo asynchronous I/O requests.

       --aio-requests N
              specify the number of POSIX asynchronous I/O requests each worker should issue, the default is 16;
              1 to 4096 are allowed.

       --aiol N
              start N workers that issue multiple 4K random asynchronous I/O writes using the Linux  aio  system
              calls  io_setup(2),  io_submit(2),  io_getevents(2)  and  io_destroy(2).   By default, each worker
              process will handle 16 concurrent I/O requests.

       --aiol-ops N
              stop Linux asynchronous I/O workers after N bogo asynchronous I/O requests.

       --aiol-requests N
              specify the number of Linux asynchronous I/O requests each worker should issue, the default is 16;
              1 to 4096 are allowed.

       --apparmor N
              start  N  workers  that exercise various parts of the AppArmor interface. Currently one needs root
              permission to run this particular test. Only available on Linux systems with AppArmor support  and
              requires the CAP_MAC_ADMIN capability.

       --apparmor-ops
              stop the AppArmor workers after N bogo operations.

       --atomic N
              start N workers that exercise various GCC __atomic_*() built in operations on 8, 16, 32 and 64 bit
              integers that are shared among the N workers. This stressor is only available for builds using GCC
              4.7.4 or higher. The stressor forces many front end cache stalls and cache references.

       --atomic-ops N
              stop the atomic workers after N bogo atomic operations.

       --bad-altstack N
              start  N  workers  that  create broken alternative signal stacks for SIGSEGV handling that in turn
              create secondary SIGSEGVs. A variety of randonly selected methods are used to create the stacks:

              a)     Unmapping the alternative signal stack, before triggering the signal handling.

              b)     Changing the alternative signal stack to just being read only, write only, execute only.

              c)     Using a NULL alternative signal stack.

              d)     Using the signal handler object as the alternative signal stack.

              e)     Unmapping the alternative signal stack during execution of the signal handler.

       --bad-altstack-ops N
              stop the bad alternative stack stressors after N SIGSEGV bogo operations.

       -B N, --bigheap N
              start N workers that grow their heaps by reallocating memory. If the out of memory killer (OOM) on
              Linux  kills the worker or the allocation fails then the allocating process starts all over again.
              Note that the OOM adjustment for the worker is set so that the OOM killer will treat these workers
              as the first candidate processes to kill.

       --bigheap-ops N
              stop the big heap workers after N bogo allocation operations are completed.

       --bigheap-growth N
              specify  amount  of  memory to grow heap by per iteration. Size can be from 4K to 64MB. Default is
              64K.

       --binderfs N
              start N workers that mount, exercise and unmount binderfs. The binder control device is  exercised
              with 256 sequential BINDER_CTL_ADD ioctl calls per loop.

       --binderfs-ops N
              stop after N binderfs cycles.

       --bind-mount N
              start  N  workers  that  repeatedly  bind  mount  / to / inside a user namespace. This can consume
              resources rapidly, forcing out of memory situations. Do not use this stressor unless you  want  to
              risk hanging your machine.

       --bind-mount-ops N
              stop after N bind mount bogo operations.

       --branch N
              start  N  workers that randomly jump to 256 randomly selected locations and hence exercise the CPU
              branch prediction logic.

       --branch-ops N
              stop the branch stressors after N jumps

       --brk N
              start N workers that grow the data segment by one page at a time using multiple brk(2) calls. Each
              successfully  allocated  new  page  is  touched  to ensure it is resident in memory.  If an out of
              memory condition occurs then the test will reset the data segment to the point before  it  started
              and repeat the data segment resizing over again.  The process adjusts the out of memory setting so
              that it may be killed by the out of memory (OOM) killer before other processes.  If it  is  killed
              by the OOM killer then it will be automatically re-started by a monitoring parent process.

       --brk-ops N
              stop the brk workers after N bogo brk operations.

       --brk-notouch
              do  not  touch  each newly allocated data segment page. This disables the default of touching each
              newly allocated page and hence avoids the kernel from  necessarily  backing  the  page  with  real
              physical memory.

       --bsearch N
              start N workers that binary search a sorted array of 32 bit integers using bsearch(3). By default,
              there are 65536 elements in the array.  This is a useful  method  to  exercise  random  access  of
              memory and processor cache.

       --bsearch-ops N
              stop the bsearch worker after N bogo bsearch operations are completed.

       --bsearch-size N
              specify the size (number of 32 bit integers) in the array to bsearch. Size can be from 1K to 4M.

       -C N, --cache N
              start  N  workers  that perform random wide spread memory read and writes to thrash the CPU cache.
              The code does not intelligently determine the CPU cache configuration and so it may be sub-optimal
              in producing hit-miss read/write activity for some processors.

       --cache-fence
              force  write  serialization  on  each  store  operation  (x86  only).  This is a no-op for non-x86
              architectures.

       --cache-flush
              force flush cache on each store operation (x86 only). This is a no-op for non-x86 architectures.

       --cache-level N
              specify level of cache to exercise (1=L1 cache, 2=L2 cache, 3=L3/LLC cache (the default)).  If the
              cache hierarchy cannot be determined, built-in defaults will apply.

       --cache-no-affinity
              do not change processor affinity when --cache is in effect.

       --cache-sfence
              force write serialization on each store operation using the sfence instruction (x86 only). This is
              a no-op for non-x86 architectures.

       --cache-ops N
              stop cache thrash workers after N bogo cache thrash operations.

       --cache-prefetch
              force read prefetch on next read address on architectures that support prefetching.

       --cache-ways N
              specify the number of cache ways to exercise. This allows a subset of the overall cache size to be
              exercised.

       --cap N
              start N workers that read per process capabilities via calls to capget(2) (Linux only).

       --cap-ops N
              stop after N cap bogo operations.

       --chattr N
              start  N workers that attempt to exercise file attributes via the EXT2_IOC_SETFLAGS ioctl. This is
              indended to be intentionally racy and exercise a  range  of  chattr  attributes  by  enabling  and
              disabling them on a file shared amongst the N chattr stressor processes. (Linux only).

       --chattr-ops N
              stop after N chattr bogo operations.

       --chdir N
              start N workers that change directory between directories using chdir(2).

       --chdir-ops N
              stop after N chdir bogo operations.

       --chdir-dirs N
              exercise  chdir  on  N  directories.  The  default  is  8192  directories, this allows 64 to 65536
              directories to be used instead.

       --chmod N
              start N workers that change the file mode bits via chmod(2) and fchmod(2) on the  same  file.  The
              greater  the  value  for  N  then  the more contention on the single file.  The stressor will work
              through all the combination of mode bits.

       --chmod-ops N
              stop after N chmod bogo operations.

       --chown N
              start N workers that exercise chown(2) on the same file. The greater the value for N then the more
              contention on the single file.

       --chown-ops N
              stop the chown workers after N bogo chown(2) operations.

       --chroot N
              start  N workers that exercise chroot(2) on various valid and invalid chroot paths. Only available
              on Linux systems and requires the CAP_SYS_ADMIN capability.

       --chroot-ops N
              stop the chroot workers after N bogo chroot(2) operations.

       --clock N
              start N workers exercising clocks and POSIX timers. For all known clock types this  will  exercise
              clock_getres(2),  clock_gettime(2)  and clock_nanosleep(2).  For all known timers it will create a
              50000ns timer and busy poll this until it expires.  This  stressor  will  cause  frequent  context
              switching.

       --clock-ops N
              stop clock stress workers after N bogo operations.

       --clone N
              start  N  workers  that  create  clones  (via  the clone(2) and clone3() system calls).  This will
              rapidly try to create a default of 8192 clones that immediately die and wait  in  a  zombie  state
              until  they  are reaped.  Once the maximum number of clones is reached (or clone fails because one
              has reached the maximum allowed) the oldest clone thread is reaped and a new clone is then created
              in a first-in first-out manner, and then repeated.  A random clone flag is selected for each clone
              to try to exercise different clone operations.  The clone stressor is a Linux only option.

       --clone-ops N
              stop clone stress workers after N bogo clone operations.

       --clone-max N
              try to create as many as N clone threads. This may not be reached if the system limit is less than
              N.

       --close N
              start  N workers that try to force race conditions on closing opened file descriptors.  These file
              descriptors have been opened in various ways to try and exercise different kernel close handlers.

       --close-ops N
              stop close workers after N bogo close operations.

       --context N
              start N workers that run three threads that use swapcontext(3) to implement  the  thread-to-thread
              context  switching.  This  exercises  rapid  process context saving and restoring and is bandwidth
              limited by register and memory save and restore rates.

       --context-ops N
              stop context workers after N bogo context switches.  In this stressor, 1 bogo op is equivalent  to
              1000 swapcontext calls.

       --copy-file N
              start  N  stressors that copy a file using the Linux copy_file_range(2) system call. 2MB chunks of
              data are copied from random locations from one file to random locations to a destination file.  By
              default,   the  files  are  256  MB  in  size.  Data  is  sync'd  to  the  filesystem  after  each
              copy_file_range(2) call.

       --copy-file-ops N
              stop after N copy_file_range() calls.

       --copy-file-bytes N
              copy file size, the default is 256 MB. One can specify the size as % of free  space  on  the  file
              system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       -c N, --cpu N
              start  N  workers  exercising the CPU by sequentially working through all the different CPU stress
              methods. Instead of exercising all the CPU stress methods, one can specify a specific  CPU  stress
              method with the --cpu-method option.

       --cpu-ops N
              stop cpu stress workers after N bogo operations.

       -l P, --cpu-load P
              load CPU with P percent loading for the CPU stress workers. 0 is effectively a sleep (no load) and
              100 is full loading.  The loading loop is broken into compute time (load%) and sleep time (100%  -
              load%).  Accuracy  depends  on  the  overall  load  of the processor and the responsiveness of the
              scheduler, so the actual load may be different from the desired load.  Note  that  the  number  of
              bogo  CPU operations may not be linearly scaled with the load as some systems employ CPU frequency
              scaling and so heavier loads produce an increased CPU frequency and greater CPU bogo operations.

              Note: This option only applies to the --cpu stressor option and not to all of  the  cpu  class  of
              stressors.

       --cpu-load-slice S
              note  -  this option is only useful when --cpu-load is less than 100%. The CPU load is broken into
              multiple busy and idle cycles. Use this option to specify the duration of a busy  time  slice.   A
              negative  value  for  S  specifies the number of iterations to run before idling the CPU (e.g. -30
              invokes 30 iterations of a CPU stress loop).  A zero value selects a random busy  time  between  0
              and 0.5 seconds.  A positive value for S specifies the number of milliseconds to run before idling
              the CPU (e.g. 100 keeps the CPU busy for 0.1 seconds).  Specifying small values  for  S  lends  to
              small  time  slices  and  smoother  scheduling.   Setting --cpu-load as a relatively low value and
              --cpu-load-slice to be large will cycle the CPU between long idle and  busy  cycles  and  exercise
              different  CPU  frequencies.   The  thermal  range  of  the  CPU is also cycled, so this is a good
              mechanism to  exercise  the  scheduler,  frequency  scaling  and  passive/active  thermal  cooling
              mechanisms.

              Note:  This  option  only  applies to the --cpu stressor option and not to all of the cpu class of
              stressors.

       --cpu-method method
              specify a cpu stress method. By default,  all  the  stress  methods  are  exercised  sequentially,
              however  one can specify just one method to be used if required.  Available cpu stress methods are
              described as follows:

              Method           Description
              all              iterate over all the below cpu stress methods

              ackermann        Ackermann function: compute A(3, 10), where:
                                A(m, n) = n + 1 if m = 0;
                                A(m - 1, 1) if m > 0 and n = 0;
                                A(m - 1, A(m, n - 1)) if m > 0 and n > 0
              apery            calculate Apery's constant ζ(3); the sum of 1/(n ↑  3)  for  to  a  precision  of
                               1.0x10↑14
              bitops           various  bit  operations  from  bithack,  namely: reverse bits, parity check, bit
                               count, round to nearest power of 2
              callfunc         recursively call 8 argument C function to a depth of 1024 calls and unwind
              cfloat           1000 iterations of a mix of floating point complex operations
              cdouble          1000 iterations of a mix of double floating point complex operations
              clongdouble      1000 iterations of a mix of long double floating point complex operations
              collatz          compute the 1348 steps in the collatz sequence from starting number 989345275647.
                               Where f(n) = n / 2 (for even n) and f(n) = 3n + 1 (for odd n).
              correlate        perform a 16384 × 1024 correlation of random doubles
              cpuid            fetch cpu specific information using the cpuid instruction (x86 only)
              crc16            compute 1024 rounds of CCITT CRC16 on random data
              decimal32        1000 iterations of a mix of 32 bit decimal floating point operations (GCC only)
              decimal64        1000 iterations of a mix of 64 bit decimal floating point operations (GCC only)
              decimal128       1000 iterations of a mix of 128 bit decimal floating point operations (GCC only)
              dither           Floyd–Steinberg  dithering of a 1024 × 768 random image from 8 bits down to 1 bit
                               of depth
              div64            50,000 64 bit unsigned integer divisions
              djb2a            128 rounds of hash DJB2a (Dan Bernstein hash using the xor variant) on 128  to  1
                               bytes of random strings
              double           1000 iterations of a mix of double precision floating point operations
              euler            compute e using n = (1 + (1 ÷ n)) ↑ n
              explog           iterate on n = exp(log(n) ÷ 1.00002)
              factorial        find factorials from 1..150 using Stirling's and Ramanujan's approximations
              fibonacci        compute Fibonacci sequence of 0, 1, 1, 2, 5, 8...
              fft              4096 sample Fast Fourier Transform
              float            1000 iterations of a mix of floating point operations
              float16          1000 iterations of a mix of 16 bit floating point operations
              float32          1000 iterations of a mix of 32 bit floating point operations
              float80          1000 iterations of a mix of 80 bit floating point operations
              float128         1000 iterations of a mix of 128 bit floating point operations
              floatconversion  perform  65536 iterations of floating point conversions between float, double and
                               long double floating point variables.
              fnv1a            128 rounds of hash FNV-1a  (Fowler–Noll–Vo  hash  using  the  xor  then  multiply
                               variant) on 128 to 1 bytes of random strings
              gamma            calculate  the  Euler-Mascheroni constant γ using the limiting difference between
                               the harmonic series (1 + 1/2 + 1/3 + 1/4  +  1/5  ...  +  1/n)  and  the  natural
                               logarithm ln(n), for n = 80000.
              gcd              compute GCD of integers
              gray             calculate binary to gray code and gray code back to binary for integers from 0 to
                               65535
              hamming          compute Hamming H(8,4) codes on 262144 lots of 4 bit data. This turns 4 bit  data
                               into  8  bit  Hamming code containing 4 parity bits. For data bits d1..d4, parity
                               bits are computed as:
                                 p1 = d2 + d3 + d4
                                 p2 = d1 + d3 + d4
                                 p3 = d1 + d2 + d4
                                 p4 = d1 + d2 + d3
              hanoi            solve a 21 disc Towers of Hanoi stack using the recursive solution
              hyperbolic       compute sinh(θ) × cosh(θ) + sinh(2θ) + cosh(3θ) for float, double and long double
                               hyperbolic sine and cosine functions where θ = 0 to 2π in 1500 steps
              idct             8 × 8 IDCT (Inverse Discrete Cosine Transform)
              int8             1000 iterations of a mix of 8 bit integer operations
              int16            1000 iterations of a mix of 16 bit integer operations
              int32            1000 iterations of a mix of 32 bit integer operations
              int64            1000 iterations of a mix of 64 bit integer operations
              int128           1000 iterations of a mix of 128 bit integer operations (GCC only)
              int32float       1000 iterations of a mix of 32 bit integer and floating point operations
              int32double      1000  iterations  of  a mix of 32 bit integer and double precision floating point
                               operations
              int32longdouble  1000 iterations of a mix of 32 bit integer and  long  double  precision  floating
                               point operations
              int64float       1000 iterations of a mix of 64 bit integer and floating point operations

              int64double      1000  iterations  of  a mix of 64 bit integer and double precision floating point
                               operations
              int64longdouble  1000 iterations of a mix of 64 bit integer and  long  double  precision  floating
                               point operations
              int128float      1000  iterations  of  a mix of 128 bit integer and floating point operations (GCC
                               only)
              int128double     1000 iterations of a mix of 128 bit integer and double precision  floating  point
                               operations (GCC only)
              int128longdouble 1000  iterations  of  a mix of 128 bit integer and long double precision floating
                               point operations (GCC only)
              int128decimal32  1000 iterations of a mix of 128 bit integer and 32  bit  decimal  floating  point
                               operations (GCC only)
              int128decimal64  1000  iterations  of  a  mix of 128 bit integer and 64 bit decimal floating point
                               operations (GCC only)
              int128decimal128 1000 iterations of a mix of 128 bit integer and 128 bit  decimal  floating  point
                               operations (GCC only)
              intconversion    perform  65536  iterations  of integer conversions between int16, int32 and int64
                               variables.
              jenkin           Jenkin's integer hash on 128 rounds of 128..1 bytes of random data
              jmp              Simple unoptimised compare >, <, == and jmp branching
              ln2              compute ln(2) based on series:
                                1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ...
              longdouble       1000 iterations of a mix of long double precision floating point operations
              loop             simple empty loop
              matrixprod       matrix product of two 128 × 128 matrices of double floats. Testing on 64 bit  x86
                               hardware  shows  that  this  is provides a good mix of memory, cache and floating
                               point operations and is probably the best CPU method to use to  make  a  CPU  run
                               hot.
              nsqrt            compute sqrt() of long doubles using Newton-Raphson
              omega            compute  the omega constant defined by Ωe↑Ω = 1 using efficient iteration of Ωn+1
                               = (1 + Ωn) / (1 + e↑Ωn)
              parity           compute parity using various methods from  the  Standford  Bit  Twiddling  Hacks.
                               Methods  employed  are:  the naïve way, the naïve way with the Brian Kernigan bit
                               counting optimisation, the multiply way, the parallel way, and the  lookup  table
                               ways (2 variations).
              phi              compute the Golden Ratio ϕ using series
              pi               compute π using the Srinivasa Ramanujan fast convergence algorithm
              pjw              128 rounds of hash pjw function on 128 to 1 bytes of random strings
              prime            find  all  the  primes  in the range  1..1000000 using a slightly optimised brute
                               force naïve trial division search
              psi              compute ψ (the reciprocal Fibonacci constant) using the sum of the reciprocals of
                               the Fibonacci numbers
              queens           compute all the solutions of the classic 8 queens problem for board sizes 1..12
              rand             16384 iterations of rand(), where rand is the MWC pseudo random number generator.
                               The MWC random function concatenates two 16 bit multiply-with-carry generators:
                                x(n) = 36969 × x(n - 1) + carry,
                                y(n) = 18000 × y(n - 1) + carry mod 2 ↑ 16

                               and has period of around 2 ↑ 60
              rand48           16384 iterations of drand48(3) and lrand48(3)
              rgb              convert RGB to YUV and back to RGB (CCIR 601)
              sdbm             128 rounds of hash sdbm (as used in the SDBM database and GNU awk) on  128  to  1
                               bytes of random strings
              sieve            find the primes in the range 1..10000000 using the sieve of Eratosthenes
              stats            calculate  minimum,  maximum, arithmetic mean, geometric mean, harmoninc mean and
                               standard deviation on 250 randomly generated positive double precision value.
              sqrt             compute sqrt(rand()), where rand is the MWC pseudo random number generator
              trig             compute sin(θ) × cos(θ) + sin(2θ) + cos(3θ) for float,  double  and  long  double
                               sine and cosine functions where θ = 0 to 2π in 1500 steps
              union            perform  integer  arithmetic on a mix of bit fields in a C union.  This exercises
                               how well the compiler and CPU can perform integer bit field loads and stores.
              zeta             compute the Riemann Zeta function ζ(s) for s = 2.0..10.0

              Note that some of these methods try to exercise the CPU with computations found in some real world
              use  cases. However, the code has not been optimised on a per-architecture basis, so may be a sub-
              optimal compared to hand-optimised code used in some applications.  They do try to  represent  the
              typical instruction mixes found in these use cases.

       --cpu-online N
              start  N  workers  that  put  randomly  selected CPUs offline and online. This Linux only stressor
              requires root privilege to perform this action. By default the first CPU (CPU 0) is never offlined
              as this has been found to be problematic on some systems and can result in a shutdown.

       --cpu-online-all
              The  default  is to never offline the first CPU.  This option will offline and online all the CPUs
              include CPU 0. This may cause some systems to shutdown.

       --cpu-online-ops N
              stop after offline/online operations.

       --crypt N
              start N workers that encrypt a 16 character random  password  using  crypt(3).   The  password  is
              encrypted using MD5, SHA-256 and SHA-512 encryption methods.

       --crypt-ops N
              stop after N bogo encryption operations.

       --cyclic N
              start  N workers that exercise the real time FIFO or Round Robin schedulers with cyclic nanosecond
              sleeps. Normally one would just  use  1  worker  instance  with  this  stressor  to  get  reliable
              statistics.  This stressor measures the first 10 thousand latencies and calculates the mean, mode,
              minimum, maximum latencies along with various latency percentiles for the just  the  first  cyclic
              stressor  instance.  One  has to run this stressor with CAP_SYS_NICE capability to enable the real
              time scheduling policies. The FIFO scheduling policy is the default.

       --cyclic-ops N
              stop after N sleeps.

       --cyclic-dist N
              calculate and print a latency distribution with the interval of N nanoseconds.  This is helpful to
              see where the latencies are clustering.

       --cyclic-method [ clock_ns | itimer | poll | posix_ns | pselect | usleep ]
              specify the cyclic method to be used, the default is clock_ns. The available cyclic methods are as
              follows:

              Method           Description
              clock_ns         sleep for  the  specified  time  using  the  clock_nanosleep(2)  high  resolution
                               nanosleep and the CLOCK_REALTIME real time clock.
              itimer           wakeup a paused process with a CLOCK_REALTIME itimer signal.
              poll             delay for the specified time using a poll delay loop that checks for time changes
                               using clock_gettime(2) on the CLOCK_REALTIME clock.
              posix_ns         sleep for the  specified  time  using  the  POSIX  nanosleep(2)  high  resolution
                               nanosleep.
              pselect          sleep for the specified time using pselect(2) with null file descriptors.
              usleep           sleep to the nearest microsecond using usleep(2).

       --cyclic-policy [ fifo | rr ]
              specify the desired real time scheduling policy, ff (first-in, first-out) or rr (round robin).

       --cyclic-prio P
              specify the scheduling priority P. Range from 1 (lowest) to 100 (highest).

       --cyclic-sleep N
              sleep  for  N  nanoseconds  per test cycle using clock_nanosleep(2) with the CLOCK_REALTIME timer.
              Range from 1 to 1000000000 nanoseconds.

       --daemon N
              start N workers that each create a daemon that dies immediately after creating another daemon  and
              so  on.  This  effectively  works through the process table with short lived processes that do not
              have a parent and are waited for by init.  This puts pressure on init to do rapid  child  reaping.
              The  daemon  processes  perform  the usual mix of calls to turn into typical UNIX daemons, so this
              artificially mimics very heavy daemon system stress.

       --daemon-ops N
              stop daemon workers after N daemons have been created.

       --dccp N
              start N workers that send and receive data using the Datagram Congestion Control  Protocol  (DCCP)
              (RFC4340).  This  involves  a  pair  of client/server processes performing rapid connect, send and
              receives and disconnects on the local host.

       --dccp-domain D
              specify the domain to use, the default is ipv4. Currently ipv4 and ipv6 are supported.

       --dccp-port P
              start DCCP at port P. For N dccp worker processes, ports P to P - 1 are used.

       --dccp-ops N
              stop dccp stress workers after N bogo operations.

       --dccp-opts [ send | sendmsg | sendmmsg ]
              by default, messages are sent using send(2). This option allows one to specify the sending  method
              using  send(2), sendmsg(2) or sendmmsg(2).  Note that sendmmsg is only available for Linux systems
              that support this system call.

       -D N, --dentry N
              start N workers that create and remove directory entries.  This should  create  file  system  meta
              data  activity. The directory entry names are suffixed by a gray-code encoded number to try to mix
              up the hashing of the namespace.

       --dentry-ops N
              stop denty thrash workers after N bogo dentry operations.

       --dentry-order [ forward | reverse | stride | random ]
              specify unlink order of dentries, can be one of forward, reverse, stride or random.   By  default,
              dentries  are  unlinked  in  random order.  The forward order will unlink them from first to last,
              reverse order will unlink them from last to first, stride  order  will  unlink  them  by  stepping
              around  order  in  a  quasi-random  pattern  and random order will randomly select one of forward,
              reverse or stride orders.

       --dentries N
              create N dentries per dentry thrashing loop, default is 2048.

       --dev N
              start N workers that exercise the /dev devices. Each worker runs 5 concurrent threads that perform
              open(2),  fstat(2), lseek(2), poll(2), fcntl(2), mmap(2), munmap(2), fsync(2) and close(2) on each
              device.  Note that watchdog devices are not exercised.

       --dev-ops N
              stop dev workers after N bogo device exercising operations.

       --dev-shm N
              start N workers that fallocate large files in /dev/shm and then mmap these into memory  and  touch
              all the pages. This exercises pages being moved to/from the buffer cache. Linux only.

       --dev-shm-ops N
              stop after N bogo allocation and mmap /dev/shm operations.

       --dir N
              start N workers that create and remove directories using mkdir and rmdir.

       --dir-ops N
              stop directory thrash workers after N bogo directory operations.

       --dir-dirs N
              exercise  dir  on  N  directories.  The  default  is  8192  directories,  this  allows 64 to 65536
              directories to be used instead.

       --dirdeep N
              start N workers that create a depth-first tree of directories to a maximum  depth  as  limited  by
              PATH_MAX  or  ENAMETOOLONG (which ever occurs first).  By default, each level of the tree contains
              one directory, but this can be increased to a maximum of  10  sub-trees  using  the  --dirdeep-dir
              option.   To  stress inode creation, a symlink and a hardlink to a file at the root of the tree is
              created in each level.

       --dirdeep-ops N
              stop directory depth workers after N bogo directory operations.

       --dirdeep-dirs N
              create N directories at each tree level. The default is just 1 but can be increased to  a  maximum
              of 10 per level.

       --dirdeep-inodes N
              consume  up to N inodes per dirdeep stressor while creating directories and links. The value N can
              be the number of inodes or a percentage of the total available free inodes on the filesystem being
              used.

       --dnotify N
              start  N  workers  performing  file  system  activities such as making/deleting files/directories,
              renaming files, etc. to stress exercise the various dnotify events (Linux only).

       --dnotify-ops N
              stop inotify stress workers after N dnotify bogo operations.

       --dup N
              start N workers that perform dup(2) and then close(2) operations on /dev/zero.  The maximum  opens
              at  one  time  is  system  defined,  so  the  test will run up to this maximum, or 65536 open file
              descriptors, which ever comes first.

       --dup-ops N
              stop the dup stress workers after N bogo open operations.

       --dynlib N
              start N workers that dynamically load and unload various shared libraries. This  exercises  memory
              mapping  and  dynamic  code  loading  and  symbol  lookups. See dlopen(3) for more details of this
              mechanism.

       --dynlib-ops N
              stop workers after N bogo load/unload cycles.

       --efivar N
              start N works that  exercise  the  Linux  /sys/firmware/efi/vars  interface  by  reading  the  EFI
              variables.  This is a Linux only stress test for platforms that support the EFI vars interface and
              requires the CAP_SYS_ADMIN capability.

       --efivar-ops N
              stop the efivar stressors after N EFI variable read operations.

       --enosys N
              start N workers that exercise non-functional system call numbers.  This  calls  a  wide  range  of
              system  call  numbers  to see if it can break a system where these are not wired up correctly.  It
              also keeps track of system calls that exist (ones that don't return ENOSYS) so that it  can  focus
              on purely finding and exercising non-functional system calls. This stressor exercises system calls
              from 0 . .__NR_syscalls + 1024, random system calls within constrained in the ranges of 0 to  2^8,
              2^16,  2^24,  2^32, 2^40, 2^48, 2^56 and 2^64 bits, high system call numbers and various other bit
              patterns to try to get wide good coverage. To keep the environment clean, each system  call  being
              tested runs in a child process with reduced capabilities.

       --enosys-ops N
              stop after N bogo enosys system call attempts

       --env N
              start  N workers that creates numerous large environment variables to try to trigger out of memory
              conditions using setenv(3).  If ENOMEM occurs then the enviroment is emptied  and  another  memory
              filling retry occurs.  The process is restarted if it is killed by the Out Of Memory (OOM) killer.

       --env-ops N
              stop after N bogo setenv/unsetenv attempts.

       --epoll N
              start N workers that perform various related socket stress activity using epoll_wait(2) to monitor
              and handle new connections.  This  involves  client/server  processes  performing  rapid  connect,
              send/receives and disconnects on the local host.  Using epoll allows a large number of connections
              to be efficiently handled, however, this can lead to the connection table filling up and  blocking
              further  socket  connections,  hence  impacting  on  the  epoll  bogo op stats.  For ipv4 and ipv6
              domains, multiple servers are spawned on multiple ports. The epoll stressor is for Linux only.

       --epoll-domain D
              specify the domain to use, the default is unix (aka local). Currently  ipv4,  ipv6  and  unix  are
              supported.

       --epoll-port P
              start  at  socket  port P. For N epoll worker processes, ports P to (P * 4) - 1 are used for ipv4,
              ipv6 domains and ports P to P - 1 are used for the unix domain.

       --epoll-ops N
              stop epoll workers after N bogo operations.

       --eventfd N
              start N parent and child worker processes that read and write 8 byte event messages  between  them
              via the eventfd mechanism (Linux only).

       --eventfd-ops N
              stop eventfd workers after N bogo operations.

       --eventfd-nonblock N
              enable  EFD_NONBLOCK to allow non-blocking on the event file descriptor. This will cause reads and
              writes to return with EAGAIN rather the blocking and hence causing a high rate of polling I/O.

       --exec N
              start N workers continually forking children that exec stress-ng and then exit almost immediately.
              If  a  system  has  pthread  support  then  1  in 4 of the exec's will be from inside a pthread to
              exercise exec'ing from inside a pthread context.

       --exec-ops N
              stop exec stress workers after N bogo operations.

       --exec-max P
              create P child processes that exec stress-ng and then wait for them to  exit  per  iteration.  The
              default  is  just 1; higher values will create many temporary zombie processes that are waiting to
              be reaped. One can potentially fill up the process table using  high  values  for  --exec-max  and
              --exec.

       -F N, --fallocate N
              start  N  workers  continually  fallocating  (preallocating  file  space)  and  ftruncating  (file
              truncating) temporary files.  If the file is larger than the free space, fallocate will produce an
              ENOSPC error which is ignored by this stressor.

       --fallocate-bytes N
              allocated  file size, the default is 1 GB. One can specify the size as % of free space on the file
              system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --fallocate-ops N
              stop fallocate stress workers after N bogo fallocate operations.

       --fanotify N
              start N workers performing file system activities such as creating, opening, writing, reading  and
              unlinking  files  to  exercise the fanotify event monitoring interface (Linux only). Each stressor
              runs a child process to generate file events and a  parent  process  to  read  file  events  using
              fanotify. Has to be run with CAP_SYS_ADMIN capability.

       --fanotify-ops N
              stop fanotify stress workers after N bogo fanotify events.

       --fault N
              start N workers that generates minor and major page faults.

       --fault-ops N
              stop the page fault workers after N bogo page fault operations.

       --fcntl N
              start  N  workers  that  perform fcntl(2) calls with various commands.  The exercised commands (if
              available) are: F_DUPFD, F_DUPFD_CLOEXEC, F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETOWN,  F_SETOWN,
              F_GETOWN_EX, F_SETOWN_EX, F_GETSIG, F_SETSIG, F_GETLK, F_SETLK, F_SETLKW, F_OFD_GETLK, F_OFD_SETLK
              and F_OFD_SETLKW.

       --fcntl-ops N
              stop the fcntl workers after N bogo fcntl operations.

       --fiemap N
              start N workers that each create a file with many  randomly  changing  extents  and  has  4  child
              processes per worker that gather the extent information using the FS_IOC_FIEMAP ioctl(2).

       --fiemap-ops N
              stop after N fiemap bogo operations.

       --fiemap-bytes N
              specify  the  size  of the fiemap'd file in bytes.  One can specify the size as % of free space on
              the file system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b,  k,  m  or  g.
              Larger files will contain more extents, causing more stress when gathering extent information.

       --fifo N
              start N workers that exercise a named pipe by transmitting 64 bit integers.

       --fifo-ops N
              stop fifo workers after N bogo pipe write operations.

       --fifo-readers N
              for  each  worker,  create  N  fifo  reader workers that read the named pipe using simple blocking
              reads.

       --file-ioctl N
              start N workers that exercise various file specific ioctl(2) calls. This will attempt to  use  the
              FIONBIO,  FIOQSIZE,  FIGETBSZ,  FIOCLEX,  FIONCLEX, FIONBIO, FIOASYNC, FIOQSIZE, FIFREEZE, FITHAW,
              FICLONE, FICLONERANGE, FIONREAD, FIONWRITE and FS_IOC_RESVSP ioctls if these are defined.

       --file-ioctl-ops N
              stop file-ioctl workers after N file ioctl bogo operations.

       --filename N
              start N workers that exercise file creation using various length filenames containing a  range  of
              allowed  filename  characters.   This  will  try  to  see if it can exceed the file system allowed
              filename length was well as test various filename lengths between 1 and the maximum allowed by the
              file system.

       --filename-ops N
              stop filename workers after N bogo filename tests.

       --filename-opts opt
              use characters in the filename based on option 'opt'. Valid options are:

              Option           Description
              probe            default option, probe the file system for valid allowed characters in a file name
                               and use these
              posix            use characters as specified by  The  Open  Group  Base  Specifications  Issue  7,
                               POSIX.1-2008, 3.278 Portable Filename Character Set
              ext              use  characters  allowed  by  the ext2, ext3, ext4 file systems, namely any 8 bit
                               character apart from NUL and /

       --flock N
              start N workers locking on a single file.

       --flock-ops N
              stop flock stress workers after N bogo flock operations.

       -f N, --fork N
              start N workers continually forking children that immediately exit.

       --fork-ops N
              stop fork stress workers after N bogo operations.

       --fork-max P
              create P child processes and then wait for them to exit per iteration.  The  default  is  just  1;
              higher  values  will create many temporary zombie processes that are waiting to be reaped. One can
              potentially fill up the the process table using high values for --fork-max and --fork.

       --fp-error N
              start N workers that generate floating point exceptions. Computations are performed to  force  and
              check for the FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW and FE_UNDERFLOW exceptions.  EDOM
              and ERANGE errors are also checked.

       --fp-error-ops N
              stop after N bogo floating point exceptions.

       --fstat N
              start N workers fstat'ing files in a directory (default is /dev).

       --fstat-ops N
              stop fstat stress workers after N bogo fstat operations.

       --fstat-dir directory
              specify the directory to fstat to override the default of /dev.  All the files  in  the  directory
              will be fstat'd repeatedly.

       --full N
              start  N  workers  that  exercise  /dev/full.   This attempts to write to the device (which should
              always get error ENOSPC), to read from the device (which should always return a buffer  of  zeros)
              and to seek randomly on the device (which should always succeed).  (Linux only).

       --full-ops N
              stop the stress full workers after N bogo I/O operations.

       --funccall N
              start  N  workers  that  call  functions  of  1  through to 9 arguments. By default functions with
              uint64_t arguments are called, however, this can be changed using the --funccall-method option.

       --funccall-ops N
              stop the funccall workers after N bogo function call operations. Each bogo operation is 1000 calls
              of functions of 1 through to 9 arguments of the chosen argument type.

       --funccall-method method
              specify the method of funccall argument type to be used. The default is uint64_t but can be one of
              uint8 uint16 uint32 uint64 uint128 float double longdouble float80  float128  decimal32  decimal64
              and  decimal128.  Note that some of these types are only available with specific architectures and
              compiler versions.

       --funcret N
              start N workers that pass and return by value various small to large data types.

       --funcret-ops N
              stop the funcret workers after N bogo function call operations.

       --funcret-method method
              specify the method of funcret argument type to be used. The default is uint64_t but can be one  of
              uint8  uint16  uint32  uint64 uint128 float double longdouble float80 float128 decimal32 decimal64
              decimal128 uint8x32 uint8x128 uint64x128.

       --futex N
              start N workers that rapidly exercise the futex system call. Each  worker  has  two  processes,  a
              futex  waiter  and a futex waker. The waiter waits with a very small timeout to stress the timeout
              and rapid polled futex waiting. This is a Linux specific stress option.

       --futex-ops N
              stop futex workers after N bogo successful futex wait operations.

       --get N
              start N workers that call system calls that fetch data  from  the  kernel,  currently  these  are:
              getpid,  getppid,  getcwd,  getgid,  getegid,  getuid,  getgroups,  getpgrp, getpgid, getpriority,
              getresgid, getresuid, getrlimit, prlimit, getrusage, getsid, gettid, getcpu, gettimeofday,  uname,
              adjtimex, sysfs.  Some of these system calls are OS specific.

       --get-ops N
              stop get workers after N bogo get operations.

       --getdent N
              start N workers that recursively read directories /proc, /dev/, /tmp, /sys and /run using getdents
              and getdents64 (Linux only).

       --getdent-ops N
              stop getdent workers after N bogo getdent bogo operations.

       --getrandom N
              start N workers that get 8192 random bytes from  the  /dev/urandom  pool  using  the  getrandom(2)
              system call (Linux) or getentropy(2) (OpenBSD).

       --getrandom-ops N
              stop getrandom workers after N bogo get operations.

       --handle N
              start  N  workers  that  exercise  the name_to_handle_at(2) and open_by_handle_at(2) system calls.
              (Linux only).

       --handle-ops N
              stop after N handle bogo operations.

       -d N, --hdd N
              start N workers continually writing, reading and removing temporary files. The default mode is  to
              stress  test  sequential  writes  and  reads.   With  the  --aggressive option enabled without any
              --hdd-opts options the hdd stressor will work through all the --hdd-opt  options  one  by  one  to
              cover a range of I/O options.

       --hdd-bytes N
              write  N  bytes  for  each hdd process, the default is 1 GB. One can specify the size as % of free
              space on the file system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k,  m
              or g.

       --hdd-opts list
              specify various stress test options as a comma separated list. Options are as follows:

              Option           Description
              direct           try  to minimize cache effects of the I/O. File I/O writes are performed directly
                               from user space buffers and synchronous transfer is also attempted.  To guarantee
                               synchronous I/O, also use the sync option.
              dsync            ensure  output  has been transferred to underlying hardware and file metadata has
                               been updated (using the O_DSYNC open flag). This is equivalent to  each  write(2)
                               being followed by a call to fdatasync(2). See also the fdatasync option.
              fadv-dontneed    advise kernel to expect the data will not be accessed in the near future.
              fadv-noreuse     advise kernel to expect the data to be accessed only once.
              fadv-normal      advise  kernel  there  are  no  explicit access pattern for the data. This is the
                               default advice assumption.
              fadv-rnd         advise kernel to expect random access patterns for the data.
              fadv-seq         advise kernel to expect sequential access patterns for the data.
              fadv-willneed    advise kernel to expect the data to be accessed in the near future.
              fsync            flush all modified in-core data after each write to the output  device  using  an
                               explicit fsync(2) call.
              fdatasync        similar  to  fsync,  but  do  not  flush the modified metadata unless metadata is
                               required for later data reads to be handled  correctly.  This  uses  an  explicit
                               fdatasync(2) call.
              iovec            use  readv/writev  multiple  buffer  I/Os  rather  than  read/write. Instead of 1
                               read/write operation, the buffer is broken into an iovec of 16 buffers.
              noatime          do not update the file last access timestamp, this can reduce metadata writes.
              sync             ensure output has been transferred to underlying hardware (using the O_SYNC  open
                               flag).  This  is  equivalent  to  a  each  write(2)  being  followed by a call to
                               fsync(2). See also the fsync option.
              rd-rnd           read data randomly. By default, written data is  not  read  back,  however,  this
                               option will force it to be read back randomly.
              rd-seq           read  data sequentially. By default, written data is not read back, however, this
                               option will force it to be read back sequentially.
              syncfs           write all buffered modifications of file metadata and data on the filesystem that
                               contains the hdd worker files.
              utimes           force update of file timestamp which may increase metadata writes.
              wr-rnd           write data randomly. The wr-seq option cannot be used at the same time.
              wr-seq           write data sequentially. This is the default if no write modes are specified.

       Note  that  some  of  these  options are mutually exclusive, for example, there can be only one method of
       writing or reading.  Also, fadvise flags may be mutually exclusive, for example fadv-willneed  cannot  be
       used with fadv-dontneed.

       --hdd-ops N
              stop hdd stress workers after N bogo operations.

       --hdd-write-size N
              specify size of each write in bytes. Size can be from 1 byte to 4MB.

       --heapsort N
              start N workers that sort 32 bit integers using the BSD heapsort.

       --heapsort-ops N
              stop heapsort stress workers after N bogo heapsorts.

       --heapsort-size N
              specify number of 32 bit integers to sort, default is 262144 (256 × 1024).

       --hrtimers N
              start  N  workers that exercise high resolution times at a high frequency. Each stressor starts 32
              processes that run with random timer intervals of 0..499999  nanoseconds.  Running  this  stressor
              with appropriate privilege will run these with the SCHED_RR policy.

       --hrtimers-ops N
              stop hrtimers stressors after N timer event bogo operations

       --hsearch N
              start  N  workers  that  search a 80% full hash table using hsearch(3). By default, there are 8192
              elements inserted into the hash table.  This is a useful method to exercise access of  memory  and
              processor cache.

       --hsearch-ops N
              stop the hsearch workers after N bogo hsearch operations are completed.

       --hsearch-size N
              specify the number of hash entries to be inserted into the hash table. Size can be from 1K to 4M.

       --icache N
              start  N  workers that stress the instruction cache by forcing instruction cache reloads.  This is
              achieved by modifying an instruction cache line,  causing the processor to reload it when we  call
              a function in inside it. Currently only verified and enabled for Intel x86 CPUs.

       --icache-ops N
              stop the icache workers after N bogo icache operations are completed.

       --icmp-flood N
              start  N  workers  that  flood  localhost  with  randonly  sized ICMP ping packets.  This stressor
              requires the CAP_NET_RAW capbility.

       --icmp-flood-ops N
              stop icmp flood workers after N ICMP ping packets have been sent.

       --idle-scan N
              start N workers that scan the idle page bitmap across a range of physical  pages.  This  sets  and
              checks  for idle pages via the idle page tracking interface /sys/kernel/mm/page_idle/bitmap.  This
              is for Linux only.

       --idle-scan-ops N
              stop after N bogo page scan operations. Currently one bogo page scan operation  is  equivalent  to
              setting and checking 64 physical pages.

       --idle-page N
              start N workers that walks through every page exercising the Linux /sys/kernel/mm/page_idle/bitmap
              interface. Requries CAP_SYS_RESOURCE capability.

       --idle-page-ops N
              stop after N bogo idle page operations.

       --inode-flags N
              start N workers that exercise inode flags using the FS_IOC_GETFLAGS and FS_IOC_SETFLAGS  ioctl(2).
              This  attempts  to  apply  all  the  available  inode  flags onto a directory and file even if the
              underlying file system may not support these flags (errors are just ignored).  Each worker runs  4
              threads  that  exercise  the flags on the same directory and file to try to force races. This is a
              Linux only stressor, see ioctl_iflags(2) for more details.

       --inode-flags-ops N
              stop the inode-flags workers after N ioctl flag setting attempts.

       --inotify N
              start N workers performing file  system  activities  such  as  making/deleting  files/directories,
              moving files, etc. to stress exercise the various inotify events (Linux only).

       --inotify-ops N
              stop inotify stress workers after N inotify bogo operations.

       -i N, --io N
              start  N workers continuously calling sync(2) to commit buffer cache to disk.  This can be used in
              conjunction with the --hdd options.

       --io-ops N
              stop io stress workers after N bogo operations.

       --iomix N
              start N workers that perform a mix of sequential, random and memory mapped  read/write  operations
              as  well  as  forced  sync'ing  and (if run as root) cache dropping.  Multiple child processes are
              spawned to all share a single file and perform different I/O operations on the same file.

       --iomix-bytes N
              write N bytes for each iomix worker process, the default is 1 GB. One can specify the size as % of
              free  space on the file system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b,
              k, m or g.

       --iomix-ops N
              stop iomix stress workers after N bogo iomix I/O operations.

       --ioport N
              start N workers than perform bursts of 16 reads and 16 writes of ioport 0x80  (x86  Linux  systems
              only).   I/O  performed  on x86 platforms on port 0x80 will cause delays on the CPU performing the
              I/O.

       --ioport-ops N
              stop the ioport stressors after N bogo I/O operations

       --ioport-opts [ in | out | inout ]
              specify if port reads in, port read writes out or reads and  writes  are  to  be  performed.   The
              default is both in and out.

       --ioprio N
              start N workers that exercise the ioprio_get(2) and ioprio_set(2) system calls (Linux only).

       --ioprio-ops N
              stop after N io priority bogo operations.

       --ipsec-mb N
              start  N  workers  that  perform  cryptographic processing using the highly optimized Intel Multi-
              Buffer Crypto for IPsec library. Depending on the features available, SSE, AVX, AVX and AVX512 CPU
              features  will  be  used  on  data  encrypted by SHA, DES, CMAC, CTR, HMAC MD5, HMAC SHA1 and HMAC
              SHA512 cryptographic routines. This is only available for x86-64 modern Intel CPUs.

       --ipsec-mb-ops N
              stop after N rounds of processing of data using the cryptographic routines.

       --ipsec-mb-feature [ sse | avx | avx2 | avx512 ]
              Just use the specified processor CPU feature. By default, all the available features for  the  CPU
              are exercised.

       --itimer N
              start  N workers that exercise the system interval timers. This sets up an ITIMER_PROF itimer that
              generates a SIGPROF signal.  The default frequency for the itimer is 1  MHz,  however,  the  Linux
              kernel  will  set  this to be no more that the jiffy setting, hence high frequency SIGPROF signals
              are not normally possible.  A busy loop spins on getitimer(2)  calls  to  consume  CPU  and  hence
              decrement the itimer based on amount of time spent in CPU and system time.

       --itimer-ops N
              stop itimer stress workers after N bogo itimer SIGPROF signals.

       --itimer-freq F
              run  itimer  at F Hz; range from 1 to 1000000 Hz. Normally the highest frequency is limited by the
              number of jiffy ticks per second, so running above 1000 Hz is difficult to attain in practice.

       --itimer-rand
              select an interval timer frequency based around the interval  timer  frequency  +/-  12.5%  random
              jitter.  This  tries  to  force more variability in the timer interval to make the scheduling less
              predictable.

       --judy N
              start N workers that insert, search and delete 32 bit integers in a Judy array using a predictable
              yet  sparse  array index. By default, there are 131072 integers used in the Judy array.  This is a
              useful method to exercise random access of memory and processor cache.

       --judy-ops N
              stop the judy workers after N bogo judy operations are completed.

       --judy-size N
              specify the size (number of 32 bit integers) in the Judy array to exercise.  Size can be  from  1K
              to 4M 32 bit integers.

       --kcmp N
              start  N workers that use kcmp(2) to compare parent and child processes to determine if they share
              kernel resources. Supported only for Linux and requires CAP_SYS_PTRACE capability.

       --kcmp-ops N
              stop kcmp workers after N bogo kcmp operations.

       --key N
              start N workers that create and manipulate keys using add_key(2) and ketctl(2). As many  keys  are
              created  as the per user limit allows and then the following keyctl commands are exercised on each
              key:   KEYCTL_SET_TIMEOUT,   KEYCTL_DESCRIBE,   KEYCTL_UPDATE,   KEYCTL_READ,   KEYCTL_CLEAR   and
              KEYCTL_INVALIDATE.

       --key-ops N
              stop key workers after N bogo key operations.

       --kill N
              start N workers sending SIGUSR1 kill signals to a SIG_IGN signal handler. Most of the process time
              will end up in kernel space.

       --kill-ops N
              stop kill workers after N bogo kill operations.

       --klog N
              start N workers exercising the kernel syslog(2) system call.  This will attempt to read the kernel
              log with various sized read buffers. Linux only.

       --klog-ops N
              stop klog workers after N syslog operations.

       --lease N
              start  N workers locking, unlocking and breaking leases via the fcntl(2) F_SETLEASE operation. The
              parent processes continually lock and unlock a lease on a file while a user selectable  number  of
              child  processes  open  the  file  with  a  non-blocking  open  to  generate  SIGIO lease breaking
              notifications to the parent.  This stressor is only available if F_SETLEASE, F_WRLCK  and  F_UNLCK
              support is provided by fcntl(2).

       --lease-ops N
              stop lease workers after N bogo operations.

       --lease-breakers N
              start  N  lease  breaker  child processes per lease worker.  Normally one child is plenty to force
              many SIGIO lease breaking notification signals to the parent, however, this option allows  one  to
              specify more child processes if required.

       --link N
              start N workers creating and removing hardlinks.

       --link-ops N
              stop link stress workers after N bogo operations.

       --lockbus N
              start  N  workers  that  rapidly lock and increment 64 bytes of randomly chosen memory from a 16MB
              mmap'd region (Intel x86 and ARM CPUs only).  This will cause cacheline  misses  and  stalling  of
              CPUs.

       --lockbus-ops N
              stop lockbus workers after N bogo operations.

       --locka N
              start  N  workers that randomly lock and unlock regions of a file using the POSIX advisory locking
              mechanism (see fcntl(2), F_SETLK, F_GETLK). Each worker creates a 1024 KB  file  and  attempts  to
              hold  a  maximum  of  1024  concurrent  locks  with  a  child process that also tries to hold 1024
              concurrent locks. Old locks are unlocked in a first-in, first-out basis.

       --locka-ops N
              stop locka workers after N bogo locka operations.

       --lockf N
              start N workers that randomly lock and unlock regions of a file using the POSIX  lockf(3)  locking
              mechanism.  Each  worker  creates  a  64 KB file and attempts to hold a maximum of 1024 concurrent
              locks with a child process that also tries to hold 1024 concurrent locks. Old locks  are  unlocked
              in a first-in, first-out basis.

       --lockf-ops N
              stop lockf workers after N bogo lockf operations.

       --lockf-nonblock
              instead  of  using blocking F_LOCK lockf(3) commands, use non-blocking F_TLOCK commands and re-try
              if the lock failed.  This creates extra system call overhead and CPU utilisation as the number  of
              lockf workers increases and should increase locking contention.

       --lockofd N
              start  N  workers  that  randomly  lock  and  unlock  regions  of a file using the Linux open file
              description locks (see fcntl(2), F_OFD_SETLK, F_OFD_GETLK).  Each worker creates a  1024  KB  file
              and  attempts  to  hold a maximum of 1024 concurrent locks with a child process that also tries to
              hold 1024 concurrent locks. Old locks are unlocked in a first-in, first-out basis.

       --lockofd-ops N
              stop lockofd workers after N bogo lockofd operations.

       --longjmp N
              start N workers that exercise setjmp(3)/longjmp(3) by rapid looping on longjmp calls.

       --longjmp-ops N
              stop longjmp stress workers after N bogo longjmp operations (1 bogo op is 1000 longjmp calls).

       --loop N
              start N workers that exercise the loopback control device.  This  creates  2MB  loopback  devices,
              expands  them  to  4MB,  performs some loopback status information get and set operations and then
              destoys them. Linux only and requires CAP_SYS_ADMIN capability.

       --loop-ops N
              stop after N bogo loopback creation/deletion operations.

       --lsearch N
              start N workers that linear search a unsorted array  of  32  bit  integers  using  lsearch(3).  By
              default,  there  are  8192  elements in the array.  This is a useful method to exercise sequential
              access of memory and processor cache.

       --lsearch-ops N
              stop the lsearch workers after N bogo lsearch operations are completed.

       --lsearch-size N
              specify the size (number of 32 bit integers) in the array to lsearch. Size can be from 1K to 4M.

       --madvise N
              start N workers that apply random madvise(2) advise settings on pages of a 4MB file backed  shared
              memory mapping.

       --madvise-ops N
              stop madvise stressors after N bogo madvise operations.

       --malloc N
              start  N workers continuously calling malloc(3), calloc(3), realloc(3) and free(3). By default, up
              to 65536 allocations can be active at any point, but this can be  altered  with  the  --malloc-max
              option.   Allocation,  reallocation  and  freeing  are chosen at random; 50% of the time memory is
              allocation (via malloc, calloc or realloc) and 50% of the time allocations are free'd.  Allocation
              sizes  are  also random, with the maximum allocation size controlled by the --malloc-bytes option,
              the default size being 64K.  The worker is re-started if it is killed by the out of  memory  (OOM)
              killer.

       --malloc-bytes N
              maximum per allocation/reallocation size. Allocations are randomly selected from 1 to N bytes. One
              can specify the size as % of total available memory or in  units  of  Bytes,  KBytes,  MBytes  and
              GBytes  using  the  suffix b, k, m or g.  Large allocation sizes cause the memory allocator to use
              mmap(2) rather than expanding the heap using brk(2).

       --malloc-max N
              maximum number of active allocations allowed. Allocations are chosen at random and  placed  in  an
              allocation slot. Because about 50%/50% split between allocation and freeing, typically half of the
              allocation slots are in use at any one time.

       --malloc-ops N
              stop after N malloc bogo operations. One  bogo  operations  relates  to  a  successful  malloc(3),
              calloc(3) or realloc(3).

       --malloc-thresh N
              specify  the  threshold where malloc uses mmap(2) instead of sbrk(2) to allocate more memory. This
              is only available on systems that provide the GNU C mallopt(3) tuning function.

       --matrix N
              start N workers that perform various matrix operations on floating point values. Testing on 64 bit
              x86  hardware  shows  that this provides a good mix of memory, cache and floating point operations
              and is an excellent way to make a CPU run hot.

              By default, this will exercise all the matrix stress methods  one  by  one.   One  can  specify  a
              specific matrix stress method with the --matrix-method option.

       --matrix-ops N
              stop matrix stress workers after N bogo operations.

       --matrix-method method
              specify a matrix stress method. Available matrix stress methods are described as follows:

              Method           Description
              all              iterate over all the below matrix stress methods
              add              add two N × N matrices
              copy             copy one N × N matrix to another
              div              divide an N × N matrix by a scalar
              frobenius        Frobenius product of two N × N matrices
              hadamard         Hadamard product of two N × N matrices
              identity         create an N × N identity matrix
              mean             arithmetic mean of two N × N matrices
              mult             multiply an N × N matrix by a scalar
              negate           negate an N × N matrix
              prod             product of two N × N matrices
              sub              subtract one N × N matrix from another N × N matrix
              square           multiply an N × N matrix by itself
              trans            transpose an N × N matrix
              zero             zero an N × N matrix

       --matrix-size N
              specify  the  N  ×  N  size  of  the  matrices.  Smaller values result in a floating point compute
              throughput bound stressor, where as large values result in a cache and/or memory  bandwidth  bound
              stressor.

       --matrix-yx
              perform  matrix  operations  in  order  y  by x rather than the default x by y. This is suboptimal
              ordering compared to the default and will perform more data cache stalls.

       --matrix-3d N
              start N workers that perform various 3D matrix operations on floating point values. Testing on  64
              bit  x86  hardware  shows  that  this  provides  a  good  mix  of memory, cache and floating point
              operations and is an excellent way to make a CPU run hot.

              By default, this will exercise all the 3D matrix stress methods one by one.   One  can  specify  a
              specific 3D matrix stress method with the --matrix-3d-method option.

       --matrix-3d-ops N
              stop the 3D matrix stress workers after N bogo operations.

       --matrix-3d-method method
              specify a 3D matrix stress method. Available 3D matrix stress methods are described as follows:

              Method           Description
              all              iterate over all the below matrix stress methods
              add              add two N × N × N matrices
              copy             copy one N × N × N matrix to another
              div              divide an N × N × N matrix by a scalar
              frobenius        Frobenius product of two N × N × N matrices
              hadamard         Hadamard product of two N × N × N matrices
              identity         create an N × N × N identity matrix
              mean             arithmetic mean of two N × N × N matrices
              mult             multiply an N × N × N matrix by a scalar
              negate           negate an N × N × N matrix
              sub              subtract one N × N × N matrix from another N × N × N matrix
              trans            transpose an N × N × N matrix
              zero             zero an N × N × N matrix

       --matrix-3d-size N
              specify  the  N  ×  N × N size of the matrices.  Smaller values result in a floating point compute
              throughput bound stressor, where as large values result in a cache and/or memory  bandwidth  bound
              stressor.

       --matrix-3d-zyx
              perform  matrix  operations  in  order  z  by  y by x rather than the default x by y by z. This is
              suboptimal ordering compared to the default and will perform more data cache stalls.

       --mcontend N
              start N workers that produce memory contention read/write patterns.  Each  stressor  runs  with  5
              threads  that  read  and  write  to  two  different mappings of the same underlying physical page.
              Various caching operations are also exercised to cause sub-optimal memory  access  patterns.   The
              threads also randomly change CPU affinity to exercise CPU and memory migration stress.

       --mcontend-ops N
              stop mcontend stressors after N bogo read/write operations.

       --membarrier N
              start N workers that exercise the membarrier system call (Linux only).

       --membarrier-ops N
              stop membarrier stress workers after N bogo membarrier operations.

       --memcpy N
              start  N  workers  that copy 2MB of data from a shared region to a buffer using memcpy(3) and then
              move the data in the buffer with memmove(3)  with  3  different  alignments.  This  will  exercise
              processor cache and system memory.

       --memcpy-ops N
              stop memcpy stress workers after N bogo memcpy operations.

       --memcpy-method [ all | libc | builtin | naive ]
              specify a memcpy copying method. Available memcpy methods are described as follows:

              Method           Description
              all              use libc, builtin and naive methods
              libc             use libc memcpy and memmove functions, this is the default
              builtin          use the compiler built in optimized memcpy and memmove functions
              naive            use unoptimized naive byte by byte copying and memory moving

       --memfd N
              start  N  workers that create allocations of 1024 pages using memfd_create(2) and ftruncate(2) for
              allocation and mmap(2) to map the allocation into the process address space.  (Linux only).

       --memfd-bytes N
              allocate N bytes per memfd stress worker, the default is 256MB. One can specify the size in  as  %
              of total available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m
              or g.

       --memfd-fds N
              create N memfd file descriptors, the default  is  256.  One  can  select  8  to  4096  memfd  file
              descriptions with this option.

       --memfd-ops N
              stop after N memfd-create(2) bogo operations.

       --memhotplug N
              start  N  workers  that  offline  and  online  memory  hotplug  regions.  Linux  only and requires
              CAP_SYS_ADMIN capabilities.

       --memhotplug-ops N
              stop memhotplug stressors after N memory offline and online bogo operations.

       --memrate N
              start N workers that exercise a buffer with 64, 32, 16 and 8 bit reads and  writes.   This  memory
              stressor  allows  one  to also specify the maximum read and write rates. The stressors will run at
              maximum speed if no read or write rates are specified.

       --memrate-ops N
              stop after N bogo memrate operations.

       --memrate-bytes N
              specify the size of the memory buffer being exercised. The default size is 256MB. One can  specify
              the size in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --memrate-rd-mbs N
              specify  the  maximum allowed read rate in MB/sec. The actual read rate is dependent on scheduling
              jitter and memory accesses from other running processes.

       --memrate-wr-mbs N
              specify the maximum allowed read rate in MB/sec. The actual write rate is dependent on  scheduling
              jitter and memory accesses from other running processes.

       --memthrash N
              start  N  workers  that  thrash and exercise a 16MB buffer in various ways to try and trip thermal
              overrun.  Each stressor will start 1 or more threads.  The number of threads  is  chosen  so  that
              there  will  be  at  least  1  thread  per CPU. Note that the optimal choice for N is a value that
              divides into the number of CPUs.

       --memthrash-ops N
              stop after N memthrash bogo operations.

       --memthrash-method method
              specify a memthrash stress method. Available memthrash stress methods are described as follows:

              Method           Description
              all              iterate over all the below memthrash methods
              chunk1           memset 1 byte chunks of random data into random locations
              chunk8           memset 8 byte chunks of random data into random locations
              chunk64          memset 64 byte chunks of random data into random locations
              chunk256         memset 256 byte chunks of random data into random locations

              chunkpage        memset page size chunks of random data into random locations
              flip             flip (invert) all bits in random locations
              flush            flush cache line in random locations
              lock             lock randomly choosing locations (Intel x86 and ARM CPUs only)
              matrix           treat memory as a 2 × 2 matrix and swap random elements
              memset           memset the memory with random data
              mfence           stores with write serialization
              prefetch         prefetch data at random memory locations
              random           randomly run any of the memthrash methods except for 'random' and 'all'
              spinread         spin loop read the same random location 2^19 times
              spinwrite        spin loop write the same random location 2^19 times
              swap             step through memory swapping bytes in steps of 65 and 129 byte strides

       --mergesort N
              start N workers that sort 32 bit integers using the BSD mergesort.

       --mergesort-ops N
              stop mergesort stress workers after N bogo mergesorts.

       --mergesort-size N
              specify number of 32 bit integers to sort, default is 262144 (256 × 1024).

       --mincore N
              start N workers that walk through all of memory 1 page at a time checking of the page  mapped  and
              also is resident in memory using mincore(2).

       --mincore-ops N
              stop  after  N  mincore  bogo  operations.  One mincore bogo op is equivalent to a 1000 mincore(2)
              calls.  --mincore-random instead of walking through pages sequentially, select  pages  at  random.
              The  chosen  address  is iterated over by shifting it right one place and checked by mincore until
              the address is less or equal to the page size.

       --mknod N
              start N workers that create and remove fifos, empty  files  and  named  sockets  using  mknod  and
              unlink.

       --mknod-ops N
              stop directory thrash workers after N bogo mknod operations.

       --mlock N
              start  N  workers that lock and unlock memory mapped pages using mlock(2), munlock(2), mlockall(2)
              and munlockall(2). This is achieved by the mapping of three contiguous pages and then locking  the
              second  page,  hence  ensuring  non-contiguous  pages are locked . This is then repeated until the
              maximum allowed mlocks or a maximum of 262144 mappings are made.  Next, all  future  mappings  are
              mlocked  and  the  worker attempts to map 262144 pages, then all pages are munlocked and the pages
              are unmapped.

       --mlock-ops N
              stop after N mlock bogo operations.

       --mlockmany N
              start N workers that fork off up to 1024 child processes in total;  each  child  will  attempt  to
              anonymously mmap and mlock the maximum allowed mlockable memory size.  The stress test attempts to
              avoid swapping by tracking low memory and swap allocations (but some  swapping  may  occur).  Once
              either  the  maximum  number of child process is reached or all mlockable in-core memory is locked
              then child processes are killed and the stress test is repeated.

       --mlockmany-ops N
              stop after N mlockmany (mmap and mlock) operations.

       --mmap N
              start N workers continuously calling mmap(2)/munmap(2).  The initial  mapping  is  a  large  chunk
              (size  specified  by  --mmap-bytes) followed by pseudo-random 4K unmappings, then pseudo-random 4K
              mappings, and then linear 4K unmappings.  Note that this can cause systems to trip the kernel  OOM
              killer on Linux systems if not enough physical memory and swap is not available.  The MAP_POPULATE
              option is used to populate pages into memory on systems that support this.  By default,  anonymous
              mappings  are  used,  however,  the --mmap-file and --mmap-async options allow one to perform file
              based mappings if desired.

       --mmap-ops N
              stop mmap stress workers after N bogo operations.

       --mmap-async
              enable file based memory mapping and use asynchronous msync'ing on each page, see --mmap-file.

       --mmap-bytes N
              allocate N bytes per mmap stress worker, the default is 256MB. One can specify the size  as  %  of
              total available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or
              g.

       --mmap-file
              enable file based memory mapping and by default use synchronous msync'ing on each page.

       --mmap-mprotect
              change protection settings on each page of memory.  Each time a page  or  a  group  of  pages  are
              mapped  or  remapped  then  this  option will make the pages read-only, write-only, exec-only, and
              read-write.

       --mmap-odirect
              enable file based memory mapping and use O_DIRECT direct I/O.

       --mmap-osync
              enable file based memory mapping and used O_SYNC synchronous I/O integrity completion.

       --mmapaddr N
              start N workers that memory map pages at a random memory location that is not already mapped.   On
              64  bit  machines  the  random address is randomly chosen 32 bit or 64 bit address. If the mapping
              works a second page is memory mapped  from  the  first  mapped  address.  The  stressor  exercises
              mmap/munmap, mincore and segfault handling.

       --mmapaddr-ops N
              stop after N random address mmap bogo operations.

       --mmapfork N
              start N workers that each fork off 32 child processes, each of which tries to allocate some of the
              free memory left in the system (and trying to avoid any swapping).  The child processes then  hint
              that  the allocation will be needed with madvise(2) and then memset it to zero and hint that it is
              no longer needed with madvise before exiting.  This produces significant amounts of VM activity, a
              lot of cache misses and with minimal swapping.

       --mmapfork-ops N
              stop after N mmapfork bogo operations.

       --mmapfixed N
              start  N workers that perform fixed address allocations from the top virtual address down to 128K.
              The allocated sizes are  from  1  page  to  8  pages  and  various  random  mmap  flags  are  used
              MAP_SHARED/MAP_PRIVATE,  MAP_LOCKED,  MAP_NORESERVE,  MAP_POPULATE. If successfully map'd then the
              allocation is remap'd to an  address  that  is  several  pages  higher  in  memory.  Mappings  and
              remappings are madvised with random madvise options to further exercise the mappings.

       --mmapfixed-ops N
              stop after N mmapfixed memory mapping bogo operations.

       --mmapmany N
              start  N  workers  that attempt to create the maximum allowed per-process memory mappings. This is
              achieved by mapping 3 contiguous pages and then unmapping the  middle  page  hence  splitting  the
              mapping  into two. This is then repeated until the maximum allowed mappings or a maximum of 262144
              mappings are made.

       --mmapmany-ops N
              stop after N mmapmany bogo operations

       --mq N start N sender and receiver processes that continually  send  and  receive  messages  using  POSIX
              message queues. (Linux only).

       --mq-ops N
              stop after N bogo POSIX message send operations completed.

       --mq-size N
              specify  size  of POSIX message queue. The default size is 10 messages and most Linux systems this
              is the maximum allowed size for normal users. If the  given  size  is  greater  than  the  allowed
              message queue size then a warning is issued and the maximum allowed size is used instead.

       --mremap N
              start  N  workers  continuously  calling  mmap(2), mremap(2) and munmap(2).  The initial anonymous
              mapping is a large chunk (size specified by --mremap-bytes) and then iteratively halved in size by
              remapping  all  the way down to a page size and then back up to the original size.  This worker is
              only available for Linux.

       --mremap-ops N
              stop mremap stress workers after N bogo operations.

       --mremap-bytes N
              initially allocate N bytes per remap stress worker, the default is 256MB. One can specify the size
              in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --msg N
              start  N  sender  and receiver processes that continually send and receive messages using System V
              message IPC.

       --msg-ops N
              stop after N bogo message send operations completed.

       --msg-types N
              select the quality of message types (mtype) to use. By default, msgsnd sends messages with a mtype
              of  1,  this  option  allows  one to send messages types in the range 1..N to exercise the message
              queue receive ordering. This will also impact throughput performance.

       --msync N
              start N stressors that msync data from a file backed memory mapping from memory back to  the  file
              and  msync  modified  data  from  the  file back to the mapped memory. This exercises the msync(2)
              MS_SYNC and MS_INVALIDATE sync operations.

       --msync-ops N
              stop after N msync bogo operations completed.

       --msync-bytes N
              allocate N bytes for the memory mapped file, the default is 256MB. One can specify the size  as  %
              of total available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m
              or g.

       --netdev N
              start N workers that exercise various netdevice ioctl commands across all  the  available  network
              devices.  The  ioctls  exercised  by  this  stressor  are  as  follows: SIOCGIFCONF, SIOCGIFINDEX,
              SIOCGIFNAME, SIOCGIFFLAGS, SIOCGIFADDR, SIOCGIFNETMASK, SIOCGIFMETRIC, SIOCGIFMTU,  SIOCGIFHWADDR,
              SIOCGIFMAP and SIOCGIFTXQLEN. See netdevice(7) for more details of these ioctl commands.

       --netdev-ops N
              stop after N netdev bogo operations completed.

       --netlink-proc N
              start  N workers that spawn child processes and monitor fork/exec/exit process events via the proc
              netlink connector. Each event received is counted as a bogo op. This stressor can only be  run  on
              Linux and requires CAP_NET_ADMIN capability.

       --netlink-proc-ops N
              stop the proc netlink connector stressors after N bogo ops.

       --netlink-task N
              start  N  workers that collect task statistics via the netlink taskstats interface.  This stressor
              can only be run on Linux and requires CAP_NET_ADMIN capability.

       --netlink-task-ops N
              stop the taskstats netlink connector stressors after N bogo ops.

       --nice N
              start N cpu consuming workers that exercise the available nice levels. Each iteration forks off  a
              child  process  that  runs through the all the nice levels running a busy loop for 0.1 seconds per
              level and then exits.

       --nice-ops N
              stop after N nice bogo nice loops

       --nop N
              start N workers that consume cpu cycles issuing no-op instructions. This stressor is available  if
              the assembler supports the "nop" instruction.

       --nop-ops N
              stop  nop workers after N no-op bogo operations. Each bogo-operation is equivalent to 256 loops of
              256 no-op instructions.

       --null N
              start N workers writing to /dev/null.

       --null-ops N
              stop null stress workers after N /dev/null bogo write operations.

       --numa N
              start N workers that migrate stressors and a 4MB memory mapped buffer  around  all  the  available
              NUMA  nodes.   This  uses migrate_pages(2) to move the stressors and mbind(2) and move_pages(2) to
              move the pages of the mapped buffer. After each move, the buffer is written to force activity over
              the  bus  which  results  cache misses.  This test will only run on hardware with NUMA enabled and
              more than 1 NUMA node.

       --numa-ops N
              stop NUMA stress workers after N bogo NUMA operations.

       --oom-pipe N
              start N workers that create as many pipes as allowed and  exercise  expanding  and  shrinking  the
              pipes  from the largest pipe size down to a page size. Data is written into the pipes and read out
              again to fill the pipe buffers. With the --aggressive mode enabled the data is not read  out  when
              the pipes are shrunk, causing the kernel to OOM processes aggressively.  Running many instances of
              this stressor will force kernel to OOM processes due to the many large pipe buffer allocations.

       --oom-pipe-ops N
              stop after N bogo pipe expand/shrink operations.

       --opcode N
              start N workers that fork off children that execute randomly generated executable code.  This will
              generate  issues  such  as  illegal instructions, bus errors, segmentation faults, traps, floating
              point errors that are handled gracefully by the stressor.

       --opcode-ops N
              stop after N attempts to execute illegal code.

       --opcode-method [ inc | mixed | random | text ]
              select the opcode generation method.  By default, random bytes are used to generate the executable
              code. This option allows one to select one of the three methods:

              Method                  Description
              inc                     use  incrementing  32  bit  opcode  patterns  from 0x00000000 to 0xfffffff
                                      inclusive.
              mixed                   use a mix of incrementing 32 bit opcode patterns and random 32 bit  opcode
                                      patterns  that  are  also  inverted,  encoded  with  gray encoding and bit
                                      reversed.
              random                  generate opcodes using random bytes from a mwc random generator.
              text                    copies random chunks of code from the stress-ng text segment and  randomly
                                      flips single bits in a random choice of 1/8th of the code.

       -o N, --open N
              start  N workers that perform open(2) and then close(2) operations on /dev/zero. The maximum opens
              at one time is system defined, so the test will run  up  to  this  maximum,  or  65536  open  file
              descriptors, which ever comes first.

       --open-ops N
              stop the open stress workers after N bogo open operations.

       --personality N
              start  N  workers  that  attempt  to  set  personality and get all the available personality types
              (process execution domain types) via the personality(2) system call. (Linux only).

       --personality-ops N
              stop personality stress workers after N bogo personality operations.

       --physpage N
              start N workers that use /proc/self/pagemap and /proc/kpagecount to determine  the  physical  page
              and  page  count of a virtual mapped page and a page that is shared among all the stressors. Linux
              only and requires the CAP_SYS_ADMIN capabilities.

       --physpage-ops N
              stop physpage stress workers after N bogo physical address lookups.

       --pidfd N
              start N workers that exercise signal sending via the pidfd_send_signal system call.  This stressor
              creates  child  processes  and checks if they exist and can be stopped, restarted and killed using
              the pidfd_send_signal system call.

       --pidfd-ops N
              stop pidfd stress workers after N child processes  have  been  created,  tested  and  killed  with
              pidfd_send_signal.

       -p N, --pipe N
              start  N  workers  that  perform large pipe writes and reads to exercise pipe I/O.  This exercises
              memory write and reads as well as context switching.  Each worker has two processes, a reader  and
              a writer.

       --pipe-ops N
              stop pipe stress workers after N bogo pipe write operations.

       --pipe-data-size N
              specifies  the size in bytes of each write to the pipe (range from 4 bytes to 4096 bytes). Setting
              a small data size will cause more writes to be buffered in the pipe, hence  reducing  the  context
              switch rate between the pipe writer and pipe reader processes. Default size is the page size.

       --pipe-size N
              specifies  the  size  of  the  pipe  in  bytes  (for systems that support the F_SETPIPE_SZ fcntl()
              command). Setting a small pipe size will cause the pipe to fill and block more  frequently,  hence
              increasing  the context switch rate between the pipe writer and the pipe reader processes. Default
              size is 512 bytes.

       --pipeherd N
              start N workers that pass a 64 bit token counter to/from 100 child processes over a  shared  pipe.
              This forces a high context switch rate and can trigger a "thundering herd" of wakeups on processes
              that are blocked on pipe waits.

       --pipeherd-ops N
              stop pipe stress workers after N bogo pipe write operations.

       --pipeherd-yield
              force a scheduling yield after each write, this increases the context switch rate.

       --pkey N
              start N workers that change memory protection using a protection key (pkey) and the  pkey_mprotect
              call (Linux only). This will try to allocate a pkey and use this for the page protection, however,
              if this fails then the special pkey -1 will be used (and the kernel will use the  normal  mprotect
              mechanism  instead).  Various page protection mixes of read/write/exec/none will be cycled through
              on randomly chosen pre-allocated pages.

       --pkey-ops N
              stop after N pkey_mprotect page protection cycles.

       -P N, --poll N
              start N workers that perform zero timeout polling via the poll(2), select(2) and  sleep(3)  calls.
              This wastes system and user time doing nothing.

       --poll-ops N
              stop poll stress workers after N bogo poll operations.

       --prctl N
              start  N  workers  that  exercise  the majority of the prctl(2) system call options. Each batch of
              prctl calls is performed inside a new child process to ensure the  limit  of  prctl  is  contained
              inside  a  new  process  every  time.  Some prctl options are architecture specific, however, this
              stressor will exercise these even if they are not implemented.

       --prctl-ops N
              stop prctl workers after N batches of prctl calls

       --procfs N
              start N workers that read files from /proc and  recursively  read  files  from  /proc/self  (Linux
              only).

       --procfs-ops N
              stop  procfs  reading  after  N  bogo  read operations. Note, since the number of entries may vary
              between kernels, this bogo ops metric is probably very misleading.

       --pthread N
              start N workers that iteratively creates and terminates multiple pthreads  (the  default  is  1024
              pthreads  per  worker).  In  each iteration, each newly created pthread waits until the worker has
              created all the pthreads and then they all terminate together.

       --pthread-ops N
              stop pthread workers after N bogo pthread create operations.

       --pthread-max N
              create N pthreads per worker. If the product of the number of pthreads by the number of workers is
              greater  than  the  soft  limit  of  allowed  pthreads then the maximum is re-adjusted down to the
              maximum allowed.

       --ptrace N
              start N workers that fork and trace system calls of a child process using ptrace(2).

       --ptrace-ops N
              stop ptracer workers after N bogo system calls are traced.

       --pty N
              start N workers that repeatedly attempt to open pseudoterminals and  perform  various  pty  ioctls
              upon the ptys before closing them.

       --pty-ops N
              stop pty workers after N pty bogo operations.

       --pty-max N
              try  to  open  a  maximum  of  N  pseudoterminals, the default is 65536. The allowed range of this
              setting is 8..65536.

       -Q, --qsort N
              start N workers that sort 32 bit integers using qsort.

       --qsort-ops N
              stop qsort stress workers after N bogo qsorts.

       --qsort-size N
              specify number of 32 bit integers to sort, default is 262144 (256 × 1024).

       --quota N
              start N  workers  that  exercise  the  Q_GETQUOTA,  Q_GETFMT,  Q_GETINFO,  Q_GETSTATS  and  Q_SYNC
              quotactl(2) commands on all the available mounted block based file systems. Requires CAP_SYS_ADMIN
              capability to run.

       --quota-ops N
              stop quota stress workers after N bogo quotactl operations.

       --radixsort N
              start N workers that sort random 8 byte strings using radixsort.

       --radixsort-ops N
              stop radixsort stress workers after N bogo radixsorts.

       --radixsort-size N
              specify number of strings to sort, default is 262144 (256 × 1024).

       --ramfs N
              start N workers mounting a memory based file system using  ramfs  and  tmpfs  (Linux  only).  This
              alternates  between  mounting  and  umounting  a  ramfs or tmpfs file system using the traditional
              mount(2) and umount(2) system  call  as  well  as  the  newer  Linux  5.2  fsopen(2),  fsmount(2),
              fsconfig(2) and move_mount(2) system calls if they are available. The default ram file system size
              is 2MB.

       --ramfs-ops N
              stop after N ramfs mount operations.

       --ramfs-size N
              set the ramfs size (must be multiples of the page size).

       --rawdev N
              start N workers that read the underlying raw drive device using direct IO reads. The device  (with
              minor  number  0)  that  stores  the current working directory is the raw device to be read by the
              stressor.  The read size is exactly the size of the underlying device  block  size.   By  default,
              this  stressor  will exercise all the of the rawdev methods (see the --rawdev-method option). This
              is a Linux only stressor and requires root privilege to be able to read the raw device.

       --rawdev-ops N
              stop the rawdev stress workers after N raw device read bogo operations.

       --rawdev-method M
              Available rawdev stress methods are described as follows:

              Method           Description
              all              iterate over all the rawdev stress methods as listed below:
              sweep            repeatedly read across the raw device from the 0th block  to  the  end  block  in
                               steps of the number of blocks on the device / 128 and back to the start again.
              wiggle           repeatedly  read across the raw device in 128 evenly steps with each step reading
                               1024 blocks backwards from each step.
              ends             repeatedly read the first and last 128 start and end blocks  of  the  raw  device
                               alternating from start of the device to the end of the device.
              random           repeatedly read 256 random blocks
              burst            repeatedly  read  256  sequential  blocks starting from a random block on the raw
                               device.

       --rawsock N
              start N workers that send and receive packet data using raw sockets  on  the  localhost.  Requires
              CAP_NET_RAW to run.

       --rawsock-ops N
              stop rawsock workers after N packets are received.

       --rdrand N
              start  N  workers  that read a random number from an on-chip random number generator This uses the
              rdrand instruction on Intel processors or the darn intruction on Power9 processors.

       --rdrand-ops N
              stop rdrand stress workers after  N  bogo  rdrand  operations  (1  bogo  op  =  2048  random  bits
              successfully read).

       --readahead N
              start N workers that randomly seeks and performs 512 byte read/write I/O operations on a file with
              readahead. The default file size is 1 GB.  Readaheads and reads are batched into 16 readaheads and
              then 16 reads.

       --readahead-bytes N
              set  the  size of readahead file, the default is 1 GB. One can specify the size as % of free space
              on the file system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --readahead-ops N
              stop readahead stress workers after N bogo read operations.

       --reboot N
              start N workers that exercise the reboot(2) system call. When possible, it will create  a  process
              in a PID namespace and perform a reboot power off command that should shutdown the process.  Also,
              the stressor exercises invalid reboot magic values and invalid reboots when there are insufficient
              privileges that will not actually reboot the system.

       --reboot-ops N
              stop the reboot stress workers after N bogo reboot cycles.

       --remap N
              start  N  workers  that  map  512  pages and re-order these pages using the deprecated system call
              remap_file_pages(2). Several page re-orderings are exercised: forward, reverse,  random  and  many
              pages to 1 page.

       --remap-ops N
              stop after N remapping bogo operations.

       -R N, --rename N
              start N workers that each create a file and then repeatedly rename it.

       --rename-ops N
              stop rename stress workers after N bogo rename operations.

       --resources N
              start N workers that consume various system resources. Each worker will spawn 1024 child processes
              that iterate 1024 times consuming shared memory, heap, stack, temporary  files  and  various  file
              descriptors (eventfds, memoryfds, userfaultfds, pipes and sockets).

       --resources-ops N
              stop after N resource child forks.

       --revio N
              start N workers continually writing in reverse position order to temporary files. The default mode
              is to stress test reverse position ordered writes with randomly sized sparse  holes  between  each
              write.   With  the --aggressive option enabled without any --revio-opts options the revio stressor
              will work through all the --revio-opt options one by one to cover a range of I/O options.

       --revio-bytes N
              write N bytes for each revio process, the default is 1 GB. One can specify the size as %  of  free
              space  on the file system or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m
              or g.

       --revio-opts list
              specify various stress test options as a comma separated list. Options are the same as  --hdd-opts
              but without the iovec option.

       --revio-ops N
              stop revio stress workers after N bogo operations.

       --revio-write-size N
              specify size of each write in bytes. Size can be from 1 byte to 4MB.

       --rlimit N
              start  N  workers  that  exceed  CPU  and file size resource imits, generating SIGXCPU and SIGXFSZ
              signals.

       --rlimit-ops N
              stop after N bogo resource limited SIGXCPU and SIGXFSZ signals have been caught.

       --rmap N
              start N workers that exercise the VM reverse-mapping. This creates 16 processes  per  worker  that
              write/read  multiple  file-backed  memory mappings. There are 64 lots of 4 page mappings made onto
              the file, with each mapping overlapping the previous by 3 pages and at least 1 page of  non-mapped
              memory  between  each  of  the  mappings. Data is synchronously msync'd to the file 1 in every 256
              iterations in a random manner.

       --rmap-ops N
              stop after N bogo rmap memory writes/reads.

       --rtc N
              start  N  workers  that  exercise  the  real  time  clock  (RTC)  interfaces  via   /dev/rtc   and
              /sys/class/rtc/rtc0.  No  destructive  writes  (modifications) are performed on the RTC. This is a
              Linux only stressor.

       --rtc-ops N
              stop after N bogo RTC interface accesses.

       --schedpolicy N
              start N workers that work  set  the  worker  to  various  available  scheduling  policies  out  of
              SCHED_OTHER,  SCHED_BATCH, SCHED_IDLE, SCHED_FIFO, SCHED_RR and SCHED_DEADLINE.  For the real time
              scheduling policies a random sched priority is selected between the minimum and maximum scheduling
              priority settings.

       --schedpolicy-ops N
              stop after N bogo scheduling policy changes.

       --sctp N
              start  N  workers  that perform network sctp stress activity using the Stream Control Transmission
              Protocol (SCTP).  This involves client/server processes performing  rapid  connect,  send/receives
              and disconnects on the local host.

       --sctp-domain D
              specify the domain to use, the default is ipv4. Currently ipv4 and ipv6 are supported.

       --sctp-ops N
              stop sctp workers after N bogo operations.

       --sctp-port P
              start  at sctp port P. For N sctp worker processes, ports P to (P * 4) - 1 are used for ipv4, ipv6
              domains and ports P to P - 1 are used for the unix domain.

       --seal N
              start N workers that exercise the fcntl(2) SEAL commands on a small anonymous file  created  using
              memfd_create(2).   After  each  SEAL command is issued the stressor also sanity checks if the seal
              operation has sealed the file correctly.  (Linux only).

       --seal-ops N
              stop after N bogo seal operations.

       --seccomp N
              start N workers that exercise Secure Computing system call filtering. Each  worker  creates  child
              processes that write a short message to /dev/null and then exits. 2% of the child processes have a
              seccomp filter that disallows the write system call and hence it  is  killed  by  seccomp  with  a
              SIGSYS.   Note  that  this  stressor  can  generate many audit log messages each time the child is
              killed.  Requires CAP_SYS_ADMIN to run.

       --seccomp-ops N
              stop seccomp stress workers after N seccomp filter tests.

       --seek N
              start N workers that randomly seeks and performs 512 byte read/write I/O operations on a file. The
              default file size is 16 GB.

       --seek-ops N
              stop seek stress workers after N bogo seek operations.

       --seek-punch
              punch randomly located 8K holes into the file to cause more extents to force a more demanding seek
              stressor, (Linux only).

       --seek-size N
              specify the size of the file in bytes. Small file sizes allow the  I/O  to  occur  in  the  cache,
              causing  greater  CPU  load. Large file sizes force more I/O operations to drive causing more wait
              time and more I/O on the drive. One can specify the size in units of  Bytes,  KBytes,  MBytes  and
              GBytes using the suffix b, k, m or g.

       --sem N
              start  N workers that perform POSIX semaphore wait and post operations. By default, a parent and 4
              children are started per worker to provide some contention on the semaphore.  This  stresses  fast
              semaphore operations and produces rapid context switching.

       --sem-ops N
              stop semaphore stress workers after N bogo semaphore operations.

       --sem-procs N
              start  N  child  workers per worker to provide contention on the semaphore, the default is 4 and a
              maximum of 64 are allowed.

       --sem-sysv N
              start N workers that perform System V semaphore wait and post operations. By default, a parent and
              4  children are started per worker to provide some contention on the semaphore. This stresses fast
              semaphore operations and produces rapid context switching.

       --sem-sysv-ops N
              stop semaphore stress workers after N bogo System V semaphore operations.

       --sem-sysv-procs N
              start N child processes per worker to provide contention on the System V semaphore, the default is
              4 and a maximum of 64 are allowed.

       --sendfile N
              start N workers that send an empty file to /dev/null. This operation spends nearly all the time in
              the kernel.  The default sendfile size is 4MB.  The sendfile options are for Linux only.

       --sendfile-ops N
              stop sendfile workers after N sendfile bogo operations.

       --sendfile-size S
              specify the size to be copied with each sendfile call. The default size is 4MB.  One  can  specify
              the size in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --set N
              start  N  workers  that call system calls that try to set data in the kernel, currently these are:
              setgid, sethostname, setpgid, setpgrp, setuid, setgroups, setreuid, setregid, setresuid, setresgid
              and setrlimit.  Some of these system calls are OS specific.

       --set-ops N
              stop set workers after N bogo set operations.

       --shellsort N
              start N workers that sort 32 bit integers using shellsort.

       --shellsort-ops N
              stop shellsort stress workers after N bogo shellsorts.

       --shellsort-size N
              specify number of 32 bit integers to sort, default is 262144 (256 × 1024).

       --shm N
              start  N  workers  that  open  and  allocate  shared  memory objects using the POSIX shared memory
              interfaces.  By default, the test will repeatedly create and destroy  32  shared  memory  objects,
              each of which is 8MB in size.

       --shm-ops N
              stop after N POSIX shared memory create and destroy bogo operations are complete.

       --shm-bytes N
              specify  the  size of the POSIX shared memory objects to be created. One can specify the size as %
              of total available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m
              or g.

       --shm-objs N
              specify the number of shared memory objects to be created.

       --shm-sysv N
              start  N  workers  that  allocate  shared  memory  using the System V shared memory interface.  By
              default, the test will repeatedly create and destroy 8 shared memory segments, each  of  which  is
              8MB in size.

       --shm-sysv-ops N
              stop after N shared memory create and destroy bogo operations are complete.

       --shm-sysv-bytes N
              specify  the  size  of  the  shared memory segment to be created. One can specify the size as % of
              total available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or
              g.

       --shm-sysv-segs N
              specify the number of shared memory segments to be created. The default is 8 segments.

       --sigfd N
              start  N  workers  that generate SIGRT signals and are handled by reads by a child process using a
              file descriptor set up using signalfd(2).  (Linux only). This will generate a heavy context switch
              load when all CPUs are fully loaded.

       --sigfd-ops
              stop sigfd workers after N bogo SIGUSR1 signals are sent.

       --sigfpe N
              start N workers that rapidly cause division by zero SIGFPE faults.

       --sigfpe-ops N
              stop sigfpe stress workers after N bogo SIGFPE faults.

       --sigio N
              start  N  workers  that read data from a child process via a pipe and generate SIGIO signals. This
              exercises asynchronous I/O via SIGIO.

       --sigio-ops N
              stop sigio stress workers after handling N SIGIO signals.

       --sigpending N
              start N workers that check if SIGUSR1 signals are pending. This stressor masks SIGUSR1,  generates
              a  SIGUSR1  signal  and  uses  sigpending(2)  to see if the signal is pending. Then it unmasks the
              signal and checks if the signal is no longer pending.

       --sigpending-ops N
              stop sigpending stress workers after N bogo sigpending pending/unpending checks.

       --sigpipe N
              start N workers that repeatedly spawn off child process that exits before a parent can complete  a
              pipe write, causing a SIGPIPE signal.  The child process is either spawned using clone(2) if it is
              available or use the slower fork(2) instead.

       --sigpipe-ops N
              stop N workers after N SIGPIPE signals have been caught and handled.

       --sigsegv N
              start N workers that rapidly create and catch segmentation faults.

       --sigsegv-ops N
              stop sigsegv stress workers after N bogo segmentation faults.

       --sigsuspend N
              start N workers that each spawn off 4 child processes that wait for  a  SIGUSR1  signal  from  the
              parent  using  sigsuspend(2).  The parent sends SIGUSR1 signals to each child in rapid succession.
              Each sigsuspend wakeup is counted as one bogo operation.

       --sigsuspend-ops N
              stop sigsuspend stress workers after N bogo sigsuspend wakeups.

       --sigq N
              start N workers that rapidly send SIGUSR1 signals using sigqueue(3) to child processes  that  wait
              for the signal via sigwaitinfo(2).

       --sigq-ops N
              stop sigq stress workers after N bogo signal send operations.

       --sigrt N
              start  N workers that each create child processes to handle SIGRTMIN to SIGRMAX real time signals.
              The parent sends each child process a RT signal via siqueue(2) and the  child  process  waits  for
              this  via  sigwaitinfo(2).  When the child receives the signal it then sends a RT signal to one of
              the other child processes also via sigqueue(2).

       --sigrt-ops N
              stop sigrt stress workers after N bogo sigqueue signal send operations.

       --skiplist N
              start N workers that store and then search for integers  using  a  skiplist.   By  default,  65536
              integers  are added and searched.  This is a useful method to exercise random access of memory and
              processor cache.

       --skiplist-ops N
              stop the skiplist worker after N skiplist store and search cycles are completed.

       --skiplist-size N
              specify the size (number of integers) to store and search in the skiplist. Size can be from 1K  to
              4M.

       --sleep N
              start N workers that spawn off multiple threads that each perform multiple sleeps of ranges 1us to
              0.1s.  This creates multiple context switches and timer interrupts.

       --sleep-ops N
              stop after N sleep bogo operations.

       --sleep-max P
              start P threads per worker. The default is 1024, the maximum allowed is 30000.

       -S N, --sock N
              start N workers that perform various socket stress activity. This involves a pair of client/server
              processes performing rapid connect, send and receives and disconnects on the local host.

       --sock-domain D
              specify the domain to use, the default is ipv4. Currently ipv4, ipv6 and unix are supported.

       --sock-nodelay
              This disables the TCP Nagle algorithm, so data segments are always sent as soon as possible.  This
              stops data from being buffered  before  being  transmitted,  hence  resulting  in  poorer  network
              utilisation and more context switches between the sender and receiver.

       --sock-port P
              start at socket port P. For N socket worker processes, ports P to P - 1 are used.

       --sock-ops N
              stop socket stress workers after N bogo operations.

       --sock-opts [ random | send | sendmsg | sendmmsg ]
              by  default, messages are sent using send(2). This option allows one to specify the sending method
              using send(2), sendmsg(2), sendmmsg(2) or a random selection of one of thse 3 on  each  iteration.
              Note that sendmmsg is only available for Linux systems that support this system call.

       --sock-type [ stream | seqpacket ]
              specify the socket type to use. The default type is stream. seqpacket currently only works for the
              unix socket domain.

       --sockabuse N
              start N workers that abuse a socket file desciptor with  various  file  based  system  that  don't
              normally act on sockets. The kernel should handle these illegal and unexpected calls gracefully.

       --sockabuse-ops N
              stop after N iterations of the socket abusing stressor loop.

       --sockdiag N
              start  N  workers that exercise the Linux sock_diag netlink socket diagnostics (Linux only).  This
              currently   requests   diagnostics   using   UDIAG_SHOW_NAME,   UDIAG_SHOW_VFS,   UDIAG_SHOW_PEER,
              UDIAG_SHOW_ICONS,  UDIAG_SHOW_RQLEN  and  UDIAG_SHOW_MEMINFO  for  the  AF_UNIX  family  of socket
              connections.

       --sockdiag-ops N
              stop after receiving N sock_diag diagnostic messages.

       --sockfd N
              start N workers that pass file descriptors over a UNIX domain socket using the  CMSG(3)  ancillary
              data  mechanism. For each worker, pair of client/server processes are created, the server opens as
              many file descriptors on /dev/null as possible and passing these over the socket to a client  that
              reads these from the CMSG data and immediately closes the files.

       --sockfd-ops N
              stop sockfd stress workers after N bogo operations.

       --sockfd-port P
              start at socket port P. For N socket worker processes, ports P to P - 1 are used.

       --sockmany N
              start  N  workers  that  use  a  client process to attempt to open as many as 100000 TCP/IP socket
              connections to a server on port 10000.

       --sockmany-ops N
              stop after N connections.

       --sockpair N
              start N workers that perform socket pair I/O read/writes. This involves a  pair  of  client/server
              processes performing randomly sized socket I/O operations.

       --sockpair-ops N
              stop socket pair stress workers after N bogo operations.

       --softlockup N
              start  N workers that flip between with the "real-time" SCHED_FIO and SCHED_RR scheduling policies
              at the highest priority to force softlockups. This can only be run  with  CAP_SYS_NICE  capability
              and  for  best  results the number of stressors should be at least the number of online CPUs. Once
              running, this is practically impossible to stop and  it  will  force  softlockup  issues  and  may
              trigger watchdog timeout reboots.

       --softlockup-ops N
              stop softlockup stress workers after N bogo scheduler policy changes.

       --spawn N
              start  N workers continually spawn children using posix_spawn(3) that exec stress-ng and then exit
              almost immediately. Currently Linux only.

       --spawn-ops N
              stop spawn stress workers after N bogo spawns.

       --splice N
              move data from /dev/zero to /dev/null through a pipe without any copying  between  kernel  address
              space and user address space using splice(2). This is only available for Linux.

       --splice-ops N
              stop after N bogo splice operations.

       --splice-bytes N
              transfer  N  bytes  per  splice  call,  the default is 64K. One can specify the size as % of total
              available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --stack N
              start N workers that rapidly cause and catch stack overflows  by  use  of  large  recursive  stack
              allocations.  Much like the brk stressor, this can eat up pages rapidly and may trigger the kernel
              OOM killer on the process, however, the killed stressor is respawned again by a monitoring  parent
              process.

       --stack-fill
              the  default  action is to touch the lowest page on each stack allocation. This option touches all
              the pages by filling the new stack allocation  with  zeros  which  forces  physical  pages  to  be
              allocated and hence is more aggressive.

       --stack-ops N
              stop stack stress workers after N bogo stack overflows.

       --stackmmap N
              start  N  workers  that  use  a 2MB stack that is memory mapped onto a temporary file. A recursive
              function works down the stack and flushes dirty stack pages back to the memory mapped  file  using
              msync(2)  until  the  end  of the stack is reached (stack overflow). This exercises dirty page and
              stack exception handling.

       --stackmmap-ops N
              stop workers after N stack overflows have occurred.

       --str N
              start N workers that exercise various libc string functions on random strings.

       --str-method strfunc
              select a specific libc string function to stress. Available string functions to stress  are:  all,
              index,  rindex, strcasecmp, strcat, strchr, strcoll, strcmp, strcpy, strlen, strncasecmp, strncat,
              strncmp, strrchr and strxfrm.  See string(3) for more information on these string functions.   The
              'all' method is the default and will exercise all the string methods.

       --str-ops N
              stop after N bogo string operations.

       --stream N
              start  N  workers  exercising a memory bandwidth stressor loosely based on the STREAM "Sustainable
              Memory Bandwidth in High Performance Computers" benchmarking tool by John D. McCalpin, Ph.D.  This
              stressor  allocates buffers that are at least 4 times the size of the CPU L2 cache and continually
              performs rounds of following computations on large  arrays  of  double  precision  floating  point
              numbers:

              Operation            Description
              copy                 c[i] = a[i]
              scale                b[i] = scalar * c[i]
              add                  c[i] = a[i] + b[i]
              triad                a[i] = b[i] + (c[i] * scalar)

              Since this is loosely based on a variant of the STREAM benchmark code, DO NOT submit results based
              on this as it is intended to in stress-ng just to stress memory and compute and NOT  intended  for
              STREAM  accurate tuned or non-tuned benchmarking whatsoever.  Use the official STREAM benchmarking
              tool if you desire accurate and standardised STREAM benchmarks.

       --stream-ops N
              stop after N stream bogo operations, where a bogo operation is one round of copy, scale,  add  and
              triad operations.

       --stream-index N
              specify  number  of  stream  indices  used  to  index  into the data arrays a, b and c.  This adds
              indirection into the data lookup by using randomly shuffled indexing into the three  data  arrays.
              Level  0  (no  indexing)  is  the default, and 3 is where all 3 arrays are indexed via 3 different
              randomly shuffled indexes. The higher the index setting the more impact this has on L1, L2 and  L3
              caching and hence forces higher memory read/write latencies.

       --stream-l3-size N
              Specify  the CPU Level 3 cache size in bytes.  One can specify the size in units of Bytes, KBytes,
              MBytes and GBytes using the suffix b, k, m or g.  If the L3  cache  size  is  not  provided,  then
              stress-ng  will  attempt  to  determine the cache size, and failing this, will default the size to
              4MB.

       --stream-madvise [ hugepage | nohugepage | normal ]
              Specify the madvise options used on the memory mapped buffer used in  the  stream  stressor.  Non-
              linux systems will only have the 'normal' madvise advice. The default is 'normal'.

       --swap N
              start  N workers that add and remove small randomly sizes swap partitions (Linux only).  Note that
              if too many swap partitions are added then the stressors may exit with exit  code  3  (not  enough
              resources).  Requires CAP_SYS_ADMIN to run.

       --swap-ops N
              stop the swap workers after N swapon/swapoff iterations.

       -s N, --switch N
              start N workers that send messages via pipe to a child to force context switching.

       --switch-ops N
              stop context switching workers after N bogo operations.

       --switch-rate R
              run  the  context  switching at the rate of R context switches per second. Note that the specified
              switch rate may not be achieved because of CPU speed and memory bandwidth limitations.

       --symlink N
              start N workers creating and removing symbolic links.

       --symlink-ops N
              stop symlink stress workers after N bogo operations.

       --sync-file N
              start N workers that perform a range of data syncs across a file using sync_file_range(2).   Three
              mixes  of  syncs  are  performed,  from start to the end of the file,  from end of the file to the
              start, and a random  mix.  A  random  selection  of  valid  sync  types  are  used,  covering  the
              SYNC_FILE_RANGE_WAIT_BEFORE, SYNC_FILE_RANGE_WRITE and SYNC_FILE_RANGE_WAIT_AFTER flag bits.

       --sync-file-ops N
              stop sync-file workers after N bogo sync operations.

       --sync-file-bytes N
              specify the size of the file to be sync'd. One can specify the size as % of free space on the file
              system in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --sysbadaddr N
              start N workers that pass bad addresses  to  system  calls  to  exercise  bad  address  and  fault
              handling.  The  addresses  used  are  null  pointers,  read only pages, write only pages, unmapped
              addresses, text only pages, unaligned addresses and top of memory addresses.

       --sysbadaddr-ops N
              stop the sysbadaddr stressors after N bogo system calls.

       --sysinfo N
              start N workers that continually read system and process specific  information.   This  reads  the
              process  user  and  system times using the times(2) system call.  For Linux systems, it also reads
              overall system statistics using the sysinfo(2) system call and also the file system statistics for
              all mounted file systems using statfs(2).

       --sysinfo-ops N
              stop the sysinfo workers after N bogo operations.

       --sysfs N
              start  N  workers  that  recursively  read  files from /sys (Linux only).  This may cause specific
              kernel drivers to emit messages into the kernel log.

       --sys-ops N
              stop sysfs reading after N bogo read operations. Note,  since  the  number  of  entries  may  vary
              between kernels, this bogo ops metric is probably very misleading.

       --tee N
              move  data  from  a  writer process to a reader process through pipes and to /dev/null without any
              copying between kernel address space and user address space using tee(2). This is  only  available
              for Linux.

       --tee-ops N
              stop after N bogo tee operations.

       -T N, --timer N
              start  N  workers creating timer events at a default rate of 1 MHz (Linux only); this can create a
              many thousands of timer clock interrupts. Each timer event is  caught  by  a  signal  handler  and
              counted as a bogo timer op.

       --timer-ops N
              stop timer stress workers after N bogo timer events (Linux only).

       --timer-freq F
              run  timers  at  F  Hz;  range  from  1 to 1000000000 Hz (Linux only). By selecting an appropriate
              frequency stress-ng can generate hundreds of thousands of interrupts per second.  Note: it is also
              worth using --timer-slack 0 for high frequencies to stop the kernel from coalescing timer events.

       --timer-rand
              select  a  timer frequency based around the timer frequency +/- 12.5% random jitter. This tries to
              force more variability in the timer interval to make the scheduling less predictable.

       --timerfd N
              start N workers creating timerfd events at a default rate of 1 MHz (Linux only); this can create a
              many  thousands  of  timer  clock events. Timer events are waited for on the timer file descriptor
              using select(2) and then read and counted as a bogo timerfd op.

       --timerfd-ops N
              stop timerfd stress workers after N bogo timerfd events (Linux only).

       --timerfd-freq F
              run timers at F Hz; range from 1 to 1000000000  Hz  (Linux  only).  By  selecting  an  appropriate
              frequency stress-ng can generate hundreds of thousands of interrupts per second.

       --timerfd-rand
              select a timerfd frequency based around the timer frequency +/- 12.5% random jitter. This tries to
              force more variability in the timer interval to make the scheduling less predictable.

       --tlb-shootdown N
              start N workers that force Translation Lookaside Buffer (TLB) shootdowns.   This  is  achieved  by
              creating up to 16 child processes that all share a region of memory and these processes are shared
              amongst the available CPUs.  The processes adjust the page mapping settings  causing  TLBs  to  be
              force flushed on the other processors, causing the TLB shootdowns.

       --tlb-shootdown-ops N
              stop after N bogo TLB shootdown operations are completed.

       --tmpfs N
              start N workers that create a temporary file on an available tmpfs file system and perform various
              file based mmap operations upon it.

       --tmpfs-ops N
              stop tmpfs stressors after N bogo mmap operations.

       --tmpfs-mmap-async
              enable  file  based  memory  mapping  and  use  asynchronous   msync'ing   on   each   page,   see
              --tmpfs-mmap-file.

       --tmpfs-mmap-file
              enable tmpfs file based memory mapping and by default use synchronous msync'ing on each page.

       --tree N
              start N workers that exercise tree data structures. The default is to add, find and remove 250,000
              64 bit integers into AVL (avl), Red-Black (rb), Splay (splay) and binary trees.  The intention  of
              this stressor is to exercise memory and cache with the various tree operations.

       --tree-ops N
              stop  tree stressors after N bogo ops. A bogo op covers the addition, finding and removing all the
              items into the tree(s).

       --tree-size N
              specify the size of the tree, where N is the number of 64 bit integers to be added into the tree.

       --tree-method [ all | avl | binary | rb | splay ]
              specify the tree to be used. By default, both the rb ad splay trees are used (the 'all' option).

       --tsc N
              start N workers that read the Time  Stamp  Counter  (TSC)  256  times  per  loop  iteration  (bogo
              operation).  This exercises the tsc instruction for x86 and the mftb instruction for ppc64.

       --tsc-ops N
              stop the tsc workers after N bogo operations are completed.

       --tsearch N
              start  N workers that insert, search and delete 32 bit integers on a binary tree using tsearch(3),
              tfind(3) and tdelete(3). By default, there are 65536 randomized integers used in the  tree.   This
              is a useful method to exercise random access of memory and processor cache.

       --tsearch-ops N
              stop the tsearch workers after N bogo tree operations are completed.

       --tsearch-size N
              specify the size (number of 32 bit integers) in the array to tsearch. Size can be from 1K to 4M.

       --tun N
              start N workers that create a network tunnel device and sends and receives packets over the tunnel
              using UDP and then destroys it. A new random 192.168.*.* IPv4 address is used each time  a  tunnel
              is created.

       --tun-ops N
              stop after N iterations of creating/sending/receiving/destroying a tunnel.

       --tun-tap
              use  network  tap  device using level 2 frames (bridging) rather than a tun device for level 3 raw
              packets (tunnelling).

       --udp N
              start N workers that transmit data using UDP. This involves  a  pair  of  client/server  processes
              performing rapid connect, send and receives and disconnects on the local host.

       --udp-domain D
              specify the domain to use, the default is ipv4. Currently ipv4, ipv6 and unix are supported.

       --udp-lite
              use the UDP-Lite (RFC 3828) protocol (only for ipv4 and ipv6 domains).

       --udp-ops N
              stop udp stress workers after N bogo operations.

       --udp-port P
              start  at  port  P.  For N udp worker processes, ports P to P - 1 are used. By default, ports 7000
              upwards are used.

       --udp-flood N
              start N workers that attempt to flood the host with UDP packets to random ports. The IP address of
              the packets are currently not spoofed. This is only available on systems that support AF_PACKET.

       --udp-flood-domain D
              specify the domain to use, the default is ipv4. Currently ipv4 and ipv6 are supported.

       --udp-flood-ops N
              stop udp-flood stress workers after N bogo operations.

       --unshare N
              start  N  workers  that  each  fork off 32 child processes, each of which exercises the unshare(2)
              system call by disassociating parts of the process execution context. (Linux only).

       --unshare-ops N
              stop after N bogo unshare operations.

       -u N, --urandom N
              start N workers reading /dev/urandom (Linux only). This will load the kernel random number source.

       --urandom-ops N
              stop urandom stress workers after N urandom bogo read operations (Linux only).

       --userfaultfd N
              start N workers that generate write page faults on a small anonymously mapped  memory  region  and
              handle  these faults using the user space fault handling via the userfaultfd mechanism.  This will
              generate a large quantity of major page faults and also context switches during  the  handling  of
              the page faults.  (Linux only).

       --userfaultfd-ops N
              stop userfaultfd stress workers after N page faults.

       --userfaultfd-bytes N
              mmap  N  bytes  per userfaultfd worker to page fault on, the default is 16MB.  One can specify the
              size as % of total available memory or in units of Bytes, KBytes,  MBytes  and  GBytes  using  the
              suffix b, k, m or g.

       --utime N
              start N workers updating file timestamps. This is mainly CPU bound when the default is used as the
              system flushes metadata changes only periodically.

       --utime-ops N
              stop utime stress workers after N utime bogo operations.

       --utime-fsync
              force metadata changes on each file timestamp update to be flushed to disk.  This forces the  test
              to become I/O bound and will result in many dirty metadata writes.

       --vdso N
              start  N  workers  that  repeatedly  call  each  of the system call functions in the vDSO (virtual
              dynamic shared object).  The vDSO is a shared library that the kernel maps into the address  space
              of  all  user-space  applications to allow fast access to kernel data to some system calls without
              the need of performing an expensive system call.

       --vdso-ops N
              stop after N vDSO functions calls.

       --vdso-func F
              Instead of calling all the vDSO functions, just call the vDSO function F. The functions depend  on
              the kernel being used, but are typically clock_gettime, getcpu, gettimeofday and time.

       --vecmath N
              start  N workers that perform various unsigned integer math operations on various 128 bit vectors.
              A mix of vector math operations are performed on the following vectors: 16 × 8 bits, 8 × 16  bits,
              4  ×  32  bits, 2 × 64 bits. The metrics produced by this mix depend on the processor architecture
              and the vector math optimisations produced by the compiler.

       --vecmath-ops N
              stop after N bogo vector integer math operations.

       --vfork N
              start N workers continually vforking children that immediately exit.

       --vfork-ops N
              stop vfork stress workers after N bogo operations.

       --vfork-max P
              create P processes and then wait for them to exit per iteration. The default  is  just  1;  higher
              values  will  create  many  temporary  zombie  processes  that  are  waiting to be reaped. One can
              potentially fill up the the process table using high values for --vfork-max and --vfork.

       --vforkmany N
              start N workers that spawn off a chain of vfork children until the process table fills  up  and/or
              vfork  fails.   vfork  can rapidly create child processes and the parent process has to wait until
              the child dies, so this stressor rapidly fills up the process table.

       --vforkmany-ops N
              stop vforkmany stressors after N vforks have been made.

       -m N, --vm N
              start N workers continuously calling mmap(2)/munmap(2) and writing to the allocated  memory.  Note
              that  this can cause systems to trip the kernel OOM killer on Linux systems if not enough physical
              memory and swap is not available.

       --vm-bytes N
              mmap N bytes per vm worker, the default is 256MB. One can specify the size as % of total available
              memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --vm-ops N
              stop vm workers after N bogo operations.

       --vm-hang N
              sleep  N  seconds  before  unmapping memory, the default is zero seconds.  Specifying 0 will do an
              infinite wait.

       --vm-keep
              do not continually unmap and map memory, just keep on re-writing to it.

       --vm-locked
              Lock the pages of the mapped region into memory using mmap MAP_LOCKED (since Linux 2.5.37).   This
              is similar to locking memory as described in mlock(2).

       --vm-madvise advice
              Specify  the  madvise  'advice'  option used on the memory mapped regions used in the vm stressor.
              Non-linux systems will only have the 'normal' madvise advice, linux  systems  support  'dontneed',
              'hugepage',  'mergeable'  ,  'nohugepage',  'normal',  'random',  'sequential',  'unmergeable' and
              'willneed' advice. If this option is not used then the default is to pick  random  madvise  advice
              for each mmap call. See madvise(2) for more details.

       --vm-method m
              specify a vm stress method. By default, all the stress methods are exercised sequentially, however
              one can specify just one method to be used if required.  Each of the vm workers have 3 phases:

              1. Initialised. The anonymously memory mapped region is set to a known pattern.

              2. Exercised. Memory is modified in  a  known  predictable  way.  Some  vm  workers  alter  memory
              sequentially, some use small or large strides to step along memory.

              3. Checked. The modified memory is checked to see if it matches the expected result.

              The vm methods containing 'prime' in their name have a stride of the largest prime less than 2^64,
              allowing to them to thoroughly step through memory and touch all locations just  once  while  also
              doing without touching memory cells next to each other. This strategy exercises the cache and page
              non-locality.

              Since the memory being exercised is virtually mapped then there is no guarantee of  touching  page
              addresses in any particular physical order.  These workers should not be used to test that all the
              system's memory is working correctly either, use tools such as memtest86 instead.

              The vm stress methods are intended to exercise memory in ways to possibly find memory  issues  and
              to try to force thermal errors.

              Available vm stress methods are described as follows:

              Method                  Description
              all                     iterate over all the vm stress methods as listed below.
              flip                    sequentially work through memory 8 times, each time just one bit in memory
                                      flipped (inverted). This will effectively invert each byte in 8 passes.
              galpat-0                galloping pattern zeros. This sets all bits to 0 and flips just 1 in  4096
                                      bits  to  1. It then checks to see if the 1s are pulled down to 0 by their
                                      neighbours or of the neighbours have been pulled up to 1.
              galpat-1                galloping pattern ones. This sets all bits to 1 and flips just 1  in  4096
                                      bits  to  0.  It  then checks to see if the 0s are pulled up to 1 by their
                                      neighbours or of the neighbours have been pulled down to 0.
              gray                    fill the memory with sequential gray codes (these only change 1 bit  at  a
                                      time between adjacent bytes) and then check if they are set correctly.
              incdec                  work  sequentially  through  memory  twice, the first pass increments each
                                      byte by a specific value and the second pass decrements each byte back  to
                                      the  original  start  value. The increment/decrement value changes on each
                                      invocation of the stressor.
              inc-nybble              initialise memory to a set value (that changes on each invocation  of  the
                                      stressor)  and  then  sequentially work through each byte incrementing the
                                      bottom 4 bits by 1 and the top 4 bits by 15.
              rand-set                sequentially work through memory in 64 bit chunks  setting  bytes  in  the
                                      chunk  to  the  same 8 bit random value.  The random value changes on each
                                      chunk.  Check that the values have not changed.
              rand-sum                sequentially set all memory to random values and then summate  the  number
                                      of bits that have changed from the original set values.
              read64                  sequentially  read memory using 32 x 64 bit reads per bogo loop. Each loop
                                      equates to one bogo operation.  This exercises raw memory reads.
              ror                     fill memory with a random pattern and then sequentially rotate 64 bits  of
                                      memory right by one bit, then check the final load/rotate/stored values.
              swap                    fill  memory  in  64  byte  chunks with random patterns. Then swap each 64
                                      chunk with a randomly chosen chunk. Finally, reverse the swap to  put  the
                                      chunks back to their original place and check if the data is correct. This
                                      exercises adjacent and random memory load/stores.
              move-inv                sequentially fill memory 64 bits of memory at a time with  random  values,
                                      and  then check if the memory is set correctly.  Next, sequentially invert
                                      each 64 bit pattern and again check if the memory is set as expected.
              modulo-x                fill memory over 23 iterations. Each iteration  starts  one  byte  further
                                      along  from the start of the memory and steps along in 23 byte strides. In
                                      each stride, the first byte is set to a random pattern and all other bytes
                                      are set to the inverse.  Then it checks see if the first byte contains the
                                      expected random pattern. This  exercises  cache  store/reads  as  well  as
                                      seeing if neighbouring cells influence each other.
              prime-0                 iterate  8  times  by  stepping through memory in very large prime strides
                                      clearing just on bit at a time in every byte. Then check  to  see  if  all
                                      bits are set to zero.
              prime-1                 iterate  8  times  by  stepping through memory in very large prime strides
                                      setting just on bit at a time in every byte. Then check to see if all bits
                                      are set to one.
              prime-gray-0            first step through memory in very large prime strides clearing just on bit
                                      (based on a gray code) in every byte. Next,  repeat  this  but  clear  the
                                      other 7 bits. Then check to see if all bits are set to zero.
              prime-gray-1            first  step through memory in very large prime strides setting just on bit
                                      (based on a gray code) in every byte. Next, repeat this but set the  other
                                      7 bits. Then check to see if all bits are set to one.
              rowhammer               try  to  force memory corruption using the rowhammer memory stressor. This
                                      fetches two 32 bit integers from memory and forces a cache  flush  on  the
                                      two addresses multiple times. This has been known to force bit flipping on
                                      some hardware, especially with lower frequency memory refresh cycles.
              walk-0d                 for each byte in memory, walk through each data line setting them  to  low
                                      (and  the  others  are  set  high)  and check that the written value is as
                                      expected. This checks if any data lines are stuck.
              walk-1d                 for each byte in memory, walk through each data line setting them to  high
                                      (and  the  others  are  set  low)  and  check that the written value is as
                                      expected. This checks if any data lines are stuck.
              walk-0a                 in the given memory mapping, work through  a  range  of  specially  chosen
                                      addresses  working  through  address lines to see if any address lines are
                                      stuck low. This works  best  with  physical  memory  addressing,  however,
                                      exercising these virtual addresses has some value too.

              walk-1a                 in  the  given  memory  mapping,  work through a range of specially chosen
                                      addresses working through address lines to see if any  address  lines  are
                                      stuck  high.  This  works  best  with physical memory addressing, however,
                                      exercising these virtual addresses has some value too.
              write64                 sequentially write memory using 32 x 64 bit writes  per  bogo  loop.  Each
                                      loop  equates  to  one  bogo operation.  This exercises raw memory writes.
                                      Note that memory writes are not checked at the end of each test iteration.
              zero-one                set all memory bits to zero and then check if any bits are not zero. Next,
                                      set all the memory bits to one and check if any bits are not one.

       --vm-populate
              populate  (prefault) page tables for the memory mappings; this can stress swapping. Only available
              on systems that support MAP_POPULATE (since Linux 2.5.46).

       --vm-addr N
              start N workers that exercise virtual memory addressing using various methods to  walk  through  a
              memory  mapped  address  range.  This  will exercise mapped private addresses from 8MB to 64MB per
              worker and try to generate cache and TLB inefficient addressing patterns. Each method will set the
              memory to a random pattern in a write phase and then sanity check this in a read phase.

       --vm-addr-ops N
              stop N workers after N bogo addressing passes.

       --vm-addr-method M
              specify a vm address stress method. By default, all the stress methods are exercised sequentially,
              however one can specify just one method to be used if required.

              Available vm address stress methods are described as follows:

              Method                  Description
              all                     iterate over all the vm stress methods as listed below.
              pwr2                    work through memory addresses in steps of powers of two.
              pwr2inv                 like pwr2, but with the all relevant address bits inverted.
              gray                    work through memory with gray coded  addresses  so  that  each  change  of
                                      address just changes 1 bit compared to the previous address.
              grayinv                 like gray, but with the all relevant address bits inverted, hence all bits
                                      change apart from 1 in the address range.
              rev                     work through the  address  range  with  the  bits  in  the  address  range
                                      reversed.
              revinv                  like rev, but with all the relevant address bits inverted.
              inc                     work through the address range forwards sequentially, byte by byte.
              incinv                  like inc, but with all the relevant address bits inverted.
              dec                     work through the address range backwards sequentially, byte by byte.
              decinv                  like dec, but with all the relevant address bits inverted.

       --vm-rw N
              start  N  workers  that  transfer  memory  to/from  a  parent/child using process_vm_writev(2) and
              process_vm_readv(2). This is feature is only  supported  on  Linux.   Memory  transfers  are  only
              verified if the --verify option is enabled.

       --vm-rw-ops N
              stop vm-rw workers after N memory read/writes.

       --vm-rw-bytes N
              mmap  N  bytes  per  vm-rw  worker,  the  default  is 16MB. One can specify the size as % of total
              available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --vm-segv N
              start N workers that create a child process that unmaps its address space  causing  a  SIGSEGV  on
              return from the unmap.

       --vm-segv-ops N
              stop after N bogo vm-segv SIGSEGV faults.

       --vm-splice N
              move data from memory to /dev/null through a pipe without any copying between kernel address space
              and user address space using vmsplice(2) and splice(2).  This is only available for Linux.

       --vm-splice-ops N
              stop after N bogo vm-splice operations.

       --vm-splice-bytes N
              transfer N bytes per vmsplice call, the default is 64K. One can specify the size  as  %  of  total
              available memory or in units of Bytes, KBytes, MBytes and GBytes using the suffix b, k, m or g.

       --wait N
              start  N  workers that spawn off two children; one spins in a pause(2) loop, the other continually
              stops and continues the first. The controlling process waits on the first child to be  resumed  by
              the delivery of SIGCONT using waitpid(2) and waitid(2).

       --wait-ops N
              stop after N bogo wait operations.

       --watchdog N
              start  N  workers  that  exercising  the  /dev/watchdog  watchdog interface by opening it, perform
              various watchdog specific ioctl(2) commands on the  device  and  close  it.   Before  closing  the
              special  watchdog magic close message is written to the device to try and force it to never trip a
              watchdog reboot after the stressor has been run.  Note that this stressor needs to be run as  root
              with the --pathological option and is only available on Linux.

       --watchdog-ops N
              stop after N bogo operations on the watchdog device.

       --wcs N
              start N workers that exercise various libc wide character string functions on random strings.

       --wcs-method wcsfunc
              select  a  specific  libc  wide character string function to stress. Available string functions to
              stress are: all,  wcscasecmp,  wcscat,  wcschr,  wcscoll,  wcscmp,  wcscpy,  wcslen,  wcsncasecmp,
              wcsncat,  wcsncmp, wcsrchr and wcsxfrm.  The 'all' method is the default and will exercise all the
              string methods.

       --wcs-ops N
              stop after N bogo wide character string operations.

       --x86syscall N
              start N workers that repeatedly exercise the x86-64 syscall instruction  to  call  the  getcpu(2),
              gettimeofday(2) and time(2) system using the Linux vsyscall handler. Only for Linux.

       --x86syscall-ops N
              stop after N x86syscall system calls.

       --x86syscall-func F
              Instead of exercising the 3 syscall system calls, just call the syscall function F. The function F
              must be one of getcpu, gettimeofday and time.

       --xattr N
              start N workers that create, update and delete batches of extended attributes on a file.

       --xattr-ops N
              stop after N bogo extended attribute operations.

       -y N, --yield N
              start N workers that call sched_yield(2). This stressor ensures that at least  2  child  processes
              per  CPU  exercise  shield_yield(2) no matter how many workers are specified, thus always ensuring
              rapid context switching.

       --yield-ops N
              stop yield stress workers after N sched_yield(2) bogo operations.

       --zero N
              start N workers reading /dev/zero.

       --zero-ops N
              stop zero stress workers after N /dev/zero bogo read operations.

       --zlib N
              start N workers compressing and  decompressing  random  data  using  zlib.  Each  worker  has  two
              processes,  one  that compresses random data and pipes it to another process that decompresses the
              data. This stressor exercises CPU, cache and memory.

       --zlib-ops N
              stop after N bogo compression operations, each bogo compression operation is a compression of  64K
              of random data at the highest compression level.

       --zlib-level L
              specify  the  compression  level (0..9), where 0 = no compression, 1 = fastest compression and 9 =
              best compression.

       --zlib-method method
              specify the type of random data to send to the zlib library.   By  default,  the  data  stream  is
              created  from  a  random  selection  of  the different data generation processes.  However one can
              specify just one method to be used if  required.   Available  zlib  data  generation  methods  are
              described as follows:

              Method           Description
              00ff             randomly distributed 0x00 and 0xFF values.
              ascii01          randomly distributed ASCII 0 and 1 characters.
              asciidigits      randomly distributed ASCII digits in the range of 0 and 9.
              bcd              packed binary coded decimals, 0..99 packed into 2 4-bit nybbles.
              binary           32 bit random numbers.
              brown            8 bit brown noise (Brownian motion/Random Walk noise).
              double           double precision floating point numbers from sin(θ).
              fixed            data stream is repeated 0x04030201.
              gray             16 bit gray codes generated from an incrementing counter.
              latin            Random latin sentences from a sample of Lorem Ipsum text.
              logmap           Values  generated from a logistical map of the equation Χn+1 = r ×  Χn × (1 - Χn)
                               where r > ≈ 3.56994567 to produce chaotic data. The values are scaled by a  large
                               arbitrary value and the lower 8 bits of this value are compressed.
              lrand48          Uniformly distributed pseudo-random 32 bit values generated from lrand48(3).
              morse            Morse  code  generated  from  random latin sentences from a sample of Lorem Ipsum
                               text.
              nybble           randomly distributed bytes in the range of 0x00 to 0x0f.
              objcode          object code selected from a random start point in the stress-ng text segment.
              parity           7 bit binary data with 1 parity bit.
              pink             pink noise in the range 0..255  generated  using  the  Gardner  method  with  the
                               McCartney  selection  tree  optimization.  Pink noise is where the power spectral
                               density is inversely proportional to the frequency of the  signal  and  hence  is
                               slightly compressible.
              random           segments  of  the  data stream are created by randomly calling the different data
                               generation methods.
              rarely1          data that has a single 1 in every 32 bits, randomly located.
              rarely0          data that has a single 0 in every 32 bits, randomly located.
              text             random ASCII text.
              utf8             random 8 bit data encoded to UTF-8.

              zero             all zeros, compresses very easily.

       --zombie N
              start N workers that create zombie processes. This will rapidly try to create a  default  of  8192
              child  processes  that immediately die and wait in a zombie state until they are reaped.  Once the
              maximum number of processes is reached (or fork fails because one has reached the maximum  allowed
              number  of  children)  the  oldest child is reaped and a new process is then created in a first-in
              first-out manner, and then repeated.

       --zombie-ops N
              stop zombie stress workers after N bogo zombie operations.

       --zombie-max N
              try to create as many as N zombie processes. This may not be reached if the system limit  is  less
              than N.

EXAMPLES

       stress-ng --vm 8 --vm-bytes 80% -t 1h

              run 8 virtual memory stressors that combined use 80% of the available memory for 1 hour. Thus each
              stressor uses 10% of the available memory.

       stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 60s

              runs for 60 seconds with 4 cpu stressors, 2 io stressors and 1 vm stressor using  1GB  of  virtual
              memory.

       stress-ng --iomix 2 --iomix-bytes 10% -t 10m

              runs  2  instances  of  the  mixed I/O stressors using a total of 10% of the available file system
              space for 10 minutes. Each stressor will use 5% of the available file system space.

       stress-ng --cyclic 1 --cyclic-dist 2500 --cyclic-method clock_ns --cyclic-prio 100  --cyclic-sleep  10000
       --hdd 0 -t 1m

              measures real time scheduling latencies created by the hdd stressor. This uses the high resolution
              nanosecond clock to measure latencies during sleeps of 10,000 nanoseconds. At the end of 1  minute
              of  stressing,  the latency distribution with 2500 ns intervals will be displayed. NOTE: this must
              be run with the CAP_SYS_NICE capability to  enable  the  real  time  scheduling  to  get  accurate
              measurements.

       stress-ng --cpu 8 --cpu-ops 800000

              runs 8 cpu stressors and stops after 800000 bogo operations.

       stress-ng --sequential 2 --timeout 2m --metrics

              run  2 simultaneous instances of all the stressors sequentially one by one, each for 2 minutes and
              summarise with performance metrics at the end.

       stress-ng --cpu 4 --cpu-method fft --cpu-ops 10000 --metrics-brief

              run 4 FFT cpu stressors, stop after 10000 bogo operations and produce a summary just for  the  FFT
              results.

       stress-ng --cpu 0 --cpu-method all -t 1h

              run cpu stressors on all online CPUs working through all the available CPU stressors for 1 hour.

       stress-ng --all 4 --timeout 5m

              run 4 instances of all the stressors for 5 minutes.

       stress-ng --random 64

              run 64 stressors that are randomly chosen from all the available stressors.

       stress-ng --cpu 64 --cpu-method all --verify -t 10m --metrics-brief

              run  64  instances of all the different cpu stressors and verify that the computations are correct
              for 10 minutes with a bogo operations summary at the end.

       stress-ng --sequential 0 -t 10m

              run all the stressors one by one for 10 minutes, with the number of  instances  of  each  stressor
              matching the number of online CPUs.

       stress-ng --sequential 8 --class io -t 5m --times

              run  all  the  stressors  in  the io class one by one for 5 minutes each, with 8 instances of each
              stressor running concurrently and show overall time utilisation statistics at the end of the run.

       stress-ng --all 0 --maximize --aggressive

              run all the stressors (1 instance of each per CPU) simultaneously, maximize the  settings  (memory
              sizes, file allocations, etc.) and select the most demanding/aggressive options.

       stress-ng --random 32 -x numa,hdd,key

              run 32 randomly selected stressors and exclude the numa, hdd and key stressors

       stress-ng --sequential 4 --class vm --exclude bigheap,brk,stack

              run  4  instances  of  the VM stressors one after each other, excluding the bigheap, brk and stack
              stressors

       stress-ng --taskset 0,2-3 --cpu 3

              run 3 instances of the CPU stressor and pin them to CPUs 0, 2 and 3.

EXIT STATUS

         Status     Description
           0        Success.
           1        Error; incorrect user options or a fatal resource issue in the  stress-ng  stressor  harness
                    (for example, out of memory).
           2        One or more stressors failed.
           3        One  or more stressors failed to initialise because of lack of resources, for example ENOMEM
                    (no memory), ENOSPC (no space on file system) or a missing or unimplemented system call.
           4        One or more stressors were not implemented on a specific architecture or operating system.
           5        A stressor has been killed by an unexpected signal.
           6        A stressor exited by exit(2) which  was  not  expected  and  timing  metrics  could  not  be
                    gathered.

BUGS

       File bug reports at:
         https://launchpad.net/ubuntu/+source/stress-ng/+filebug

SEE ALSO

       cpuburn(1), perf(1), stress(1), taskset(1)

AUTHOR

       stress-ng  was written by Colin King <colin.king@canonical.com> and is a clean room re-implementation and
       extension of the original stress tool by Amos Waterland. Thanks also for contributions from Abdul Haleem,
       André  Wild,  Baruch  Siach,  Carlos Santos, Christian Ehrhardt, Fabrice Fontaine, James Hunt, Jim Rowan,
       Joseph DeVincentis, Khem Raj, Luca Pizzamiglio, Luis Henriques, Manoj  Iyer,  Matthew  Tippett,  Mauricio
       Faria  de  Oliveira,  Ralf  Ramsauer,  Rob Colclaser, Thia Wyrod, Tim Gardner, Tim Orling, Tommi Rantala,
       Zhiyi Sun and others.

NOTES

       Sending a SIGALRM, SIGINT or SIGHUP to stress-ng causes it to terminate all the  stressor  processes  and
       ensures temporary files and shared memory segments are removed cleanly.

       Sending a SIGUSR2 to stress-ng will dump out the current load average and memory statistics.

       Note  that  the  stress-ng cpu, io, vm and hdd tests are different implementations of the original stress
       tests and hence may produce different stress characteristics.  stress-ng does not support any GPU  stress
       tests.

       The bogo operations metrics may change with each release  because of bug fixes to the code, new features,
       compiler optimisations or changes in system call performance.

COPYRIGHT

       Copyright © 2013-2020 Canonical Ltd.
       This is free software; see the source for copying  conditions.   There  is  NO  warranty;  not  even  for
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

                                                 March 22, 2020                                     STRESS-NG(1)