Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
STRESS-NG(1)		     General Commands Manual		    STRESS-NG(1)

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 physical subsystems of a computer as well as oper-
     ating system kernel interfaces.  stress-ng also has a  wide  range  of  CPU
     specific  stress tests that exercise floating point, integer, bit manipula-
     tion, cache, vector instructions 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  diffi-
     cult to stop.

     stress-ng can also measure test throughput rates; this can be useful to ob-
     serve  performance  changes  across  different operating system releases or
     types of hardware. However, it has never been intended to be used as a pre-
     cise 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 al-
     low  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. Specifying the number as a	percentage  will
     select  the  percentage of configured CPUs (truncated down to nearest whole
     number).

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.

     -A, --aggressive
	    enables more file, cache and memory aggressive options  as	well  as
	    forcing  processes to change CPU affinity very frequently. This will
	    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  in-
	    stances.   If  N  is zero, then the number of configured CPUs in the
	    system is used. Specifying N as a percentage will  select  the  per-
	    centage of configured CPUs (truncated down to nearest whole number).

OPTIONS
     --autogroup
	    with  this	option	any successful nice(2) call will attempt to also
	    set the /proc/self/autogroup setting to the niceness  level  of  the
	    calling  process.  This is a Linux only option for the CFS scheduler
	    when CONFIG_SCHED_AUTOGROUP is enabled, see sched(7)  for  more  de-
	    tails on how this affects interactive scheduling behaviour.

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

     --buildinfo
	    report build information such as build date and time, compiler used,
	    compilation and linker flags, standard C version used.

     --c-states
	    report CPU C-state residencies.

     --change-cpu
	    this forces child processes of some stressors to change to a differ-
	    ent  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: compute, cpu,  cpu-cache,  de-
	    vice, fp, gpu, interrupt, integer, ipc, io, filesystem, memory, net-
	    work,  os,	pipe,  scheduler,  search,  signal, sort, vector 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',  `memory'  and `search' classes as it exercises
	    all these four.  Selecting a specific class will run all the  stres-
	    sors  that	fall into that class only when run with the --sequential
	    option.

	    Specifying a name followed by an escaped 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 ac-
	    curate 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  run-
	    ning stressors, so total count for all stressors is over accounted.

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

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

     -I S, --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
	    Rd/s	     reads per second
	    Wr/s	     writes per second

     -j jobfile, --job jobfile
	    run  stressors  using  a jobfile.  The jobfile is essentially a file
	    containing stress-ng options (without the leading --) with	one  op-
	    tion  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    # 128 MB available memory shared by 2 vm stressors
	    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.

     -K, --klog-check
	    check the kernel log for kernel error and warning messages	and  re-
	    port  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.

     --limit-as
	    set stressor process's maximum size of the virtual	memory	(address
	    space),  see  rlimit(2) RLIMIT_AS. The parameter can be specified as
	    an absolute number of bytes (e.g. 1G for 1 GB) or  a  percentage  of
	    the current free memory, e.g. 20%

     --limit-data
	    set stressor process's maximum size of the data segment (initialized
	    data,  uninitialized data, and heap), see rlimit(2) RLIMIT_DATA. The
	    parameter can be specified as an absolute number of bytes (e.g. 128M
	    for 128 MB) or a percentage of the current free memory, e.g. 5%

     --limit-stack
	    set stressor process's maximum size  of  the  stack,  see  rlimit(2)
	    RLIMIT_STACK.  The	parameter can be specified as an absolute number
	    of bytes (e.g. 2M for 2 MB) or a percentage of the current free mem-
	    ory, e.g. 1%

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

     -L filename, --log-file filename
	    write messages to the specified log file, this does not replace  the
	    output from stdout, but creates a logged copy of it in the specified
	    file.  Lines  of output are automatically fsync'd to the log file to
	    try to reduce data loss.

     --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 with many stressors are
	    running, for example when testing CPU scaling with many processes on
	    many CPUs. This option disables log message locking.

     --make-it-fail
	    enable fault injection on stressor processes (Linux only,  needs  to
	    run  with  root permission to write to /proc/self/make-it-fail). The
	    appropriate Linux kernel /sys/kernel/debug fault injection sysfs in-
	    terfaces need to be set inconjunction when using this option and the
	    kernel requires fault injection to be enabled.

     --maximize
	    overrides the default stressor settings and instead  sets  these  to
	    the maximum settings allowed.  These defaults can always be overrid-
	    den 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

     -M, --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  ob-
	    serving 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 num-
					ber of these stressors being run.
	    usr time (secs)		total user time  (in  seconds)	consumed
					running  all the instances of the stres-
					sor.
	    sys time (secs)		total system time (in seconds)	consumed
					running  all the instances of the stres-
					sor.
	    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 "ap-
					parent" 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 ac-
					tual time execution time of the stressor
					across	all  the  processors.  Generally
					this will decrease as one adds more con-
					current 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 fig-
					ure 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 overrid-
	    den 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 dis-
	    ables 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 stres-
	    sor 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 2 MB) or a percentage of the current free mem-
	    ory, e.g. 5% (the default is 2.5%).  This option implicitly  enables
	    --oom-avoid.   The option allows the system to have enough free mem-
	    ory to try to avoid the out-of-memory killer terminating processes.

     --oom-no-child
	    Disable running stressor as a  child  process  with  a  parent  that
	    checks  for  Out-of-Memory	(OOM)  issues.	This  reduces additional
	    child process overhead but indirectly also	disables  respawning  of
	    OOM'd  stressors, OOM detection and may lead to bogo-op verification
	    errors.

     -O, --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 op-
	    tion 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  de-
	    termine  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.

     --pause T
	    pause  T  seconds between each stressor. This is useful for allowing
	    systems to cool down between each stressor	invocation.  By  default
	    this option is disabled.

     --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 val-
	    ues".  Note that with Linux 4.7 one needs to have CAP_SYS_ADMIN  ca-
	    pabilities	for  this  option  to  work,  or  adjust  /proc/sys/ker-
	    nel/perf_event_paranoid to below 2 to use this  without  CAP_SYS_AD-
	    MIN.

     --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.
	    Specifying	N  as a percentage will select the percentage of config-
	    ured CPUs (truncated down to nearest whole number).  This will  per-
	    form  multiple runs with all the permutations of the stressors up to
	    2^20 permumtations. 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 --sequen-
	    tial 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 config-
	    ured processors is used for N.

     --randprocname
	    enable random stressor process name generation. This  scrambles  the
	    stressor  process names to try to confuse process monitoring and po-
	    tential smart process scheduling that uses	process  names	to  make
	    system tuning changes.

     --rapl
	    Report the Running Average Power Limit (RAPL) energy measurements of
	    stressor  instances. Currently Linux and x86 only, requires root ac-
	    cess rights to read RAPL kernel interfaces. Note that the  RAPL  do-
	    mains supported may vary between devices.

     --raplstat S
	    every  S  seconds show RAPL energy measurements. Currently Linux and
	    x86 only, requires root access rights to  read  RAPL  kernel  inter-
	    faces.

     --resctrl p1[,p2,..,pn],s1[,s2..,sm]
	    specify  resource control cache partitions and apply to stressor in-
	    stances (ARM MPAM only)

	    p1..pn are a list of 1 to n cache  partitioning  definitions,  where
	    p1..pn are of the form:

	    pN=node[:cachelevel]:hexbitmask:bandwidth

	    where:
	    * pN is the partition definition name where N is a number, e.g. p1
	    * node specifies cluster node of CPUs to use
	    * cachelevel specifies the cache level to use (optional, the default
	    is the MPAM default L3 level)
	    *  hexbitmask  is a hexadecimal bitmask specifying cache portions to
	    use
	    * bandwidth is the bandwidth to use, for MPAM this is %  utilization
	    1..100

	    for example: p1=1:L3:fff:50

	    s1..sm  are  a list of 1 to m of stressor instances that apply these
	    cache partitioning settings of the form:

	    stressor-name=stressor-instances@pN

	    where:
	    * stressor-name is the name of a stressor
	    * stressor-instances is a list of instances where cache partitioning
	    setting pN is applied.
	    * pN specifies the cache partition pN

	    the following example applies resctrl partition  p1  to  the  matrix
	    stressor on instances 0, 1, 5, 8, 12, 13 and 14:

	    matrix=0-1,5,8,12-14@p1

	    The  following  example  specifies	two  resctrl partitions, p1 uses
	    cluster node 1, L3 cache, uses the first 3 cache portions  and  sets
	    this  to  10%  utilisation. p2 uses cluaser 1, the default L3 cache,
	    all cache portions except the first 32 and sets this to 90% utilisa-
	    tion.  The 3 stream stressor instances are run where stream stressor
	    instances 0 to 1 use p1, and instance 2 uses p2.

	    sudo stress-ng --resctrl p1=1:l3:7:10,p2=1:ff8:90,\
	    stream=0-1@p1,stream=2@p2 --stream 3

	    Note that invalid resctrl parameters applied to  the  resctrl  sysfs
	    will  generate EINVAL errors. They are not sanity checked during op-
	    tion parsing as these can only be determined at the  time  they  are
	    applied.

     --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  sched-
	    uler  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.  Specifying N as a percentage
	    will select the percentage of configured  CPUs  (truncated	down  to
	    nearest whole number).

OPTIONS
     Use the --timeout option to specify the duration to run each stressor.

     --skip-silent
	    silence  messages  that  report that a stressor has been skipped be-
	    cause 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 termina-
	    tion 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 behav-
	    iour.

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

     --stressor-time
	    (requires  -v  flag)  log as debug the start and finish run times of
	    each stressor instance, logged in the format:  stressor  [start|fin-
	    ish]  HR:MN:SS.HS YYYY:MM:DD where HR is hours, MN is minutes, SS is
	    seconds, HS is hundredths of seconds, YYYY is years, MM  is  months,
	    DD is day of the month. If localtime(2) is not supported the time is
	    logged as seconds past the Epoch.

     --stressors
	    output the names of the available stressors.

     --sync-start
	    synchromize  start,  wait  for stressors to be created and start all
	    stressors once they are all in a ready to run state.

     --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  (for  systems  that  provide
	    sched_setaffinity(2)). 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 or the following key-
	    words:

	    Keyword   Description
	    even      even numbered CPUs
	    odd       odd numbered CPUs
	    all       all CPUs
	    random    random selection of CPUs
	    packageN  CPUs  in	package  N  as	specified  by  /sys/devices/sys-
		      tem/cpu/cpu*/topology/package_cpus_list
	    clusterN  CPUs  in	package  N  as	specified  by  /sys/devices/sys-
		      tem/cpu/cpu*/topology/cluster_cpus_list
	    dieN      CPUs  in	package  N  as	specified  by  /sys/devices/sys-
		      tem/cpu/cpu*/topology/die_cpus_list
	    coreN     CPUs  in	package  N  as	specified  by  /sys/devices/sys-
		      tem/cpu/cpu*/topology/core_cpus_list

     --taskset-random
	    randomly change stressor CPU affinity at five times the  clock  tick
	    rate  (if  defined)  or at 400Hz while waiting for stressors to com-
	    plete.

     --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 tempera-
	    tures 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-in as many pages in
	    the processes as possible.	It  also  periodically	drops  the  page
	    cache,  frees  reclaimable slab objects and pagecache as well as as-
	    sign pages to different NUMA nodes.  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  re-
	    moving  hundreds of test file) it may take a while to finally termi-
	    nate.  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 sec-
	    ond 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 in-
	    crease wakeups.  A value of 0 for the timer-slack will set the  sys-
	    tem default of 50000 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 with the `fail' tag failures that are de-
	    tected.

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

     --vmstat-units [ k | m | g | t | p | e ]
	    specify vmstat memory units in terms  of  kilobytes  (k),  megabytes
	    (m),  gigabytes  (g),  terabytes (t), petabytes (p) or exabytes (e).
	    Default is in kilobytes.

     -w, --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, --sequen-
	    tial, --all and --random options. Example, run the cpu class  stres-
	    sors 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 `file-
	    name'.

     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 facces-
		 sat(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  per-
		 mission settings on user, group and other tags.

	  --acl-rand
		 randomize  (by  shuffling)  the order of the ACL access permis-
		 sions 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   (for  systems  that  provide  sched_setaffinity(2)).
		 Rapidly switching CPU affinity can contribute to poor cache be-
		 haviour 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 sequen-
		 tially.

	  --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 hash-
		 ing and encrypting various sized random  messages.  This  exer-
		 cises	the  available	hashes, ciphers, rng and aead crypto en-
		 gines 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 han-
		 dling I/O requests.  By default, each worker process will  han-
		 dle 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 4 K random asynchronous I/O
		 writes  using	the  Linux aio system calls io_setup(2), io_sub-
		 mit(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 ran-
		 dom 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 in-
		 terface. Currently one needs root permission to run  this  par-
		 ticular  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. Note that 32 bit systems  do
		 not currently exercise 64 bit integers.

	  --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 randomly selected nefari-
		 ous 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
		 ioctl(2)  calls  (using _IOR) and write ioctls (using _IOR with
		 PROT_NONE mapped pages) across the device drivers.  This  exer-
		 cises 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 decre-
				ment command type by 3

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

     Bessel functions
	  --besselmath N
		 start N workers that exercise various	Bessel	functions.   Re-
		 sults	are  sanity  checked to ensure no variation occurs after
		 each round of 10000 computations.

	  --besselmath-ops N
		 stop after N bessel bogo-operation loops.

	  --besselmath-method method
		 specify a Bessel function to exercise. Available bessel  stress
		 methods are described as follows:

		 Method  Description
		 all	 iterate over all the below Bessel functions methods
		 j0	 double  precision  Bessel function of the first kind of
			 order 0
		 j1	 double precision Bessel function of the first	kind  of
			 order 1
		 jn	 double  precision  Bessel function of the first kind of
			 order n (where n = 5 for this test)
		 j0f	 float precision Bessel function of the  first	kind  of
			 order 0
		 j1f	 float	precision  Bessel  function of the first kind of
			 order 1
		 jnf	 float precision Bessel function of the  first	kind  of
			 order n (where n = 5 for this test)
		 j0l	 long double precision Bessel function of the first kind
			 of order 0
		 j1l	 long double precision Bessel function of the first kind
			 of order 1
		 jnl	 long double precision Bessel function of the first kind
			 of order n (where n = 5 for this test)
		 y0	 double  precision Bessel function of the second kind of
			 order 0
		 y1	 youble precision Bessel function of the second kind  of
			 order 1
		 yn	 double  precision Bessel function of the second kind of
			 order n (where n = 5 for this test)
		 y0f	 float precision Bessel function of the second	kind  of
			 order 0
		 y1f	 float	precision  Bessel function of the second kind of
			 order 1
		 ynf	 float precision Bessel function of the second	kind  of
			 order n (where n = 5 for this test)
		 y0l	 long  double  precision  Bessel  function of the second
			 kind of order 0
		 y1l	 long double precision Bessel  function  of  the  second
			 kind of order 1
		 ynl	 long  double  precision  Bessel  function of the second
			 kind of order n (where n = 5 for this test)

     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 4 K to 64 MB. Default is 64 K.

	  --bigheap-mlock
		 attempt  to mlock(2) 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(2) 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 x 1024).

     Bit Manipulation Operations
	  --bitops N
		 start	N workers that perform various calculations using 32 bit
		 integer manipulation operations. Many of these are derived from
		 the Standford "Bit Twiddling Hacks" (Sean  Eron  Anderson)  and
		 Hacker's Delight (Henry S. Warren, Jr.)

	  --bitops-ops N
		 stop after N bitop operations.

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

		 Method     Description
		 all	    iterate over all the below bitops stress methods.
		 abs	    calculate  the absolute value of a 32 bit signed in-
			    teger. Computed two different ways, one with masking
			    and addition, one with masking and subtraction.
		 countbits  count the number of bits set to 1 in a  32	bit  un-
			    signed  integer.  Computed	six  different ways, two
			    with bit counting, one with 64  bit  multiplication,
			    one  with parallelised masking and shifting, one us-
			    ing triple masking and shifts, one using  a  builtin
			    popcount function.
		 clz	    count  the	number	of leading zero bits in a 32 bit
			    unsigned integer. Computed four different ways,  one
			    with bit counting, one with log2 shifting, one using
			    a builtin popcount function, one using a builtin clz
			    function,
		 ctz	    count  the	number of trailing zero bits in a 32 bit
			    unsigned integer. Computed five different ways,  one
			    with  bit  cointing, one using masking and shifting,
			    one using the masking and  ternary	operator  Gaudet
			    method,  one using a builtin clz function, one using
			    a builtin popcount function.
		 cmp	    compare two 32 bit unsigned integers with comparison
			    results of -1, 0, 1 for less than, equal or  greater
			    than. Computed 3 ways, one using simple comparisons,
			    two using comparisons and subtraction.
		 log2	    calculate  log  base 2 of a 32 bit unsigned integer.
			    Computed four ways, one using bit counting, one  us-
			    ing  masking  and  shifting and branching, one using
			    masking and shifting with no  branching,  one  using
			    shifting and bitwise or'ing.
		 max	    find  the  maximum	of  two 32 bit unsigned integers
			    without a temporary variable. Computed two ways, one
			    using xor'ing and masking, one using the ternary op-
			    erator.
		 min	    find the minimum of two  32  bit  unsigned	integers
			    without a temporary variable. Computed two ways, one
			    using xor'ing and masking, one using the ternary op-
			    erator.
		 parity     compute  the  parity  of  a 32 bit unsigned integer.
			    Computed five ways, two using bit counting, one  us-
			    ing  multiplication, shifting and xor'ing, one using
			    shifting and xor'ing, one  using  a  builtin  parity
			    function.
		 pwr2	    determine if a 32 bit unsigned integer is a power of
			    2.	Computed  using  bit  counting	and with mask of
			    value - 1.
		 rnddnpwr2  find the nearest power of 2 of a 32 bit unsigned in-
			    teger, rounded down. Computed three ways, one  using
			    bit  counting  and	shifting, one using shifting and
			    or'ing, one using a shift and the builtin ctz  func-
			    tion.
		 rnduppwr2  find the nearest power of 2 of a 32 bit unsigned in-
			    teger,  rounded  up.  Computed three ways, one using
			    bit counting and shifting, one  using  shifting  and
			    or'ing,  one using a shift and the builtin ctz func-
			    tion.
		 reverse    reverse the bits of a 32 bit unsigned integer.  Com-
			    puted six ways, one using bit shifting loop, one us-
			    ing  bit  shitting	and  mask loop, one using paral-
			    lelised masking and shifting, one using 64 bit  mul-
			    tiplication,  one  using  32 bit multiplication, one
			    using the builtin bitreverse32 function.
		 sign	    calculate the sign of a 32 bit signed integer.  Com-
			    puted  two	ways,  one  using a branchless less than
			    zero operator, one using sign bit shifting and nega-
			    tion.
		 swap	    swap two 32 bit signed integers without a  temporary
			    variable.  Computed  two ways, one using subtraction
			    and addition, one using xor'ing.
		 zerobyte   determine of a 32 bit unsigned integer contains  one
			    or	more zero bytes. Computed two ways, one with per
			    byte zero checking, one using bit masking.

     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 x 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  moni-
		 toring 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(2) 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 dis-
		 ables 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 in-
		 tegers using bsearch(3). By default, there are  65536	elements
		 in  the  array.  This is a useful method to exercise random ac-
		 cess of memory and processor cache.

	  --bsearch-method [ bsearch-libc | bsearch-nonlibc | ternary ]
		 select either the libc implementation of bsearch or a	slightly
		 optimized non-libc implementation of bsearch or a 3-day ternary
		 search.  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 1 K to 64 M.

     bubblesort stressor
	  --bubblesort N
		 start N workers that sort 32 bit integers using bubblesort.

	  --bubblesort-method [ bubblesort-fast | bubblesort-naive ]
		 select either a standard optimized implementation of bubblesort
		 or a naive unoptimized implementation of  bubblesort.	The  de-
		 fault is the standard optimized version.

	  --bubblesort-ops N
		 stop bubblesort stress workers after N bogo bubblesorts.

	  --bubblesort-size N
		 specify number of 32 bit integers to sort, default is 16384.

     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 intelli-
		 gently 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 stressor using the --matrix-3d-zyx
		 option.

	  --cache-cldemote
		 cache	line  demote (x86 only). This is a no-op for non-x86 ar-
		 chitectures 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 sup-
		 port 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-permute
		 permute  the  selected cache flags when exercising cache for an
		 improved  mix	of  cache  operations.	Recommend   also   using
		 --cache-enable-all with this option.

	  --cache-prefetch
		 force	read prefetch on read address on architectures that sup-
		 port prefetching.

	  --cache-prefetchw
		 force a redundant write prefetch on architectures that  support
		 write prefetching.

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

	  --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 hammering stessor
	  --cachehammer N
		 start N workers that exercise the cache with a  randomized  mix
		 of  memory  read/writes and where possible cache prefetches and
		 cache flushes to random addresses in three  memory  mapped  re-
		 gions, one of which is shared among all the cache stressors and
		 is  the size of the L3 cache, one is local to each instance and
		 is 4 times the L3 cache size and one is a single  page  mapping
		 that cannot be read or written.

	  --cachehammer-numa
		 periodically  assign  exercised pages to randomly selected NUMA
		 nodes. This is disabled for systems that do not support NUMA.

	  --cachehammer-ops N
		 stop after N cache hammer operations.

     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  will  run  1 or more processes to exercise bytes that
		 are next to each other. The number of	per  stressor  processes
		 run  will  be	scaled	so that at least all N bytes of a N byte
		 cache line are exercised.  The intent is  to  try  and  trigger
		 cacheline  corruption, stalls and misses with shared memory ac-
		 cesses.

	  --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  ex-
		 ercised 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 in-
			    crements.
		 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 spe-
			    cific byte in a cacheline and check for corruption.
		 copy	    copy an adjacent byte to a specific byte in a cache-
			    line.
		 inc	    increment and read back a specific byte in a  cache-
			    line 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 corrup-
			    tion.
		 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(2). This is intended to  be  inten-
		 tionally  racy and exercise a range of chattr attributes by en-
		 abling 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	directo-
		 ries, 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 re-
		 quires the CAP_SYS_ADMIN capability.

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

     Complex hyperbolic functions stressor
	  --chyperbolic N
		 start N workers that exercise complex sinh, cosh, and tanh libm
		 complex hyperbolic functions using complex float, complex  dou-
		 ble and complex long double floating point variants. Each func-
		 tion is exercised 10000 times per bogo-operation.

	  --chyperbolic-method function
		 specify  a  complex hyperbolic stress function. By default, all
		 the functions are exercised sequentially, however one can spec-
		 ify just one function to be used if  required.   Available  op-
		 tions are as follows:

		 Method   Description
		 all	  iterate  through  all  of the following complex hyper-
			  bolic functions
		 ccosh	  complex hyperbolic cosine (complex double precision)
		 ccoshf   complex hyperbolic cosine (complex float precision)
		 ccoshl   complex hyperbolic cosine (complex long double  preci-
			  sion)
		 csinh	  complex hyperbolic sine (complex double precision)
		 csinhf   complex hyperbolic sine (complex float precision)
		 csinhl   complex  hyperbolic  sine  (complex long double preci-
			  sion)
		 ctanh	  complex hyperbolic tangent (complex double precision)
		 ctanhf   complex hyperbolic tangent (complex float precision)
		 ctanhl   complex hyperbolic tangent (complex long double preci-
			  sion)

	  --chyperbolic-ops N
		 stop after N bogo-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 switch-
		 ing.

	  --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(2) system calls).  This will rapidly try to create a de-
		 fault	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  exer-
		 cise 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 exer-
		 cises rapid process context saving and restoring and  is  band-
		 width 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 exer-
		 cising 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  ac-
		 tual  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 cy-
		 cles. Use this option to specify the duration of  a  busy  time
		 slice.   A  negative value for S specifies the number of itera-
		 tions to run before idling the CPU (e.g. -30 invokes 30  itera-
		 tions	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 pas-
		 sive/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
				   For other recursive	methods,  refer  to  the
				   hanoi cpu stress method.
		 apery		   calculate Apery's constant <zeta>(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 se-
				   quence  starting  from  number  989345275647.
				   Where f(n) = n / 2 (for even n) and f(n) = 3n
				   + 1 (for odd n).
		 correlate	   perform  a  8192  x 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  x  768
				   random  image  from	8  bits down to 1 bit of
				   depth
		 div8		   50000 8 bit unsigned integer divisions
		 div16		   50000 16 bit unsigned integer divisions
		 div32		   50000 32 bit unsigned integer divisions
		 div64		   50000 64 bit unsigned integer divisions
		 div128 	   50000 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 naive 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
				   <gamma> 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  com-
				   puted 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. For	other  recursive
				   methods,  refer  to	the ackermann cpu stress
				   method.
		 hyperbolic	   compute  sinh(<theta>)  x   cosh(<theta>)   +
				   sinh(2<theta>)  +  cosh(3<theta>)  for float,
				   double and long double  hyperbolic  sine  and
				   cosine  functions  where <theta> = 0 to 2<pi>
				   in 1500 steps
		 idct		   8 x 8 IDCT (Inverse	Discrete  Cosine  Trans-
				   form).
		 int8		   1000 iterations of a mix of 8 bit integer op-
				   erations.
		 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 opera-
				   tions.
		 int32longdouble   1000 iterations of a mix of	32  bit  integer
				   and	long double precision floating point op-
				   erations.
		 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  opera-
				   tions.
		 int64longdouble   1000  iterations  of  a mix of 64 bit integer
				   and long double precision floating point  op-
				   erations.
		 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 opera-
				   tions (GCC only).
		 int128longdouble  1000 iterations of a mix of 128  bit  integer
				   and	long double precision floating point op-
				   erations (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 conver-
				   sions between int16, int32  and  int64  vari-
				   ables.
		 ipv4checksum	   compute  1024 rounds of the 16 bit ones' com-
				   plement 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  Xn+1
				   = r x  Xn x (1 - Xn) where r > ~ 3.56994567
		 longdouble	   1000  iterations of a mix of long double pre-
				   cision floating point operations.
		 loop		   simple empty loop.
		 matrixprod	   matrix product of two 128 x 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
				   <Omega>e^<Omega>  =	1 using efficient itera-
				   tion of <Omega>n+1 = (1 + <Omega>n)	/  (1  +
				   e^<Omega>n).
		 parity 	   compute parity using various methods from the
				   Standford  Bit  Twiddling Hacks.  Methods em-
				   ployed are: the naive way, the naive 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(3) function.
		 phi		   compute the Golden Ratio <phi> using series.
		 pi		   compute <pi> using  the  Srinivasa  Ramanujan
				   fast convergence algorithm.
		 prime		   find  the  first  10000 prime numbers using a
				   slightly optimised brute  force  naive  trial
				   division search.
		 psi		   compute  <psi> (the reciprocal Fibonacci con-
				   stant) 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 mul-
				   tiply-with-carry generators:
				    x(n) = 36969 x x(n - 1) + carry,
				    y(n) = 18000 x 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(<theta>)   x	cos(<theta>)   +
				   sin(2<theta>) + cos(3<theta>) for float, dou-
				   ble and long double sine and cosine functions
				   where <theta> = 0 to 2<pi> 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  <zeta>(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 refer-
		 ence Intel i5-8350U processor and hence the bogo-ops  normaliz-
		 ing  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 on-
		 line.	This Linux only stressor requires root privilege to per-
		 form this action. By default the first CPU (CPU 0) is never of-
		 flined 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.

     CPU affinity scheduler stressor
	  --cpu-sched N
		 start N workers that exercise the scheduler by moving processes
		 to different CPUs. Each worker starts 16  child  processes  and
		 repeatedly  moves  the processes to different CPUs and attempts
		 changes their scheduler policy using SCHED_OTHER,  SCHED_BATCH,
		 SCHED_IDLE,  SCHED_EXT, SCHED_DEADLINE, SCHED_RR and SCHED_FIFO
		 policies. The choice of CPU placement is based on  8  different
		 mechanisms  and  is  changed every second to mix process place-
		 ments on all the available CPUS. The child  processes	are  run
		 with  randomizied nice settings to exercise scheduler prioriti-
		 zation.

	  --cpu-sched-ops N
		 stop after N child process move attempts.

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

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

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

     Complex trigonometric functions stressor
	  --ctrig N
		 start N workers that exercise complex sin, complex cos and com-
		 plex tan libm trigonometric functions using complex float, com-
		 plex double and complex long double  floating	point  variants.
		 Each function is exercised 10000 times per bogo-operation.

	  --ctrig-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  complex	trigono-
			 metric functions
		 ccos	 complex cosine (complex double precision)
		 ccosf	 complex cosine (complex float precision)
		 ccosl	 complex cosine (complex long double precision)
		 csin	 complex sine (complex double precision)
		 csinf	 complex sine (complex float precision)
		 csinl	 complex sine (complex long double precision)
		 ctan	 complex tangent (complex double precision)
		 ctanf	 complex tangent (complex float precision)
		 ctanl	 complex tangent (complex long double precision)

     Cyclic stressor
	  --cyclic N
		 start N workers that exercise 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 la-
		 tency percentiles for the just the first  cyclic  stressor  in-
		 stance. One has to run this stressor with CAP_SYS_NICE capabil-
		 ity  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 [ batch | deadline | ext | fifo | idle| other | rr ]
		 specify  the  desired scheduling policy;  batch, deadline, ext,
		 fifo (first-in, first-out) idle, other 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  pres-
		 sure  on  init to do rapid child reaping.  The daemon processes
		 perform the usual mix of calls to turn into typical  UNIX  dae-
		 mons,	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 ex-
		 ist, 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  itera-
		 tion. 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 en-
		 try 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, re-
		 verse, 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-ran-
		 dom  pattern  and random order will randomly select one of for-
		 ward, 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.

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

	  --dfp-method method
		 select the decimal floating  point  method  to  use,  available
		 methods are:

		 Method    Description
		 all	   iterate over all the following floating point methods:
		 df32add   32 bit decimal floating point addition (_Decimal32)
		 df64add   64 bit decimal floating point addition (_Decimal64)
		 df128add  128 bit decimal floating point addition (_Decimal128)
		 df32sub   32 bit decimal floating point subtraction (_Decimal32)
		 df64sub   64 bit decimal floating point subtraction (_Decimal64)
		 df128sub  128 bit decimal floating point subtraction (_Decimal128)
		 df32mul   32 bit decimal floating point multiplication (_Decimal32)
		 df64mul   64 bit decimal floating point multiplication (_Decimal64)
		 df128mul  128 bit decimal floating point multiplication (_Decimal128)
		 df32div   32 bit decimal floating point division (_Decimal32)
		 df64div   64 bit decimal floating point division (_Decimal64)
		 df128div  128 bit decimal floating point division (_Decimal128)

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

	  --dfp-ops N
		 stop after N decimal floating point bogo ops.

     Directories stressor
	  --dir N
		 start N workers that create, rename and remove directories  us-
		 ing mkdir(2), rename(2) and rmdir(2).

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

     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  in-
		 ode 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 di-
		 rectories and links. The value N can be the number of inodes or
		 a percentage of the total available free inodes on the filesys-
		 tem 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 den-
		 try 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 mak-
		 ing/deleting files/directories, renaming files, etc. to  stress
		 exercise the various dnotify events (Linux only).

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

     Dup stressor
	  --dup N
		 start	N  workers  that perform dup(2) and then close(2) opera-
		 tions 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 load-
		 ing  and symbol lookups. See dlopen(3) for more details of this
		 mechanism.

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

     Easy CPU opcode stressor
	  --easy-opcode N
		 start N workers that exercise 64 continuous  pages  of  radomly
		 selected  simple  CPU opcodes.  For example, for x86 processors
		 this just exercises single byte opcodes such  as  nop	and  op-
		 codes that set/clear CPU flags to put pressure on the front-end
		 decoder and instruction cache. For RISC processors opcodes such
		 as nop and simple register moves to/from the same registers are
		 used.	Smart  emulators  may  remove some of these opcodes (e.g
		 move r0,r0) and hence opcode rates may be artificially high.

	  --easy-opcode-ops N
		 stop after N executions of 64 continuous pages of opcodes.

     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 dou-
					  ble floating point values
		 add-double		  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 float-
					  ing 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	  multiplication of two matrices of long
					  double floating point values
		 multiply-doublee	  multiplication of two matrices of dou-
					  ble floating point values
		 multiply-float 	  multiplication   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 x N. The default is a 32 x 32  ma-
		 trix.

     EFI variables stressor
	  --efivar N
		 start	N workers that exercise the Linux /sys/firmware/efi/efi-
		 vars 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_AD-
		 MIN 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 num-
		 bers. 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 exer-
		 cising 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 vari-
		 ables	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 ac-
		 tivity using epoll_wait(2) to monitor and  handle  new  connec-
		 tions.  This  involves client/server processes performing rapid
		 connect, send/receives and disconnects on the local host.   Us-
		 ing  epoll  allows  a	large  number of connections to be effi-
		 ciently handled, however, this can lead to the connection table
		 filling up and blocking further socket connections,  hence  im-
		 pacting 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 x 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 de-
		 scriptor. This will cause reads and writes to return  with  EA-
		 GAIN  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 | fexecve ]
		 select the exec system call to use; all will perform  a  random
		 choice  between  execve(2),  execveat(2) and fexecve(3), execve
		 will use execve(2), execveat will use	execveat(2)  (if  avail-
		 able) and fexecve will use fexecve(3) (if 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.

     Exponential functions
	  --expmath N
		 start N workers that  exercise  various  exponential  functions
		 with  input  values  0  to 1 in steps of 0.001; the results are
		 sanity checked to ensure no variation occurs after  each  round
		 of 10000 computations.

	  --expmath-ops N
		 stop after N exponential bogo-operation loops.

	  --expmath-method method
		 specify  a exponential function to exercise. Available exponen-
		 tial stress methods are described as follows:

		 Method  Description
		 all	 iterate over all the below exponential functions  meth-
			 ods
		 cexp	 double complex natural exponential
		 cexpf	 float complex natural exponential
		 cexpl	 long double complex natural exponential
		 exp	 double natural exponential
		 expf	 float natural exponential
		 expl	 long double natural exponential
		 exp10	 double base-10 exponential
		 exp10f  float base-10 exponential
		 exp10l  long double base-10 exponential
		 exp2	 double base-2 exponential
		 exp2f	 float base-2 exponential
		 exp2l	 long double base-2 exponential

     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 x N random factors, for N > 100. The default  num-
		 ber 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 opera-
		 tions.

     Filesystem notification (fanotify) stressor
	  --fanotify N
		 start N workers performing file system activities such as  cre-
		 ating,  opening,  writing, reading and unlinking files to exer-
		 cise 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 func-
		 tions 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-flush
		 attempt to periodically flush instruction cache to produce  in-
		 struction cache misses.

	  --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-pageout
		 where possible pageout and soft-offline randomly selected pages
		 that  contain	the  far  branch functions. This uses madvise(2)
		 MADV_PAGEOUT and MADV_SOFT_OFFLINE to perform these actions.

	  --far-branch-pages N
		 specify the number of pages to allocate for  far  branch  func-
		 tions. The number for functions per page depends on the proces-
		 sor  architecture, for example, x86 will have 4096 x 1 byte re-
		 turn instructions per 4 K page, where as SPARC64 will have only
		 512 x 8 byte return instructions per 4 K 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  com-
		 mands.   The  exercised  commands  (if  available)  are: F_CRE-
		 ATED_QUERY,   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_GETOWNER_UIDS,  F_GETLEASE,	F_GETLK,
		 F_SETLK,   F_SETLKW,	F_UNLCK,    F_OFD_GETLK,    F_OFD_SETLK,
		 F_OFD_SETLKW,	    F_GET_FILE_RW_HINT,      F_SET_FILE_RW_HINT,
		 F_GET_RW_HINT and F_SET_RW_HINT.

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

     File descriptor abusing stressor
	  --fd-abuse N
		 start N workers that open file descriptors using  various  ways
		 (file,  dup,  socket,	pipe, timerfd, pidfd, userfaultfd, etc.)
		 and perform valid and invalid file operations on these descrip-
		 tors. This exercises a mix of successful and failed file opera-
		 tions on a wide range of file descriptor types.

	  --fd-abuse-ops N
		 stop after N file abuse file operation bogo-ops.

     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 al-
		 lowed, 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/ran-
		 dom, 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 descriptor race stressor
	  --fd-race N
		 start N workers that attempt to force race conditions on opened
		 file  descriptors.   Opened  file descriptors are passed from a
		 server to a client over a socket. At periodic intervals batches
		 of the file descriptors are  duplicated  by  creating	multiple
		 pthreads  and	then  closed  en-masse with synchronized pthread
		 termination. Also other concurrent  pthreads  exercise  various
		 file  based  system  calls  on file descriptors that are in the
		 process of being created. By default a single file is used  for
		 the  open  calls, however /dev and /proc files can be exercised
		 using the appropriate fd-race options.

	  --fd-race-dev
		 exercise /dev files for race conditions.

	  --fd-race-race-ops N
		 stop after N file descriptors have been exercised.

	  --fd-race-proc
		 exercise /proc files for race conditions.

     Fibonacci search stressor
	  --fibsearch N
		 start N workers that use a search a sorted array of 32 bit  in-
		 tegers using a Fibonacci search. A Fibonacci seaarch is similar
		 to a bsearch except that it uses the Fibonacci series to divide
		 the  search into unequal sized spaces. It avoids the costly di-
		 vision operator found in bsearches and examines closer elements
		 on each search step so there is a slight compute and cache  ad-
		 vantage  over bsearch.  By default, there are 65536 elements in
		 the array.  This is a useful method to exercise  random  access
		 of memory and processor cache.

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

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

     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  spec-
		 ify  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 charac-
		 ters.	 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 op-
		 tions are:

		 Option      Description
		 probe	     default option, probe the file system for valid al-
			     lowed 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 /
		 utf8	     use struct utf8 characters in filename
		 urf8-like   use utf8 like characters with illegal  utf8  encod-
			     ings when generating random filenames

     File race stressor
	  --filerace N
		 start N workers that each run 8 concurrent processes that exer-
		 cise a randomized set of file related system calls on 64 random
		 files.  This  attempts  to trip any file system race conditions
		 while files are being operated upon. The randomized  operations
		 will cause some invalid file operations to fail, these failures
		 are silently ignored.

	  --filerace-ops N
		 stop after N randomized file bogo-operations, this is not a re-
		 liable  metric  of performance because of the highly randomized
		 actions occurring on randomly selected files.

     Single cacheline coherency scalability stressor
	  --flipflop N
		 start N workers where each worker creates two groups of threads
		 of the same size where each group is affined to a set of  CPUs.
		 A  continuous	bitmap that has enough bits for each thread pair
		 is exercised, each thread pair tries to  flip/flop  their  spe-
		 cific bit using cmpxchg (compare/exchange); one thread tries to
		 flip  the  bit  from 0 to 1 and the other tries to flop the bit
		 from 1 to 0.  This stressor makes threads compete on  the  same
		 cacheline and measures the total number of flip/flop operations
		 and the distribution of successful flip/flops among the threads
		 (to see if thread pairs get starved in favour of others).

	  --flipflop-bits N
		 specifies  number  of	bits  in the bitmap (and hence number of
		 flip/flop thread pairs).

	  --flipflop-taskset1 list
		 list of CPUs to affine  the  flip  threads  to.  Refer  to  the
		 --taskset  option  description for the syntax of the list argu-
		 ment.

	  --flipflop-taskset2 list
		 list of CPUs to affine  the  flop  threads  to.  Refer  to  the
		 --taskset  option  description for the syntax of the list argu-
		 ment.

	  --flipflop-ops N
		 stop after N bogo-ops, in this case a bogo-op is  100000  flip-
		 flop operations.

     BSD 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 x b) + c
		 a = (b x a) + c
		 a = (b x c) + a
		 a = (a x b) - c
		 a = (b x a) - c
		 a = (b x c) - a

	  --fma-libc
		 use libc fma math functions if they are  available.  These  use
		 either  the  libc  FMA  macros  if defined, the  __builtin libc
		 functions or the fma libc functions. Generally these are slower
		 than directly multiply/add fused code	generated  by  the  com-
		 piler.

	  --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 it-
		 eration. 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-pageout
		 enable force paging-out of memory resident pages in fork stres-
		 sor instances.

	  --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 mad-
		 vise(2) on all pages of the forked process. Where possible this
		 will  try  to set every page in the new process with using mad-
		 vise(2)  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 ref-
		 erences 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. Re-
		 sources  include  pipes,  file  descriptors,  memory  mappings,
		 pthreads,  timers,  ptys, semaphores, message queues and tempo-
		 rary files. These create heavyweight processes  that  are  more
		 time expensive to fork from. Default is 16384.

	  --forkheavy-mlock
		 attempt  to mlock(2) 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  di-
		 vision  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 addition
		 ibm128add    IBM 128 bit floating point addition (powerpc)
		 float80add   80 bit floating point addition
		 float64add   64 bit floating point addition
		 float32add   32 bit binary32 floating point addition
		 floatadd     floating point addition
		 bf16add      bf16 floating point addition
		 doubleadd    double precision floating point addition
		 ldoubleadd   long double precision floating point addition
		 float128sub  128 bit floating point subtraction
		 ibm128sub    IBM 128 bit floating point subtraction (powerpc)
		 float80sub   80 bit floating point subtraction
		 float64sub   64 bit floating point subtraction
		 float32sub   32 bit binary32 floating point subtraction
		 floatsub     floating point subtraction
		 bf16sub      bf16 floating point subtraction
		 doublesub    double precision floating point subtraction
		 ldoublesub   long double precision floating point subtraction
		 float128mul  128 bit floating point multiplication
		 ibm128mul    IBM 128 bit floating point multiplication (powerpc)
		 float80mul   80 bit floating point multiplication
		 float64mul   64 bit floating point multiplication
		 float32mul   32 bit binary32 floating point multiplication
		 floatmul     floating point multiplication
		 bf16mul      bf16 floating point multiplication
		 doublemul    double precision floating point multiplication
		 ldoublemul   long double precision floating point multiplication
		 float128div  128 bit floating point division
		 ibm128div    IBM 128 bit floating point division (powerpc)
		 float80div   80 bit floating point division
		 float64div   64 bit floating point division
		 float32div   32 bit binary32 floating point division
		 floatdiv     floating point division
		 bf16div      bf16 floating point division
		 doublediv    double precision floating point division
		 ldoublediv   long double precision floating point division

		 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 float-
		 ing point types.

     Floating point exception stressor
	  --fp-error N
		 start N workers that generate floating point exceptions. Compu-
		 tations are performed to force and check for the  FE_DIVBYZERO,
		 FE_INEXACT,  FE_INVALID,  FE_OVERFLOW	and  FE_UNDERFLOW excep-
		 tions.  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)   FAL-
		 LOC_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.

     Fractal Stressor
	  --fractal N
		 start N workers that generate 2D fractals. By default a 1024  x
		 1024 point Mandelbrot set is computed with a maximum of 256 it-
		 erations  per	point in the iterative compute loop. The fractal
		 is computed row by row with multiple rows shared amongst the  N
		 fractal  stressor  instances.	Double	precision floating point
		 values are used for the points in the complex	set  of  values.
		 Naive	computation  is  used with no special algorithmic short-
		 cuts or interpolation.

	  --fractal-iterations N
		 specify the maximum number of iterations for the quadratic  map
		 computation of each point, default is 256 iterations.

	  --fractal-method [ julia | mandelbrot ]
		 select  the  method of fractal generation, Julia set or Mandel-
		 brot set, default is the Mandelbrot set.

	  --fractal-ops N
		 stop after N fractals have been generated.

	  --fractal-sizex N
		 set the maximum width of the fractal, default is 1024 points.

	  --fractal-sizey N
		 set the maximum height of the fractal, default is 1024 points.

     File size limit stressor
	  --fsize N
		 start N workers that  exercise  file  size  limits  (via  setr-
		 limit(2)  RLIMIT_FSIZE)  with file sizes that are fixed, random
		 and powers of 2. The files are truncated and allocated to trig-
		 ger 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 argu-
		 ments. By default all functions with a range of argument  types
		 are  called,  however,  this  can  be changed using the --func-
		 call-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 opera-
		 tions. 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 com-
		 piler 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 de-
		 fault	is uint64_t but can be one of uint8 uint16 uint32 uint64
		 uint128 float double longdouble float80 float128 decimal32 dec-
		 imal64 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  spe-
		 cific stress option.

	  --futex-ops N
		 stop  futex  workers  after N bogo successful futex wait opera-
		 tions.

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

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

	  --get-slow-sync
		 attempt to synchronize system calls across the N get workers to
		 try  to  force forms of locking contention in the kernel on the
		 more complex cases. Each system call is exercised  concurrently
		 with the N workers for 0.1 seconds at a time, so it takes a 3-4
		 seconds to work through all the system calls.

     Get directory entries stressor (Linux)
	  --getdent N
		 start N workers that recursively read directories /proc, /dev/,
		 /tmp,	/sys and /run using getdents(2) and getdents64(2) (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/uran-
		 dom  pool  using the getrandom(2) system call (Linux) or geten-
		 tropy(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 in-
		 struction) 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 instruc-
		 tions.

     2D GPU stressor
	  --gpu N
		 start N worker that exercise the GPU. This specifies a 2-D tex-
		 ture 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 x N, by default this value is 4096 x
		 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 close to 1.0 indicates a good hash  distribu-
		 tion.

	  --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 mul-
			     tiply 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 Pro-
			     gramming 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  ver-
			     sion of mulxror32
		 murmur3_32  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 tem-
		 porary 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  op-
		 tions.

	  --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 underly-
				 ing hardware and file metadata has been updated
				 (using the O_DSYNC open flag). This is  equiva-
				 lent  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 pat-
				 tern  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 pat-
				 terns 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 opera-
				 tion,	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 underly-
				 ing 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  op-
				 tion.
		 rd-rnd 	 read data randomly.
		 rd-seq 	 read data sequentially.
		 syncfs 	 write	all buffered modifications of file meta-
				 data and data on the filesystem  that	contains
				 the hdd worker files.
		 utimes 	 force	update	of  file timestamp which may in-
				 crease 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
		 4 MB.

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

	  --heapsort-method [ heapsort-libc | heapsort-nonlibc ]
		 select  either  the libc implementation of heapsort or an opti-
		 mized implementation of heapsort. The default is the  libc  im-
		 plementation 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 x 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 ran-
		 dom  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  sec-
		 onds and the hrtimer delay is adjusted to try and set the opti-
		 mal 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 1 K to 4 M.

     Hyperbolic functions stressor
	  --hyperbolic N
		 start N workers that exercise sinh, cosh, and tanh libm  hyper-
		 bolic	functions  using  float, double and long double floating
		 point variants. Each function	is  exercised  10000  times  per
		 bogo-operation.

	  --hyperbolic-method function
		 specify a hyperbolic stress function. By default, all the func-
		 tions	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 hyperbolic func-
			 tions
		 cosh	 hyperbolic cosine (double precision)
		 coshf	 hyperbolic cosine (float precision)
		 coshl	 hyperbolic cosine (long double precision)
		 sinh	 hyperbolic sine (double precision)
		 sinhf	 hyperbolic sine (float precision)
		 sinhl	 hyperbolic sine (long double precision)
		 tanh	 hyperbolic tangent (double precision)
		 tanhf	 hyperbolic tangent (float precision)
		 tanhl	 hyperbolic tangent (long double precision)

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

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

     ICMP flooding stressor
	  --icmp-flood N
		 start	N  workers that flood localhost with randomly sized ICMP
		 ping packets.	This stressor requires the  CAP_NET_RAW  capbil-
		 ity.

	  --icmp-flood-max-size
		 use a maximum packet size of 65535 bytes instead of the default
		 of 1000 bytes.

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

     Idle page scan stressor (Linux)
	  --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_GET-
		 FLAGS and FS_IOC_SETFLAGS ioctl(2) and inode  attributes  using
		 file_getattr(2) and file_getatt(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 de-
		 tails.

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

     Inotify stressor
	  --inotify N
		 start	N workers performing file system activities such as mak-
		 ing/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.

     Insertion sort stressor
	  --insertionsort N
		 start N workers that sort 32 bit integers using insertion sort.

	  --insertionsort-ops N
		 stop insertionsort stress workers after N bogo insertion sorts.

	  --insertionsort-size N
		 specify number of 32 bit integers to sort, default is 16384 (16
		 x 1024).

     Integer Math Operations
	  --intmath N
		 start N workers that perform addition, subtraction, multiplica-
		 tion,	division  and  modulo math operations on 128, 64, 32, 16
		 and 8 bit signed integers.

	  --intmath-fast
		 when available use int_fast64_t, int_fast32_t, int_fast16_t and
		 int_fast8_t types instead  of	int64_t,  int32_t,  int16_t  and
		 int8_t  types.  Note  that  these may or may not be faster than
		 normal integer operations depending on the compiler.

	  --intmath-method method
		 select the integer math method to use, available methods are:

		 Method  Description
		 all	 iterate over all the following integer methods:
		 add128  128 bit signed integer addition
		 add64	 64 bit signed integer addition
		 add32	 32 bit signed integer addition
		 add16	 16 bit signed integer addition
		 add8	 8 bit signed integer addition
		 sub128  128 bit signed integer subtraction
		 sub64	 64 bit signed integer subtraction
		 sub32	 32 bit signed integer subtraction
		 sub16	 16 bit signed integer subtraction
		 sub8	 8 bit signed integer subtraction
		 mul128  128 bit signed integer multiplication
		 mul64	 64 bit signed integer multiplication
		 mul32	 32 bit signed integer multiplication
		 mul16	 16 bit signed integer multiplication
		 mul8	 8 bit signed integer multiplication
		 div128  128 bit signed integer division
		 div64	 64 bit signed integer division
		 div32	 32 bit signed integer division
		 div16	 16 bit signed integer division
		 div8	 8 bit signed integer division
		 mod128  128 bit signed integer modulo
		 mod64	 64 bit signed integer modulo
		 mod32	 32 bit signed integer modulo
		 mod16	 16 bit signed integer modulo
		 mod8	 8 bit signed integer modulo

		 for the --intmath-fast option, the following methods are avail-
		 able:

		 Method     Description
		 all	    iterate over all the following integer methods:
		 addfast64  fast 64 bit signed integer addition
		 addfast32  fast 32 bit signed integer addition
		 addfast16  fast 16 bit signed integer addition
		 addfast8   fast 8 bit signed integer addition
		 subfast64  fast 64 bit signed integer subtraction
		 subfast32  fast 32 bit signed integer subtraction
		 subfast16  fast 16 bit signed integer subtraction
		 subfast8   fast 8 bit signed integer subtraction
		 mulfast64  fast 64 bit signed integer multiplication
		 mulfast32  fast 32 bit signed integer multiplication
		 mulfast16  fast 16 bit signed integer multiplication
		 mulfast8   fast 8 bit signed integer multiplication
		 divfast64  fast 64 bit signed integer division
		 divfast32  fast 32 bit signed integer division
		 divfast16  fast 16 bit signed integer division
		 divfast8   fast 8 bit signed integer division
		 modfast64  fast 64 bit signed integer modulo
		 modfast32  fast 32 bit signed integer modulo
		 modfast16  fast 16 bit signed integer modulo
		 modfast8   fast 8 bit signed integer modulo

	  --intmath-ops N
		 stop intmath workers after N bogo integer math 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 drop-
		 ping.	Multiple child processes are spawned to all share a sin-
		 gle 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 ]
		 specify the io operation to be performed.  The default is  both
		 in  and out.  specify if port reads in, port read writes out or
		 reads and writes are

	  --ioport-port [ post | vga-dac-r | bochs-debug ]
		 select x86 I/O  port  to  use,  post  (Power-On-Self-Test  port
		 0x80), vga-dac-r (VGA DAC Red port 0x3c8) or bochs-debug (Bochs
		 debug port 0xe9)

     IO scheduling class and priority stressor
	  --ioprio N
		 start	N  workers  that  exercise  the  ioprio_get(2)	and  io-
		 prio_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 various io-uring	file  operations
		 using the Linux io-uring interface.

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

	  --io-uring-ops
		 stop after N rounds of io-uring operations.

	  --io-uring-rand
		 randomize order of io-uring operations and file seek locations.

     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  rou-
		 tines. This is only available for x86-64 modern Intel CPUs.

	  --ipsec-mb-feature [ sse | avx | avx2 | avx512 | noaesni ]
		 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 crypto-
		 graphic 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 set-
		 ting, 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 gener-
		 ated 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  com-
		 pleted.

	  --judy-size N
		 specify  the size (number of 32 bit integers) in the Judy array
		 to exercise.  Size can be from 1 K to 4 M 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. Sup-
		 ported 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(2) 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,  64  bit  ARM, RISC-V and x86 ARM Linux only.  For x86
		 the virtual machine reads, increments and writes to  port  0x80
		 in  a	spin loop and the stressor handles the I/O transactions.
		 For ARM64 and RISC-V the virtual machine writes to a  MMIO  re-
		 gion and the stressor handles the MMIO exits.

	  --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 de-
		 fault is a forward scan, random picks random bytes to exercise,
		 reverse scans in reverse.

	  --l1cache-mlock
		 attempt to mlock(2) the l1cache size buffer into memory to pre-
		 vent 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(2)  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  fac-
		 tor on the speed of the stressor.

	  --landlock-ops N
		 stop the landlock stressors after N landlock ruleset bogo oper-
		 ations.

     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  num-
		 ber  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.   Nor-
		 mally	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 5000 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 ad-
		 dition, 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-clflush
		 where	possible,  flush  cachelines after each cacheline write,
		 x86 and ppc64 only.

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

	  --llc-affinity-numa
		 assign memory mapped pages to	randomly  selected  NUMA  nodes.
		 This is disabled for systems that do not support NUMA.

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

	  --llc-affinity-size N
		 override the default LLC 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.

     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 re-
		 duced	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 16 MB mmap'd  region  (Intel  x86
		 and  ARM  CPUs  only).   This	will  cause cacheline misses and
		 stalling of CPUs. Pages are spread randomly across  NUMA  nodes
		 to exercise NUMA bus locking for NUMA systems.

	  --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  at-
		 tempts  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 concur-
		 rent locks. Old locks are unlocked in a first-in, first-out ba-
		 sis.

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

     mixed file lock stressor (locka, lockf, lockofd)
	  --lockmix N
		 start N workers that randomly lock and unlock regions of a file
		 using the BSD flock(2), locka (advisory),  POSIX  lockf(3)  and
		 Linux open file lock (lockofd) locking mechanisms.  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.

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

     Linux open file lock (ofd 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.

     Logarithmic functions
	  --logmath N
		 start N workers that exercise various	libm  logarithmic  func-
		 tions with input values 1 to 10000.  Results are sanity checked
		 to  ensure no variation occurs after each round of 10000 compu-
		 tations.

	  --logmath-ops N
		 stop after N logarithmic bogo-operation loops.

	  --logmath-method method
		 specify a logarithmic function to exercise. Available logarith-
		 mic stress methods are described as follows:

		 Method  Description
		 all	 iterate over all the below logarithmic functions  meth-
			 ods
		 clog	 double complex natural logarithm
		 clogf	 float complex natural logarithm
		 clogl	 long double complex natural logarithm
		 log	 double natural logarithm
		 logf	 float natural logarithm
		 logl	 long double natural logarithm
		 logb	 get exponent of a double
		 logbf	 get exponent of a float
		 logbl	 get exponent of a long double
		 log10	 double base-10 logarithm
		 log10f  float base-10 logarithm
		 log10l  long double base-10 logarithm
		 log2	 double base-2 logarithm
		 log2f	 float base-2 logarithm
		 log2l	 long double base-2 logarithm

     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  2  MB loopback devices, expands them to 4 MB, performs
		 some loopback status information get  and  set  operations  and
		 then destroys them. Linux only and requires CAP_SYS_ADMIN capa-
		 bility.

	  --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 | lsearch-sentinel ]
		 select either the libc implementation of lsearch or a	slightly
		 optimized  non-libc implementation of lsearch or a lsearch that
		 uses the search key as the end of array sentinel to  remove  an
		 index	compare per loop. 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 1 K to 4 M.

     Linux Security Modules system call stressor
	  --lsm N
		 start	N  workers  that   exercise   the   LSM   system   calls
		 lsm_list_modules(2)  and  lsm_get_self_attr(2),  (Linux  only).
		 Each bogo-op loop fetches a list of available security  modules
		 and  fetching LSM attributes as well as some invalid LSM system
		 calls to exercise error handling.

	  --lsm-ops N
		 stop after N loops  of  fetching  security  modules  lists  and
		 fetching LSM attributes.

     Madvise stressor
	  --madvise N
		 start N workers that apply random madvise(2) advise settings on
		 pages of a 4 MB 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), re-
		 alloc(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  op-
		 tion.	 Allocation, reallocation and freeing are chosen at ran-
		 dom; 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 64 K.  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 ran-
		 domly 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 ex-
		 panding 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(2) the allocations into memory to prevent them
		 from being swapped out.

	  --malloc-ops N
		 stop  after  N  malloc bogo operations. One bogo operations re-
		 lates	to  a  successful  malloc(3),	calloc(3),   realloc(3),
		 posix_memalign(3), aligned_alloc(3) or memalign(3) call.

	  --malloc-pthreads N
		 specify  number of malloc stressing concurrent pthreads to run.
		 The default is 0 (just one main process, no pthreads). This op-
		 tion 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 sys-
		 tems 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 mad-
		 vise pages into memory or use mincore to check for non-resident
		 memory pages and try to force them into memory; this option ag-
		 gressively 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  use-
		 ful 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  on  a 128 x 128 element matrix. 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 x N matrices
		 copy	    copy one N x N matrix to another
		 div	    divide an N x N matrix by a scalar
		 frobenius  Frobenius product of two N x N matrices
		 hadamard   Hadamard product of two N x N matrices
		 identity   create an N x N identity matrix
		 mean	    arithmetic mean of two N x N matrices
		 mult	    multiply an N x N matrix by a scalar
		 negate     negate an N x N matrix
		 prod	    product of two N x N matrices
		 sub	    subtract one N x N matrix from another N x N matrix
		 square     multiply an N x N matrix by itself
		 trans	    transpose an N x N matrix
		 zero	    zero an N x N matrix

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

	  --matrix-size N
		 specify the N x 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  de-
		 fault	x  by y. This is suboptimal ordering compared to the de-
		 fault 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 on a 128 x 128 x 128 element matrix. 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 x N x N matrices
		 copy	    copy one N x N x N matrix to another
		 div	    divide an N x N x N matrix by a scalar
		 frobenius  Frobenius product of two N x N x N matrices
		 hadamard   Hadamard product of two N x N x N matrices
		 identity   create an N x N x N identity matrix
		 mean	    arithmetic mean of two N x N x N matrices
		 mult	    multiply an N x N x N matrix by a scalar
		 negate     negate an N x N x N matrix
		 sub	    subtract one N x N x N matrix from another N x N x N
			    matrix
		 trans	    transpose an N x N x N matrix
		 zero	    zero an N x N x N matrix

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

	  --matrix-3d-size N
		 specify the N x N x N size of the matrices.  Smaller values re-
		 sult  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  pat-
		 terns. 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-op-
		 timal memory access patterns.	The threads also randomly change
		 CPU affinity to exercise CPU and memory migration stress.

	  --mcontend-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

	  --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(2)  system  call
		 (Linux only).

	  --membarrier-ops N
		 stop  membarrier  stress workers after N bogo membarrier opera-
		 tions.

     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 naive methods
		 libc	   use libc memcpy and memmove functions,  this  is  the
			   default
		 builtin   use	the  compiler built in optimized memcpy and mem-
			   move functions
		 naive	   use naive byte by  byte  copying  and  memory  moving
			   build with default compiler optimization flags
		 naive_o0  use unoptimized naive byte by byte copying and memory
			   moving
		 naive_o1  use unoptimized naive byte by byte copying and memory
			   moving with -O1 optimization
		 naive_o2  use	optimized  naive byte by byte copying and memory
			   moving build with -O2 optimization and where possible
			   use CPU specific optimizations
		 naive_o3  use optimized naive 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  256
		 MB.  One can specify the size in as % of total available memory
		 or in units of Bytes, KBytes, MBytes and GBytes using the  suf-
		 fix 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  re-
		 gions to add a little more VM exercising.

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

	  --memfd-numa
		 assign memory mapped pages to	randomly  selected  NUMA  nodes.
		 This is disabled for systems that do not support NUMA.

	  --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 stres-
		 sor  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-mmap
		 enable random 1 K to 1 MB memory mapping/unmappings before each
		 offline event.

	  --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 in-
		 teger 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 de-
		 fault size is 256 MB. 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-method
		 specify a memrate stress method, some methods are available  to
		 specific  architectures or toolchains that support them. Avail-
		 able memrate stress methods are described as follows:

		 Method       Description
		 all	      iterate over all the below memrate methods
		 read128pf    read 128 bits per read using prefetching
		 read64pf     read 64 bits per read using prefetching
		 read1024     read a vector of 1024 bits per read
		 read512      read a vector of 512 bits per read
		 read256      read a vector of 256 bits per read
		 read128      read 128 bits per read
		 read64       read 64 bits per read
		 read32       read 32 bits per read
		 read16       read 16 bits per read
		 read8	      read 8 bits per read
		 write64stoq  write 64 bits per write with x86 rep stoq
		 write32stow  write 32 bits per write with x86 rep stow
		 write16stod  write 16 bits per write with x86 rep stod
		 write8stob   write 8 bits per write with x86 rep stob
		 write64ds    write 64 bits per write with x86 movdiri
		 write128nt   write 128 bits per write using non-temporal store
		 write64nt    write 64 bits per write using non-temporal store
		 write32nt    write 32 bits per write using non-temporal store
		 write1024    write a vector of 1024 bits per write
		 write512     write a vector of 512 bits per write
		 write256     write a vector of 256 bits per write
		 write128     write 128 bits per write
		 write64      write 64 bits per write
		 write32      write 32 bits per write
		 write16      write 16 bits per write
		 write8       write 8 bits per write
		 memset       write using libc memset

	  --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. Setting this to zero will disable
		 reads.

	  --memrate-wr-mbs N
		 specify  the  maximum	allowed  read rate in MB/sec. The actual
		 write rate is dependent on scheduling	jitter	and  memory  ac-
		 cesses  from other running processes. Setting this to zero will
		 disable writes.

     Memory thrash stressor
	  --memthrash N
		 start N workers that thrash and exercise a 16 MB buffer in var-
		 ious 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 op-
		 timal 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 mem-
			      ory 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 x 2 matrix and swap random el-
			      ements
		 memmove      copy all the data in buffer to the next memory lo-
			      cation
		 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  in-
			      struction (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  to-
			      wards 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  to-
			      wards  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 merge-
		 sort(3).

	  --mergesort-method [ mergesort-libc | mergesort-nonlibc ]
		 select either the libc implementation of mergesort or an  unop-
		 timized  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 x 1024).

     File metadata mix
	  --metamix N
		 start	N  workers  that  generate a file metadata mix of opera-
		 tions. Each stressor runs 16 concurrent processes that each ex-
		 ercise 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.

     Minimum sleep time in nanosleep stressor
	  --min-nanosleep N
		 start M workers that exercise nanosecond sleeps using powers of
		 two  nanosecond  sleep delays. Once all the instances have com-
		 pleted, the minimum, maximum and mean sleep times are	reported
		 for  the sleep delays across all the min-nanosleep stressor in-
		 stances.

	  --min-nanosleep-ops N
		 stop after N rounds of measurements across all the  sleeps  are
		 completed.

	  --min-nanosleep-max N
		 set  the maximum nanosleep delay to use. If this is not a power
		 of two then the previous power of two nanosecond delay time  is
		 used, e.g. specifying 10000 will select 8192 nanoseconds.

	  --min-nanosleep-sched [ batch | deadline | ext | fifo | idle | other |
	  rr ]
		 select  scheduling  policy. Note that deadline, fifo and rr re-
		 quire root privilege.

     Misaligned read/write stressor
	  --misaligned N
		 start N workers that perform misaligned read and writes. By de-
		 fault, this will exercise 128 bit misaligned read and writes in
		 8 x 16 bits, 4 x 32 bits, 2 x 64 bits and 1 x 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 x 16 bit integer reads
		 int16wr       8 x 16 bit integer writes
		 int16inc      8 x 16 bit integer increments
		 int16atomic   8 x 16 bit atomic integer increments
		 int32rd       4 x 32 bit integer reads
		 int32wr       4 x 32 bit integer writes
		 int32wtnt     4 x 32 bit non-temporal stores (x86 only)
		 int32inc      4 x 32 bit integer increments
		 int32atomic   4 x 32 bit atomic integer increments
		 int64rd       2 x 64 bit integer reads
		 int64wr       2 x 64 bit integer writes
		 int64wrds     4 x 64 bit direct stores (x86 only)
		 int64wtnt     4 x 64 bit non-temporal stores (x86 only)
		 int64inc      2 x 64 bit integer increments
		 int64atomic   2 x 64 bit atomic integer increments
		 int128rd      1 x 128 bit integer reads
		 int128wr      1 x 128 bit integer writes
		 int128inc     1 x 128 bit integer increments
		 int128atomic  1 x 128 bit atomic integer increments

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

	  --misaligned-ops N
		 stop after N misaligned bogo operation. A misaligned bogo op is
		 equivalent to 65536 x 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(2) and unlink(2).

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

     Memory mapped 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 fu-
		 ture 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.

     Many child memory mapped page lock/unlock process stressor
	  --mlockmany N
		 start N workers that fork off a default of 1024 child processes
		 in  total;  each  child will attempt to anonymously mmap(2) and
		 mlock(2) 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 max-
		 imum 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 4 K unmappings, then
		 pseudo-random 4 K mappings, and then  linear  4  K  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,  anony-
		 mous	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 in total for all the mmap stressor  instances,
		 the  default  is 256 MB. 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(2) mmap'd pages into memory causing more mem-
		 ory pressure by preventing pages from swapped out.

	  --mmap-mmap2
		 use mmap2(2) for 4 K page aligned offsets if  mmap2  is  avail-
		 able, 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 op-
		 tion will make the pages read-only, write-only, exec-only,  and
		 read-write.

	  --mmap-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

	  --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-mun-
		 map

	  --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  loca-
		 tion 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(2) mmap'd pages into memory causing more mem-
		 ory pressure by preventing pages from swapped out.

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

     Memory map Copy-on-Write and unmap stressor
	  --mmapcow N
		 start N workers that  exercise  page  allocation,  modification
		 (forcing  copy-on-write)  and page unmapping. Regions of memory
		 from 1 page to the maximum mappable size  are	allocated.  Each
		 page  in  the	regions  are then modified, cache flushed (where
		 possible) and unmapped. This  stressor  produces  a  high  page
		 fault	rate.  For each region mapped there are 6 different ran-
		 domized strategies taken to exercise each page:

		 Sequential page modify and unmap
		 Sequential page modify and unmap (even pages, then odd pages)
		 Prime size page strides, page modify and unmap
		 Reverse sequential page modify and unmap
		 Reverse sequential page modify and unmap (even pages, then odd pages)
		 Single random page modify and unmap all pages
		 Randomly selected page modify and modify

	  --mmapcow-fork
		 fork child process to exercise pages in parallel with parent to
		 exercise page handling harder.

	  --mmapcow-free
		 after each page is modified and before each  page  is	unmapped
		 use  madvise(2)  MADV_FREE (if it is available) to indicate the
		 page is free

	  --mmapcow-mlock
		 attempt to mlock(2) each modified page, this can  increase  the
		 number  of  page  faults. Only available with the mlock2 system
		 call.

	  --mmapcow-numa
		 assign memory mapped pages to	randomly  selected  NUMA  nodes.
		 This is disabled for systems that do not support NUMA.

	  --mmapcow-ops N
		 stop after N pages are modified  and unmapped

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

	  --mmapfork-bytes N
		 specify  the  size  of  memory mapped fork region size. One can
		 specify the size in units of Bytes, KBytes, MBytes  and  GBytes
		 using the suffix b, k, m or g.

	  --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  x 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 ac-
		 cess to files on these file systems.

	  --mmapfiles-numa
		 assign memory mapped pages to	randomly  selected  NUMA  nodes.
		 This is disabled for systems that do not support NUMA.

	  --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 en-
		 sure  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 128 K.  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_POPU-
		 LATE. 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. Map-
		 pings	and  remappings are madvised with random madvise options
		 to further exercise the mappings.

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

	  --mmapfixed-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

	  --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 mad-
		 vised with MADV_NOHUGEPAGE and MADV_HUGEPAGE settings and  then
		 1/64th  of  the  normal  small page size pages are touched. Fi-
		 nally, 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 at-
		 tempted per round of mappings or until swapping is detected.

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

	  --mmaphuge-mlock
		 attempt  to mlock(2) 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-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

	  --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 contigu-
		 ous 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(2) mmap'd huge pages into memory causing  more
		 memory pressure by preventing pages from swapped out.

	  --mmapmany-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

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

     Memory map random mapping operations
	  --mmaprandom N
		 start N workers that exercise a random mix of	memory	map  re-
		 lated	system	calls  on randonmly sized mappings. The mappings
		 are either anonymous mapped or file mapped (on a small file  or
		 on  a memfd file where available). This exercises mmap(2) (ran-
		 dom options and flags), munmap(2), mlock(2),  munlock(2),  mad-
		 vise(2),  posix_madvise(3),  mincore(2),  mremap(2),  msync(2),
		 mprotect(2), remap_file_pages(2), memory read, memory write and
		 cache flushing. Where possible, randomized options are used  to
		 generate  a  mix of mostly valid (and some invalid) memory map-
		 ping operations. Metrics are reported for all successful system
		 calls and memory operations.

	  --mmaprandom-ops N
		 stop after N random memory mapping bogo-operations.  Generally,
		 1  bogo-op  is  one  memory  related  system  call  (except for
		 read/write/cache operations).

	  --mmaprandom-mappings N
		 select maximum number of memory mappings, the default is  1024,
		 range 1 to 65536.

	  --mmaprandom-maxpages N
		 select maximum number of pages to be memory mapped, the default
		 is  8,  range	2  to 1024. The pages mapped are randomly chosen
		 from 1 to maxpages.

	  --mmaprandom-numa
		 assign randomly chosen memory mapped pages to randomly selected
		 NUMA nodes.  This is disabled for systems that do  not  support
		 NUMA.

     Memory map torture stressor
	  --mmaptorture N
		 start	N  workers  that exercise memory mapping operations on a
		 shared file.  Mappings of various  random  sizes  are	tortured
		 with  calls  to  madvise(2),  mremap(2), mprotect(2), msync(2),
		 mlock(2), munlock(2), mseal(2) and mincore(2) while the  under-
		 lying file is modified by writes, truncation and hole punching.
		 Mapped  data  is  read and written and sync'd back to file. For
		 NUMA systems, pages are randomly placed across NUMA nodes.  All
		 this activity causes cache misses, exercises the TLB and causes
		 IPI interrupts between CPUs.

	  --mmaptorture-bytes N
		 allocate  N bytes in total for all the mmaptorture stressor in-
		 stances, the default is 256 MB. 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.

	  --mmaptorture-msync N
		 memory mapped pages are msync'd various times	per  bogo-opera-
		 tion,	this option specifies the percentage amount of the pages
		 per msync operation are msync'd. The default is 10%. Specifying
		 zero will disabled msync'ing.

	  --mmaptorture-ops N
		 stop after N iterations of memory mapping torture 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 sim-
		 ply  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 stres-
		 sor  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 en-
		 abled 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_mod-
		 ule().

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

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

	  --monte-carlo-method [ all | e | exp | pi | sin | sqrt | squircle ]
		 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 <pi> from the area of a circle
		 sin	   integrate sin(x) for x = 0..<pi>
		 sqrt	   integrate sqrt(1 + x ^ 4) for x = 0..1
		 squircle  area of a unit squircle x ^ 4 + y ^ 4 = 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 fol-
		 lows:

		 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 Gener-
			    ator, with a division optimization.
		 pcg32	    use  a  32 bit O'Neill Permuted Congruential Genera-
			    tor.
		 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
		 <pi> 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 Reli-
		 able library (mpfr). Operations computed are as follows:

		 Method  Description
		 apery	 calculate Apery's constant <zeta>(3); the sum of 1/(n ^
			 3).
		 cosine  compute cos(<theta>) for <theta> = 0 to  2<pi>  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 <Omega>e^<Omega>
			 = 1 using efficient iteration	of  <Omega>n+1	=  (1  +
			 <Omega>n) / (1 + e^<Omega>n).
		 phi	 compute the Golden Ratio <phi> using series.
		 sine	 compute  sin(<theta>)	for  <theta> = 0 to 2<pi> 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 protection 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 combina-
		 tions.

	  --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  256 MB. 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(2) remap'd pages into memory causing more mem-
		 ory pressure by preventing pages from swapped out.

	  --mreamp-numa
		 assign memory mapped pages to	randomly  selected  NUMA  nodes.
		 This is disabled for systems that do not support NUMA.

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

     Memory Sealing
	  --mseal N
		 start	N  memory  sealing  stressors  that exercise madvise(2),
		 mremap(2), mprotect(2) and mseal(2) operations on two pages  of
		 of  memory mapped anonymous private memory. Linux 6.10+ kernels
		 only.

	  --mseal-ops N
		 stop after N msealed memory 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 mes-
		 sage 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 256
		 MB. 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  com-
		 pleted.

     ISO C mtx (mutex) stressor
	  --mtx N
		 start N stressors that exercise ISO C mutex locking and unlock-
		 ing.

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

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

     Unmapping shared non-executable memory stressor (Linux)
	  --munmap N
		 start N stressors that exercise unmapping  of	shared	non-exe-
		 cutable mapped regions of child processes (Linux only). The un-
		 mappings  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  un-
		 locking.  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 un-
		 lock.

	  --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(2)
		 with random delays from 1 to 2^18 nanoseconds. This should  ex-
		 ercise 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  meth-
		 ods:

		 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 concon-
			 current 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 1<mu>s (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(2) com-
		 mands across all the available network devices. The ioctls  ex-
		 ercised   by	this   stressor  are  as  follows:  SIOCGIFCONF,
		 SIOCGIFINDEX,	  SIOCGIFNAME,	  SIOCGIFFLAGS,     SIOCGIFADDR,
		 SIOCGIFNETMASK,   SIOCGIFMETRIC,   SIOCGIFMTU,   SIOCGIFHWADDR,
		 SIOCGIFMAP and SIOCGIFTXQLEN. See netdevice(7) for more details
		 of these ioctl commands.

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

     Netlink proc 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 stressor (Linux)
	  --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 instruc-
		 tions. 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) and fnop. 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 random 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-oper-
		 ation is equivalent to 256 loops of 256 no-op instructions.

     /dev/null stressor
	  --null N
		 start	 N   workers  that  exercise  /dev/null  with  write(2),
		 lseek(2), ioctl(2),  fcntl(2),  fallocate(2)  and  fdatasync(2)
		 calls.   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 4 K writes with no additional  ex-
		 ercising on /dev/null.

     Migrate memory pages over NUMA nodes stressor
	  --numa N
		 start N workers that migrate stressors and a 4 MB memory mapped
		 buffer  around  all  the  available  NUMA nodes.  This uses mi-
		 grate_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  hard-
		 ware with NUMA enabled.

	  --numa-bytes N
		 specify the total number bytes to be exercised by all the work-
		 ers,  the  given  size  is divided by the number of workers and
		 rounded to the nearest page size.  The  default  is  4  MB  per
		 worker. One can specify the size as % of total available memory
		 or  in units of Bytes, KBytes, MBytes and GBytes using the suf-
		 fix 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  exer-
		 cise  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.  Run-
		 ning  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 stres-
		 sor.

	  --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)  opera-
		 tions on /dev/zero. The maximum opens at one time is system de-
		 fined,  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 sys-
		 tem 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(2) mmap'd and mremap'd pages into memory caus-
		 ing more memory pressure by preventing pages from swapped out.

	  --pagemove-numa
		 assign memory mapped pages to	randomly  selected  NUMA  nodes.
		 This is disabled for systems that do not support NUMA.

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

     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(2) 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. Run-
		 ning as root will allow config and  resource  mmappings  to  be
		 read and exercises PCI I/O mapping.

	  --pci-dev xxxx:xx:xx.x
		 specify  a  PCI device to exercise rather than exercise all PCI
		 devices. The device is specified  using  the  PCI  device  name
		 xxxx:xx:xx.x where x is a hexadecimal digit.

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

	  --pci-ops-rate N
		 specify  the  PCI  bogo-ops per second rate. This is useful for
		 PCI bandwidth limiting and on x86 systems this may  reduce  un-
		 core transactions.

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

     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 mmap stressor
	  --physpage N
		 start N workers that use  /proc/self/pagemap  and  /proc/kpage-
		 count	to  determine the physical page and page count of a vir-
		 tual mapped page and a page that is shared among all the stres-
		 sors. 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.

     Physical page mmap stressor (using /dev/mem)
	  --physmmap N
		 start N workers that try to mmap available System RAM (as spec-
		 ified by /proc/iomem) using /dev/mem and randomized private  or
		 shared pages. This requires CAP_SYS_ADMIN capabilities to fully
		 read  /proc/iomem  and  mmap onto /dev/mem. Note systems may be
		 fully locked down and mmapping onto /dev/mem is impossible.

	  --physmmap-ops N
		 stop physmmap stress workers after N bogo mmap attempts.

	  --physmmap-read
		 perform 64 bit reads of all the data in each mmap'd page.

     Process signals (pidfd_send_signal) stressor
	  --pidfd N
		 start	N  workers  that  exercise  signal   sending   via   the
		 pidfd_send_signal(2)  system call.  This stressor creates child
		 processes  and  checks  if  they  exist  and  can  be	stopped,
		 restarted  and  killed  using	the  pidfd_send_signal(2) 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 ex-
		 ercise 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  sup-
		 port  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  protec-
		 tion  key  pkey(2)  and the pkey_mprotect(2) call (Linux only).
		 This will try to allocate a pkey and use this for the page pro-
		 tection, 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 se-
		 lected 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  incre-
		 mented  by  one.  The	following example performs 10000 nop in-
		 structions per bogo-op:

		    int stress_example(void)
		    {
			    int i;

			    for (i = 0; i < 10000; i++) {
				    __asm__ __volatile__("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 func-
		 tion(s).

	  --plugin-so name
		 specify the shared library containing the user provided  stres-
		 sor 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/ps-
		 elect	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.

	  --poll-random-us N
		 use a random timeout of N microseconds for  ppoll(2)  and  pse-
		 lect(2) calls instead of the default of 20000 microseconds.

     Power maths functions
	  --powmath N
		 start N workers that exercise various libm power functions with
		 input	values	0 to 1 in steps of 0.001; the results are sanity
		 checked to ensure no variation occurs after each round of 10000
		 computations.

	  --powmath-ops N
		 stop after N power function bogo-operation loops.

	  --powmath-method method
		 specify a power function to exercise. Available power	function
		 stress methods are described as follows:

		 Method  Description
		 all	 iterate over all the below power functions methods
		 cpow	 complex double power function
		 cpowf	 complex float power function
		 cpowl	 complex long double power function
		 csqrt	 complex double square root function (1/2 power)
		 csqrtf  complex float square root function (1/2 power)
		 csqrtl  complex long double square root function (1/2 power)
		 cbrt	 double cube root function (1/3 power)
		 cbrtf	 float cube root function (1/3 power)
		 cbrtl	 long double cube root function (1/3 power)
		 hypot	 double Euclidean distance function (hypotenuse)
		 hypotf  float Euclidean distance function (hypotenuse)
		 hypotl  long double Euclidean distance function (hypotenuse)
		 pow	 double power function
		 powf	 float power function
		 powl	 long double power function
		 sqrt	 double square root function (1/2 power)
		 sqrtf	 float square root function (1/2 power)
		 sqrtl	 long double square root function (1/2 power)

     Prctl stressor
	  --prctl N
		 start N workers that exercise the majority of the prctl(2) sys-
		 tem 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 archi-
		 tecture 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
		 x  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	8 K 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 sta-
		 tistics 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-tempo-
				 ral data with respect to all cache levels) into
				 a location close to the  processor,  minimizing
				 cache pollution (x86 only).
		 prfm_pldl1keep  Use  the aarch64 prfm instruction with pld1keep
				 operation (retained or temporal prefetch, allo-
				 cated in the cache normally) to  prefetch  data
				 into  level  1  of the cache hierarchy (aarch64
				 only).
		 prfm_pldl2keep  Use the aarch64 prfm instruction with	pld1keep
				 operation (retained or temporal prefetch, allo-
				 cated	in  the cache normally) to prefetch data
				 into level 2 of the  cache  hierarchy	(aarch64
				 only).
		 prfm_pldl3keep  Use  the aarch64 prfm instruction with pld1keep
				 operation (retained or temporal prefetch, allo-
				 cated in the cache normally) to  prefetch  data
				 into  level  3  of the cache hierarchy (aarch64
				 only).
		 prfm_pldl1strm  Use the aarch64 prfm instruction with	pld1strm
				 operation  (streaming or non-temporal prefetch,
				 for data that is used only  once)  to	prefetch
				 data  into  level  1  of  the	cache  hierarchy
				 (aarch64 only).
		 prfm_pldl2strm  Use the aarch64 prfm instruction with	pld1strm
				 operation  (streaming or non-temporal prefetch,
				 for data that is used only  once)  to	prefetch
				 data  into  level  2  of  the	cache  hierarchy
				 (aarch64 only).
		 prfm_pldl3strm  Use the aarch64 prfm instruction with	pld1strm
				 operation  (streaming or non-temporal prefetch,
				 for data that is used only  once)  to	prefetch
				 data  into  level  3  of  the	cache  hierarchy
				 (aarch64 only).

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

     Search for prime numbers using large integers
	  --prime N
		 start N workers that find prime numbers using the GNU	Multiple
		 Precision  Arithmetic	Library  for  large  integers.	The  GMP
		 mpz_nextprime function is used to find primes	and  it  uses  a
		 probabilistic	algorithm to identify primes, but there is a ex-
		 tremely small chance that the values found are  non-prime.  The
		 search becomes computationally more expensive over time to find
		 larger  and  larger  primes, hence the bogo-op rate will reduce
		 over time.

	  --prime-method [ factorial | inc | pwr2 | pwr10 ]
		 selects the method of calculating the next value from where  to
		 start	searching primes and hence how large the primes get. The
		 default is inc, the methods to start searching for  primes  are
		 described as follows.

		 Method     Description
		 factorial  start  of  search based on factorial expansion. This
			    grows rapidly.
		 inc	    start of search based on increments by 2. This grows
			    very slowly.
		 pwr2	    start of search based on powers of	2.  Grows  rela-
			    tively quickly.
		 pwr10	    start  of  search  based on powers of 10. Grows by 1
			    digit per iteration and grows quickly.

	  --prime-ops N
		 stop after finding N prime numbers.

	  --prime-progress
		 show the number of primes found and  length  of  largest  prime
		 found.  This  is displayed either every 60 seconds or more than
		 60 seconds if it takes longer to find the next prime.

	  --prime-start N
		 start the prime search from value N. The value may be expressed
		 as an integer value or as a floating point value (e.g. 1e200 to
		 express a very large starting value).

     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 pri-
		 ority	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 | ext | idle | fifo | other | rr ]
		 select  the  scheduling  policy. "Normal" policies (batch, ext,
		 idle and other) can be selected as an unprivileged  user,  how-
		 ever  "Real  Time"  policies (fifo and rr) can only be selected
		 with the appropriate privilege.  By default "fifo" is	selected
		 but it will 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  privi-
		 leged 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.

     pwrite/pread lseek I/O stressor
	  --pseek N
		 start	N  workers  that  exercise  pwrite(2)  and pread(2) with
		 lseek(2) positioning tests.  Each worker  has	4  sub-processes
		 that  perform	repeated  pwrite  and pread operations using the
		 same shared file descriptor. Two of the processes  are  started
		 using	pthreads  (if  available),  another  two  processes  are
		 started with fork(2). Using pwrite and pread should perform I/O
		 without altering the shared file descriptor  file  offset.  The
		 main  worker  process	performs I/O using lseek(2)/write(2) and
		 lseek(2)/read(2) calls that change the file offset; lseeks  are
		 sanity  checked  to see if they are being altered by pwrite and
		 pread calls.

	  --pseek-io-size N
		 specify size of each write/read I/O operation	in  bytes.  Size
		 can be from 1 byte to 1 MB.

	  --pseek-ops N
		 stop after N writes by the main worker process.

	  --pseek-rand
		 normally  each  sub-process  writes to a fix file offset, using
		 this option will randomize the offset on each write/read cycle.

     Pthread stressor
	  --pthread N
		 start N workers that iteratively creates and terminates  multi-
		 ple 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  to-
		 gether.

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

     Pointer Chasing stressor
	  --ptr-chase N
		 start	N  workers  that chase memory pointers around page sized
		 nodes of pointers.  By default each stressor instance allocates
		 4096 pages of nodes, each node is an array of pointers that are
		 randomly set to point to other node pages.  The stressors  fol-
		 low randomly chosen pointers from each node, chasing around the
		 entire  node  space.  This  exercises pointer fetching, pointer
		 dereferencing and is  a  cache-read  exercising  stressor.  The
		 nodes	are  allocated	with  50% of pages from the heap and 50%
		 from mmap'd memory.

	  --ptr-chase-ops N
		 stop after N pointer chases

	  --ptr-chase-pages N
		 select number of pages to allocate for the nodes.

     Pseudo-terminals (pty) stressor
	  --pty N
		 start N workers that repeatedly attempt to open pseudoterminals
		 and perform various pty ioctl(2) calls  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(3).

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

     Quota stressor
	  --quota N
		 start	N workers that exercise the Q_GETQUOTA, Q_GETFMT, Q_GET-
		 INFO, 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.  Avail-
		 able methods are described as follows:

		 Method    Description
		 all	   iterate over all the race-sched methods as listed be-
			   low:
		 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  radix-
		 sort(3)

	  --radixsort-method [ radixsort-libc | radixsort-nonlibc ]
		 select  either the libc implementation of radixsort or an opti-
		 mized implementation of radixsort. The default is the libc  im-
		 plementation 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 x
		 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 2 MB.

	  --ramfs-fill
		 fill ramfs with zero'd data using fallocate(2) if it is  avail-
		 able 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 under-
		 lying device block size.  By default, this stressor will  exer-
		 cise all the of the rawdev methods (see the --rawdev-method op-
		 tion).  This  is a Linux only stressor and requires root privi-
		 lege 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 op-
		 erations.

     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 ob-
		 jects.  This is designed to exerise memory and cache thrashing.
		 Normally the objects are allocated on the heap, however for ob-
		 jects of page size or larger there is a 1 in 16 chance  of  ob-
		 jects	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, 100000 items are al-
		 located.

	  --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 x
		 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 ex-
		 ist, 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 x
		 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  ran-
		 dom  number generator This uses the rdrand instruction on Intel
		 x86 processors or the darn instruction on PowerPC 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(2). The  de-
		 fault	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  per-
		 form  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 privi-
		 leges that will not actually reboot the system.

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

     POSIX regular expressions stressor
	  --regex N
		 start N workers that compile various POSIX regular  expressions
		 and  execute them against a set of text strings. This exercises
		 the regex C library with a range of various simple and  complex
		 regex expressions.

	  --regex-ops N
		 stop after N regex compilations.

     CPU registers stressor
	  --regs N
		 start	N workers that shuffle data around the CPU registers ex-
		 ercising 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  re-
		 quires 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 us-
		 ing  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(2) 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 re-
		 name 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 stres-
		 sor 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(2) occurs
		 to force heavy rescheduling activity.	When the -v verbose  op-
		 tion  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 vari-
		 ous  file descriptors (eventfds, memoryfds, userfaultfds, pipes
		 and sockets).

	  --resources-mlock
		 attempt to mlock(2) mmap'd pages into memory causing more  mem-
		 ory 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 be-
		 tween 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
		 and with a readahead option to force a  readahead  action  over
		 the entire file once it has been completely written.

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

     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 in-
		 stead 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  resource  limits  via  setting
		 rlimit(2) and trying to exceed these limits,  generating  SIGX-
		 CPU, SIGXFSZ and SIGSEGV 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 cre-
		 ates 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  SIGSEGV  han-
		 dler 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  han-
		 dled critical section.

     Real-time clock stressor
	  --rtc N
		 start	N workers that exercise the real time clock (RTC) inter-
		 faces 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 du-
		 ration 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 sched-
		 uling	policies  out  of  SCHED_OTHER, SCHED_BATCH, SCHED_IDLE,
		 SCHED_FIFO, SCHED_RR, SCHED_DEADLINE  and  SCHED_EXT.	For  the
		 real  time  scheduling  policies a random sched priority is se-
		 lected between the minimum and maximum scheduling priority set-
		 tings.

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

	  --schedpolicy-rand
		 Select scheduling policy randomly so that the new policy is al-
		 ways 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  ex-
		 ist, 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 x 4) - 1 are used for ipv4, ipv6 domains and ports P to P  -
		 1 are used for the unix domain.

	  --sctp-sched [ fc | fcfs | prio | rr | wfq ]
		 specify  SCTP scheduler, one of fc (fair capacity), fcfs (first
		 come  first  served,  the   default),	 prio	(priority),   rr
		 (round-robin) or wfq (weighted fair queueing)

     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 fil-
		 tering.  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(2)  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  mem-
		 ory is exhausted.  Note this is a Linux 5.11+ only stressor and
		 the kernel needs to be booted with "secretmem=" option to allo-
		 cate 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  8 K 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  op-
		 erations.  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  opera-
		 tions.

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

	  --sem-shared
		 share the semaphore across all sem stressor instances. Normally
		 each semaphore stressor  shares  a  semaphore	with  its  child
		 processes,  this  option  produces  more locking contention and
		 less throughput by sharing a  semaphore  across  all  semaphore
		 stressor processes.

     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.

	  --sem-sysv-setall
		 sets the semval values for all the semaphores	in  the  child's
		 semaphore  set.  This depends on the semctl SETALL op being de-
		 fined and GETALL succeeding and is an opt-in option as it  will
		 affect the semaphore being exercised.

     Sendfile stressor
	  --sendfile N
		 start	N workers that send an empty file to /dev/null using the
		 sendfile(2) call. This operation spends nearly all the time  in
		 the  kernel.	The default sendfile size is 4 MB.  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  de-
		 fault size is 4 MB. 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(2), sethostname(2),
		 setpgid(2), setpgrp(2), setuid(2),  setgroups(2),  setreuid(2),
		 setregid(2), setresuid(2), setresgid(2) and setrlimit(2).  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(3).

	  --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 x 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 8 MB in size.

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

	  --shm-mlock
		 attempt  to  mlock(2) 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 opera-
		 tions are complete.

     System V shared memory stressor
	  --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 8
		 MB 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(2) 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 success-
		 fully handled.

     SIGBUS stressor
	  --sigbus N
		 start N workers that rapidly create and catch bus errors gener-
		 ated 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  sig-
		 nals.	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 success-
		 fully 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.

     SIGHUP stressor
	  --sighup N
		 start N workers that generate SIGHUP signals using raise(2) and
		 by killing a group leader process with a  child  process  indi-
		 rectly receiving SIGHUP when it loses the group leader.

	  --sighup-ops N
		 stop sighup stressor workers after N SIGHUP signals

     SIGILL stressor
	  --sigill N
		 start	N  workers that execute illegal instructions to generate
		 SIGILL signals.

	  --sigill-ops N
		 stop sigill stressor workers after N SIGILL signals

     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 dif-
		 ferent signal handlers, SIG_IGN (ignore), a SIGCHLD handler and
		 SIG_DFL  (default action).  For the SIGCHLD handler, the stres-
		 sor 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  al-
		 ternative  signal  stack is used that is large enough to handle
		 all the nested signal calls.  The -v option will  log	the  ap-
		 proximate 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 pend-
		 ing/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 SIG-
		 PIPE  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 op-
		 erations.

     SIGSEGV 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(SIG-
		 TRAP). Only x86 Linux systems the SIGTRAP is also generated  by
		 an int 3 instruction.

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

     SIGURG stressor
	  --sigurg N
		 start workers that exercise the SIGURG signal by  sending  out-
		 of-band data over a TCP/IP IPv4 socket stream.

	  --sigurg-ops N
		 stop  sigurg  stressor workers after N SIGURG signals have been
		 handled.

     SIGVTARLM stressor
	  --sigvtalrm N
		 start N workers that exercise the  SIGVTALRM  signal  using  an
		 ITIMER_VIRTUAL  itimer  and  a busy loop that consumes CPU time
		 calling getitimer for the ITIMER_VIRTUAL timer.

	  --sigvtalrm-ops N
		 stop sigvtalrm stress workers after N	SIGVTALRM  signals  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(2) call.

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

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

     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  cy-
		 cles are completed.

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

     Time interrupts and context switches stressor
	  --sleep N
		 start N workers that spawn off multiple threads that each  per-
		 form  multiple sleeps of ranges 1us to 0.1s.  This creates mul-
		 tiple 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 in-
		 terrupts (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  privi-
		 lege and is only implemented on x86 Linux platforms. This prob-
		 ably  does not work in a virtualized environment.  The stressor
		 will attempt to determine the time stolen  by	SMIs  with  some
		 naive 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  ex-
		 ist, 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 itera-
		 tion. 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/net-
		 filter/nf_conntrack_max to allow more connections).

	  --sock-nodelay
		 This disables the TCP Nagle algorithm, so data segments are al-
		 ways  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 it-
		 eration.   Note  that sendmmsg is only available for Linux sys-
		 tems 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. se-
		 qpacket 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 vari-
		 ous file based system that don't normally act on  sockets.  The
		 kernel  should handle these illegal and unexpected calls grace-
		 fully.

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

	  --sockfd-reuse
		 reuse the file descriptor by passing it back from the	receiver
		 to  the  sender  and  re-sending  it  again rather than opening
		 /dev/null each time.

     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 ex-
		 ist, 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  pri-
		 ority	 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 re-
		 boots.

	  --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 imple-
		 mentations 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 val-
		 ues potentially non-existing values are  read,  known	existing
		 values  are  read and known existing values are marked as zero.
		 This default 500 x 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 posi-
			   tion.
		 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  posi-
			   tions 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  matri-
			   ces	cannot	be mmap'd due to lack of virtual address
			   limitations, and too many referenced pages can  trig-
			   ger 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  implementa-
			   tion,  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 x 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.

     Spinmem stressor
	  --spinmem N
		 start	N  workers  that  use  a  shared memory page to keep two
		 processes synchronized using busy spin loops. One process is  a
		 writer  that increments a value in memory slot 0 and spin waits
		 for the data to appear in memory slot 1. The other process spin
		 waits for the data to change in slot 0 and copies  the  changed
		 value into memory slot 1.  The stressor benchmarks the time for
		 the transactions to occur between both processes. Note that the
		 optimal  number  of stressors is half the number of online CPUs
		 in a system. By default 32 bit write/reads are used.

	  --spinmem-affinity
		 move spinmem stressor processes to randomly selected CPUs every
		 million spinmem transactions.

	  --spinmem-method [ 8bit | 16bit | 32bit | 64bit | 128bit ]
		 select the size of the memory write/reads, the  default  is  32
		 bit.  128  bit  read/writes  may not be supported by some tool-
		 chains.

	  --spinmem-numa
		 assign shared memory page to randomly selected NUMA nodes. This
		 is disabled for systems that do not support NUMA.

	  --spinmem-ops N
		 stop after N spinmem bogo operations. A bogo operation is  1000
		 transactions betewen the two spinmem processes.

	  --spinmem-yield
		 force scheduling yields after each spinmem read/write operation

     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 64 K. 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(2) 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)  sup-
		 ports 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 2 MB 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.

     Statmount and listmount system call stressor
	  --statmount N
		 start	N  workers  that  find mounts on / via listmount and get
		 mount information on the  mount  IDs  using  statmount.  (Linux
		 only).

	  --statmount-ops N
		 stop workers after iterating on mounts N times.

     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. Mc-
		 Calpin, Ph.D. This stressor allocates 3 buffers that are at the
		 size of the CPU L3 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 x c[i]
		 add	    c[i] = a[i] + b[i]
		 triad	    a[i] = b[i] + (c[i] x scalar)

		 Since this is loosely based on a variant of the  STREAM  bench-
		 mark  code,  DO  NOT  submit results based on this as it is in-
		 tended to in stress-ng just to stress memory  and  compute  and
		 NOT  intended for STREAM accurate tuned or non-tuned benchmark-
		 ing 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 com-
		 piler 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  ar-
		 rays 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 4 MB.

	  --stream-mlock
		 attempt to mlock(2) the stream buffers into memory  to  prevent
		 them from being swapped out.

	  --stream-madvise [ collapse | hugepage | nohugepage | normal ]
		 Specify the madvise(2) 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.

	  --stream-prefetch
		 compilers  such  as  gcc  have  optimization  options to insert
		 prefetching into memory fetch loops that may improve read  per-
		 formance.  This  option  enables this optimization, however, it
		 may lead to degraded performance if the compiler does	not  in-
		 sert  the  prefetching  in  the correct places.  Best to enable
		 this for the default --stream-index 0 setting.

     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.

	  --swap-self
		 attempt to swap out pages of the stressor.

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

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

	  --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  per-
		 formed,  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 syn-
		 chronized across N stressor processes. By default repeated  cy-
		 cles  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 ex-
		 ercise bad address and fault handling. The addresses  used  are
		 null  pointers, read only pages, write only pages, unmapped ad-
		 dresses, 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 x the geo-
			    metric mean of all the test times
		 geomean1   select tests that are less or equal to 3 x the  geo-
			    metric 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  spe-
		 cific	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) sys-
		 tem 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 han-
		 dling 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 ad-
		 dress 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 han-
		 dler 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 de-
		 scriptor  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  stres-
		 sor.

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

     Timer Mix stressor
	  --timermix N
		 start N workers creating timer and itimer  signals  at  a  high
		 rate,	this  can  create a many thousands of timer clock inter-
		 rupts per second. Each signal that gets handled is counted as a
		 bogo-operation. For timers, the following clocks  types  (where
		 available)    are    used:   CLOCK_REALTIME,	CLOCK_MONOTONIC,
		 CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID,  CLOCK_BOOT-
		 TIME  and  CLOCK_TAI. For itimers, the following interval timer
		 types are used: ITIMER_REAL,  ITIMER_VIRTUAL  and  ITIMER_PROF.
		 Some  systems	may  support  none or a subset of these timer or
		 itimer types. The freqeuency of the itimers is auto-adjusted to
		 try and maximize the timer interrupt rate.

	  --timermix-ops N
		 stop after N signals from timers and itimers.

     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 unex-
		 pected 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 opera-
		 tions 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  syn-
		 chronous 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  den-
		 try  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 250000 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  ad-
		 dition, 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  avail-
		 able)	and tan libm trigonometric functions using float, double
		 and long double floating point variants. Each function is exer-
		 cised 10000 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 com-
		 pleted.

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

     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  de-
		 stroys  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/destroy-
		 ing 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 ex-
		 ist, 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 ex-
		 ist, 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.

     File umask stressor
	  --umask N
		 start N workers that exercise setting	umask  and  creating/fs-
		 tat'ing/closing/unlinking  a file and checking the file mode is
		 set correctly. This exercises umask mask values from octal 0000
		 to 0777 inclusive.

	  --umask-ops N
		 stop after N rounds of exercising umask values 0000 to 0777.

     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  exercise /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 opera-
		 tions.

     Unlink stressor
	  --unlink N
		 start N workers that each run 4 processes per worker that  cre-
		 ate,  open,  unlink and close 1024 files in randomized order to
		 exercise unlinking (removal) of files. This attempts to  create
		 races on file creation, linking and unlinking.

	  --unlink-ops N
		 stop  after N bogo rounds of unlink operations on 1024 files by
		 the controlling worker.

     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(2)
		 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  opera-
		 tions (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(2) 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 de-
		 fault is 16 MB.  One can specify the size as % of total  avail-
		 able memory or in units of Bytes, KBytes, MBytes and GBytes us-
		 ing 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.

     Varying load stressor
	  --varyload N
		 start N workers that vary the system load using 1 to N runnable
		 varyload stressor instances. Depending on  the  --varyload-type
		 the  number of varyload instances running at any moment of time
		 is changed to scale up or scale down the running load. Varyload
		 instances are temporarily stopped and started by a  controlling
		 instance   sending   SIGSTOP	and  SIGCONT  signals  to  these
		 processes.

	  --varyload-ops N
		 stop ater N varyload 1ms bogo cycles

	  --varyload-ms M
		 vary the load every M milliseconds (from 1 to 3600000 millisec-
		 onds). The load is changed based on the --varyload-type option.

	  --varyload-sched P
		 select the scheduler policy, may be  one  of  batch,  deadline,
		 ext, fifo, idle, rr or other.

	  --varyload-method M
		 select  CPU loading method. The available methods are described
		 as follows:

		 Method  Description
		 all		      randomly select any one of all the follow-
				      ing 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  1  MB  buffer  using mem-
				      move(3).
		 memread	      read from a 1 MB buffer using fast  memory
				      reads.
		 memset 	      write to a 1 MB 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 avail-
				      able.
		 procname	      where  possible,	 change   the	stressor
				      process name.
		 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.
		 vecfp		      perform multiplication and addition  on  a
				      vector  of  64  double  precision floating
				      point values.

	  --varyload-type T
		 select the varying load type. The available types are described
		 as follows:

		 Type	   Description
		 all	   cycle through all the varyload  types,  running  each
			   type for 20 seconds at a time.
		 brown	   repeatedly  vary  the  load	using brown noise, using
			   random increment/decrement in load.
		 triangle  repeatedly vary the load from 1 up to N and then down
			   to 1 in increments of 1.
		 saw-inc   repeatedly vary the load from 1 to N in increments of
			   1 and then directly back down to 1.
		 saw-dec   repeatedly vary the load from N down to 1  in  decre-
			   ments of 1 and then directly back up to N.
		 pulse	   repeatedly  vary  the  load	directly from 1 to N and
			   then directly back down to 1.
		 random    randomly select load in range 1..N.

	  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(2), getcpu(2), gettimeofday(2)  and
		 time(2).

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

     Vector integer comparison operations stressor
	  --veccmp N
		 start N workers that perform various unsigned integer math com-
		 parison operations on various 128 bit vectors. A mix of integer
		 vector  comparison  operations  are  performed on the following
		 vectors: 16 x 8 bits, 8 x 16 bits, 4 x 32 bits, 2 x 64 bits and
		 if supported 1 x 128 bits. The metrics produced by this mix de-
		 pend on the processor architecture and the vector math  optimi-
		 sations produced by the compiler.

	  --veccmp-ops N
		 stop after N bogo vector integer comparison operations.

     Vector floating point operations stressor
	  --vecfp N
		 start	N workers that exericise floating point (single and dou-
		 ble 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 meth-
		 ods  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  preci-
				sion floating point values
		 floatv64mul	multiplication	of  a vector of 64 single preci-
				sion floating point values
		 floatv32mul	multiplication of a vector of 32  single  preci-
				sion floating point values
		 floatv16mul	multiplication	of  a vector of 16 single preci-
				sion 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  preci-
				sion floating point values
		 doublev64mul	multiplication	of  a vector of 64 double preci-
				sion floating point values
		 doublev32mul	multiplication of a vector of 32  double  preci-
				sion floating point values
		 doublev16mul	multiplication	of  a vector of 16 double preci-
				sion 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 ex-
		 ample, one bogo-op on a 16 wide vector is equivalent to 65536 x
		 2 x 16 floating point operations.

     Vector math operations stressor
	  --vecmath N
		 start	N workers that perform various unsigned integer math op-
		 erations on various 128 bit vectors. A mix of vector math oper-
		 ations are performed on the following vectors: 16 x 8 bits, 8 x
		 16 bits, 4 x 32 bits, 2 x 64 bits and where supported 1  x  128
		 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 opera-
		 tions 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	x  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  exer-
		 cises	various  processor vector instruction mixes and how well
		 the compiler can map the vector operations to	the  target  in-
		 struction 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 fea-
		 ture  enabled.  The  test attempts to creates a small file with
		 multiple small extents and enables verity on the file and veri-
		 fies 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 itera-
		 tion. 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 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 mad-
		 vise(2) on all pages of the  vforked  process.  Where	possible
		 this  will  try to set every page in the new process with using
		 madvise(2)  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 de-
		 fault is 64 MB. 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  sys-
		 tems  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 in total, this is shared by each	vm  worker,  the
		 default  is  256  MB.	 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-flush
		 cache	flush  mapped  memory  after each memory region has been
		 completely written to.

	  --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-writ-
		 ing 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  `col-
		 lapse',  `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  thor-
		 oughly  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 er-
		 rors.

		 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.
		 checkerboard  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 direc-
			       tion  and  odd  addressed bytes in reverse direc-
			       tion. 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 sequen-
			       tially  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 gen-
			       erates a ring of  2^32 - 1 unique values (all  32
			       bit values except for 0).
		 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  in-
			       verse.  Then it checks see if the first byte con-
			       tains the expected random pattern. This exercises
			       cache store/reads as well as seeing if neighbour-
			       ing cells influence each other.
		 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 in-
			       vert each 64 bit pattern and again check  if  the
			       memory is set as expected.
		 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.
		 one-zero      set all memory bits to one and then check if  any
			       bits  are  not one. Next, set all the memory bits
			       to zero and check if any bits are not zero.
		 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.
		 prime-incdec  step through memory in large prime  steps  incre-
			       menting	bytes  and then re-do again decrementing
			       bytes.
		 rand-set      sequentially work through memory in 64 bit chunks
			       setting bytes in the chunk to the same 8 bit ran-
			       dom value.  The	random	value  changes	on  each
			       chunk.  Check that the values have not changed.
		 rand-sum      sequentially  set all memory to random values and
			       then summate the number of bits that have changed
			       from the original set values.
		 read64        sequentially read memory using 32 x 64 bit  reads
			       per  bogo loop. Each loop equates to one bogo op-
			       eration.  This exercises raw memory reads.
		 ror	       fill memory with a random pattern  and  then  se-
			       quentially  rotate 64 bits of memory right by one
			       bit, then check the final load/rotate/stored val-
			       ues.
		 rowhammer     try to force memory corruption using the  rowham-
			       mer  memory stressor. This fetches two 32 bit in-
			       tegers from memory and forces a	cache  flush  on
			       the  two  addresses multiple times. This has been
			       known to force bit flipping on some hardware, es-
			       pecially with lower frequency memory refresh  cy-
			       cles.
		 swap	       fill  memory  in  64 byte chunks with random pat-
			       terns. 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.
		 walk-0a       in the given memory mapping, work through a range
			       of specially chosen addresses working through ad-
			       dress lines to see if any address lines are stuck
			       low.  This  works  best	with physical memory ad-
			       dressing, however, exercising these  virtual  ad-
			       dresses has some value too.
		 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 ex-
			       pected. This checks if any data lines are stuck.
		 walk-1a       in the given memory mapping, work through a range
			       of specially chosen addresses working through ad-
			       dress lines to see if any address lines are stuck
			       high. This works best with  physical  memory  ad-
			       dressing,  however,  exercising these virtual ad-
			       dresses has some value too.
		 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 ex-
			       pected. This checks if any data lines are stuck.
		 walk-flush    walk through  memory  a	byte  at  a  time  writ-
			       ing/flushing/reading  8	bytes  of incrementing 8
			       bit data. For  architectures  that  support  user
			       space  cache  flushing  this will cause high data
			       cache miss rates.
		 write64       sequentially write to memory using 32  x  64  bit
			       writes  per  bogo  loop. Each loop equates to one
			       bogo operation. This exercises raw memory writes.
			       Note that memory writes are not	checked  at  the
			       end of each test iteration.
		 write64ds     sequentially  write  to	memory using 32 x 64 bit
			       direct store writes per	bogo  loop.   Each  loop
			       equates	to  one  bogo  operation. This exercises
			       cacheless write combining (WC) memory type proto-
			       col for memory writes and is  only  available  on
			       x86  systems  with the movediri instruction built
			       with gcc and clang compilers.  Note  that  memory
			       writes  are  not  checked at the end of each test
			       iteration.
		 write64nt     sequentially write to memory using 32  x  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 x 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-tem-
			       poral  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 proces-
			       sors 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-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

	  --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 8 MB to 64  MB
		 per  worker  and  try to generate cache and TLB inefficient ad-
		 dressing 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  be-
			  low.
		 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  posi-
			  tions  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  in-
			  verted.
		 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 in-
			  verted, hence all bits change apart from 1 in the  ad-
			  dress range.
		 inc	  work	through the address range forwards sequentially,
			  byte by byte.
		 incinv   like inc, but with all the relevant address  bits  in-
			  verted.
		 pwr2	  work	through  memory  addresses in steps of powers of
			  two.
		 pwr2inv  like pwr2, but with the all relevant address bits  in-
			  verted.
		 rev	  work	through  the  address range with the bits in the
			  address range reversed.
		 revinv   like rev, but with all the relevant address  bits  in-
			  verted.

	  --vm-addr-mlock
		 attempt to mlock(2) pages into memory causing more memory pres-
		 sure by preventing pages from swapped out.

	  --vm-addr-numa
		 assign  memory  mapped  pages	to randomly selected NUMA nodes.
		 This is disabled for systems that do not support NUMA.

	  --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 us-
		 ing process_vm_writev(2) and process_vm_readv(2). This is  fea-
		 ture  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 16  MB.	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 ad-
		 dress 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 us-
		 ing  vmsplice(2)  and	splice(2).   This  is only available for
		 Linux.

	  --vm-splice-bytes N
		 transfer N bytes per vmsplice call, the default is  64  K.  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(2), munmap(2),
		 mlock(2), munlock(2), madvise(2), msync(2),  mprotect(2),  min-
		 core(2) and access 32 pages in a randomly selected virtual mem-
		 ory  address  space. This is designed to trip races on VMA page
		 modifications.  Every 15 seconds a  different	virtual  address
		 space is randomly 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 instruc-
		 tions (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 sum-
		 mation. 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  opera-
			      tions on 64 x 8 bit integers, (x86 vpaddb)
		 vpaddb256    8  bit vector addition using 256 bit vector opera-
			      tions on 32 x 8 bit integers, (x86 vpaddb)
		 vpaddb128    8 bit vector addition using 128 bit vectors opera-
			      tions on 32 x 8 bit integers, (x86 vpaddb)
		 vpaddb       8 bit vector addition using 8 bit sequential addi-
			      tion (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 x 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 x 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 x 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 x 8 bit  in-
			      tegers, (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 x 8 bit in-
			      tegers, (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 x 8 bit  in-
			      tegers, (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  PPC64  the
		 yield,  mdoio	and mdooom instructions are used. For RISC-V the
		 pause instruction is used. For Loong64 the dbar instruction  is
		 used. For other architectures no-op 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 in-
		 terface  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  de-
		 vice  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  avail-
		 able 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, wc-
		 scasecmp, wcscat, wcschr, wcscoll, wcscmp, wcscpy, wcslen,  wc-
		 sncasecmp,  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 be-
		 tween work items. By default a 100000 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 x
		 L  /  100  microseconds.   The --workload-threads 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 re-
		 spect to the run quanta duration. Essentially the run	duration
		 of each work item is the quanta duration Q x 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 follow-
				      ing 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  1  MB  buffer  using  mem-
				      move(3).
		 memread	      read  from a 1 MB buffer using fast memory
				      reads.
		 memset 	      write to a 1 MB 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  avail-
				      able.
		 procname	      where   possible,   change   the	stressor
				      process name.
		 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.
		 vecfp		      perform  multiplication  and addition on a
				      vector of  64  double  precision	floating
				      point values.

	  --workload-sched [ batch | deadline | ext | fifo | idle | other | rr ]
		 select  scheduling  policy. Note that deadline, fifo and rr re-
		 quire root privilege.

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

	  --workload-quanta-us Q
		 specify the duration of each work item in microseconds. The de-
		 fault 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 (default is 2). When N is 0, no
		 threads are used and the work items are  run  back-to-back  se-
		 quentially  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 | ran-
	  dom3 ]
		 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  us-
			  ing 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 in-
		 struction to call the getcpu(2),  geteuid(2),	getgid(2),  get-
		 pid(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,  ge-
		 teuid, 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 ex-
		 tended 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  opera-
		 tions.

	  --yield-procs N
		 specify  the  number of child processes to run per stressor in-
		 stance. The default is 2, range 1 to 65536.

	  --yield-sched [ batch | deadline | ext | fifo | idle | other | rr ]
		 select scheduling policy. Note that deadline, fifo and  rr  re-
		 quire root privilege.

     /dev/zero stressor
	  --zero N
		 start N workers that exercise /dev/zero with read(2), lseek(2),
		 ioctl(2)  and mmap(2) calls. For just /dev/zero read benchmark-
		 ing use the --zero-read option.

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

	  --zero-read
		 just  read /dev/zero with 4 K reads with no additional exercis-
		 ing 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.  De-
		 fault 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(<theta>).
		 fixed	      data stream is repeated 0x04030201.
		 gcr	      random  values as 4 x 4 bit data turned into 4 x 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  Ip-
			      sum text.
		 lehmer       Fast random values generated using Lehmer's gener-
			      ator using a 128 bit multiply.
		 lfsr32       Values generated from a 32 bit Galois linear feed-
			      back  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	Xn+1  =  r  x  Xn x (1 - Xn) 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 spec-
			      tral density is inversely proportional to the fre-
			      quency of the signal and hence  is  slightly  com-
			      pressible.
		 random       segments	of  the  data stream are created by ran-
			      domly calling the different data generation  meth-
			      ods.
		 rarely1      data  that  has  a single 1 in every 32 bits, ran-
			      domly located.
		 rarely0      data that has a single 0 in every  32  bits,  ran-
			      domly located.
		 rdrand       generate	random	data  using  rdrand  instruction
			      (x86) or use 64 bit mwc psuedo-random number  gen-
			      erator 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 64 K of random data at the high-
		 est 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 immedi-
		 ately 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 avail-
	    able memory for 1 hour. Thus each stressor uses 10% of the available
	    memory.

     stress-ng --vm 50% -t 1h

	    run virtual memory stressors on 50% of the number of online cpus for
	    1 hour.

     stress-ng --vm 200% -t 1h

	    run virtual memory stressors on 2 times the number	of  online  cpus
	    for 1 hour.

     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 1 GB 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  sequen-
	    tially one after another, for 1 minute per stressor.

     stress-ng --trig 25% --fp 50% --fma 25% -t 5m --verify

	    run  trigonometric	function  stressor  on	25%  of the online cpus,
	    floating point stressor on 50% of the online cpus  and  fused-multi-
	    ple-add  stressor on 25% of the online cpus for 5 minutes and enable
	    verification of results.

     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 permu-
	    tation 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 10000 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  pro-
	    duce 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 avail-
	    able CPU stressors for 1 hour, loading the CPUs at 90%  load  capac-
	    ity.

     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 --class io\?

	    show all the stressors in the io class

     sudo  stress-ng --class scheduler --seq 0 -t 1m --taskset-random --progress
     --klog-check

	    run all the scheduler exercising stressors sequentually on	all  on-
	    line  CPUs	for  1 minute per stressor type, frequently changing the
	    CPUs that the processes are running on, show progress and report any
	    detected kernel issues.

     stress-ng --all -1 --maximize --aggressive

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

     stress-ng --all 8 --with cpu,hash,nop,vm --timeout 1m

	    run  8 instances of cpu, hash, nop and vm stressors altogether for 1
	    minute.

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

	    run 8 instances of cpu, hash, nop and vm stressors one after another
	    for 1 minute each and show the run progress.

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

     stress-ng --taskset odd --cpu 32

	    run 32 instances of the CPU stressor and pin them  to  odd	numbered
	    CPUs.

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  ar-
		  chitecture 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 -
     please note that no support will be provided if stress-ng is packaged with-
     out this manual.

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 seg-
     ments 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 implementa-
     tions  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	(C)  2013-2021	Canonical Ltd, Copyright (C) 2021-2026 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.

				31 December 2025		    STRESS-NG(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=stress-ng&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help