Provided by: stress-ng_0.17.06-1build1_amd64 bug

NAME

       stress-ng - stress "next generation", 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 zero  value  will
       select  the  number of processors available as defined by sysconf(_SC_NPROCESSORS_CONF), if that can't be
       determined then the number of online CPUs is used.  If the value is less than zero  then  the  number  of
       online CPUs is used.

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 configured 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.

       --change-cpu
              this  forces  child  processes  of  some stressors to change to a different CPU from the parent on
              startup. Note that during the execution of the stressor the scheduler may choose move  the  parent
              onto  the  same  CPU  as  the child. The stressors affected by this option are client/server style
              stressors, such as the network stressors (sock, sockmany, udp, etc) or context switching stressors
              (switch, pipe, etc).

       --class name
              specify the class of stressors to run. Stressors are classified into one or more of the  following
              classes:  cpu,  cpu-cache,  device,  gpu,  io,  interrupt,  filesystem, memory, network, os, pipe,
              scheduler, signal 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.

       --config
              print out the configuration used to build stress-ng.

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

       --ftrace
              enable  kernel  function  call  tracing  (Linux  only).   This  will use the kernel debugfs ftrace
              mechanism to record all the kernel functions used on the system while stress-ng is running.   This
              is  only  as  accurate  as  the kernel ftrace output, so there may be some variability on the data
              reported.

       -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.

       --interrupts
              check for any system management interrupts or error interrupts that  occur,  for  example  thermal
              overruns,  machine  check  exceptions,  etc.  Note  that  the  interrupts are accounted to all the
              concurrently running stressors, so total count for all stressors is over accounted.

       --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.

       --iostat S
              every  S seconds show I/O statistics on the device that stores the stress-ng temporary files. This
              is either the device of the current working directory or the --temp-path specified path. Currently
              a Linux only option.  The fields output are:
              Column Heading   Explanation
              Inflight         number of I/O requests that have been issued to the device driver  but  have  not
                               yet completed
              Rd K/s           read rate in 1024 bytes per second
              Wr K/s           write rate in 1024 bytes per second
              Dscd K/s         discard rate in 1024 bytes per second
              Rd/s             reads per second
              Wr/s             writes per second
              Dscd/s           discards per second

       --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.

       --keep-files
              do  not  remove  files  and directories created by the stressors. This can be useful for debugging
              purposes. Not generally recommended as it can fill up a file system.

       -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.

       --klog-check
              check the kernel log for kernel error and warning messages and report these as soon  as  they  are
              detected. Linux only and requires root capability to read the kernel log.

       --ksm  enable  kernel  samepage  merging (Linux only). This is a memory-saving de-duplication feature for
              merging anonymous (private) pages.

       --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.

       --log-lockless
              log  messages  use  a lock to avoid intermingling of blocks of stressor messages, however this may
              cause contention when emitting a high rate of logging messages in verbose mode and many  stressors
              are  running,  for  example when testing CPU scaling with many processes on many CPUs. This option
              disables log message locking.

       --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.

       --max-fd N
              set  the  maximum limit on file descriptors (value or a % of system allowed maximum).  By default,
              stress-ng can use all the available file descriptors; this option sets the limit in the range from
              10 up to the maximum limit of RLIMIT_NOFILE.  One can use a % setting too, e.g. 50%  is  half  the
              maximum  allowed  file  descriptors.   Note  that stress-ng will use about 5 of the available file
              descriptors so take this into consideration when using this setting.

       --mbind list
              set strict NUMA memory allocation based on the list of NUMA nodes provided; page allocations  will
              come  from  the  node  with  sufficient  free  memory  closest  to the specified node(s) where the
              allocation takes place. This uses the Linux set_mempolicy(2) call using the MPOL_BIND  mode.   The
              NUMA  nodes to be used are specified by a comma separated list of node (0 to N-1). One can specify
              a range of NUMA nodes using '-', for example: --mbind 0,2-3,6,7-11

       --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.  Some stressors have additional metrics that are more useful  than  bogo-
              ops,  and  these  are  generally more useful for observing 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.  Do  not
                                          use this as a reliable measure of throughput for benchmarking.
              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.
              CPU used per instance (%)   total  percentage of CPU used divided by number of stressor instances.
                                          100% is 1 full CPU. Some stressors  run  multiple  threads  so  it  is
                                          possible to have a figure greater than 100%.
              RSS Max (KB)                resident set size (RSS), the portion of memory (measured in Kilobytes)
                                          occupied by a process in main memory.

       --metrics-brief
              show shorter list of stressor metrics (no CPU used per instance).

       --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 vm subsystem a little harder. The --no-advise option turns this
              default off.

       --no-oom-adjust
              disable any form of out-of-memory score adjustments, keep the system defaults.  Normally stress-ng
              will  adjust  the  out-of-memory  scores  on stressors to try to create more memory pressure. This
              option disables the adjustments.

       --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.

       --oom-avoid
              Attempt to avoid out-of-memory  conditions  that  can  lead  to  the  Out-of-Memory  (OOM)  killer
              terminating  stressors.  This  checks  for  low memory scenarios and swapping before making memory
              allocations and hence adds some overhead to the stressors and will slow down  stressor  allocation
              speeds.

       --oom-avoid-bytes N
              Specify  a low memory threshold to avoid making any further memory allocations.  The parameter can
              be specified as an absolute number of bytes (e.g. 2M for 2MB) or a percentage of the current  free
              memory,  e.g.  5%  (the default is 2.5%).  This option implicitly enables --oom-avoid.  The option
              allows the system to have enough free memory to try to avoid the out-of-memory killer  terminating
              processes.

       --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 rapidly consume resources that
              may  hang  a  system,  or  perform  actions that can lock a system up or cause it to reboot. These
              stressors are not enabled by default, this option enables them, but you probably don't want to  do
              this.   You  have  been  warned.  This  option  applies  to  the stressors: bad-ioctl, bind-mount,
              cpu-online, mlockmany, oom-pipe, smi, sysinval and watchdog.

       --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.

       --permute N
              run all permutations of the selected stressors with N instances of the  permutated  stressors  per
              run.   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 configured CPUs  in  the  system  is  used.   This  will  perform
              multiple  runs with all the permutations of the stressors. Use this in conjunction with the --with
              or --class option to specify the stressors to permute.

       --progress
              display the run progress when running stressors with the --sequential option.

       -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.

       --sched-period period
              select  the  period  parameter  for  deadline  scheduler  (only  on Linux). Default value is 0 (in
              nanoseconds).

       --sched-runtime runtime
              select the runtime parameter for deadline scheduler (only on Linux). Default value  is  99999  (in
              nanoseconds).

       --sched-deadline deadline
              select  the deadline parameter for deadline scheduler (only on Linux). Default value is 100000 (in
              nanoseconds).

       --sched-reclaim
              use cpu bandwidth reclaim feature for deadline scheduler (only on Linux).

       --seed N
              set the random number generate seed with a 64 bit value. Allows stressors to use the  same  random
              number generator sequences on each invocation.

       --settings
              show the various option settings.

       --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.

       --skip-silent
              silence  messages  that  report  that a stressor has been skipped because it requires features not
              supported by the system, such as  unimplemented  system  calls,  missing  resources  or  processor
              specific features.

       --smart
              scan  the  block  devices  for  changes  S.M.A.R.T.  statistics  (Linux  only). This requires root
              privileges to read the Self-Monitoring, Analysis and Reporting  Technology  data  from  all  block
              devies  and  will  report  any  changes in the statistics. One caveat is that device manufacturers
              provide different sets of data, the exact meaning of the data can be vague and  the  data  may  be
              inaccurate.

       --sn   use scientific notation (e.g. 2.412e+01) for metrics.

       --status N
              report  every  N  seconds  the  number of running, exiting, reaped and failed stressors, number of
              stressors that received SIGARLM termination signal as well as the current run duration.

       --stderr
              write messages to stderr. With version 0.15.08 output is written to stdout, previously  due  to  a
              historical  oversight  output  went to stderr. This option allows one to revert to the pre-0.15.08
              behaviour.

       --stdout
              all output goes to stdout. This is the new default for version 0.15.08. Use  the  --stderr  option
              for the original behaviour.

       --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.

       --thermalstat S
              every  S  seconds show CPU and thermal load statistics. This option shows average CPU frequency in
              GHz (average of online-CPUs), the minimum CPU frequency, the maximum CPU frequency, load  averages
              (1 minute, 5 minute and 15 minutes) and available thermal zone temperatures in degrees Centigrade.

       --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.  It  also  periodically drops the page cache, frees
              reclaimable slab objects and pagecache. This will cause considerable amount of thrashing  of  swap
              on an over-committed system.

       -t N, --timeout T
              run  each  stress  test for at least 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.  Each  stressor  will  be  sent  a
              SIGALRM  signal  at  the  timeout  time,  however  if  the  stress  test  is  swapped  out,  in an
              uninterruptible system call or performing clean up (such as removing hundreds of test file) it may
              take a while to finally terminate.  A 0 timeout will run stress-ng for ever with no  timeout.  The
              default timeout is 24 hours.

       --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.

       --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.

       --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.

       --verifiable
              print the names of stressors that can be verified with the --verify option.

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

       --vmstat S
              every S seconds show statistics about processes, memory, paging, block  I/O,  interrupts,  context
              switches,  disks  and  cpu  activity.  The output is similar that to the output from the vmstat(8)
              utility. Not fully supported on various UNIX systems.

       --with list
              specify stressors to run when using the --all, --seq or --permute options.  For example to  run  5
              instances of the cpu, hash, nop and vm stressors one after another (sequentially) for 1 minute per
              stressor use:

                 stress-ng --seq 5 --with cpu,hash,nop,vm --timeout 1m

       -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 stressor
            --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.

       POSIX Access Control List Stressor
            --acl N
                   start N workers that exercise permutations of ACL access permission settings on  user,  group
                   and other tags.

            --acl-rand
                   randomize (by shuffling) the order of the ACL access permissions before exercising ACLs.

            --acl-ops N
                   stop acl workers after N bogo acl settings have been set.

       Affinity stressor
            --affinity N
                   start  N  workers  that  run  16  processes that rapidly change CPU affinity (only on Linux).
                   Rapidly switching CPU affinity can contribute to poor cache behaviour and high context switch
                   rate.

            --affinity-delay N
                   delay for N nanoseconds before changing affinity to the next CPU.  The delay will spin on CPU
                   scheduling yield operations for N nanoseconds before the process is moved to another CPU. The
                   default is 0 nanosconds.

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

            --affinity-pin
                   pin all the 16 per stressor processes to a CPU. All 16 processes follow the CPU chosen by the
                   main parent stressor, forcing heavy per CPU loading.

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

            --affinity-sleep N
                   sleep for N nanoseconds before changing affinity to the next CPU.

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

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

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

       Asynchronous I/O stressor (POSIX AIO)
            --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.

       Asynchronous I/O stressor (Linux AIO)
            --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.

       Alarm stressor
            --alarm N
                   start  N workers that exercise alarm(2) with MAXINT, 0 and random alarm and sleep delays that
                   get prematurely interrupted. Before each alarm is scheduled any previous pending  alarms  are
                   cancelled with zero second alarm calls.

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

       AppArmor stressor
            --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 stressor
            --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 alternative stack stressor
            --bad-altstack N
                   start N workers that create broken alternative signal stacks for SIGSEGV and SIGBUS  handling
                   that  in  turn  create  secondary  SIGSEGV/SIGBUS  errors.   A  variety  of randonly selected
                   nefarious methods are used to create the stacks:

                   • Unmapping the alternative signal stack, before triggering the signal handling.
                   • Changing the alternative signal stack to just being read only, write only, execute only.
                   • Using a NULL alternative signal stack.
                   • Using the signal handler object as the alternative signal stack.
                   • Unmapping the alternative signal stack during execution of the signal handler.
                   • Using a read-only text segment for the alternative signal stack.
                   • Using an undersized alternative signal stack.
                   • Using the VDSO as an alternative signal stack.
                   • Using an alternative stack mapped onto /dev/zero.
                   • Using an alternative stack mapped to a zero sized  temporary  file  to  generate  a  SIGBUS
                     error.

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

       Bad ioctl stressor
            --bad-ioctl N
                   start  N  workers  that  perform  a  range of illegal bad read ioctls (using _IOR) across the
                   device drivers. This exercises page size, 64 bit, 32 bit, 16 bit and 8 bit reads as  well  as
                   NULL  addresses,  non-readable pages and PROT_NONE mapped pages. Currently only for Linux and
                   requires the --pathological option.

            --bad-ioctl-method [ inc | random | random-inc | stride ]
                   select the method of changing the ioctl command  (number,  type)  tuple  per  iteration,  the
                   default is random-inc.  Available bad-ioctl methods are described as follows:
                   Method         Description
                   inc            increment ioctl command by 1
                   random         use a random ioctl command
                   random-inc     increment ioctl command by a random value
                   random-stride  increment ioctl command number by 1 and decrement command type by 3

            --bad-ioctl-ops N
                   stop the bad ioctl stressors after N bogo ioctl operations.

       Big heap stressor
            -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-bytes N
                   maximum heap growth as N bytes per bigheap worker. 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.

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

            --bigheap-mlock
                   attempt  to  mlock  future  allocated  pages  into  memory  causing  more memory pressure. If
                   mlock(MCL_FUTURE) is implemented then this will stop newly allocated pages from being swapped
                   out.

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

       Binderfs stressor
            --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 stressor
            --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.

       Bitonic sort stressor
            --bitonicsort N
                   start N workers that sort 32 bit integers using bitonic sort.

            --bitonicsort-ops N
                   stop bitonic sort stress workers after N bogo bitonic sorts.

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

       Branch stressor
            --branch N
                   start N workers that randomly branch to 1024 randomly selected locations and  hence  exercise
                   the CPU branch prediction logic.

            --branch-ops N
                   stop the branch stressors after N × 1024 branches

       Brk stressor
            --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-bytes N
                   maximum brk growth as N bytes per brk worker.  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.

            --brk-mlock
                   attempt  to  mlock  future  brk  pages  into  memory  causing  more   memory   pressure.   If
                   mlock(MCL_FUTURE) is implemented then this will stop new brk pages from being swapped out.

            --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
                   physical memory.

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

       Binary search stressor
            --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-method [ bsearch-libc | bsearch-nonlibc ]
                   select   either  the  libc  implementation  of  bsearch  or  a  slightly  optimized  non-libc
                   implementation of bsearch. The default is the libc implementation if it exists, otherwise the
                   non-libc version.

            --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.

       Cache stressor
            -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.  Note: to
                   exercise cache misses it is recommended to  instead  use  the  matrix-3d  stessor  using  the
                   --matrix-3d-zyx option.

            --cache-cldemote
                   cache  line  demote  (x86  only).  This  is  a  no-op for non-x86 architectures and older x86
                   processors that do not support this feature.

            --cache-clflushopt
                   use optimized cache line flush (x86 only). This is a  no-op  for  non-x86  architectures  and
                   older x86 processors that do not support this feature.

            --cache-clwb
                   cache  line  writeback  (x86  only).  This is a no-op for non-x86 architectures and older x86
                   processors that do not support this feature.

            --cache-enable-all
                   where appropriate exercise the cache using cldemote, clflushopt,  fence,  flush,  sfence  and
                   prefetch.

            --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-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-sfence
                   force write serialization on each store operation using the sfence  instruction  (x86  only).
                   This is a no-op for non-x86 architectures.

            --cache-size N
                   override  the  default  cache size setting to N bytes. One can specify the in units of Bytes,
                   KBytes, MBytes and GBytes using the suffix b, k, m or g.

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

       Cache line stressor
            --cacheline N
                   start N workers that exercise reading and writing individual bytes in a shared buffer that is
                   the  size of a cache line. Each stressor has 2 running processes that exercise just two bytes
                   that are next to each other.  The intent is to try and trigger cacheline  corruption,  stalls
                   and  misses  with shared memory accesses. For an N byte sized cacheline, it is recommended to
                   run N / 2 stressor instances.

            --cacheline-affinity
                   frequently change CPU affinity, spread cacheline processes evenly across all online  CPUs  to
                   try  and  maximize  lower-level  cache  activity.  Attempts to keep adjacent cachelines being
                   exercised by adjacent CPUs.

            --cacheline-method method
                   specify a cacheline  stress  method.  By  default,  all  the  stress  methods  are  exercised
                   sequentially,  however  one  can  specify  just one method to be used if required.  Available
                   cacheline stress methods are described as follows:
                   Method     Description
                   all        iterate over all the below cpu stress methods.
                   adjacent   increment a specific byte in a cacheline and read the  adjacent  byte,  check  for
                              corruption every 7 increments.
                   atomicinc  atomically increment a specific byte in a cacheline and check for corruption every
                              7 increments.
                   bits       write  and  read  back  shifted bit patterns into specific byte in a cacheline and
                              check for corruption.
                   copy       copy an adjacent byte to a specific byte in a cacheline.
                   inc        increment and read back a specific byte in a cacheline and  check  for  corruption
                              every 7 increments.
                   mix        perform  a mix of increment, left and right rotates a specific byte in a cacheline
                              and check for corruption.
                   rdfwd64    increment a specific byte in a cacheline and then read  in  forward  direction  an
                              entire cacheline using 64 bit reads.
                   rdints     increment  a specific byte in a cacheline and then read data at that byte location
                              in naturally aligned locations integer values of size 8, 16, 32, 64 and 128 bits.
                   rdrev64    increment a specific byte in a cacheline and then read  in  reverse  direction  an
                              entire cacheline using 64 bit reads.
                   rdwr       read  and write the same 8 bit value into a specific byte in a cacheline and check
                              for corruption.

            --cacheline-ops N
                   stop cacheline workers after N loops of the byte exercising in a cacheline.

       Process capabilities stressor
            --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.

       Cgroup stressor
            --cgroup N
                   start N workers that mount a cgroup, move a child to the cgroup, read, write and  remove  the
                   child  from  the cgroup and umount the cgroup per bogo-op iteration.  This uses cgroup v2 and
                   is only available for Linux systems.

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

       Chattr stressor
            --chattr N
                   start N workers that attempt to exercise file attributes  via  the  EXT2_IOC_SETFLAGS  ioctl.
                   This  is  intended  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 stressor
            --chdir N
                   start N workers that change directory between directories using chdir(2).

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

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

       Chmod stressor
            --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 stressor
            --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 stressor
            --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 stressor
            --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 random duration 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 stressor
            --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-max N
                   try to create as many as N clone threads. This may not be reached if the system limit is less
                   than N.

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

       Close stressor
            --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.

       Swapcontext stressor
            --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 stressor
            --copy-file N
                   start  N  stressors  that  copy a file using the Linux copy_file_range(2) system call. 128 KB
                   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-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.

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

       CPU stressor
            -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.

            -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, 7), 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) 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  starting from number
                                     989345275647.  Where f(n) = n / 2 (for even n) and f(n) = 3n + 1  (for  odd
                                     n).
                   correlate         perform a 8192 × 512 correlation of random doubles
                   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
                   div8              50,000 8 bit unsigned integer divisions
                   div16             50,000 16 bit unsigned integer divisions
                   div32             50,000 32 bit unsigned integer divisions
                   div64             50,000 64 bit unsigned integer divisions
                   div128            50,000 128 bit unsigned integer divisions
                   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
                   fletcher16        1024 rounds of a naïve implementation of a 16 bit Fletcher's checksum
                   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
                   float64           1000 iterations of a mix of 64 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.
                   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.
                   ipv4checksum      compute 1024 rounds of the 16 bit ones' complement IPv4 checksum.
                   jmp               Simple unoptimised compare >, <, == and jmp branching.
                   lfsr32            16384 iterations of a 32 bit Galois linear feedback  shift  register  using
                                     the  polynomial x↑32 + x↑31 + x↑29 + x + 1. This generates a ring of 2↑32 -
                                     1 unique values (all 32 bit values except for 0).
                   ln2               compute ln(2) based on series:
                                      1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ...
                   logmap            16384 iterations  computing  chaotic  double  precision  values  using  the
                                     logistic map Χn+1 = r ×  Χn × (1 - Χn) where r > ≈ 3.56994567
                   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, the
                                     lookup table ways (2 variations) and using the __builtin_parity function.
                   phi               compute the Golden Ratio ϕ using series.
                   pi                compute π using the Srinivasa Ramanujan fast convergence algorithm.
                   prime             find the first 10000 prime numbers 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..11.
                   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).
                   sieve             find the first 10000 prime numbers 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
                                     values.
                   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-old-metrics
                   as of version V0.14.02 the cpu stressor now normalizes each of the cpu stressor method  bogo-
                   op counters to try and ensure a similar bogo-op rate for all the methods to avoid the shorter
                   running  (and  faster)  methods  from  skewing the bogo-op rates when using the default "all"
                   method.  This is based on a  reference  Intel  i5-8350U  processor  and  hence  the  bogo-ops
                   normalizing  factors  will  be  skew  somewhat on different CPUs, but so significantly as the
                   original bogo-op counter rates. To disable the normalization and fall back  to  the  original
                   metrics, use this option.

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

       CPU onlining stressor
            --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-affinity
                   move the stressor worker to the CPU that will be next offlined.

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

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

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

            --crypt-method method
                   select  the  encryption method, may be one of: all, MD5, NT, SHA-1, SHA-256, SHA-512, scrypt,
                   SunMD5 or yescrypt. The 'all' method selects all the methods and is the default.

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

       Cyclic stressor
            --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. By default 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-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-ops N
                   stop after N sleeps.

            --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-samples N
                   measure N samples. Range from 1 to 100000000 samples.

            --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 stressor
            --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.

            --daemon-wait
                   wait for daemon child processes rather than let init handle the waiting. Enabling this option
                   will reduce the daemon fork rate because of the synchronous wait delays.

       Datagram congestion control protocol (DCCP) stressor
            --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-if NAME
                   use network interface NAME. If the interface NAME does not exist,  is  not  up  or  does  not
                   support the domain then the loopback (lo) interface is used as the default.

            --dccp-msgs N
                   send  N  messages  per  connect,  send/receive,  disconnect  iteration.  The default is 10000
                   messages. If N is too small then the rate is throttled back by the overhead  of  dccp  socket
                   connect and disconnects.

            --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.

       Mutex using Dekker algorithm stressor
            --dekker N
                   start N workers that exercises mutex exclusion between two processes using shared memory with
                   the  Dekker  Algorithm.  Where  possible this uses memory fencing and falls back to using GCC
                   __sync_synchronize if they are not available. The stressors contain simple mutex  and  memory
                   coherency sanity checks.

            --dekker-ops N
                   stop dekker workers after N mutex operations.

       Dentry stressor
            -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 stressor
            --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-file filename
                   specify the device file to exercise, for example, /dev/null. By  default  the  stressor  will
                   work  through  all  the device files it can fine, however, this option allows a single device
                   file to be exercised.

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

       /dev/shm stressor
            --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.

       Directories stressor
            --dir N
                   start N workers that create, rename and remove directories using mkdir, rename and rmdir.

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

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

       Deep directories stressor
            --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-bytes N
                   allocated file size, the default is 0. 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.
                   Used in conjunction with the --dirdeep-files option.

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

            --dirdeep-files N
                   create  N  files   at  each  tree level. The default is 0 with the file size specified by the
                   --dirdeep-bytes option.

            --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.

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

       Maximum files creation in a directory stressor
            --dirmany N
                   start  N stressors that create as many files in a directory as possible and then remove them.
                   The file creation phase stops when an error occurs (for example,  out  of  inodes,  too  many
                   files, quota reached, etc.) and then the files are removed. This cycles until the run time is
                   reached  or  the  file  creation  count bogo-ops metric is reached. This is a much faster and
                   light weight directory exercising stressor compared to the dentry stressor.

            --dirmany-bytes N
                   allocated file size, the default is 0. 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.

            --dirmany-ops N
                   stop dirmany stressors after N empty files have been created.

       Dnotify stressor
            --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 stressor
            --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.

       Dynamic libraries loading stressor
            --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.

       Eigen C++ matrix library stressor
            --eigen N
                   start  N  workers  that  exercise  the  Eigen  C++  matrix  library  for  2D matrix addition,
                   multiplication, determinant, inverse and transpose operations  on  long  double,  double  and
                   float matrices. This currently is only available for gcc/g++ builds.

            --eigen-method method
                   select the floating point method to use, available methods are:
                   Method                   Description
                   all                      iterate over all the Eigen 2D matrix operations
                   add-longdouble           addition  of  two  matrices  of long double floating point values T{
                                            add-doublee    T{ addition of two matrices of double floating  point
                                            values
                   add-float                addition of two matrices of floating point values
                   determinant-longdouble   determinant of matrix of long double floating point values
                   determinant-double       determinant of matrix of double floating point values
                   determinant-float        determinant of matrix of floating point values
                   inverse-longdouble       inverse of matrix of long double floating point values
                   inverse-double           inverse of matrix of double floating point values
                   inverse-float            inverse of matrix of floating point values
                   multiply-longdouble      mutiplication of two matrices of long double floating point values
                   multiply-doublee         mutiplication of two matrices of double floating point values
                   multiply-float           mutiplication of two matrices of floating point values
                   transpose-longdouble     transpose of matrix of long double floating point values
                   transpose-double         transpose of matrix of double floating point values
                   transpose-float          transpose of matrix of floating point values

            --eigen-ops N
                   stop after N Eigen matrix computations

            --eigen-size N
                   specify the 2D matrix size N × N. The default is a 32 × 32 matrix.

       EFI variables stressor
            --efivar N
                   start  N workers that exercise the Linux /sys/firmware/efi/efivars and /sys/firmware/efi/vars
                   interfaces by reading the EFI variables. This is a Linux only stress test for platforms  that
                   support the EFI vars interface and may require the CAP_SYS_ADMIN capability.

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

       Non-functional system call (ENOSYS) stressor
            --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 to __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 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

       Environment variables stressor
            --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  environment  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 stressor
            --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-ops N
                   stop epoll workers after N bogo operations.

            --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-sockets N
                   specify  the  maximum  number of concurrently open sockets allowed in server.  Setting a high
                   value impacts on memory usage and may trigger out of memory conditions.

       Event file descriptor (eventfd) stressor
            --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-nonblock
                   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.

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

       Exec processes stressor
            --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-fork-method [ clone | fork | rfork | spawn | vfork ]
                   select  the  process creation method using clone(2), fork(2), BSD rfork(2), posix_spawn(3) or
                   vfork(2). Note that vfork will only exec programs using execve due to the constraints on  the
                   shared stack between the parent and the child process.

            --exec-max P
                   create  P  child  processes that exec stress-ng and then wait for them to exit per iteration.
                   The default is 4096; higher values may  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.

            --exec-method [ all | execve | execveat ]
                   select the exec system call to use; all will perform a random choice  between  execve(2)  and
                   execveat(2), execve will use execve(2) and execveat will use execveat(2) if it is available.

            --exec-no-pthread
                   do not use pthread_create(3).

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

       Exiting pthread groups stressor
            --exit-group N
                   start  N workers that create 16 pthreads and terminate the pthreads and the controlling child
                   process using exit_group(2). (Linux only stressor).

            --exit-group-ops N
                   stop after N iterations of pthread creation and deletion loops.

       Factorization of large integers stressor
            --factor N
                   start N workers that factorize large integers using the  GNU  Multiple  Precision  Arithmetic
                   Library.  Randomized  values  to  be  factorized  are  computed  so  that an N digit value is
                   comprised of about 0.4 × N random factors, for N > 100. The default number of digits  in  the
                   value to be factorized is 10.

            --factor-digits N
                   select  the  number  of  digits  in the values to be factorized. Range 8 to 100000000 digits,
                   default is 10.

            --factor-ops N
                   stop after N factorizations.

       File space allocation (fallocate) stressor
            -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.

       Filesystem notification (fanotify) stressor
            --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.

       CPU branching instruction cache stressor
            --far-branch N
                   start N workers that exercise calls to tens of thousands of functions that are relatively far
                   from the caller. All functions are 1 op instructions that return to the caller. The functions
                   are  placed  in  pages  that are memory mapped with a wide spread of fixed virtual addresses.
                   Function calls are pre-shuffled to create  a  randomized  mix  of  addresses  to  call.  This
                   stresses the instruction cache and any instruction TLBs.

            --far-branch-ops N
                   stop  after  N  far  branch  bogo-ops. One full cycle of calling all the tens of thousands of
                   functions equates to one bogo-op.

            --far-branch-pages N
                   specify the number of pages to allocate for far branch functions. The  number  for  functions
                   per  page  depends  on  the  processor architecture, for example, x86 will have 4096 x 1 byte
                   return instructions per 4K page, where as  SPARC64  will  have  only  512  x  8  byte  return
                   instructions per 4K page.

       Page fault stressor
            --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 stressor
            --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.

       File descriptor duplication and closing stressor
            --fd-fork N
                   start N workers that open files using dup(2) on a file (/dev/zero by default) and then copies
                   these using multiple fork'd child processes and closes them with the fast  clone_range(2)  or
                   close(2)  or by directly ending the processes using _exit(2). For every bogo-op, the stressor
                   attempts to dup(2) another 10000 file descriptors up to the maximum  allowed,  fork  8  child
                   processes that then close their copies of the file descriptors.

            --fd-fork-fds N
                   specify  maximum  number  of  file descriptors to be opened. The default is 2 million, with a
                   range of 1000 to 16 million. The actual number used may  be  less  depending  on  the  system
                   defined limits of the number of open files per process.

            --fd-fork-file [ null, random, stdin, stdout, zero ]
                   specify  file  to  dup: null for /dev/null, random for /dev/random, stdin for standard input,
                   stdout for standard output, zero for /dev/zero.  Default is /dev/zero.

            --fd-fork-ops N
                   stop after N rounds  of  10000  dups,  forking/closing/exiting  and  waiting  for  the  child
                   processes.  Note  that  the  bogo-ops  metric  rate will slow down over time as this stressor
                   increases the number of open files per bogo-loop and this increases the fork  and  close  run
                   times.

       File extent (fiemap) stressor
            --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-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.

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

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

            --fifo-data-size N
                   set the byte size of the fifo write/reads, default is 8, range 8..4096.

            --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. Default is 4, range 1..64.

       File I/O control (ioctl) stressor
            --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 stressor
            --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 /

       File locking (flock) stressor
            --flock N
                   start N workers locking on a single file.

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

       Cache flushing stressor
            --flush-cache N
                   start  N  workers  that  flush  the  data  and  instruction  cache  (where  possible).   Some
                   architectures  may not support cache flushing on either cache, in which case these become no-
                   ops.

            --flush-cache-ops N
                   stop after N cache flush iterations.

       Fused Multiply/Add floating point operations (fma) stressor
            --fma N
                   start N workers that exercise single and double precision floating point  multiplication  and
                   add  operations  on  arrays  of  512  floating  point  values.  More modern processors (Intel
                   Haswell, AMD Bulldozer and Piledriver) and modern C compilers  these  will  be  performed  by
                   fused-multiply-add (fma3) opcodes. Operations used are:
                   a = a × b + c
                   a = b × a + c
                   a = b × c + a

            --fma-ops N
                   stop after N bogo-loops of the 3 above operations on 512 single and double precision floating
                   point numbers.

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

            --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 process table using high values for --fork-max and --fork.

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

            --fork-unmap
                   attempt to unmap unused non-memory resident shared library pages to try and reduced anonymous
                   vma copying. This is an ugly hack for benchmarking reduced vma copying and not guaranteed  to
                   work. Linux only.

            --fork-vm
                   enable detrimental performance virtual memory advice using madvise on all pages of the forked
                   process. Where possible this will try to set every page in the new process with using madvise
                   MADV_MERGEABLE, MADV_WILLNEED, MADV_HUGEPAGE and MADV_RANDOM flags. Linux only.

       Heavy process forking stressor
            --forkheavy N
                   start  N  workers  that  fork  child  processes from a parent that has thousands of allocated
                   system resources. The fork becomes a heavyweight  operations  as  it  has  to  duplicate  the
                   resource  references of the parent. Each stressor instance creates and reaps up to 4096 child
                   processes that are created and reaped in a first-in first-out manner.

            --forkheavy-allocs N
                   attempt N resource allocation loops per stressor  instance.  Resources  include  pipes,  file
                   descriptors,  memory  mappings,  pthreads,  timers,  ptys,  semaphores,  message  queues  and
                   temporary files. These create heavyweight processes that are  more  time  expensive  to  fork
                   from. Default is 16384.

            --forkheavy-mlock
                   attempt  to  mlock  future  allocated  pages  into  memory  causing  more memory pressure. If
                   mlock(MCL_FUTURE) is implemented then this will stop new brk pages from being swapped out.

            --forkheavy-ops N
                   stop after N fork calls.

            --forkheavy-procs N
                   attempt to fork N processes per stressor. The default is 4096 processes.

       Floating point operations stressor
            --fp N start N workers that exercise addition, multiplication and division operations on a range  of
                   floating point types. For each type, 8 floating point values are operated upon 65536 times in
                   a loop per bogo op.

            --fp-method method
                   select the floating point method to use, available methods are:
                   Method       Description
                   all          iterate over all the following floating point methods:
                   float128add  128 bit floating point add
                   float80add   80 bit floating point add
                   float64add   64 bit floating point add
                   float32add   32 bit binary32 floating point add
                   floatadd     floating point add
                   doubleadd    double precision floating point add
                   ldoubleadd   long double precision floating point add
                   float128mul  128 bit floating point multiply
                   float80mul   80 bit floating point multiply
                   float64mul   64 bit floating point multiply
                   float32mul   32 bit binary32 floating point multiply
                   floatmul     floating point multiply
                   doublemul    double precision floating point multiply
                   ldoublemul   long double precision floating point multiply
                   float128div  128 bit floating point divide
                   float80div   80 bit floating point divide
                   float64div   64 bit floating point divide
                   float32div   32 bit binary32 floating point divide
                   floatdiv     floating point divide
                   doublediv    double precision floating point divide
                   ldoublediv   long double precision floating point divide

                   Note that some of these floating point methods may not be available on some systems.

            --fp-ops N
                   stop after N floating point bogo ops. Note that bogo-ops are counted for just standard float,
                   double and long double floating point types.

       Floating point exception stressor
            --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.

       File punch and hole filling stressor
            --fpunch N
                   start N workers that punch and fill holes in a 16 MB file using five concurrent processes per
                   stressor   exercising   on   the   same   file.   Where  available,  this  uses  fallocate(2)
                   FALLOC_FL_KEEP_SIZE, FALLOC_FL_PUNCH_HOLE, FALLOC_FL_ZERO_RANGE, FALLOC_FL_COLLAPSE_RANGE and
                   FALLOC_FL_INSERT_RANGE to make and fill holes across the file and  breaks  it  into  multiple
                   extents.

            --fpunch-bytes N
                   set  maximum  size of each file for each fpunch worker process, the default is 16 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.

            --fpunch-ops N
                   stop fpunch workers after N punch and fill bogo operations.

       File size limit stressor
            --fsize N
                   start  N  workers that exercise file size limits (via setrlimit RLIMIT_FSIZE) with file sizes
                   that are fixed, random and powers of 2. The files are  truncated  and  allocated  to  trigger
                   SIGXFSZ signals.

            --fsize-ops N
                   stop after N bogo file size test iterations.

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

            --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.

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

       /dev/full stressor
            --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.

       Function argument passing stressor
            --funccall N
                   start N workers that call functions of 1 through to 9 arguments.  By  default  all  functions
                   with  a  range  of  argument  types  are  called,  however,  this  can  be  changed using the
                   --funccall-method option. This exercises stack function argument passing and  re-ordering  on
                   the stack and in registers.

            --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 all the types but can
                   be one of bool, uint8, uint16, uint32, uint64, uint128,  float,  double,  longdouble,  cfloat
                   (complex  float),  cdouble  (complex  double),  clongdouble  (complex  long double), float16,
                   float32, float64, float80, float128, decimal32, decimal64 and decimal128.  Note that some  of
                   these types are only available with specific architectures and compiler versions.

       Function return stressor
            --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.

       Fast mutex (futex) stressor
            --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.

       Fetching data from kernel stressor
            --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.

       Virtual filesystem directories stressor (Linux)
            --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.

       Random data (getrandom) stressor
            --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.

       CPU pipeline and branch prediction stressor
            --goto N
                   start N workers that perform 1024 forward branches (to next instruction) or backward branches
                   (to  previous instruction) for each bogo operation loop.  By default, every 1024 branches the
                   direction is randomly chosen to be forward or backward.  This stressor  exercises  suboptimal
                   pipelined execution and branch prediction logic.

            --goto-direction [ forward | backward | random ]
                   select  the  branching  direction  in  the stressor loop, forward for forward only branching,
                   backward for a backward only branching, random for a  random  choice  of  forward  or  random
                   branching every 1024 branches.

            --goto-ops N
                   stop goto workers after N bogo loops of 1024 branch instructions.

       2D GPU stressor
            --gpu N
                   start  N  worker  that  exercise  the GPU. This specifies a 2-D texture image that allows the
                   elements of an image array to be read by shaders,  and  render  primitives  using  an  opengl
                   context.

            --gpu-devnode DEVNAME
                   specify the device node name of the GPU device, the default is /dev/dri/renderD128.

            --gpu-frag N
                   specify shader core usage per pixel, this sets N loops in the fragment shader.

            --gpu-ops N
                   stop gpu workers after N render loop operations.

            --gpu-tex-size N
                   specify upload texture N × N, by default this value is 4096 × 4096.

            --gpu-xsize X
                   use a framebuffer size of X pixels. The default is 256 pixels.

            --gpu-ysize Y
                   use a framebuffer size of Y pixels. The default is 256 pixels.

            --gpu-upload N
                   specify upload texture N times per frame, the default value is 1.

       Handle stressor
            --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.

       String hashing stressor
            --hash N
                   start  N  workers that exercise various hashing functions. Random strings from 1 to 128 bytes
                   are hashed and the hashing rate and chi squared is  calculated  from  the  number  of  hashes
                   performed  over a period of time. The chi squared value is the goodness-of-fit measure, it is
                   the actual distribution of items in hash buckets versus the expected distribution  of  items.
                   Typically a chi squared value of 0.95..1.05 indicates a good hash distribution.

            --hash-method method
                   specify  the  hashing  method  to use, by default all the hashing methods are cycled through.
                   Methods available are:
                   Method      Description
                   all         cycle through all the hashing methods
                   adler32     Mark Adler checksum, a modification of the Fletcher checksum
                   coffin      xor and 5 bit rotate left hash
                   coffin32    xor and 5 bit rotate left hash with 32 bit fetch optimization
                   crc32c      compute CRC32C (Castagnoli CRC32) integer hash
                   djb2a       Dan Bernstein hash using the xor variant
                   fnv1a       FNV-1a Fowler-Noll-Vo hash using the xor then multiply variant
                   jenkin      Jenkin's integer hash
                   kandr       Kernighan and Richie's multiply by 31  and  add  hash  from  "The  C  Programming
                               Language", 2nd Edition
                   knuth       Donald  E. Knuth's hash from "The Art Of Computer Programming", Volume 3, chapter
                               6.4
                   loselose    Kernighan and Richie's simple hash from "The C Programming Language", 1st Edition
                   mid5        xor shift hash of the middle 5 characters of the string. Designed  by  Colin  Ian
                               King
                   muladd32    simple multiply and add hash using 32 bit math and xor folding of overflow
                   muladd64    simple multiply and add hash using 64 bit math and xor folding of overflow
                   mulxror32   32  bit  multiply, xor and rotate right. Mangles 32 bits where possible. Designed
                               by Colin Ian King
                   mulxror64   64 bit multiply, xor and rotate right. 64 Bit version of mulxror32
                   murmur3_32  murmur3_32 hash, Austin Appleby's Murmur3 hash, 32 bit variant
                   nhash       exim's nhash.
                   pjw         a non-cryptographic hash function created by Peter J.  Weinberger  of  AT&T  Bell
                               Labs, used in UNIX ELF object files
                   sdbm        sdbm hash as used in the SDBM database and GNU awk
                   sedgwick    simple hash from Robert Sedgwick's C programming book
                   sobel       Justin Sobel's bitwise shift hash
                   x17         multiply  by 17 and add. The multiplication can be optimized down to a fast right
                               shift by 4 and add on some architectures
                   xor         simple rotate shift and xor of values
                   xorror32    32 bit exclusive-or with right rotate hash, a fast string hash, designed by Colin
                               Ian King
                   xorror64    64 bit version of xorror32
                   xxhash      the "Extremely fast" hash in non-streaming mode

            --hash-ops N
                   stop after N hashing rounds

       File-system stressor
            -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.

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

            --heapsort-method [ heapsort-libc | heapsort-nonlibc ]
                   select either the libc implementation of heapsort or an optimized implementation of heapsort.
                   The default is the libc implementation if it is available.

            --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).

       High resolution timer stressor
            --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-adjust
                   enable  automatic timer rate adjustment to try to maximize the hrtimer frequency.  The signal
                   rate is measured every 0.1 seconds and the hrtimer delay is  adjusted  to  try  and  set  the
                   optimal hrtimer delay to generate the highest hrtimer rates.

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

       Hashtable searching (hsearch) stressor
            --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-method [ hsearch-libc | hsearch-nonlibc ]
                   select   either  the  libc  implementation  of  hsearch  or  a  slightly  optimized  non-libc
                   implementation of hsearch. The default is the libc implementation if it exists, otherwise the
                   non-libc version.

            --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.

       CPU instruction cache load stressor
            --icache N
                   start N workers that stress the instruction cache by forcing instruction cache reloads.

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

       ICMP flooding stressor
            --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 pages stressor (Linux)
            --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. Requires CAP_SYS_RESOURCE capability.

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

       Inode ioctl flags stressor
            --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 stressor
            --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.

       Data synchronization (sync) stressor
            -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 stressor. This is a legacy  stressor  that  is  compatible
                   with the original stress tool.

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

       IO mixing stressor
            --iomix N
                   start  N  workers  that  perform  a  mix  of  sequential, random and memory mapped read/write
                   operations as well as random copy file read/writes, 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 stressor (x86 Linux)
            --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 ]
                   to be performed.  The default is both in and out.  specify if port reads in, port read writes
                   out or reads and writes are

       IO scheduling class and priority stressor
            --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.

       Io-uring stressor
            --io-uring N
                   start  N  workers  that  perform iovec write and read I/O operations using the Linux io-uring
                   interface. On each bogo-loop 1024 × 512 byte writes and 1024  ×  reads  are  performed  on  a
                   temporary file.

            --io-uring-entries N
                   specify the number of io-uring ring entries.

            --io-uring-ops
                   stop after N rounds of write and reads.

       Ipsec multi-buffer cryptographic stressor
            --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-feature [ sse | avx | avx2 | avx512 ]
                   Just use the specified processor CPU feature. By default, all the available features for  the
                   CPU are exercised.

            --ipsec-mb-jobs N
                   Process N multi-block rounds of cryptographic processing per iteration. The default is 256.

            --ipsec-mb-method [ all | cmac | ctr | des | hmac-md5 | hmac-sha1 | hmac-sha512 | sha ]
                   Select the ipsec-mb crypto/integrity method.

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

       System interval timer stressor
            --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-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-ops N
                   stop itimer stress workers after N bogo itimer SIGPROF signals.

            --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.

       Jpeg compression stressor
            --jpeg N
                   start N workers that use jpeg compression on a machine  generated  plasma  field  image.  The
                   default  image is a plasma field, however different image types may be selected. The starting
                   raster line is changed on each compression iteration to cycle around the data.

            --jpeg-height H
                   use a RGB sample image height of H pixels. The default is 512 pixels.

            --jpeg-image [ brown | flat | gradient | noise | plasma | xstripes ]
                   select the source image type to be compressed. Available image types are:
                   Type      Description
                   brown     brown noise, red and green values vary by a 3 bit value, blue values vary  by  a  2
                             bit value.
                   flat      a single random colour for the entire image.
                   gradient  linear  gradient  of the red, green and blue components across the width and height
                             of the image.
                   noise     random white noise for red, green, blue values.
                   plasma    plasma field with smooth colour transitions and hard boundary edges.
                   xstripes  a random colour for each horizontal line.

            --jpeg-ops N
                   stop after N jpeg compression operations.

            --jpeg-quality Q
                   use the compression quality Q. The range is 1..100 (1 lowest, 100 highest), with a default of
                   95

            --jpeg-width H
                   use a RGB sample image width of H pixels. The default is 512 pixels.

       Judy array stressor
            --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 stressor (Linux)
            --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.

       Kernel key management stressor
            --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.

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

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

       Syslog stressor (Linux)
            --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.

       KVM stressor
            --kvm N
                   start  N  workers that create, run and destroy a minimal virtual machine. The virtual machine
                   reads, increments and writes to port 0x80 in a spin loop and the  stressor  handles  the  I/O
                   transactions. Currently for x86 and Linux only.

            --kvm-ops N
                   stop kvm stressors after N virtual machines have been created, run and destroyed.

       CPU L1 cache stressor
            --l1cache N
                   start  N  workers  that exercise the CPU level 1 cache with reads and writes. A cache aligned
                   buffer that is twice the level 1 cache size is read and then written in  level  1  cache  set
                   sized  steps over each level 1 cache set. This is designed to exercise cache block evictions.
                   The bogo-op count measures the number of million cache lines touched.   Where  possible,  the
                   level  1  cache geometry is determined from the kernel, however, this is not possible on some
                   architectures or kernels, so one may need to specify these manually. One can specify 3 out of
                   the 4 cache geometric parameters, these are as follows:

            --l1cache-line-size N
                   specify the level 1 cache line size (in bytes)

            --l1cache-method [ forward | random | reverse ]
                   select the method of exercising a l1cache sized buffer. The default is a forward scan, random
                   picks random bytes to exercise, reverse scans in reverse.

            --l1cache-mlock
                   attempt to mlock the l1cache size buffer into memory to prevent it from being swapped out.

            --l1cache-ops N
                   specify the number of cache read/write bogo-op loops to run

            --l1cache-sets N
                   specify the number of level 1 cache sets

            --l1cache-size N
                   specify the level 1 cache size (in bytes)

            --l1cache-ways N
                   specify the number of level 1 cache ways

       Landlock stressor (Linux >= 5.13)
            --landlock N
                   start N workers that exercise Linux 5.13  landlocking.  A  range  of  landlock_create_ruleset
                   flags  are  exercised  with a read only file rule to see if a directory can be accessed and a
                   read-write file create can be blocked. Each ruleset attempt  is  exercised  in  a  new  child
                   context and this is the limiting factor on the speed of the stressor.

            --landlock-ops N
                   stop the landlock stressors after N landlock ruleset bogo operations.

       File lease stressor
            --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-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.

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

       LED stressor (Linux)
            --led N
                   start N workers that exercise the /sys/class/leds interfaces to set LED brightness levels and
                   the various trigger settings. This needs to be run with root privilege to be able to write to
                   these settings successfully. Non-root privilege will ignore failed writes.

            --led-ops N
                   stop after N interfaces are exercised.

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

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

            --link-sync
                   sync dirty data and metadata to disk.

       List data structures stressor
            --list N
                   start  N  workers  that exercise list data structures. The default is to add, find and remove
                   5,000 64 bit integers into circleq (doubly linked circle queue), list (doubly  linked  list),
                   slist  (singly  linked  list),  slistt (singly linked list using tail), stailq (singly linked
                   tail queue) and tailq (doubly linked tail queue) lists. The intention of this stressor is  to
                   exercise memory and cache with the various list operations.

            --list-method [ all | circleq | list | slist | stailq | tailq ]
                   specify the list to be used. By default, all the list methods are used (the 'all' option).

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

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

       Last level of cache stressor
            --llc-affinity N
                   start N workers that exercise the last level of cache (LLC) by read/write activity  across  a
                   LLC  sized  buffer  and  then changing CPU affinity after each round of read/writes. This can
                   cause non-local memory stalls and LLC read/write misses.

            --llc-affinity-mlock
                   attempt to mlock the LLC sized buffer into memory to prevent it from being swapped out.

            --llc-affinity-ops N
                   stop after N rounds of LLC read/writes.

       Load average (loadavg) stressor
            --loadavg N
                   start N workers that attempt to create thousands of pthreads that  run  at  the  lowest  nice
                   priority to force very high load averages. Linux systems will also perform some I/O writes as
                   pending I/O is also factored into system load accounting.

            --loadavg-max N
                   set  the  maximum  number  of pthreads to create to N. N may be reduced if there is as system
                   limit on the number of pthreads that can be created.

            --loadavg-ops N
                   stop loadavg workers after N bogo scheduling yields by the pthreads have been reached.

       Lock and increment memory stressor (x86 and ARM)
            --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-nosplit
                   disable split locks that lock across cache line boundaries.

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

       POSIX lock (F_SETLK/F_GETLK) stressor
            --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.

       POSIX lock (lockf) stressor
            --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-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.

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

       POSIX lock (F_OFD_SETLK/F_OFD_GETLK) stressor
            --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.

       Long jump (longjmp) stressor
            --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).

       Loopback stressor (Linux)
            --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.

       Linear search stressor
            --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-method [ lsearch-libc | lsearch-nonlibc ]
                   select  either  the  libc  implementation  of  lsearch  or  a  slightly  optimized   non-libc
                   implementation of lsearch. The default is the libc implementation if it exists, otherwise the
                   non-libc version.

            --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 stressor
            --madvise N
                   start N workers that apply random madvise(2) advise settings on pages of a  4MB  file  backed
                   shared memory mapping.

            --madvise-hwpoison
                   enable  MADV_HWPOISON  page  poisoning  (if available, only when run as root). This will page
                   poison a few pages and will cause kernel error messages to be reported.

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

       Memory allocation stressor
            --malloc N
                   start N workers continuously calling  malloc(3),  calloc(3),  realloc(3),  posix_memalign(3),
                   aligned_alloc(3),  memalign(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  one  of  malloc,
                   calloc  or  realloc, posix_memalign, aligned_alloc, memalign) 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-mlock
                   attempt to mlock the allocations into memory to prevent them from being swapped out.

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

            --malloc-pthreads N
                   specify  number  of  malloc  stressing concurrent pthreads to run. The default is 0 (just one
                   main process, no pthreads). This option will do nothing if pthreads are not supported.

            --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.

            --malloc-touch
                   touch  every  allocated page to force pages to be populated in memory. This will increase the
                   memory pressure and exercise the virtual memory harder. By default the malloc  stressor  will
                   madvise  pages  into  memory or use mincore to check for non-resident memory pages and try to
                   force them into memory; this option aggressively forces pages to be memory resident.

            --malloc-trim
                   periodically trim memory allocation by attempting to release free memory from the heap  every
                   65536  allocation  iterations.  This  can be a time consuming operation. It is only available
                   with libc malloc implementations that support malloc_trim(3).

            --malloc-zerofree
                   zero allocated memory before free'ing. This can be useful in touching broken allocations  and
                   triggering failures. Also useful for forcing extra cache/memory writes.

       2D Matrix stressor
            --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-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-ops N
                   stop matrix stress workers after N bogo operations.

            --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.

       3D Matrix stressor
            --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-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-ops N
                   stop the 3D matrix stress workers after N bogo operations.

            --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.

       Memory contention stressor
            --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.

       Memory barrier stressor (Linux)
            --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.

       Memory copy (memcpy) stressor
            --memcpy N
                   start N workers that copies data to and from a buffer using memcpy(3) and then move the  data
                   in  the buffer with memmove(3) with 3 different alignments. This will exercise the data cache
                   and memory copying.

            --memcpy-method [ all | libc | builtin | naive | naive_o0 .. naive_o3 ]
                   specify a memcpy copying method. Available memcpy methods are described as follows:
                   Method    Description
                   all       use libc, builtin and naïve 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 naïve byte by byte copying  and  memory  moving  build  with  default  compiler
                             optimization flags
                   naive_o0  use unoptimized naïve byte by byte copying and memory moving
                   naive_o1  use unoptimized naïve byte by byte copying and memory moving with -O1 optimization
                   naive_o2  use  optimized  naïve  byte  by  byte  copying  and  memory  moving  build with -O2
                             optimization and where possible use CPU specific optimizations
                   naive_o3  use optimized naïve  byte  by  byte  copying  and  memory  moving  build  with  -O3
                             optimization and where possible use CPU specific optimizations

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

       Anonymous file (memfd) stressor
            --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-madvise
                   enable random madvise page advice on memfd memory mapped regions to  add  a  little  more  VM
                   exercising.

            --memfd-mlock
                   attempt  to  mlock  mmap'd pages into memory causing more memory pressure by preventing pages
                   from swapped out.

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

            --memfd-zap-pte
                   exercise zapping page-table-entries to try to reproduce a Linux kernel bug that was fixed  by
                   commit   5abfd71d936a8aefd9f9ccd299dea7a164a5d455   "mm:   don't  skip  swap  entry  even  if
                   zap_details specified". This will slow the stressor down significantly and hence is an opt-in
                   memfd stressor option.

       Memory hotplug stressor (Linux)
            --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.

       Memory read/write stressor
            --memrate N
                   start  N  workers that exercise a buffer with 1024, 512, 256, 128, 64, 32, 16 and 8 bit reads
                   and writes. 1024, 512 and 256 reads and writes are  available  with  compilers  that  support
                   integer  vectors.  x86-64 cpus that support uncached (non-temporal "nt") writes also exercise
                   128, 64 and 32 writes providing higher write rates than the normal cached writes. x86-64 also
                   exercises repeated string stores using 64, 32, 16  and  8  bit  writes.   CPUs  that  support
                   prefetching reads also exercise 64 prefetched "pf" reads.  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-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,
                   or cache sizes with L1, L2, L3 or LLC (lower level cache size).

            --memrate-flush
                   flush cache between each memory exercising test to remove caching  benefits  in  memory  rate
                   metrics.

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

            --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.

       Memory thrash stressor
            --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-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
                   copy128      copy 128 byte chunks from chunk N + 1 to chunk N with streaming reads and writes
                                with 128 bit memory accesses where possible.
                   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
                   memmove      copy all the data in buffer to the next memory location
                   memset       memset the memory with random data
                   memset64     memset the memory with a random 64 bit  value  in  64  byte  chunks  using  non-
                                temporal stores if possible or normal stores as a fallback
                   memsetstosd  memset the memory using x86 32 bit rep stosd instruction (x86 only)
                   mfence       stores with write serialization
                   numa         memory bind pages across numa nodes
                   prefetch     prefetch data at random memory locations
                   random       randomly run any of the memthrash methods except for 'random' and 'all'
                   reverse      swap 8 bit values from start to end and work towards the middle
                   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
                   swap64       work through memory swapping adjacent 64 byte chunks
                   swapfwdrev   swap  64  bit values from start to end and work towards the middle and then from
                                end to start and work towards the middle.
                   tlb          work through memory in sub-optimial strides of prime multiples of the cache line
                                size with reads and then writes to  cause  Translation  Lookaside  Buffer  (TLB)
                                misses.

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

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

            --mergesort-method [ mergesort-libc | mergesort-nonlibc ]
                   select  either  the  libc  implementation  of  mergesort  or an unoptimized implementation of
                   mergesort. The default is the libc implementation if it is available.

            --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).

       File metadata mix
            --metamix N
                   start N workers that generate a file metadata  mix  of  operations.  Each  stressor  runs  16
                   concurrent  processes that each exercise a file's metadata with sequences of open, 256 lseeks
                   and writes, fdatasync, close, fsync and then stat, open, 256 lseeks, reads,  occasional  file
                   memory mapping, close, unlink and lstat.

            --metamix-bytes N
                   set  the  size  of  metamix files, the default is 1 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.

            --metamix-ops N
                   stop the metamix stressor after N bogo metafile operations.

       Resident memory (mincore) stressor
            --mincore N
                   start  N workers that walk through all of memory 1 page at a time checking if the page mapped
                   and also is resident in memory using mincore(2). It also maps and unmaps a page to  check  if
                   the page is mapped or not using mincore(2).

            --mincore-ops N
                   stop  after  N mincore bogo operations. One mincore bogo op is equivalent to a 300 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.

       Misaligned read/write stressor
            --misaligned N
                   start N workers that perform misaligned read and writes. By default, this will  exercise  128
                   bit  misaligned  read and writes in 8 × 16 bits, 4 × 32 bits, 2 × 64 bits and 1 × 128 bits at
                   the start of a page boundary, at the end of a  page  boundary  and  over  a  cache  boundary.
                   Misaligned  read  and  writes operate at 1 byte offset from the natural alignment of the data
                   type. On some architectures this can cause SIGBUS, SIGILL or SIGSEGV, these are  handled  and
                   the misaligned stressor method causing the error is disabled.

            --misaligned-method method
                   Available misaligned stress methods are described as follows:
                   Method        Description
                   all           iterate over all the following misaligned methods
                   int16rd       8 × 16 bit integer reads
                   int16wr       8 × 16 bit integer writes
                   int16inc      8 × 16 bit integer increments
                   int16atomic   8 × 16 bit atomic integer increments
                   int32rd       4 × 32 bit integer reads
                   int32wr       4 × 32 bit integer writes
                   int32wtnt     4 × 32 bit non-temporal stores (x86 only)
                   int32inc      4 × 32 bit integer increments
                   int32atomic   4 × 32 bit atomic integer increments
                   int64rd       2 × 64 bit integer reads
                   int64wr       2 × 64 bit integer writes
                   int64wtnt     4 × 64 bit non-temporal stores (x86 only)
                   int64inc      2 × 64 bit integer increments
                   int64atomic   2 × 64 bit atomic integer increments
                   int128rd      1 × 128 bit integer reads
                   int128wr      1 × 128 bit integer writes
                   int128inc     1 × 128 bit integer increments
                   int128atomic  1 × 128 bit atomic integer increments

            Note  that  some of these options (128 bit integer and/or atomic operations) may not be available on
            some systems.

            --misaligned-ops N
                   stop after N misaligned bogo operation. A misaligned bogo op is equivalent to 65536 × 128 bit
                   reads or writes.

       Mknod/unlink stressor
            --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.

       Mapped memory pages lock/unlock stressor
            --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 a default of 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.

            --mlockmany-procs N
                   set  the  number of child processes to create per stressor. The default is to start a maximum
                   of 1024 child processes in total across all the stressors. This option allows the setting  of
                   N child processes per stressor.

       Memory mapping (mmap/munmap) stressor
            --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.

                   Note that since stress-ng  0.17.05  the  --mmap-madvise,  --mmap-mergeable,  --mmap-mprotect,
                   --mmap-slow-munmap  and  --mmap-write-check  options should be used to enable the pre-0.17.05
                   mmap stressor behaviour.

            --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-madvise
                   enable randomized madvise(2) settings on pages.

            --mmap-mergeable
                   mark pages as mergeable via madvise(2) where possible.

            --mmap-mlock
                   attempt to mlock mmap'd pages into memory causing more memory pressure  by  preventing  pages
                   from swapped out.

            --mmap-mmap2
                   use mmap2 for 4K page aligned offsets if mmap2 is available, otherwise fall back to mmap.

            --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-ops N
                   stop mmap stress workers after N bogo operations.

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

            --mmap-slow-munmap
                   enable page-by-page memory unmapping rather than attempting to memory unmap contiguous  pages
                   in one large unmapping. This can cause lock contention when running with many concurrent mmap
                   stressors and will slow down the stressor.

            --mmap-stressful
                   enable   --mmap-file,   --mmap-madvise,   --mmap-mergeable,   --mmap-mlock,  --mmap-mprotect,
                   --mmap-odirect, --mmap-slow-munmap

            --mmap-write-check
                   write into each page a unique 64 bit check value for all pages and then read the value for  a
                   sanity  check.  This  will  force newly memory mapped pages to be faulted-in which slows down
                   mmap bogo-op rate. This can also cause lock contention on page allocation and page  unmapping
                   on systems with many CPU threads and with cgroup memory accounting.

       Random memory map/unmap stressor
            --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-mlock
                   attempt  to  mlock  mmap'd pages into memory causing more memory pressure by preventing pages
                   from swapped out.

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

       Forked memory map stressor
            --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.

       Memory map files stressor
            --mmapfiles N
                   start N workers that attempt to memory map and then unmap up to 512 × 1024 files into memory.
                   The stressor will traverse /lib, /lib32, /lib64, /boot, /bin, /etc, /sbin, /usr,  /var,  /sys
                   and  /proc  and  attempt to memory map files in these directories. Note that mapping bogo-ops
                   rate will depend on the speed of access to files on these file systems.

            --mmapfiles-ops N
                   stop after N memory map/unmap operations.

            --mmapfiles-populate
                   The default is to perform a memory mapping and not fault any pages into physical memory. This
                   option uses MAP_POPULATE when available and will also read the first byte  in  each  page  to
                   ensure pages are faulted into memory to force memory population from file.

            --mmapfiles-shared
                   The  default  is  for  private memory mapped files, however, with this option will use shared
                   memory mappings.

       Fixed address memory map stressor
            --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  first to a large range of addresses based on a random start and
                   finally an address that is several pages  higher  in  memory.  Mappings  and  remappings  are
                   madvised with random madvise options to further exercise the mappings.

            --mmapfixed-mlock
                   attempt  to  mlock  mmap'd pages into memory causing more memory pressure by preventing pages
                   from swapped out.

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

       Huge page memory mapping stressor
            --mmaphuge N
                   start N workers that attempt to mmap a set of huge pages and large huge page sized  mappings.
                   Successful  mappings  are  madvised  with MADV_NOHUGEPAGE and MADV_HUGEPAGE settings and then
                   1/64th of the normal small page size pages are touched. Finally, an attempt to unmap a  small
                   page  size  page  at the end of the mapping is made (these may fail on huge pages) before the
                   set of pages are unmapped. By default 8192 mappings are attempted per round  of  mappings  or
                   until swapping is detected.

            --mmaphuge-file
                   attempt  to  mmap  on  a  16MB temporary file and random 4K offsets. If this fails, anonymous
                   mappings are used instead.

            --mmaphuge-mlock
                   attempt to mlock mmap'd huge pages into memory causing more  memory  pressure  by  preventing
                   pages from swapped out.

            --mmaphuge-mmaps N
                   set  the  number  of  huge page mappings to attempt in each round of mappings. The default is
                   8192 mappings.

            --mmaphuge-ops N
                   stop after N mmaphuge bogo operations

       Maximum memory mapping per process stressor
            --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-mlock
                   attempt  to  mlock  mmap'd  huge pages into memory causing more memory pressure by preventing
                   pages from swapped out.

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

       Kernel module loading stressor (Linux)
            --module N
                   start N workers that use finit_module() to load  the  module  specified  or  the  hello  test
                   module,  if  is  available.  There are different ways to test loading modules. Using modprobe
                   calls in a loop, using the  kernel  kernel  module  autoloader,  and  this  stress-ng  module
                   stressor.  To  stress  tests  modprobe  we can simply run the userspace modprobe program in a
                   loop. To stress test the kernel module autoloader we can  stress  tests  using  the  upstream
                   kernel tools/testing/selftests/kmod/kmod.sh. This ends up calling modprobe in the end, and it
                   has its own caps built-in to self protect the kernel from too many requests at the same time.
                   The  userspace  modprobe  call will also prevent calls if the same module exists already. The
                   stress-ng modules stressor is designed to help stress test  the  finit_module()  system  call
                   even if the module is already loaded, testing races that are otherwise hard to reproduce.

            --module-name NAME
                   NAME  of  the  module  to use, for example: test_module, xfs, ext4. By default test_module is
                   used so CONFIG_TEST_LKM must be enabled in the  kernel.   The  module  dependencies  must  be
                   loaded  prior  to  running  these stressor tests, as this stresses running finit_module() not
                   using modprobe.

            --module-no-modver
                   ignore module modversions when using finit_module().

            --module-no-vermag
                   ignore module versions when using finit_module().

            --module-no-unload
                   do not unload the module right after loading it with finit_module().

            --module-ops N
                   stop after N module load/unload cycles

       Monte Carlo computations of π and e and various integrals
            --monte-carlo N
                   start N stressors that compute π and e  (Euler's  number)  using  Monte  Carlo  computational
                   experiments with various random number generators.

            --monte-carlo-method [ all | e | exp | pi | sin | sqrt ]
                   specify the computation to perform, options are as follows:
                   Method  Description
                   all     use all monte carlo computation methods
                   e       compute Euler's constant e
                   exp     integrate exp(x ↑ 2) for x = 0..1
                   pi      compute π from the area of a circle
                   sin     integrate sin(x) for x = 0..π
                   sqrt    integrate sqrt(1 + x ↑ 4) for x = 0..1

            --monte-carlo-ops N
                   stop after Monte Carlo computation experiments

            --monte-carlo-rand [ all | drand48 | getrandom | lcg | pcg32 | mwc64 | random | xorshift ]
                   specify the random number generator to use, options are as follows:
                   Method     Description
                   all        use all the random number generators
                   arc4       use the libc cryptographically-secure pseudorandom arc4random(3) number generator.
                   drand48    use  the  libc  linear  congruential  algorithm  drand48(3)  using  48-bit integer
                              arithmetic.
                   getrandom  use the getrandom(2) system call for random values.
                   lcg        use  a  32  bit  Paker-Miller  Linear  Congruential  Generator,  with  a  division
                              optimization.
                   pcg32      use a 32 bit O'Neill Permuted Congruential Generator.
                   mwc64      use the 64 bit stress-ng Multiply With Carry random number generator.
                   random     use the libc random(3) Non-linear Additive Feedback random number generator.
                   xorshift   use a 32 bit Marsaglia shift-register random number generator.

            --monte-carlo-samples N
                   specify the number of random number samples to use to compute π or e, default is 100000.

       Multi-precision floating operations (mpfr) stressor
            --mpfr N
                   start  N workers that exercise multi-precision floating point operations using the GNU Multi-
                   Precision Floating Point Reliable library (mpfr). Operations computed are as follows:
                   Method  Description
                   apery   calculate Apery's constant ζ(3); the sum of 1/(n ↑ 3).
                   cosine  compute cos(θ) for θ = 0 to 2π in 100 steps.
                   euler   compute e using n = (1 + (1 ÷ n)) ↑ n.
                   exp     compute 1000 exponentials.
                   log     computer 1000 natural logarithms.
                   omega   compute the omega constant defined by Ωe↑Ω = 1 using efficient iteration of Ωn+1 = (1
                           + Ωn) / (1 + e↑Ωn).
                   phi     compute the Golden Ratio ϕ using series.
                   sine    compute sin(θ) for θ = 0 to 2π in 100 steps.
                   nsqrt   compute square root using Newton-Raphson.

            --mpfr-ops N
                   stop workers after N iterations of various multi-precision floating point operations.

            --mpfr-precision N
                   specify the precision in binary digits of the floating point operations. The default is  1000
                   bits, the allowed range is 32 to 1000000 (very slow).

       Memory protection stressor
            --mprotect N
                   start  N workers that exercise changing page protection settings and access memory after each
                   change. 8 processes per worker contend with each other changing page proection settings on  a
                   shared  memory region of just a few pages to cause TLB flushes. A read and write to the pages
                   can cause segmentation faults and these are handled by the stressor. All combinations of page
                   protection settings are exercised including invalid combinations.

            --mprotect-ops N
                   stop after N mprotect calls.

       POSIX message queue stressor (Linux)
            --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.

       Memory remap stressor (Linux)
            --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-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.

            --mremap-mlock
                   attempt to mlock remap'd pages into memory causing more memory pressure by  preventing  pages
                   from swapped out.

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

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

            --msg-bytes N
                   specify  the size of the message being sent and received. Range 4 to 8192 bytes, default is 4
                   bytes.

            --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.

       Synchronize file with memory map (msync) stressor
            --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-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.

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

       Synchronize file with memory map (msync) coherency stressor
            --msyncmany N
                   start N stressors that memory map up to 32768 pages on the same page  of  a  temporary  file,
                   change  the  first  32  bits  in a page and msync the data back to the file.  The other 32767
                   pages are examined to see if the 32 bit check value is msync'd back to these pages.

            --msyncmany-ops N
                   stop after N msync calls in the msyncmany stressors are completed.

       Unmapping shared non-executable memory stressor (Linux)
            --munmap N
                   start N stressors that exercise unmapping of shared non-executable mapped  regions  of  child
                   processes  (Linux  only).  The unmappings map shared memory regions page by page with a prime
                   sized stride that creates many temporary mapping holes.  One the unmappings are complete  the
                   child  will exit and a new one is started.  Note that this may trigger segmentation faults in
                   the child process, these are handled where possible by forcing  the  child  process  to  call
                   _exit(2).

            --munmap-ops N
                   stop after N page unmappings.

       Pthread mutex stressor
            --mutex N
                   start  N  stressors  that  exercise  pthread  mutex locking and unlocking. If run with enough
                   privilege then the FIFO scheduler is used and a random priority between  0  and  80%  of  the
                   maximum FIFO priority level is selected for the locking operation.  The minimum FIFO priority
                   level  is  selected for the critical mutex section and unlocking operation to exercise random
                   inverted priority scheduling.

            --mutex-affinity
                   enable random CPU affinity changing between mutex lock and unlock.

            --mutex-ops N
                   stop after N bogo mutex lock/unlock operations.

            --mutex-procs N
                   By default 2 threads are used for locking/unlocking on a single mutex. This option allows the
                   default to be changed to 2 to 64 concurrent threads.

       High resolution and scheduler stressor via nanosleep calls
            --nanosleep N
                   start N workers that each run pthreads that call nanosleep with random delays from 1 to  2↑18
                   nanoseconds. This should exercise the high resolution timers and scheduler.

            --nanosleep-method [ all | cstate | random | ns | us | ms ]
                   select  the nanosleep sleep duration method.  By default, cstate residency durations (if they
                   exist) and random durations are used.  This option allows one to  select  one  of  the  three
                   methods:
                   Method  Description
                   all     use cstate and random nanosecond durations.
                   cstate  use  cstate nanosecond durations. It is recommended to also use --nanosleep-threads 1
                           to exercise less conconcurrent nanosleeps to allow CPUs to drop into deep C states.
                   random  use random nanosecond durations between 1 and 2^18 nanoseconds.
                   ns      use 1ns (nanosecond) nanosleeps
                   us      use 1us (microsecond) nanosleeps
                   ms      use 1ms (millisecond) nanosleeps

            --nanosleep-ops N
                   stop the nanosleep stressor after N bogo nanosleep operations.

            --nanosleep-threads N
                   specify the number of concurrent pthreads to run per stressor.  The  default  is  8  and  the
                   allowed range is 1 to 1024.

       Network device ioctl stressor
            --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 stressor (Linux)
            --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 stressor
            --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

       NO-OP CPU instruction stressor
            --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-instr INSTR
                   use alternative nop instruction INSTR. For x86 CPUs INSTR can be one of nop, pause,  nop2  (2
                   byte nop) through to nop15 (15 byte nop). For ARM CPUs, INSTR can be one of nop or yield. For
                   PPC64  CPUs,  INSTR can be one of nop, mdoio, mdoom or yield. For S390 CPUs, INSTR can be one
                   of nop or nopr. For other processors, INSTR is only nop. The random INSTR  option  selects  a
                   randon mix of the available nop instructions. If the chosen INSTR generates an SIGILL signal,
                   then the stressor falls back to the vanilla 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.

       /dev/null stressor
            --null N
                   start N workers that exercise /dev/null with  writes,  lseek,  ioctl,  fcntl,  fallocate  and
                   fdatasync. For just /dev/null write benchmarking use the --null-write option.

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

            --null-write
                   just write to /dev/null with 4K writes with no additional exercising on /dev/null.

       Migrate memory pages over NUMA nodes stressor
            --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-bytes N
                   specify  the total number bytes to be exercised by all the workers, the given size is divided
                   by the number of workers and rounded to the nearest page size. The default is 4MB per worker.
                   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.

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

            --numa-shuffle-addr
                   shuffle page order for the address list when calling move_pages(2)

            --numa-shuffle-node
                   shuffle node order for the address list when calling move_pages(2)

       Large Pipe stressor
            --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.

       Illegal instructions stressors
            --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-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.

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

       Opening file (open) stressor
            -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-fd
                   run a child process that scans /proc/$PID/fd and attempts to open the files that the stressor
                   has opened. This exercises racing open/close operations on the proc interface.

            --open-max N
                   try  to  open a maximum of N files (or up to the maximum per-process open file system limit).
                   The value can be the number of files or a percentage of the  maximum  per-process  open  file
                   system limit.

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

       Page table and TLB stressor
            --pagemove N
                   start  N  workers  that  mmap  a  memory  region (default 4 MB) and then shuffle pages to the
                   virtual address of the previous page. Each page shuffle uses 3 mremap operations  to  move  a
                   page. This exercises page tables and Translation Lookaside Buffer (TLB) flushing.

            --pagemove-bytes
                   specify  the  size of the memory mapped region to be exercised. 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.

            --pagemove-mlock
                   attempt to mlock mmap'd and mremap'd pages  into  memory  causing  more  memory  pressure  by
                   preventing pages from swapped out.

            --pagemove-ops N
                   stop after N pagemove shuffling operations, where suffling all the pages in the mmap'd region
                   is equivalent to 1 bogo-operation.

       Memory page swapping stressor
            --pageswap N
                   start  N  workers  that exercise page swap in and swap out. Pages are allocated and paged out
                   using madvise MADV_PAGEOUT. One the maximum per process number of mmaps are reached or  65536
                   pages  are  allocated the pages are read to page them back in and unmapped in reverse mapping
                   order.

            --pageswap-ops N
                   stop after N page allocation bogo operations.

       PCI sysfs stressor (Linux)
            --pci N
                   exercise PCI sysfs by running N workers that read data (and  mmap/unmap  PCI  config  or  PCI
                   resource  files).  Linux only. Running as root will allow config and resource mmappings to be
                   read and exercises PCI I/O mapping.

            --pci-ops N
                   stop pci stress workers after N PCI subdirectory exercising operations.

       Personality stressor
            --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.

       Mutex using Peterson algorithm stressor
            --peterson N
                   start N workers that exercises mutex exclusion between two processes using shared memory with
                   the  Peterson  Algorithm. Where possible this uses memory fencing and falls back to using GCC
                   __sync_synchronize if they are not available. The stressors contain simple mutex  and  memory
                   coherency sanity checks.

            --peterson-ops N
                   stop peterson workers after N mutex operations.

       Page map stressor
            --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-mtrr
                   enable  setting  various  memory type rage register (MTRR) types on physical pages (Linux and
                   x86 only).

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

       Process signals (pidfd_send_signal) stressor
            --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.

       Localhost ICMP (ping) stressor
            --ping-sock N
                   start  N  workers that send small randomized ICMP messages to the localhost across a range of
                   ports (1024..65535) using a "ping" socket with an AF_INET domain, a  SOCK_DGRAM  socket  type
                   and an IPPROTO_ICMP protocol.

            --ping-sock-ops N
                   stop the ping-sock stress workers after N ICMP messages are sent.

       Large pipe stressor
            -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-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-ops N
                   stop pipe stress workers after N bogo pipe write operations.

            --pipe-vmsplice
                   use vmsplice(2) to splice data pages to/from pipe. Requires pipe packet mode  using  O_DIRECT
                   and buffer twice the size of the pipe to ensure verification data sequences.

            --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. As of version 0.15.11 the default size is 4096 bytes.

       Shared pipe stressor
            --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.

       Memory protection key mechanism stressor (Linux)
            --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.

       Stress-ng plugin stressor
            --plugin N
                   start  N  workers that run user provided stressor functions loaded from a shared library. The
                   shared library can contain one or more stressor functions  prefixed  with  stress_  in  their
                   name.  By  default the plugin stressor will find all functions prefixed with stress_ in their
                   name and exercise these one by one in a round-robin loop, but  a  specific  stressor  can  be
                   selected  using  the  --plugin-method  option.  The stressor function takes no parameters and
                   returns 0 for success and non-zero for failure (and will terminate the plugin stressor). Each
                   time a stressor function is executed the bogo-op counter is incremented by one. The following
                   example performs 10,000 nop instructions per bogo-op:

                      int stress_example(void)
                      {
                              int i;

                              for (i = 0; i < 10000; i++) {
                                      __volatile__ __asm__("nop");
                              }
                              return 0;  /* Success */
                      }

                   and compile the source into a shared library as, for example:

                      gcc -fpic -shared -o example.so example.c

                   and run as using:

                      stress-ng --plugin 1 --plugin-so ./example.so

            --plugin-method function
                   run a specific stressor function, specify the name without the leading stress_ prefix.

            --plugin-ops N
                   stop after N iterations of the user provided stressor function(s).

            --plugin-so name
                   specify the shared library containing the user provided stressor function(s).

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

            --poll-fds N
                   specify  the  number of file descriptors to poll/ppoll/select/pselect on.  The maximum number
                   for select/pselect is limited by FD_SETSIZE and the upper maximum  is  also  limited  by  the
                   maximum number of pipe open descriptors allowed.

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

       Prctl stressor
            --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

       L3 cache prefetching stressor
            --prefetch N
                   start  N  workers  that benchmark prefetch and non-prefetch reads of a L3 cache sized buffer.
                   The buffer is read with loops of 8 × 64 bit reads per iteration. In the prefetch cases,  data
                   is  prefetched  ahead of the current read position by various sized offsets, from 64 bytes to
                   8K to find the best memory read throughput. The stressor reports the non-prefetch  read  rate
                   and the best prefetched read rate. It also reports the prefetch offset and an estimate of the
                   amount  of  time  between  the  prefetch  issue  and  the actual memory read operation. These
                   statistics will vary from run-to-run due to system noise and CPU frequency scaling.

            --prefetch-l3-size N
                   specify the size of the l3 cache

            --prefetch-method N
                   select the prefetching method. Available methods are:
                   Method       Description
                   builtin      Use the __builtin_prefetch(3) function for prefetching. This is the default.
                   builtinl0    Use the __builtin_prefetch(3) function for prefetching, with a locality 0 hint.
                   builtinl3    Use the __builtin_prefetch(3) function for prefetching, with a locality 3 hint.
                   dcbt         Use the ppc64 dcbt instruction to fetch data into the L1 cache (ppc64 only).
                   dcbtst       Use the ppc64 dcbtst instruction to fetch data into the L1 cache (ppc64 only).
                   prefetcht0   Use the x86 prefetcht0 instruction to prefetch data into all levels of the cache
                                hierarchy (x86 only).
                   prefetcht1   Use the x86 prefetcht1 instruction (temporal data with respect  to  first  level
                                cache) to prefetch data into level 2 cache and higher (x86 only).
                   prefetcht2   Use  the  x86 prefetcht2 instruction (temporal data with respect to second level
                                cache) to prefetch data into level 2 cache and higher (x86 only).
                   prefetchnta  Use the x86 prefetchnta instruction (non-temporal data with respect to all cache
                                levels) into a location close to the processor, minimizing cache pollution  (x86
                                only).

            --prefetch-ops N
                   stop prefetch stressors after N benchmark operations

       Priority inversion stressor
            --prio-inv N
                   start  N workers that exercise mutex lock priority inversion scheduling.  Three child process
                   run with low, medium and high FIFO scheduling priorities.  The processes with  low  and  high
                   priorities  share  a  mutex  lock  that  both  try to lock and unlock, aiming to make the low
                   priority process block the high priority process. Meanwhile the middle priority process  will
                   run  in  priority  over the low priority process, causing the high priority process to become
                   unrunnable.

            --prio-inv-ops N
                   stop after N bogo lock/unlock operations.

            --prio-inv-type [ inherit | none | protect ]
                   select the mutex lock priority inversion type, described as follows:
                   Type     Description
                   inherit  The priority of the process owning the mutex lock is run with  highest  priority  of
                            any other process waiting on the lock to avoid priority inversion deadlock.
                   none     The  priority  of  the  process  owning  the mutex lock is not affected by its mutex
                            ownership. This may lead to the high priority process  to  become  unrunnable  on  a
                            single thread system.
                   protect  The priority of the process owning the mutex lock is given the priority of the mutex
                            (in this stress test case, the maximum priority) during the lock ownership.

            --prio-inv-policy [ batch, idle, fifo, other, rr ]
                   select the scheduling policy. "Normal" policies (batch, idle and other) can be selected as an
                   unprivileged  user,  however "Real Time" policies (fifo and rr) can only be selected with the
                   appropriate privilege.  By default "rr" is selected but will it  fall  back  to  "other"  for
                   unprivileged users.

       Privileged CPU instructions stressor
            --priv-instr N
                   start  N  workers  that  exercise  various architecture specific privileged instructions that
                   cannot be executed by userspace programs. These instructions will be trapped and processed by
                   SIGSEGV or SIGILL signal handlers.

            --priv-instr-ops N
                   stop priv-instr stressors after N rounds of executing privileged instructions.

       /proc stressor
            --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 stressor
            --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-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.

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

       Ptrace stressor
            --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.

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

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

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

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

            --qsort-method [ qsort-libc | qsort-bm ]
                   select either the libc implementation of qsort or  the  J.  L.  Bentley  and  M.  D.  McIlroy
                   implementation of qsort. The default is the libc implementation.

            --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 stressor
            --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.

       Process scheduler stressor
            --race-sched N
                   start  N  workers  that  exercise  rapid  changing CPU affinity child processes both from the
                   controlling stressor and by the child processes. Child processes are created  and  terminated
                   rapidly  with the aim to create race conditions where affinity changing occurs during process
                   run states.

            --race-sched-method [ all | next | prev | rand | randinc | syncnext | syncprev ]
                   Select the method moving a process to a specific CPU.  Available  methods  are  described  as
                   follows:
                   Method    Description
                   all       iterate over all the race-sched methods as listed below:
                   next      move a process to the next CPU, wrap around to zero when maximum CPU is reached.
                   prev      move  a  process to the previous CPU, wrap around to the maximum CPU when the first
                             CPU is reached.
                   rand      move a process to any randomly chosen CPU.
                   randinc   move a process to the current CPU + a randomly chosen value 1..4, modulo the number
                             of CPUs.
                   syncnext  move synchronously all the race-sched stressor processes  to  the  next  CPU  every
                             second; this loads just 1 CPU at a time in a round-robin method.
                   syncprev  move  synchronously all the race-sched stressor processes to the previous CPU every
                             second; this loads just 1 CPU at a time in a round-robin method.

            --race-sched-ops N
                   stop after N process creation bogo-operations.

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

            --radixsort-method [ radixsort-libc | radixsort-nonlibc ]
                   select either the  libc  implementation  of  radixsort  or  an  optimized  implementation  of
                   radixsort. The default is the libc implementation if it is available.

            --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).

       Memory filesystem stressor
            --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-fill
                   fill ramfs with zero'd data using fallocate(2) if  it  is  available  or  multiple  calls  to
                   write(2) if not.

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

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

       Raw device stressor
            --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-method method
                   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.

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

       Random list stressor
            --randlist N
                   start N workers that creates a list of objects in randomized memory order and  traverses  the
                   list setting and reading the objects. This is designed to exerise memory and cache thrashing.
                   Normally  the  objects  are allocated on the heap, however for objects of page size or larger
                   there is a 1 in 16 chance of objects being allocated using shared anonymous memory mapping to
                   mix up the address spaces of the allocations to create more TLB thrashing.

            --randist-compact
                   Allocate all the list objects using one large heap allocation and divide this up for all  the
                   list  objects. This removes the overhead of the heap keeping track of each list object, hence
                   uses less memory.

            --randlist-items N
                   Allocate N items on the list. By default, 100,000 items are allocated.

            --randlist-ops N
                   stop randlist workers after N list traversals

            --randlist-size N
                   Allocate each item to be N bytes in size. By default, the size is 64 bytes  of  data  payload
                   plus the list handling pointer overhead.

       Localhost raw socket stressor
            --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.

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

       Localhost ethernet raw packets stressor
            --rawpkt N
                   start N workers that sends and receives ethernet packets using raw packets on  the  localhost
                   via the loopback device. Requires CAP_NET_RAW to run.

            --rawpkt-ops N
                   stop rawpkt workers after N packets from the sender process are received.

            --rawpkt-port N
                   start  at port P. For N rawpkt worker processes, ports P to (P * 4) - 1 are used. The default
                   starting port is port 14000.

            --rawpkt-rxring N
                   setup raw packets with RX ring with N number of blocks, this selects TPACKET_V. N must be one
                   of 1, 2, 4, 8 or 16.

       Localhost raw UDP packet stressor
            --rawudp N
                   start N workers that send and receive  UDP  packets  using  raw  sockets  on  the  localhost.
                   Requires CAP_NET_RAW to run.

            --rawudp-if NAME
                   use  network  interface  NAME.  If  the  interface NAME does not exist, is not up or does not
                   support the domain then the loopback (lo) interface is used as the default.

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

            --rawudp-port N
                   start at port P. For N rawudp worker processes, ports P to (P * 4) - 1 are used. The  default
                   starting port is port 13000.

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

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

            --rdrand-seed
                   use rdseed instead of rdrand (x86 only).

       Read-ahead stressor
            --readahead N
                   start  N workers that randomly seek and perform 4096 byte read/write I/O operations on a file
                   with readahead. The default file size is 64 MB.  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 stressor
            --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.

       CPU registers stressor
            --regs N
                   start N workers  that  shuffle  data  around  the  CPU  registers  exercising  register  move
                   instructions.   Each  bogo-op represents 1000 calls of a shuffling function that shuffles the
                   registers 32 times. Only implemented for  the  GCC  compiler  since  this  requires  register
                   annotations and optimization level 0 to compile appropriately.

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

       Memory page reordering stressor
            --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-mlock
                   attempt  to  mlock  mmap'd  huge pages into memory causing more memory pressure by preventing
                   pages from swapped out.

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

            --remap-pages N
                   specify number of pages to remap, must be a power of 2, default is 512 pages.

       Renaming file stressor
            -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.

       Process rescheduling stressor
            --resched N
                   start N workers that exercise process rescheduling. Each stressor spawns a child process  for
                   each  of  the  positive  nice  levels  and iterates over the nice levels from 0 to the lowest
                   priority level (highest nice value). For each of the nice levels 1024 iterations over 3  non-
                   real  time  scheduling  polices  SCHED_OTHER,  SCHED_BATCH  and  SCHED_IDLE  are  set  and  a
                   sched_yield occurs to force heavy rescheduling activity.  When the -v verbose option is  used
                   the  distribution  of  the  number  of yields across the nice levels is printed for the first
                   stressor out of the N stressors.

            --resched-ops N
                   stop after N rescheduling sched_yield calls.

       System resources stressor
            --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-mlock
                   attempt to mlock mmap'd pages into memory causing more memory pressure  by  preventing  pages
                   from swapped out.

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

       Writing temporary files in reverse position stressor
            --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.

       Ring pipes stressor
            --ring-pipe N
                   start N workers that move data around a ring of pipes using poll to detect when data is ready
                   to  copy. By default, 256 pipes are used with two 4096 byte items of data being copied around
                   the ring of pipes. Data is copied using read and write system calls.  If  the  splice  system
                   call  is  available  then  one  can  use  splice to use more efficient in-kernel data passing
                   instead of buffer copying.

            --ring-pipe-num N
                   specify the number of pipes to use. Ranges from 4 to 262144, default is 256.

            --ring-pipe-ops N
                   stop after N pipe data transfers.

            --ring-pipe-size N
                   specify the size of data being copied in bytes. Ranges from 1 to 4096, default is 4096.

            --ring-pipe-splice
                   enable splice to move data between pipes (only if splice() is available).

       Rlimit stressor
            --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.

       VM reverse-mapping stressor
            --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.

       1 bit rotation stressor
            --rotate N
                   start N workers that exercise 1 bit rotates left and right  of  unsigned  integer  variables.
                   The default will rotate four 8, 16, 32, 64 (and if supported 128) bit values 10000 times in a
                   loop per bogo-op.

            --rotate-method method
                   specify  the  method  of  rotation  to  use. The 'all' method uses all the methods and is the
                   default.
                   Method  Description
                   all     exercise with all the rotate stressor methods (see below):
                   rol8    8 bit unsigned rotate left by 1 bit
                   ror8    8 bit unsigned rotate right by 1 bit
                   rol16   16 bit unsigned rotate left by 1 bit
                   ror16   16 bit unsigned rotate right by 1 bit
                   rol32   32 bit unsigned rotate left by 1 bit
                   ror32   32 bit unsigned rotate right by 1 bit
                   rol64   64 bit unsigned rotate left by 1 bit
                   ror64   64 bit unsigned rotate right by 1 bit
                   rol128  128 bit unsigned rotate left by 1 bit
                   ror128  128 bit unsigned rotate right by 1 bit

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

       Restartable sequences (rseq) stressor (Linux)
            --rseq N
                   start N workers that exercise restartable sequences via the rseq(2) system call.  This  loops
                   over a long duration critical section that is likely to be interrupted.  A rseq abort handler
                   keeps  count  of the number of interruptions and a SIGSEV handler also tracks any failed rseq
                   aborts that can occur if there is a mismatch in a rseq check signature. Linux only.

            --rseq-ops N
                   stop after N bogo rseq operations. Each bogo rseq operation is equivalent to 10000 iterations
                   over a long duration rseq handled critical section.

       Real-time clock stressor
            --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.

       Fast process rescheduling stressor
            --schedmix N
                   start N workers that each start child processes that repeatedly select  random  a  scheduling
                   policy  and  then  executes  a  short  duration randomly chosen time consuming activity. This
                   exercises rapid re-scheduling of processes and generates a large amount of  scheduling  timer
                   interrupts.

            --schedmix-ops N
                   stop after N scheduling mixed operations.

            --schedmix-procs N
                   specify  the  number of chid processes to run for each stressor instance, range from 1 to 64,
                   default is 16.

       Scheduling policy stressor
            --schedpolicy N
                   start N workers that  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.

            --schedpolicy-rand
                   Select  scheduling policy randomly so that the new policy is always different to the previous
                   policy. The default is to work through the scheduling policies sequentially.

       Stream control transmission protocol (SCTP) stressor
            --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-if NAME
                   use network interface NAME. If the interface NAME does not exist,  is  not  up  or  does  not
                   support the domain then the loopback (lo) interface is used as the default.

            --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.

            --sctp-sched [ fcfs | prio | rr ]
                   specify SCTP scheduler, one of fcfs (default), prio (priority) or rr (round-robin).

       File sealing (SEAL) stressor (Linux)
            --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.

       Secure computing stressor
            --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.

       Secret memory stressor (Linux >= 5.11)
            --secretmem N
                   start N workers that mmap pages using file mapping off a memfd_secret file  descriptor.  Each
                   stress loop iteration will expand the mappable region by 3 pages using ftruncate and mmap and
                   touches  the  pages.  The  pages  are  then  fragmented by unmapping the middle page and then
                   umapping the first and last pages. This tries to force page fragmentation  and  also  trigger
                   out  of memory (OOM) kills of the stressor when the secret memory is exhausted.  Note this is
                   a Linux 5.11+ only stressor and the kernel needs to be booted  with  "secretmem="  option  to
                   allocate a secret memory reservation.

            --secretmem-ops N
                   stop secretmem stress workers after N stress loop iterations.

       IO seek stressor
            --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.

       POSIX semaphore stressor
            --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.

       System V semaphore stressor
            --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 stressor
            --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.

       Sessions stressor
            --session N
                   start  N  workers  that  create child and grandchild processes that set and get their session
                   ids. 25% of the grandchild processes are not waited for  by  the  child  to  create  orphaned
                   sessions that need to be reaped by init.

            --session-ops N
                   stop session workers after N child processes are spawned and reaped.

       Setting data in the Kernel stressor
            --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 stressor
            --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).

       POSIX shared memory stressor
            --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-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-mlock
                   attempt to mlock shared memory objects into memory causing more memory pressure by preventing
                   pages from swapped out.

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

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

            --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-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-mlock
                   attempt to mlock shared memory segment into memory causing more memory pressure by preventing
                   pages from swapped out.

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

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

       SIGABRT stressor
            --sigabrt N
                   start N workers that create children that  are  killed  by  SIGABRT  signals  or  by  calling
                   abort(3).

            --sigabrt-ops N
                   stop the sigabrt workers after N SIGABRT signals are successfully handled.

       SIGBUS stressor
            --sigbus N
                   start  N workers that rapidly create and catch bus errors generated via misaligned access and
                   accessing a file backed memory mapping that does not have file storage to back the page being
                   accessed.

            --sigbus-ops N
                   stop sigbus stress workers after N bogo bus errors.

       SIGCHLD stressor
            --sigchld N
                   start N workers that create children to generate SIGCHLD  signals.  This  exercises  children
                   that  exit  (CLD_EXITED),  get  killed  (CLD_KILLED),  get stopped (CLD_STOPPED) or continued
                   (CLD_CONTINUED).

            --sigchld-ops N
                   stop the sigchld workers after N SIGCHLD signals are successfully handled.

       SIGFD stressor (Linux)
            --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 stressor
            --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 stressor
            --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.

       System signals stressor
            --signal N
                   start N workers that exercise the signal system call three different signal handlers, SIG_IGN
                   (ignore),  a  SIGCHLD  handler  and  SIG_DFL  (default action).  For the SIGCHLD handler, the
                   stressor sends itself a SIGCHLD signal and checks if it has been handled. For other handlers,
                   the stressor checks that the SIGCHLD handler has not been called.  This stress test calls the
                   signal system call directly when possible and will try to avoid  the  C  library  attempt  to
                   replace signal with the more modern sigaction system call.

            --signal-ops N
                   stop signal stress workers after N rounds of signal handler setting.

       Nested signal handling stressor
            --signest N
                   start  N  workers  that  exercise  nested  signal handling. A signal is raised and inside the
                   signal handler a different signal is raised, working through a list of signals  to  exercise.
                   An  alternative  signal  stack  is  used that is large enough to handle all the nested signal
                   calls.  The -v option will log the approximate size of the stack  required  and  the  average
                   stack size per nested call.

            --signest-ops N
                   stop after handling N nested signals.

       Pending signals stressor
            --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 stressor
            --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.

       Signal queueing stressor
            --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.

       Real-time signals stressor
            --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.

       SIGSEV stressor
            --sigsegv N
                   start N workers that rapidly create and  catch  segmentation  faults  generated  via  illegal
                   memory access, illegal vdso system calls, illegal port reads, illegal interrupts or access to
                   x86 time stamp counter.

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

       Waiting for process signals stressor
            --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.

       SIGTRAP stressor
            --sigtrap N
                   start N workers that exercise the SIGTRAP signal.  For  systems  that  support  SIGTRAP,  the
                   signal  is  generated  using  raise(SIGTRAP).  Only  x86  Linux  systems  the SIGTRAP is also
                   generated by an int 3 instruction.

            --sigtrap-ops N
                   stop sigtrap stress workers after N SIGTRAPs have been handled.

       SIGXCPU stressor
            --sigxcpu N
                   start N workers that exercise the SIGXCPU stressor. A busy loop generates SIGXCPU signals  by
                   setting a 0 second run time limit followed by a sched_yield call.

            --sigxcpu-ops N
                   stop sigsxcpu stress workers after N bogo SIGXCPU signal attempts.

       SIGXFSZ stressor
            --sigxfsz N
                   start  N  workers  that exercise the SIGXFSZ stressor. A random 32 bit file size limit is set
                   and data is written outside this size limit to generate a SIGXFSZ signal.

            --sigxfsz-ops N
                   stop sigsxfsz stress workers after N bogo SIGXFSZ signal attempts.

       Random memory and processor cache line stressor via a skiplist
            --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.

       Time interrupts and context switches stressor
            --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-max P
                   start P threads per worker. The default is 1024, the maximum allowed is 30000.

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

       System management interrupts (SMI) stressor
            --smi N
                   start  N  workers  that  attempt to generate system management interrupts (SMIs) into the x86
                   ring -2 system management mode (SMM) by exercising the advanced power management  (APM)  port
                   0xb2.  This  requires the --pathological option and root privilege and is only implemented on
                   x86 Linux platforms. This probably does not work in a virtualized environment.  The  stressor
                   will attempt to determine the time stolen by SMIs with some naïve benchmarking.

            --smi-ops N
                   stop after N attempts to trigger the SMI.

       Network socket stressor
            -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-if NAME
                   use  network  interface  NAME.  If  the  interface NAME does not exist, is not up or does not
                   support the domain then the loopback (lo) interface is used as the default.

            --sock-msgs N
                   send N messages  per  connect,  send/receive,  disconnect  iteration.  The  default  is  1000
                   messages. If N is too small then the rate is throttled back by the overhead of socket connect
                   and  disconnect  (on Linux, one needs to increase /proc/sys/net/netfilter/nf_conntrack_max to
                   allow more connections).

            --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-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 these 3 on each
                   iteration.   Note  that sendmmsg is only available for Linux systems that support this system
                   call.

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

            --sock-protocol P
                   Use the specified protocol P, default is tcp. Options are tcp and mptcp (if supported by  the
                   operating system).

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

            --sock-zerocopy
                   enable zerocopy for send and recv calls if the MSG_ZEROCOPY is supported.

       Socket abusing stressor
            --sockabuse N
                   start N workers that abuse a socket file descriptor 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.

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

       Socket diagnostic stressor (Linux)
            --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.

       Socket file descriptor stressor
            --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.

       Opening network socket stressor
            --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-if NAME
                   use network interface NAME. If the interface NAME does not exist,  is  not  up  or  does  not
                   support the domain then the loopback (lo) interface is used as the default.

            --sockmany-ops N
                   stop after N connections.

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

       Socket I/O stressor
            --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 stressor
            --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.

       Sparse matrix stressor
            --sparsematrix N
                   start  N  workers  that  exercise 3 different sparse matrix implementations based on hashing,
                   Judy array (for 64 bit systems), 2-d circular linked-lists, memory mapped  2-d  matrix  (non-
                   sparse),  quick  hashing  (on  preallocated  nodes) and red-black tree.  The sparse matrix is
                   populated with values, random values potentially non-existing values are read, known existing
                   values are read and known existing values are marked as zero. This default 500 ×  500  sparse
                   matrix is used and 5000 items are put into the sparse matrix making it 2% utilized.

            --sparsematrix-items N
                   populate  the  sparse matrix with N items. If N is greater than the number of elements in the
                   sparse matrix than N will be capped to create at 100% full sparse matrix.

            --sparsematrix-method [ all | hash | hashjudy | judy | list | mmap | qhash | rb ]
                   specify the type of sparse matrix implementation to  use.  The  'all'  method  uses  all  the
                   methods and is the default.
                   Method    Description
                   all       exercise with all the sparsematrix stressor methods (see below):
                   hash      use  a  hash table and allocate nodes on the heap for each unique value at a (x, y)
                             matrix position.
                   hashjudy  use a hash table for x coordinates and a Judy array for y coordinates for values at
                             a (x, y) matrix position.
                   judy      use a Judy array with a unique 1-to-1 mapping of (x, y) matrix  position  into  the
                             array.
                   list      use  a  circular linked-list for sparse y positions each with circular linked-lists
                             for sparse x positions for the (x, y) matrix coordinates.
                   mmap      use a non-sparse mmap the entire 2-d matrix space. Only  (x,  y)  matrix  positions
                             that  are  referenced  will  get physically mapped. Note that large sparse matrices
                             cannot be mmap'd  due  to  lack  of  virtual  address  limitations,  and  too  many
                             referenced pages can trigger the out of memory killer on Linux.
                   qhash     use  a  hash  table with pre-allocated nodes for each unique value. This is a quick
                             hash table implementation, nodes are not allocated each time with  calloc  and  are
                             allocated  from a pre-allocated pool leading to quicker hash table performance than
                             the hash method.
                   rb        use a red-black balanced tree using one tree node for each unique value at a (x, y)
                             matrix position.
                   splay     use a splay tree using one tree node for each unique  value  at  a  (x,  y)  matrix
                             position.

            --sparsematrix-ops N
                   stop after N sparsematrix test iterations.

            --sparsematrix-size N
                   use a N × N sized sparse matrix

       POSIX process spawn (posix_spawn) stressor (Linux)
            --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 stressor (Linux)
            --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-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.

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

       Stack stressor
            --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-mlock
                   attempt to mlock stack pages into memory causing more memory  pressure  by  preventing  pages
                   from swapped out.

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

            --stack-pageout
                   force stack pages out to swap (available when madvise(2) supports MADV_PAGEOUT).

            --stack-unmap
                   unmap  a  single  page  in  the middle of a large buffer allocated on the stack on each stack
                   allocation. This forces the stack mapping into multiple separate allocation mappings.

       Dirty page and stack exception stressor
            --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.

       Libc string functions stressor
            --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 memory stressor
            --stream N
                   start N workers exercising a memory bandwidth stressor  very  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.

                   The stressor calculates the memory read rate, memory write rate and floating point operations
                   rate. These will differ from the maximum theoretical read/write/compute rates because of loop
                   overheads and the use of volatile pointers to ensure  the  compiler  does  not  optimize  out
                   stores.

            --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-mlock
                   attempt to mlock the stream buffers into memory to prevent them from being swapped out.

            --stream-madvise [ collapse | 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'.

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

       Swap partitions stressor (Linux)
            --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.

       Context switching between mutually tied processes stressor
            -s N, --switch N
                   start  N  workers  that force context switching between two mutually blocking/unblocking tied
                   processes. By default message passing  over  a  pipe  is  used,  but  different  methods  are
                   available.

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

            --switch-method [ mq | pipe | sem-sysv ]
                   select the preferred context switch block/run synchronization method, these are as follows:
                   Method    Description
                   mq        use  posix  message  queue with a 1 item size. Messages are passed between a sender
                             and receiver process.
                   pipe      single character messages are passed down a single character sized pipe  between  a
                             sender and receiver process.
                   sem-sysv  a SYSV semaphore is used to block/run two processes.

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

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

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

            --symlink-sync
                   sync dirty data and metadata to disk.

       Partial file syncing (sync_file_range) stressor
            --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-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.

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

       CPU synchronized loads stressor
            --syncload N
                   start  N  workers  that  produce  sporadic  short  lived loads synchronized across N stressor
                   processes. By default repeated cycles of 125ms busy  load  followed  by  62.5ms  sleep  occur
                   across  all  the workers in step to create bursts of load to exercise C state transitions and
                   CPU frequency scaling. The busy load and sleeps have +/-10% jitter added  to  try  exercising
                   scheduling patterns.

            --syncload-msbusy M
                   specify the busy load duration in milliseconds.

            --syncload-mssleep M
                   specify the sleep duration in milliseconds.

            --syncload-ops N
                   stop syncload workers after N load/sleep cycles.

       System calls bad address and fault handling stressor
            --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.

       System calls stressor
            --syscall N
                   start  N  workers that exercise a range of available system calls. System calls that fail due
                   to lack of capabilities or errors are ignored. The stressor will try to maximize the rate  of
                   system  calls being executed based the entire time taken to setup, run and cleanup after each
                   system call.

            --syscall-method method
                   select the choice of system calls to executed based on the fastest test duration times.  Note
                   that this includes the time to setup, execute the system call and  cleanup  afterwards.   The
                   available methods are as follows:
                   Method     Description
                   all        select all the available system calls
                   fast10     select the fastest 10% system call tests
                   fast25     select the fastest 25% system call tests
                   fast50     select the fastest 50% system call tests
                   fast75     select the fastest 75% system call tests
                   fast90     select the fastest 90% system call tests
                   geomean1   select tests that are less or equal to the geometric mean of all the test times
                   geomean1   select  tests  that  are  less  or equal to 2 × the geometric mean of all the test
                              times
                   geomean1   select tests that are less or equal to 3 × the geometric  mean  of  all  the  test
                              times

            --syscall-ops N
                   stop after N system calls

            --sycsall-top N
                   report  the  fastest  top  N system calls. Setting N to zero will report all the system calls
                   that could be exercised.

       System information stressor
            --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.

       System calls with invalid arguments stressor (Linux)
            --sysinval N
                   start N workers that exercise system calls in  random  order  with  permutations  of  invalid
                   arguments  to  force  kernel  error handling checks. The stress test autodetects system calls
                   that cause processes to crash or exit prematurely and  will  blocklist  these  after  several
                   repeated  breakages.  System  call arguments that cause system calls to work successfully are
                   also detected an blocklisted too.  Linux only.

            --sysinval-ops N
                   stop sysinval workers after N system call attempts.

       /sys stressor (Linux)
            --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.

            --sysfs-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 stressor (Linux)
            --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.

       Timer event stressor (Linux)
            -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-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-ops N
                   stop timer stress workers after N bogo timer events (Linux only).

            --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 stressor (Linux)
            --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.

            --timerfs-fds N
                   try to use a maximum of N timerfd file descriptors per stressor.

            --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-ops N
                   stop timerfd stress workers after N bogo timerfd events (Linux only).

            --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.

       Time warp stressor
            --time-warp N
                   start  N workers that read the system time and where appropriate for monotonic clocks perform
                   a check for reverse time warping. At the end of the run there are  time  wrap-around  checks.
                   This  stressor  exercises  clock_gettime(2) on all available clocks, gettimeofday(2), time(2)
                   and getrusage(2) to check for unexpected time behaviour.  Note  that  only  some  clocks  are
                   reliably monotonic.

            --time-warp-ops N
                   stop after N rounds of checking all the available clocks and time fetching system calls.

       Translation lookaside buffer shootdowns stressor
            --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 stressor
            --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-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.

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

       Touching files stressor
            --touch N
                   touch files by using open(2) or creat(2) and then closing and unlinking  them.  The  filename
                   contains  the bogo-op number and is incremented on each touch operation, hence this fills the
                   dentry cache. Note that the user time and system time may be very low as most of the run time
                   is waiting for file I/O and this produces very large bogo-op rates for the very low CPU  time
                   used.

            --touch-method [ random | open | creat ]
                   select the method the file is created, either randomly using open(2) or create(2), just using
                   open(2) with the O_CREAT open flag, or with creat(2).

            --touch-ops N
                   stop the touch workers after N file touches.

            --touch-opts all, direct, dsync, excl, noatime, sync
                   specify various file open options as a comma separated list. Options are as follows:
                   Option    Description
                   all       use all the open options, namely direct, dsync, excl, noatime and sync
                   direct    try  to minimize cache effects of the I/O to and from this file, using the O_DIRECT
                             open flag.
                   dsync     ensure output has been transferred to underlying hardware  and  file  metadata  has
                             been updated using the O_DSYNC open flag.
                   excl      fail if file already exists (it should not).
                   noatime   do not update the file last access time if the file is read.
                   sync      ensure  output  has  been  transferred to underlying hardware using the O_SYNC open
                             flag.

       Tree data structures stressor
            --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), btree and binary
                   trees.  The intention of this stressor is to exercise memory and cache with the various  tree
                   operations.

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

            --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.

       Trigonometric functions stressor
            --trig N
                   start N workers that exercise sin,  cos,  sincos  (where  available)  and  tan  trigonometric
                   functions  using  float,  double  and  long  double floating point variants. Each function is
                   exercised 10,000 times per bogo-operation.

            --trig-method function
                   specify a trigonometric  stress  function.  By  default,  all  the  functions  are  exercised
                   sequentially,  however  one  can specify just one function to be used if required.  Available
                   options are as follows:
                   Method   Description
                   all      iterate through all of the following trigonometric functions
                   cos      cosine (double precision)
                   cosf     cosine (float precision)
                   cosl     cosine (long double precision)
                   sin      sine (double precision)
                   sinf     sine (float precision)
                   sinl     sine (long double precision)
                   sincos   sine and cosine (double precision)
                   sincosf  sine and cosine (float precision)
                   sincosl  sine and cosine (long double precision)
                   tan      tangent (double precision)
                   tanf     tangent (float precision)
                   tanl     tangent (long double precision)

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

       Time stamp counter (TSC) stressor
            --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, the mftb instruction for ppc64, the
                   rdcycle instruction for RISC-V, the tick instruction on SPARC and  the  rdtime.d  instruction
                   for Loong64.

            --tsc-lfence
                   add lfence after each tsc read to force serialization (x86 only).

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

            --tsc-rdtscp
                   use  the  rdtscp instruction instead of rdtsc (x86 only). This also disables the --tsc-lfence
                   option.

       Binary tree stressor
            --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.

       Network tunnel stressor
            --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 network stressor
            --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 and ipv6 are supported.

            --udp-gro
                   enable UDP-GRO (Generic Receive Offload) if supported.

            --udp-if NAME
                   use network interface NAME. If the interface NAME does not exist,  is  not  up  or  does  not
                   support the domain then the loopback (lo) interface is used as the default.

            --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 flooding stressor
            --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-if NAME
                   use network interface NAME. If the interface NAME does not exist,  is  not  up  or  does  not
                   support the domain then the loopback (lo) interface is used as the default.

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

       Umount stressor
            --umount N
                   start  N  workers that exercise mounting and racying unmounting of small tmpfs and ramfs file
                   systems. Three child processes are invoked, one to mount, another to force umount and a third
                   to exercice /proc/mounts. Small random delays are used between mount and umount calls to  try
                   to trigger race conditions on the umount calls.

            --umount-ops N
                   stop umount workers after N successful bogo mount/umount operations.

       Unshare stressor (Linux)
            --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.

       Uprobe stressor (Linux)
            --uprobe N
                   start  N workers that trace the entry to libc function getpid() using the Linux uprobe kernel
                   tracing mechanism. This requires CAP_SYS_ADMIN capabilities and a modern Linux uprobe capable
                   kernel.

            --uprobe-ops N
                   stop uprobe tracing after N trace events of the function that is being traced.

       /dev/urandom stressor (Linux)
            -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).

       Page faults stressor (Linux)
            --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-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.

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

       SYGSYS stressor
            --usersyscall N
                   start N workers that exercise the Linux prctl userspace system call  mechanism.  A  userspace
                   system call is handled by a SIGSYS signal handler and exercised with the system call disabled
                   (ENOSYS) and enabled (via SIGSYS) using prctl PR_SET_SYSCALL_USER_DISPATCH.

            --usersyscall-ops N
                   stop after N successful userspace syscalls via a SIGSYS signal handler.

       File timestamp stressor
            --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-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.

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

       Virtual dynamic shared object stressor
            --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-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.

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

       Vector floating point operations stressor
            --vecfp N
                   start  N  workers  that  exericise  floating  point  (single  and double precision) addition,
                   multiplication, division and negation on vectors of 128, 64, 32,  16  and  8  floating  point
                   values.  The  -v  option will show the approximate throughput in millions of floating pointer
                   operations per second for each operation.  For x86, the gcc/clang target clones attribute has
                   been used to produced vector optimizations for  a  range  of  mmx,  sse,  avx  and  processor
                   features.

            --vecfp-method method
                   specify a vecfp stress method. By default, all the stress methods are exercised sequentially,
                   however one can specify just one method to be used if required.
                   Method         Description
                   all            iterate through all of the following vector methods
                   floatv128add   addition of a vector of 128 single precision floating point values
                   floatv64add    addition of a vector of 64 single precision floating point values
                   floatv32add    addition of a vector of 32 single precision floating point values
                   floatv16add    addition of a vector of 16 single precision floating point values
                   floatv8add     addition of a vector of 8 single precision floating point values
                   floatv128mul   multiplication of a vector of 128 single precision floating point values
                   floatv64mul    multiplication of a vector of 64 single precision floating point values
                   floatv32mul    multiplication of a vector of 32 single precision floating point values
                   floatv16mul    multiplication of a vector of 16 single precision floating point values
                   floatv8mul     multiplication of a vector of 8 single precision floating point values
                   floatv128div   division of a vector of 128 single precision floating point values
                   floatv64div    division of a vector of 64 single precision floating point values
                   floatv32div    division of a vector of 32 single precision floating point values
                   floatv16div    division of a vector of 16 single precision floating point values
                   floatv8div     division of a vector of 8 single precision floating point values
                   doublev128add  addition of a vector of 128 double precision floating point values
                   doublev64add   addition of a vector of 64 double precision floating point values
                   doublev32add   addition of a vector of 32 double precision floating point values
                   doublev16add   addition of a vector of 16 double precision floating point values
                   doublev8add    addition of a vector of 8 double precision floating point values
                   doublev128mul  multiplication of a vector of 128 double precision floating point values
                   doublev64mul   multiplication of a vector of 64 double precision floating point values
                   doublev32mul   multiplication of a vector of 32 double precision floating point values
                   doublev16mul   multiplication of a vector of 16 double precision floating point values
                   doublev8mul    multiplication of a vector of 8 double precision floating point values
                   doublev128div  division of a vector of 128 double precision floating point values
                   doublev64div   division of a vector of 64 double precision floating point values
                   doublev32div   division of a vector of 32 double precision floating point values
                   doublev16div   division of a vector of 16 double precision floating point values
                   doublev8div    division of a vector of 8 double precision floating point values
                   doublev128neg  negation of a vector of 128 double precision floating point values
                   doublev64neg   negation of a vector of 64 double precision floating point values
                   doublev32neg   negation of a vector of 32 double precision floating point values
                   doublev16neg   negation of a vector of 16 double precision floating point values
                   doublev8neg    negation of a vector of 8 double precision floating point values

            --vecfp-ops N
                   stop after N vector floating point bogo-operations. Each bogo-op is equivalent to 65536 loops
                   of 2 vector operations. For example, one bogo-op on a 16 wide vector is equivalent to 65536 ×
                   2 × 16 floating point operations.

       Vector math operations stressor
            --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.

       Shuffled vector math operations stressor
            --vecshuf N
                   start  N  workers that shuffle data on various 64 byte vectors comprised of 8, 16, 32, 64 and
                   128 bit unsigned integers. The integers  are  shuffled  around  the  vector  with  4  shuffle
                   operations  per  loop, 65536 loops make up one bogo-op of shuffling. The data shuffling rates
                   and shuffle operation rates are logged when using the -v  option.   This  stressor  exercises
                   vector load, shuffle/permute, packing/unpacking and store operations.

            --vecshuf-method method
                   specify  a  vector  shuffling stress method. By default, all the stress methods are exercised
                   sequentially, however one can specify just one method to be used if required.
                   Method  Description
                   all     iterate through all of the following vector methods
                   u8x64   shuffle a vector of 64 unsigned 8 bit integers
                   u16x32  shuffle a vector of 32 unsigned 16 bit integers
                   u32x16  shuffle a vector of 16 unsigned 32 bit integers
                   u64x8   shuffle a vector of 8 unsigned 64 bit integers
                   u128x4  shuffle a vector of 4 unsigned 128 bit integers (when supported)

            --vecshuf-ops N
                   stop after N bogo vector shuffle ops. One bogo-op is equavlent of 4 ×  65536  vector  shuffle
                   operations on 64 bytes of vector data.

       Wide vector math operations stressor
            --vecwide N
                   start  N  workers  that perform various 8 bit math operations on vectors of 4, 8, 16, 32, 64,
                   128, 256, 512, 1024 and 2048 bytes. With the -v option the relative  compute  performance  vs
                   the  expected  compute  performance  based  on  total run time is shown for the first vecwide
                   worker. The vecwide stressor exercises various processor vector  instruction  mixes  and  how
                   well the compiler can map the vector operations to the target instruction set.

            --vecwide-ops N
                   stop  after  N  bogo  vector  operations  (2048  iterations  of  a  mix of vector instruction
                   operations).

       File based authenticy protection (verity) stressor
            --verity N
                   start N workers that exercise read-only file based authenticy  protection  using  the  verity
                   ioctls  FS_IOC_ENABLE_VERITY  and  FS_IOC_MEASURE_VERITY.   This  requires  file systems with
                   verity support (currently ext4 and f2fs on Linux) with the verity feature enabled.  The  test
                   attempts  to  creates a small file with multiple small extents and enables verity on the file
                   and verifies it. It also checks to see if the file has verity enabled with  the  FS_VERITY_FL
                   bit set on the file flags.

            --verity-ops N
                   stop the verity workers after N file create, enable verity, check verity and unlink cycles.

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

            --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 process table using high values for --vfork-max and --vfork.

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

            --vfork-vm
                   deprecated since stress-ng V0.14.03

       vfork processes as much as possible stressor
            --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.

            --vforkmany-vm
                   enable  detrimental  performance  virtual  memory  advice  using  madvise on all pages of the
                   vforked process. Where possible this will try to set every page in the new process with using
                   madvise MADV_MERGEABLE, MADV_WILLNEED, MADV_HUGEPAGE and MADV_RANDOM flags. Linux only.

            --vforkmany-vm-bytes N
                   mmap N bytes per vm worker for more memory pressure, the default is 64MB. This  also  enables
                   the  --vforkmany-vm  option.   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.

       Memory allocate and write stressor
            -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-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 method
                   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.
                   cache-lines   work through memory in 64 byte cache sized steps  writing  a  single  byte  per
                                 cache line. Once the write is complete, the memory is read to verify the values
                                 are written correctly.
                   cache-stripe  work through memory in 64 byte cache sized chunks, writing in ascending address
                                 order on even offsets and descending address order on odd offsets.
                   checkboard    work  through  memory  writing alternative zero/one bit values into memory in a
                                 mixed checkerboard pattern. Memory is swapped around to  ensure  every  bit  is
                                 read, bit flipped and re-written and then re-read for verification.
                   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.
                   fwdrev        write to even addressed bytes in a forward direction and odd addressed bytes in
                                 reverse direction. rhe contents are sanity checked once all the addresses  have
                                 been written to.
                   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.
                   grayflip      fill  memory  with  adjacent bytes of gray code and inverted gray code pairs to
                                 change as many bits at a time between adjacent bytes and check if these 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.
                   lfsr32        fill  memory  with  values generated from a 32 bit Galois linear feedback shift
                                 register using the polynomial  x↑32 + x↑31 + x↑29 + x +  1.  This  generates  a
                                 ring of  2↑32 - 1 unique values (all 32 bit values except for 0).
                   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  ×  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.
                   mscan         fill  each  bit in each byte with 1s then check these are set, fill each bit in
                                 each byte with 0s and check these are clear.
                   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 to memory using 32 × 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.
                   write64nt     sequentially write to memory using 32 × 64 bit  non-temporal  writes  per  bogo
                                 loop.   Each  loop equates to one bogo operation.  This exercises cacheless raw
                                 memory writes and is only available on x86 sse2 capable systems built with  gcc
                                 and  clang  compilers.   Note  that memory writes are not checked at the end of
                                 each test iteration.
                   write1024v    sequentially write to memory using 1 × 1024 bit  vector  write  per  bogo  loop
                                 (only  available  if the compiler supports vector types).  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.
                   wrrd128nt     write to memory in 128 bit chunks  using  non-temporal  writes  (bypassing  the
                                 cache).   Each chunk is written 4 times to hammer the memory. Then check to see
                                 if the data is correct using non-temporal reads if they are available or normal
                                 memory reads if not. Only available with processors that  provide  non-temporal
                                 128 bit writes.
                   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-ops N
                   stop vm workers after N bogo operations.

            --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).

       Virtual memory addressing stressor
            --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-method method
                   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.
                   bitposn  iteratively write to memory in powers of 2 strides of max_stride to 1 and then  read
                            check  memory  in  powers  of 2 strides 1 to max_stride where max_stride is half the
                            size of the memory mapped region. All bit positions of the memory address space  are
                            bit flipped in the striding.
                   dec      work through the address range backwards sequentially, byte by byte.
                   decinv   like dec, but with all the relevant address bits inverted.
                   flip     address  memory using gray coded addresses and their inverse to flip as many address
                            bits per write/read operation
                   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.
                   inc      work through the address range forwards sequentially, byte by byte.
                   incinv   like inc, but with all the relevant address bits inverted.
                   pwr2     work through memory addresses in steps of powers of two.
                   pwr2inv  like pwr2, but with the all relevant address bits inverted.
                   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.

            --vm-addr-mlock
                   attempt to mlock pages into memory causing more memory  pressure  by  preventing  pages  from
                   swapped out.

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

       Memory transfer between parent and child processes stressor (Linux)
            --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-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-rw-ops N
                   stop vm-rw workers after N memory read/writes.

       Memory unmap from a child process stressor
            --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.

       Vmsplice stressor (Linux)
            --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-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.

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

       Virtual Memory Area (VMA) stressor
            --vma N
                   start  M  workers  that  create  pthreads  to  mmap,  munmap, mlock, munlock, madvise, msync,
                   mprotect, mincore and access 16 pages in a randomly selected virtual  memory  address  space.
                   This  is  designed  to  trip  races  on VMA page modifications.  Every 15 seconds a different
                   virtual address space is randonly chosen.

            --vma-ops N
                   stop the vma stressors after N successful memory mappings.

       Vector neural network instructions stressor
            --vnni N
                   start N workers that exercise vector neural network instructions (VNNI) used in convolutional
                   neural network loops. A 256 byte vector is operated upon using 8 bit  multiply  with  16  bit
                   summation, 16 bit multiply and 32 bit summation, and 8 bit summation. When processor features
                   allow,  these operations using 512, 256 and 128 bit vector operations. Generic non-vectorized
                   code variants also provided (which may be vectorized by more advanced optimising compilers).

            --vnni-intrinsic
                   just use the vnni methods that use intrinsic VNNI instructions and ignore  the  generic  non-
                   vectorized methods.

            --vnni-method N
                   select the VNNI method to be exercised, may be one of:
                   Method       Description
                   all          exercise all the following VNNI methods
                   vpaddb512    8  bit  vector  addition using 512 bit vector operations on 64 × 8 bit integers,
                                (x86 vpaddb)
                   vpaddb256    8 bit vector addition using 256 bit vector operations on 32 ×  8  bit  integers,
                                (x86 vpaddb)
                   vpaddb128    8  bit  vector addition using 128 bit vectors operations on 32 × 8 bit integers,
                                (x86 vpaddb)
                   vpaddb       8 bit vector addition using 8 bit sequential addition (may be vectorized by  the
                                compiler)
                   vpdpbusd512  8  bit  vector multiplication of unsigned and signed 8 bit values followed by 16
                                bit summation using 512 bit vector operations on  64  ×  8  bit  integers,  (x86
                                vpdpbusd)
                   vpdpbusd256  8  bit  vector multiplication of unsigned and signed 8 bit values followed by 16
                                bit summation using 256 bit vector operations on  32  ×  8  bit  integers,  (x86
                                vpdpbusd)
                   vpdpbusd128  8  bit  vector multiplication of unsigned and signed 8 bit values followed by 16
                                bit summation using 128 bit vector operations on  32  ×  8  bit  integers,  (x86
                                vpdpbusd)
                   vpdpbusd     8  bit  vector multiplication of unsigned and signed 8 bit values followed by 16
                                bit summation using sequential operations (may be vectorized by the compiler)
                   vpdpwssd512  16 bit vector multiplication of unsigned and signed 16 bit values followed by 32
                                bit summation using 512 bit vector operations on  64  ×  8  bit  integers,  (x86
                                vpdpwssd)
                   vpdpwssd256  16 bit vector multiplication of unsigned and signed 16 bit values followed by 32
                                bit  summation  using  256  bit  vector  operations on 64 × 8 bit integers, (x86
                                vpdpwssd)
                   vpdpwssd128  16 bit vector multiplication of unsigned and signed 16 bit values followed by 32
                                bit summation using 128 bit vector operations on  64  ×  8  bit  integers,  (x86
                                vpdpwssd)
                   vpdpwssd     16 bit vector multiplication of unsigned and signed 16 bit values followed by 32
                                bit summation using sequential operations (may be vectorized by the compiler)

            --vnni-ops N
                   stop  after  N  bogo VNNI computation operations. 1 bogo-op is equivalent to 1024 convolution
                   loops operating on 256 bytes of data.

       Pausing and resuming threads stressor
            --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.

       CPU wait instruction stressor
            --waitcpu N
                   start N workers that exercise processor wait instructions. For x86 these  are  pause,  tpause
                   and  umwait  (when  available)  and  nop.  For  ARM  the yield instruction is used. For other
                   architectures currently nop instructions are used.

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

       Watchdog stressor
            --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.

       Libc wide characterstring function stressor
            --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.

       scheduler workload stressor
            --workload N
                   start  N  workers  that  exercise the scheduler with items of work that are started at random
                   times with random sleep delays between work items. By default a 100,000 microsecond slice  of
                   time  has  100  work  items  that  start  at random times during the slice. The work items by
                   default run for a quanta of 1000 microseconds scaled by the percentage work load (default  of
                   30%).  For a slice of S microseconds and a work item quanta duration of Q microseconds, S / Q
                   work items are executed per slice. For a work load of L percent, the run time per item is the
                   quanta  Q × L / 100 microseconds.  The --workload-hreads option allows work items to be taken
                   from a queue and run concurrently if the scheduling run times overlap.
                   If a work item is already running when a new work item is scheduled to run then the new  work
                   item  is  delayed and starts directly after the completion of the currently running work item
                   when running with the default  of  zero  worker  threads.   This  emulates  bursty  scheduled
                   compute,  such  as  handling  input  packets  where  one  may have lots of work items bunched
                   together or with random unpredictable delays between work items.

            --workload-load L
                   specify the percentage run time load of each  work  item  with  respect  to  the  run  quanta
                   duration. Essentially the run duration of each work item is the quanta duration Q × L / 100.

            --workload-method method
                   select the workload method. Each quanta of execution time is consumed using a tight spin-loop
                   executing a workload method. The available methods are described as follows:
                   Method  Description
                   all                  randomly select any one of all the following methods:
                   fma                  perform  multiply-add  operations,  on  modern  processors  these may be
                                        compiled into fused-multiply-add instructions.
                   getpid               get the stressor's PID via getpid(2).
                   time                 get the current time via time(2).
                   inc64                increment a 64 bit integer.
                   memmove              copy (move) a 1MB buffer using memmove(3).
                   memread              read from a 1MB buffer using fast memory reads.
                   memset               write to a 1MB buffer using memset(3).
                   mcw64                compute 64 bit random numbers using a mwc random generator.
                   nop                  waste cycles using no-op instructions.
                   pause                stop execution using CPU  pause/yield  or  memory  barrier  instructions
                                        where available.
                   random               a  random  mix of all the workload methods, changing the workload method
                                        on every spin-loop.
                   sqrt                 perform double  precision  floating  point  sqrt(3)  and  hypot(3)  math
                                        operations.

            --workload-sched [ batch | deadline | idle | fifo | other | rr ]
                   select scheduling policy. Note that fifo and rr require root privilege to set.

            --workload-slice-us S
                   specify  the  duration  of  each  scheduling  slice  in  microseconds. The default is 100,000
                   microseconds (0.1 seconds).

            --workload-quanta-us Q
                   specify the duration of each work item in microseconds. The default is 1000  microseconds  (1
                   millisecond).

            --workload-threads N
                   use N process threads to take scheduler work items of a workqueue and run the work item. When
                   N  is  0  (default), no threads are used and the work items are run back-to-back sequentially
                   without using work queue. Using  more  than  2  threads  allows  work  items  to  be  handled
                   concurrently if enough idle processors are available.

            --workload-dist [ cluster | even | poisson | random1 | random2 | random3 ]
                   specify  the scheduling distribution of work items, the default is cluster.  The distribution
                   methods are described as follows:
                   Method   Description
                   cluster  cluster 2/3 of the start times to try to start at the random time  during  the  time
                            slice,  with the other 1/3 of start times evenly randomly distributed using a single
                            random variable. The clustered start times causes a burst of items to  be  scheduled
                            in a bunch with no delays between each clustered work item.
                   even     evenly distribute scheduling start times across the workload slice
                   poisson  generate scheduling events that occur individually at random moments, but which tend
                            to occur at an average rate (known as a Poisson process).
                   random1  evenly randomly distribute scheduling start times using a single random variable.
                   random2  randomly distribute scheduling start times using a sum of two random variables, much
                            like throwing 2 dice.
                   random3  randomly  distribute  scheduling  start times using a sum of three random variables,
                            much like throwing 3 dice.

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

       x86 cpuid stressor
            --x86cpuid N
                   start N workers that exercise the x86 cpuid instruction with 18 different leaf types.

            --x86cpuid-ops N
                   stop after N iterations that exercise the different cpuid leaf types.

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

            --x86syscall-func F
                   Instead of exercising the 6 syscall system calls, just  call  the  syscall  function  F.  The
                   function F must be one of getcpu, geteuid, getgid, getpid, gettimeofday or time.

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

       Extended file attributes stressor
            --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.

       Yield scheduling stressor
            -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.

       /dev/zero stressor
            --zero N
                   start  N  workers  that  exercise  /dev/zero  with  reads, lseeks, ioctls and mmaps. For just
                   /dev/zero read benchmarking use the --zero-read option.

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

            --zero-read
                   just read /dev/zero with 4K reads with no additional exercising on /dev/zero.

       Zlib stressor
            --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-level L
                   specify the compression level (0..9), where 0 = no compression, 1 = fastest compression and 9
                   = best compression.

            --zlib-mem-level L
                   specify the reserved compression state memory for zlib.  Default is 8.
                   Value
                     1    minimum memory usage.
                     9    maximum memory usage.

            --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.
                   gcr          random  values  as  4  ×  4 bit data turned into 4 × 5 bit group coded recording
                                (GCR) patterns.  Each 5 bit GCR value starts or ends with at most one  zero  bit
                                so that concatenated GCR codes have no more than two zero bits in a row.
                   gray         16 bit gray codes generated from an incrementing counter.
                   inc16        16 bit incrementing values starting from a random 16 bit value.
                   latin        Random latin sentences from a sample of Lorem Ipsum text.
                   lehmer       Fast random values generated using Lehmer's generator using a 128 bit multiply.
                   lfsr32       Values  generated  from a 32 bit Galois linear feedback shift register using the
                                polynomial  x↑32 + x↑31 + x↑29 + x + 1. This generates  a  ring  of   2↑32  -  1
                                unique values (all 32 bit values except for 0).
                   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.
                   rdrand       generate random data using rdrand instruction (x86) or use 64  bit  mwc  psuedo-
                                random number generator for non-x86 systems.
                   ror32        generate  a  32  bit  random  value, rotate it right 0 to 7 places and store the
                                rotated value for each of the rotations.
                   text         random ASCII text.
                   utf8         random 8 bit data encoded to UTF-8.
                   zero         all zeros, compresses very easily.

            --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-strategy S
                   specifies the strategy to use when deflating data. This  is  used  to  tune  the  compression
                   algorithm. Default is 0.
                   Value
                     0    used for normal data (Z_DEFAULT_STRATEGY).
                     1    for data generated by a filter or predictor (Z_FILTERED)
                     2    forces huffman encoding (Z_HUFFMAN_ONLY).
                     3    Limit match distances to one run-length-encoding (Z_RLE).
                     4    prevents dynamic huffman codes (Z_FIXED).

            --zlib-stream-bytes S
                   specify  the amount of bytes to deflate until deflate should finish the block and return with
                   Z_STREAM_END. One can specify the size in units of Bytes, KBytes, MBytes and GBytes using the
                   suffix b, k, m or g.  Default is 0 which creates and endless stream until stressor ends.
                   Value
                     0    creates an endless deflate stream until stressor stops.
                     n    creates an stream of n bytes over and over again.
                          Each block will be closed with Z_STREAM_END.

            --zlib-window-bits W
                   specify the window bits used to specify the history buffer size. The value  is  specified  as
                   the base two logarithm of the buffer size (e.g. value 9 is 2↑9 = 512 bytes). Default is 15.
                    Value
                   -8-(-15)  raw deflate format.
                     8-15    zlib format.
                    24-31    gzip format.
                    40-47    inflate auto format detection using zlib deflate format.

       Zombie processes stressor
            --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-max N
                   try  to  create as many as N zombie processes. This may not be reached if the system limit is
                   less than N.

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

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 --with cpu,matrix,vecmath,fp --seq 8 -t 1m

              run 8 instances of cpu, matrix, vecmath and fp stressors sequentially one  after  another,  for  1
              minute per stressor.

       stress-ng --with cpu,matrix,vecmath,fp --permute 5 -t 10s

              run  permutations  of  5 instances of cpu, matrix, vecmath and fp stressors sequentially one after
              another, for 10 seconds per permutation mix.

       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 -1 --cpu-method all -t 1h --cpu-load 90

              run cpu stressors on all online CPUs working through all the available CPU stressors for  1  hour,
              loading the CPUs at 90% load capacity.

       stress-ng --cpu 0 --cpu-method all -t 20m

              run  cpu  stressors  on all configured CPUs working through all the available CPU stressors for 20
              minutes

       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 -1 -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 -1 --maximize --aggressive

              run  all  the  stressors (1 instance of each per online 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.
           7        The bogo ops metrics maybe untrustworthy. This is most likely to occur when a stress test is
                    terminated during the update of a bogo-ops counter such as when it has been  OOM  killed.  A
                    less likely reason is that the counter ready indicator has been corrupted.

BUGS

       File bug reports at: https://github.com/ColinIanKing/stress-ng/issues

SEE ALSO

       cpuburn(1), perf(1), stress(1), taskset(1)
       https://github.com/ColinIanKing/stress-ng/blob/master/README.md

AUTHOR

       stress-ng  was  written  by Colin Ian King <colin.i.king@gmail.com> and is a clean room re-implementation
       and extension of the original stress tool by Amos Waterland. Thanks also  to  the  many  contributors  to
       stress-ng. The README.md file in the source contains a full list of the contributors.

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.

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

COPYRIGHT

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

                                                26 February 2024                                    STRESS-NG(1)