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 com-
       puter 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 operating system	kernel interfaces.  stress-ng also has a  wide
       range  of CPU specific stress tests that	exercise floating point, inte-
       ger, bit	manipulation, 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 thrash-
       ing which may be	difficult to stop.

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

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

       One  can	 specify  the number of	processes to invoke per	type of	stress
       test; specifying	a zero value will  select  the	number	of  processors
       available as defined by sysconf(_SC_NPROCESSORS_CONF), if that can't be
       determined then the number of online CPUs is used. If the value is less
       than zero then the number of online CPUs	is used. Specifying the	number
       as  a  percentage  will select the percentage of	configured CPUs	(trun-
       cated down to nearest whole number).

OPTIONS
       General stress-ng control options:

       --abort
	      this option will force all running stressors  to	abort  (termi-
	      nate)  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 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	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	details	on how this affects interactive	scheduling be-
	      haviour.

       -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
	      different	 CPU  from the parent on startup. Note that during the
	      execution	of the stressor	the scheduler may choose move the par-
	      ent onto the same	CPU as the child. The  stressors  affected  by
	      this  option are client/server style stressors, such as the net-
	      work 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,   device,  fp,	 gpu,  interrupt,  integer,  ipc,  io,
	      filesystem, memory, network, os, pipe, scheduler,	 search,  sig-
	      nal,  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 stressors that	fall into that
	      class only when run with the --sequential	option.

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

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

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

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

       -h, --help
	      show help.

       --ignite-cpu
	      alter kernel controls to try and maximize	the CPU. This requires
	      root privilege to	alter various /sys interface  controls.	  Cur-
	      rently  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	excep-
	      tions, etc. Note that the	interrupts are accounted  to  all  the
	      concurrently running stressors, so total count for all stressors
	      is over accounted.

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

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

       -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 option per line. Lines may have comments with	 comment  text
	      proceeded	by the # character. A simple example is	as follows:

	      run sequential   # run stressors sequentially
	      verbose	       # verbose output
	      metrics-brief    # show metrics at end of	run
	      timeout 60s      # stop each stressor after 60 seconds
	      #
	      #	vm stressor options:
	      #
	      vm 2	       # 2 vm stressors
	      vm-bytes 128M    # 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	recom-
	      mended 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
	      report these as soon as they are detected. Linux	only  and  re-
	      quires 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 (ad-
	      dress 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 (ini-
	      tialized data, uninitialized  data,  and	heap),	see  rlimit(2)
	      RLIMIT_DATA.  The	parameter can be specified as an absolute num-
	      ber of bytes (e.g. 128M for 128 MB) or a percentage of the  cur-
	      rent 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 num-
	      ber of bytes (e.g. 2M for	2 MB) or a percentage of  the  current
	      free memory, e.g.	1%

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

       -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 emit-
	      ting 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  in-
	      jection sysfs interfaces need to be set inconjunction when using
	      this  option  and	 the kernel requires fault injection to	be en-
	      abled.

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

       --max-fd	N
	      set the maximum limit on file descriptors	(value or a % of  sys-
	      tem  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	avail-
	      able 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	gener-
	      ally more	useful for observing how a system behaves  when	 under
	      various kinds of load.

	      The following columns of information are output:

	      Column Heading		  Explanation
	      bogo ops			  number of iterations of the stressor
					  during  the  run.  This is metric of
					  how much  overall  "work"  has  been
					  achieved in bogo operations.	Do not
					  use  this  as	 a reliable measure of
					  throughput for benchmarking.
	      real time	(secs)		  average wall clock duration (in sec-
					  onds)	of the stressor. This  is  the
					  total	wall clock time	of all the in-
					  stances  of that particular stressor
					  divided  by  the  number  of	 these
					  stressors being run.
	      usr time (secs)		  total	 user  time  (in seconds) con-
					  sumed	running	all the	 instances  of
					  the stressor.
	      sys time (secs)		  total	 system	time (in seconds) con-
					  sumed	running	all the	 instances  of
					  the stressor.
	      bogo ops/s (real time)	  total	 bogo  operations  per	second
					  based	on wall	clock  run  time.  The
					  wall	clock time reflects the	appar-
					  ent run time.	 The  more  processors
					  one  has  on	a  system the more the
					  work load can	 be  distributed  onto
					  these	 and hence the wall clock time
					  will reduce and the  bogo  ops  rate
					  will	increase.  This	is essentially
					  the "apparent" bogo ops rate of  the
					  system.
	      bogo ops/s (usr+sys time)	  total	 bogo  operations  per	second
					  based	on cumulative user and	system
					  time.	  This	is  the	 real bogo ops
					  rate of the system taking into  con-
					  sideration the actual	time execution
					  time	of the stressor	across all the
					  processors.  Generally this will de-
					  crease as one	adds  more  concurrent
					  stressors   due   to	contention  on
					  cache,  memory,   execution	units,
					  buses	and I/O	devices.
	      CPU used per instance (%)	  total	percentage of CPU used divided
					  by  number  of  stressor  instances.
					  100% is 1 full CPU.  Some  stressors
					  run multiple threads so it is	possi-
					  ble  to  have	 a figure greater than
					  100%.
	      RSS Max (KB)		  resident set size (RSS), the portion
					  of memory  (measured	in  Kilobytes)
					  occupied  by	a process in main mem-
					  ory.

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

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

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

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

       --no-rand-seed
	      Do  not seed the stress-ng pseudo-random number generator	with a
	      quasi random start seed, but instead seed	it with	constant  val-
	      ues.  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 allo-
	      cations  and  hence adds some overhead to	the stressors and will
	      slow down	stressor allocation speeds.

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

       --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 veri-
	      fication 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  in-
	      stance  of  a  stressor  if the kernel OOM killer	terminates the
	      process. This option disables this default behaviour.

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

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

       --pause T
	      pause T seconds between each stressor. This is useful for	allow-
	      ing 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  values".	Note  that  with  Linux	 4.7 one needs to have
	      CAP_SYS_ADMIN capabilities for this option to  work,  or	adjust
	      /proc/sys/kernel/perf_event_paranoid  to	below  2  to  use this
	      without CAP_SYS_ADMIN.

       --permute N
	      run all permutations of the selected stressors with N  instances
	      of  the  permutated  stressors per run.  If N is less than zero,
	      then the number of CPUs online is	used for  the  number  of  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
	      percentage of configured CPUs (truncated down to	nearest	 whole
	      number).	 This will perform multiple runs with all the permuta-
	      tions 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	 --se-
	      quential option.

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

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

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

       --rapl Report  the  Running  Average Power Limit	(RAPL) energy measure-
	      ments of stressor	instances. Currently Linux and x86  only,  re-
	      quires  root  access rights to read RAPL kernel interfaces. Note
	      that the RAPL domains 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
	      interfaces.

       --resctrl p1[,p2,..,pn],s1[,s2..,sm]
	      specify resource control cache partitions	and apply to  stressor
	      instances	(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 de-
	      fault 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 % utiliza-
	      tion 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	parti-
	      tioning 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% utilisation.	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  option  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
	      scheduler	does not support this then the default priority	 level
	      of 0 is chosen.

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

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

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

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

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

       --settings
	      show the various option settings.

       --sequential N
	      sequentially  run	 all the stressors one by one for a default of
	      60 seconds. The number of	instances of each  of  the  individual
	      stressors	 to be started is N.  If N is less than	zero, then the
	      number of	CPUs online is used for	the number of instances.  If N
	      is zero, then the	number of CPUs in the system is	used.	Speci-
	      fying 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
	      because it requires features not supported by the	 system,  such
	      as  unimplemented	 system	 calls,	missing	resources or processor
	      specific features.

       --smart
	      scan the block devices for changes S.M.A.R.T. statistics	(Linux
	      only).  This  requires root privileges to	read the Self-Monitor-
	      ing, Analysis and	Reporting Technology data from all  block  de-
	      vies  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 inac-
	      curate.

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

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

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

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

       --stressor-time
	      (requires	 -v  flag) log as debug	the start and finish run times
	      of each  stressor	 instance,  logged  in	the  format:  stressor
	      [start|finish]  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	keywords:

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

       --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  op-
	      tion  shows  average  CPU	 frequency  in GHz (average of online-
	      CPUs), the minimum CPU frequency,	 the  maximum  CPU  frequency,
	      load  averages (1	minute,	5 minute and 15	minutes) and available
	      thermal zone temperatures	in degrees Centigrade.

       --thrash
	      This can only be used when running on Linux and with root	privi-
	      lege. 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 page-
	      cache as well as assign 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	 spec-
	      ify  the units of	time in	seconds, minutes, hours, days or years
	      with the suffix s, m, h, d or y. Each stressor will  be  sent  a
	      SIGALRM  signal  at the timeout time, however if the stress test
	      is swapped out, in an uninterruptible system call	or  performing
	      clean  up	(such as removing hundreds of test file) it may	take a
	      while to finally terminate.  A 0 timeout will run	stress-ng  for
	      ever with	no timeout. The	default	timeout	is 24 hours.

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

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

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

       --tz   collect temperatures from	the available thermal zones on the ma-
	      chine (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  con-
	      tents  from  a  test run and report with the `fail' tag failures
	      that are detected.

       --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	--per-
	      mute  options.  For example to run 5 instances of	the cpu, hash,
	      nop and vm stressors one	after  another	(sequentially)	for  1
	      minute per stressor use:

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

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

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

       -Y, --yaml filename
	      output gathered statistics to a YAML formatted file named	`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 faccessat(2) are	sane.

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

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

	    --acl-rand
		   randomize  (by  shuffling) the order	of the ACL access per-
		   missions 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_setaffin-
		   ity(2)). Rapidly switching CPU affinity can	contribute  to
		   poor	cache behaviour	and high context switch	rate.

	    --affinity-delay N
		   delay  for  N  nanoseconds  before changing affinity	to the
		   next	CPU.  The delay	will spin on CPU scheduling yield  op-
		   erations  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	stres-
		   sor,	forcing	heavy per CPU loading.

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

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

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

	    --af-alg-dump
		   dump	the internal  list  representing  cryptographic	 algo-
		   rithms 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  sys-
		   tem	cache and soak up a lot	of user	and kernel time	in is-
		   suing and handling I/O requests.  By	default,  each	worker
		   process will	handle 16 concurrent I/O requests.

	    --aio-ops N
		   stop	 POSIX asynchronous I/O	workers	after N	bogo asynchro-
		   nous	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 al-
		   lowed.

       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_submit(2),  io_getevents(2)  and	io_destroy(2).	By de-
		   fault, each worker process will handle  16  concurrent  I/O
		   requests.

	    --aiol-ops N
		   stop	 Linux asynchronous I/O	workers	after N	bogo asynchro-
		   nous	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 al-
		   lowed.

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

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

       AppArmor	stressor
	    --apparmor N
		   start N workers that	exercise various parts of the AppArmor
		   interface. Currently	one needs root permission to run  this
		   particular  test.  Only available on	Linux systems with Ap-
		   pArmor 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	stres-
		   sor forces many front end cache  stalls  and	 cache	refer-
		   ences.  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 se-
		   lected nefarious methods are	used to	create the stacks:

		    Unmapping the alternative signal stack, before triggering
		     the signal	handling.
		    Changing the alternative signal stack to just being  read
		     only, write only, execute only.
		    Using a NULL alternative signal stack.
		    Using the signal handler object as	the alternative	signal
		     stack.
		    Unmapping	the  alternative signal	stack during execution
		     of	the signal handler.
		    Using a read-only text segment for	the alternative	signal
		     stack.
		    Using an undersized alternative signal stack.
		    Using the VDSO as an alternative signal stack.
		    Using an alternative stack	mapped onto /dev/zero.
		    Using an alternative stack	mapped to a zero sized	tempo-
		     rary 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	 exercises page	size, 64 bit, 32 bit, 16 bit and 8 bit
		   reads as well as NULL  addresses,  non-readable  pages  and
		   PROT_NONE  mapped  pages.  Currently	only for Linux and re-
		   quires the --pathological option.

	    --bad-ioctl-method [ inc | random |	random-inc | stride ]
		   select the method of	changing the  ioctl  command  (number,
		   type)  tuple	 per  iteration,  the  default	is random-inc.
		   Available bad-ioctl methods are described as	follows:

		   Method	  Description
		   inc		  increment ioctl command by 1
		   random	  use a	random ioctl command
		   random-inc	  increment ioctl command by a random value
		   random-stride  increment ioctl  command  number  by	1  and
				  decrement command type by 3

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

       Bessel functions
	    --besselmath N
		   start  N  workers  that  exercise various Bessel functions.
		   Results 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  mem-
		   ory.	 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 im-
		   plemented then this will stop newly	allocated  pages  from
		   being swapped out.

	    --bigheap-ops N
		   stop	 the  big  heap	workers	after N	bogo allocation	opera-
		   tions 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  de-
		   rived  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 meth-
			      ods.
		   abs	      calculate	the absolute value of a	32 bit	signed
			      integer.	Computed  two different	ways, one with
			      masking and addition, one	with masking and  sub-
			      traction.
		   countbits  count  the  number  of bits set to 1 in a	32 bit
			      unsigned integer.	Computed six  different	 ways,
			      two with bit counting, one with 64 bit multipli-
			      cation, one with parallelised masking and	shift-
			      ing,  one	 using	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  com-
			      parison results of -1, 0,	1 for less than, equal
			      or greater than. Computed	3 ways,	one using sim-
			      ple  comparisons,	two using comparisons and sub-
			      traction.
		   log2	      calculate	log base 2 of a	32 bit unsigned	 inte-
			      ger. Computed four ways, one using bit counting,
			      one  using  masking  and shifting	and branching,
			      one using	masking	and shifting with  no  branch-
			      ing, 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 operator.
		   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 operator.
		   parity     compute the parity of a 32 bit unsigned integer.
			      Computed	five ways, two using bit counting, one
			      using 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
			      integer,	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 function.
		   rnduppwr2  find the nearest power of	2 of a 32 bit unsigned
			      integer, 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 function.
		   reverse    reverse  the  bits of a 32 bit unsigned integer.
			      Computed six ways, one using bit shifting	 loop,
			      one  using bit shitting and mask loop, one using
			      parallelised masking and shifting, one using  64
			      bit multiplication, one using 32 bit multiplica-
			      tion,  one  using	the builtin bitreverse32 func-
			      tion.
		   sign	      calculate	the sign of a 32 bit  signed  integer.
			      Computed	two  ways, one using a branchless less
			      than zero	operator, one using sign bit  shifting
			      and negation.
		   swap	      swap two 32 bit signed integers without a	tempo-
			      rary variable. Computed two ways,	one using sub-
			      traction 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 mask-
			      ing.

       Branch stressor
	    --branch N
		   start  N  workers that randomly branch to 1024 randomly se-
		   lected locations and	hence exercise the CPU branch  predic-
		   tion	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 allo-
		   cated new page is touched to	ensure it is resident in  mem-
		   ory.	  If  an  out of memory	condition occurs then the test
		   will	reset the data segment to the point before it  started
		   and	repeat	the  data  segment  resizing  over again.  The
		   process adjusts the out of memory setting so	that it	may be
		   killed by the out  of  memory  (OOM)	 killer	 before	 other
		   processes.	If it is killed	by the OOM killer then it will
		   be automatically re-started by a monitoring parent process.

	    --brk-bytes	N
		   maximum brk growth as N bytes per brk worker. One can spec-
		   ify 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
		   disables  the default of touching each newly	allocated page
		   and hence avoids the	kernel from  necessarily  backing  the
		   page	with physical memory.

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

       Binary search stressor
	    --bsearch N
		   start N workers that	binary search a	sorted array of	32 bit
		   integers using bsearch(3). By default, there	are 65536 ele-
		   ments  in  the  array.  This	is a useful method to exercise
		   random access 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  implementa-
		   tion	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  bub-
		   blesort  or	a  naive unoptimized implementation of bubble-
		   sort. The default 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 in-
		   telligently determine the CPU cache configuration and so it
		   may be sub-optimal in producing hit-miss read/write	activ-
		   ity 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
		   architectures  and older x86	processors that	do not support
		   this	feature.

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

	    --cache-clwb
		   cache line writeback	(x86 only). This is a no-op  for  non-
		   x86 architectures and older x86 processors that do not sup-
		   port	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 hier-
		   archy 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	opera-
		   tions.

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

	    --cache-prefetchw
		   force a redundant write prefetch on architectures that sup-
		   port	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
		   architectures.

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

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

       Cache 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 regions, one of which is shared among all the
		   cache stressors and is the size of the L3 cache, one	is lo-
		   cal to each instance	and is 4 times the L3 cache  size  and
		   one	is  a single page mapping that cannot be read or writ-
		   ten.

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

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

       Cache line stressor
	    --cacheline	N
		   start N workers that	exercise reading and writing  individ-
		   ual	bytes  in  a shared buffer that	is the size of a cache
		   line. Each stressor will run	1 or more processes  to	 exer-
		   cise	 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 accesses.

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

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

		   Method     Description
		   all	      iterate over all the below cpu stress methods.
		   adjacent   increment	 a  specific  byte  in a cacheline and
			      read the adjacent	 byte,	check  for  corruption
			      every 7 increments.
		   atomicinc  atomically increment a specific byte in a	cache-
			      line  and	 check	for  corruption	every 7	incre-
			      ments.
		   bits	      write and	read back shifted  bit	patterns  into
			      specific	byte in	a cacheline and	check for cor-
			      ruption.
		   copy	      copy an adjacent byte to a specific  byte	 in  a
			      cacheline.
		   inc	      increment	 and  read  back  a specific byte in a
			      cacheline	and check for corruption every	7  in-
			      crements.
		   mix	      perform  a  mix of increment, left and right ro-
			      tates a specific byte in a cacheline  and	 check
			      for corruption.
		   rdfwd64    increment	 a  specific  byte  in a cacheline and
			      then read	in forward direction an	entire	cache-
			      line using 64 bit	reads.
		   rdints     increment	 a  specific  byte  in a cacheline and
			      then read	data at	that byte  location  in	 natu-
			      rally  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	cache-
			      line using 64 bit	reads.
		   rdwr	      read and write the same 8	bit value into a  spe-
			      cific  byte in a cacheline and check for corrup-
			      tion.

	    --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
		   intentionally racy and exercise a range of  chattr  attrib-
		   utes	 by  enabling  and  disabling  them  on	 a file	shared
		   amongst the N chattr	stressor processes. (Linux only).

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

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

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

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

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

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

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

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

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

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

       Complex hyperbolic functions stressor
	    --chyperbolic N
		   start N workers that	exercise complex sinh, cosh, and  tanh
		   libm	complex	hyperbolic functions using complex float, com-
		   plex	 double	 and  complex long double floating point vari-
		   ants. Each function is exercised 10000 times	per bogo-oper-
		   ation.

	    --chyperbolic-method function
		   specify a complex hyperbolic	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 hy-
			    perbolic functions
		   ccosh    complex hyperbolic cosine (complex	double	preci-
			    sion)
		   ccoshf   complex  hyperbolic	 cosine	 (complex float	preci-
			    sion)
		   ccoshl   complex hyperbolic	cosine	(complex  long	double
			    precision)
		   csinh    complex hyperbolic sine (complex double precision)
		   csinhf   complex hyperbolic sine (complex float precision)
		   csinhl   complex  hyperbolic	sine (complex long double pre-
			    cision)
		   ctanh    complex hyperbolic tangent (complex	double	preci-
			    sion)
		   ctanhf   complex  hyperbolic	 tangent (complex float	preci-
			    sion)
		   ctanhl   complex hyperbolic tangent	(complex  long	double
			    precision)

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

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

       Clone stressor
	    --clone N
		   start N workers that	create clones (via  the	 clone(2)  and
		   clone3(2) system calls).  This will rapidly try to create a
		   default  of	8192 clones that immediately die and wait in a
		   zombie state	until they are reaped.	Once the maximum  num-
		   ber	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 se-
		   lected for each clone to try	to  exercise  different	 clone
		   operations.	The clone stressor is a	Linux only option.

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

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

       Close stressor
	    --close N
		   start N workers that	try to force race conditions on	 clos-
		   ing	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 swapcon-
		   text(3) to implement	the thread-to-thread  context  switch-
		   ing.	 This  exercises  rapid	 process  context  saving  and
		   restoring and is bandwidth limited by register  and	memory
		   save	and restore rates.

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

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

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

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

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

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

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

	    --cpu-load-slice S
		   note: this option is	only useful when  --cpu-load  is  less
		   than	 100%.	The  CPU load is broken	into multiple busy and
		   idle	cycles.	Use this option	to specify the duration	 of  a
		   busy	time slice.  A negative	value for S specifies the num-
		   ber	of  iterations	to run before idling the CPU (e.g. -30
		   invokes 30 iterations of a CPU stress loop).	 A zero	 value
		   selects  a  random  busy time between 0 and 0.5 seconds.  A
		   positive value for S	specifies the number  of  milliseconds
		   to  run  before idling the CPU (e.g.	100 keeps the CPU busy
		   for 0.1 seconds).  Specifying small values for S  lends  to
		   small   time	  slices  and  smoother	 scheduling.   Setting
		   --cpu-load as a relatively low value	 and  --cpu-load-slice
		   to  be  large will cycle the	CPU between long idle and busy
		   cycles and exercise different CPU frequencies.  The thermal
		   range of the	CPU is also cycled, so this is a  good	mecha-
		   nism	 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	float-
				     ing 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  ran-
				     dom doubles
		   crc16	     compute  1024  rounds  of	CCITT CRC16 on
				     random data
		   decimal32	     1000 iterations of	a mix of 32 bit	 deci-
				     mal floating point	operations (GCC	only)
		   decimal64	     1000  iterations of a mix of 64 bit deci-
				     mal floating point	operations (GCC	only)
		   decimal128	     1000 iterations of	a mix of 128 bit deci-
				     mal 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	preci-
				     sion 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	 Stir-
				     ling'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	float-
				     ing point operations
		   float32	     1000 iterations of	a mix of 32 bit	float-
				     ing point operations
		   float64	     1000 iterations of	a mix of 64 bit	float-
				     ing point operations
		   float80	     1000 iterations of	a mix of 80 bit	float-
				     ing 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 be-
				     tween  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 par-
				     ity bits. For data	 bits  d1..d4,	parity
				     bits are computed as:
				       p1 = d2 + d3 + d4
				       p2 = d1 + d3 + d4
				       p3 = d1 + d2 + d4
				       p4 = d1 + d2 + d3
		   hanoi	     solve a 21	disc Towers of Hanoi stack us-
				     ing the recursive solution. For other re-
				     cursive  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
				     Transform).
		   int8		     1000 iterations of	a mix of 8 bit integer
				     operations.
		   int16	     1000 iterations of	a mix of 16 bit	 inte-
				     ger operations.
		   int32	     1000  iterations of a mix of 32 bit inte-
				     ger operations.
		   int64	     1000 iterations of	a mix of 64 bit	 inte-
				     ger operations.
		   int128	     1000 iterations of	a mix of 128 bit inte-
				     ger operations (GCC only).
		   int32float	     1000  iterations of a mix of 32 bit inte-
				     ger and floating point operations.
		   int32double	     1000 iterations of	a mix of 32 bit	 inte-
				     ger  and  double precision	floating point
				     operations.
		   int32longdouble   1000 iterations of	a mix of 32 bit	 inte-
				     ger  and  long  double precision floating
				     point operations.
		   int64float	     1000 iterations of	a mix of 64 bit	 inte-
				     ger and floating point operations.
		   int64double	     1000  iterations of a mix of 64 bit inte-
				     ger and double precision  floating	 point
				     operations.
		   int64longdouble   1000  iterations of a mix of 64 bit inte-
				     ger and long  double  precision  floating
				     point operations.
		   int128float	     1000 iterations of	a mix of 128 bit inte-
				     ger  and  floating	 point operations (GCC
				     only).
		   int128double	     1000 iterations of	a mix of 128 bit inte-
				     ger and double precision  floating	 point
				     operations	(GCC only).
		   int128longdouble  1000 iterations of	a mix of 128 bit inte-
				     ger  and  long  double precision floating
				     point operations (GCC only).
		   int128decimal32   1000 iterations of	a mix of 128 bit inte-
				     ger and 32	bit decimal floating point op-
				     erations (GCC only).
		   int128decimal64   1000 iterations of	a mix of 128 bit inte-
				     ger and 64	bit decimal floating point op-
				     erations (GCC only).
		   int128decimal128  1000 iterations of	a mix of 128 bit inte-
				     ger and 128 bit  decimal  floating	 point
				     operations	(GCC only).
		   intconversion     perform  65536 iterations of integer con-
				     versions between int16, int32  and	 int64
				     variables.
		   ipv4checksum	     compute  1024  rounds of the 16 bit ones'
				     complement	IPv4 checksum.
		   jmp		     Simple unoptimised	compare	>, <,  ==  and
				     jmp branching.
		   lfsr32	     16384  iterations of a 32 bit Galois lin-
				     ear 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
				     precision 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 New-
				     ton-Raphson.
		   omega	     compute the  omega	 constant  defined  by
				     <Omega>e^<Omega>  = 1 using efficient it-
				     eration of	<Omega>n+1 = (1	+ <Omega>n)  /
				     (1	+ e^<Omega>n).
		   parity	     compute parity using various methods from
				     the Standford Bit Twiddling Hacks.	 Meth-
				     ods  employed  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  se-
				     ries.
		   pi		     compute  <pi> using the Srinivasa Ramanu-
				     jan 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
				     constant)	using  the sum of the recipro-
				     cals of the Fibonacci numbers.
		   queens	     compute all the solutions of the  classic
				     8 queens problem for board	sizes 1..11.
		   rand		     16384 iterations of rand(), where rand is
				     the  MWC  pseudo random number generator.
				     The MWC random function concatenates  two
				     16	bit multiply-with-carry	generators:
				      x(n) = 36969 x 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	gener-
				     ated 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,
				     double 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.  How-
		   ever, 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 en-
		   sure	a similar bogo-op rate for all the  methods  to	 avoid
		   the	shorter	 running (and faster) methods from skewing the
		   bogo-op rates when using the	default	"all" method.  This is
		   based on a reference	Intel i5-8350U processor and hence the
		   bogo-ops normalizing	factors	will be	skew somewhat on  dif-
		   ferent  CPUs,  but so significantly as the original bogo-op
		   counter rates. To disable the normalization and  fall  back
		   to the original metrics, use	this option.

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

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

	    --cpu-online-affinity
		   move	 the  stressor worker to the CPU that will be next of-
		   flined.

	    --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	placements  on
		   all	the  available	CPUS. The child	processes are run with
		   randomizied nice settings to	exercise scheduler prioritiza-
		   tion.

	    --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
		   using crypt(3).  The	password is encrypted using bcrypt bs-
		   dicrypt 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, bs-
		   dicrypt, 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
		   complex  tan	 libm  trigonometric  functions	 using complex
		   float, complex 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.	Avail-
		   able	options	are as follows:

		   Method  Description
		   all	   iterate   through  all  of  the  following  complex
			   trigonometric 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 in-
		   stance  with	 this  stressor	to get reliable	statistics. By
		   default this	stressor measures the first 10 thousand	laten-
		   cies	and calculates the mean, mode, minimum,	maximum	laten-
		   cies	along with various latency percentiles	for  the  just
		   the	first  cyclic  stressor	 instance. One has to run this
		   stressor with CAP_SYS_NICE capability to  enable  the  real
		   time	scheduling policies. The FIFO scheduling policy	is the
		   default.

	    --cyclic-dist N
		   calculate  and print	a latency distribution with the	inter-
		   val of N nanoseconds.  This is helpful to see where the la-
		   tencies 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 immedi-
		   ately after creating	another	daemon and so on. This	effec-
		   tively  works  through  the	process	table with short lived
		   processes that do not have a	parent and are waited  for  by
		   init.   This	 puts pressure on init to do rapid child reap-
		   ing.	 The daemon processes perform the usual	mix  of	 calls
		   to  turn  into  typical  UNIX daemons, so this artificially
		   mimics very heavy daemon system stress.

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

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

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

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

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

	    --dccp-msgs	N
		   send	N messages per connect,	send/receive, disconnect iter-
		   ation.  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  di-
		   rectory  entry  names  are  suffixed	by a gray-code encoded
		   number to try to mix	up the hashing of the namespace.

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

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

	    --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
		   division  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
		   using mkdir(2), rename(2) and rmdir(2).

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

	    --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 directo-
		   ries	to a maximum depth as limited by PATH_MAX or ENAMETOO-
		   LONG	(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  op-
		   tion.   To  stress inode creation, a	symlink	and a hardlink
		   to a	file at	the root of the	tree is	created	in each	level.

	    --dirdeep-bytes N
		   allocated file size,	the default is 0. One can specify  the
		   size	 as  % of free space on	the file system	or in units of
		   Bytes, KBytes, MBytes and GBytes using the suffix b,	 k,  m
		   or g. Used in conjunction with the --dirdeep-files option.

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

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

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

	    --dirdeep-ops N
		   stop	 directory depth workers after N bogo directory	opera-
		   tions.

       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 re-
		   moved. This cycles until the	run time  is  reached  or  the
		   file	 creation  count bogo-ops metric is reached. This is a
		   much	faster and light weight	directory exercising  stressor
		   compared to the dentry stressor.

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

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

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

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

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

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

       Dynamic libraries loading stressor
	    --dynlib N
		   start  N  workers  that dynamically load and	unload various
		   shared libraries. This exercises memory mapping and dynamic
		   code	loading	and symbol lookups. See	dlopen(3) for more de-
		   tails 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 op-
		   code	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,  in-
		   verse  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  ma-
					    trix operations
		   add-longdouble	    addition  of  two matrices of long
					    double floating point values
		   add-double		    addition of	two matrices of	double
					    floating point values
		   add-float		    addition of	two matrices of	float-
					    ing	point values
		   determinant-longdouble   determinant	of matrix of long dou-
					    ble	floating point values
		   determinant-double	    determinant	of  matrix  of	double
					    floating point values
		   determinant-float	    determinant	 of matrix of floating
					    point values
		   inverse-longdouble	    inverse of matrix of  long	double
					    floating point values
		   inverse-double	    inverse of matrix of double	float-
					    ing	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
					    double 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
		   matrix.

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

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

       Non-functional system call (ENOSYS) stressor
	    --enosys N
		   start N workers that	exercise  non-functional  system  call
		   numbers.  This calls	a wide range of	system call numbers to
		   see if it can break a system	where these are	not  wired  up
		   correctly.	It also	keeps track of system calls that exist
		   (ones that don't return ENOSYS) so that  it	can  focus  on
		   purely  finding and exercising non-functional system	calls.
		   This	 stressor   exercises	system	 calls	 from	0   to
		   __NR_syscalls  +  1024,  random  system  calls  within con-
		   strained 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 var-
		   ious	other bit patterns to try to  get  wide	 coverage.  To
		   keep	 the  environment clean, each system call being	tested
		   runs	in a child process with	reduced	capabilities.

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

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

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

       Epoll stressor
	    --epoll N
		   start  N workers that perform various related socket	stress
		   activity using epoll_wait(2)	to monitor and handle new con-
		   nections. This involves client/server processes  performing
		   rapid  connect,  send/receives and disconnects on the local
		   host.  Using	epoll allows a large number of connections  to
		   be  efficiently handled, however, this can lead to the con-
		   nection table filling up and	blocking further  socket  con-
		   nections,  hence impacting on the epoll bogo	op stats.  For
		   ipv4	and ipv6 domains, multiple servers are spawned on mul-
		   tiple 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 al-
		   lowed  in  server.	Setting	a high value impacts on	memory
		   usage and may trigger out of	memory conditions.

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

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

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

       Exec processes stressor
	    --exec N
		   start N workers  continually	 forking  children  that  exec
		   stress-ng and then exit almost immediately. If a system has
		   pthread  support then 1 in 4	of the exec's will be from in-
		   side	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 ran-
		   dom choice between execve(2), execveat(2)  and  fexecve(3),
		   execve  will	 use  execve(2), execveat will use execveat(2)
		   (if available) and fexecve will use fexecve(3)  (if	avail-
		   able).

	    --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 expo-
		   nential stress methods are described	as follows:

		   Method  Description
		   all	   iterate  over  all  the below exponential functions
			   methods
		   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 com-
		   prised of about 0.4 x N random factors, for N  >  100.  The
		   default  number  of digits in the value to be factorized is
		   10.

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

	    --factor-ops N
		   stop	after N	factorizations.

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

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

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

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

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

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

	    --far-branch-flush
		   attempt to periodically flush instruction cache to  produce
		   instruction 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 mad-
		   vise(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
		   functions. The number for functions per page	depends	on the
		   processor architecture, for example,	x86 will have 4096 x 1
		   byte	 return	 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	opera-
		   tions.

       Fcntl stressor
	    --fcntl N
		   start N workers that	perform	fcntl(2)  calls	 with  various
		   commands.   The  exercised  commands	 (if  available)  are:
		   F_CREATED_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  descriptors.	This exercises a mix of	successful and
		   failed file operations 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  allowed,  fork  8  child processes that then close
		   their copies	of the file descriptors.

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

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

	    --fd-fork-ops N
		   stop	after N	rounds of 10000	dups,  forking/closing/exiting
		   and waiting for the child processes.	Note that the bogo-ops
		   metric  rate	 will slow down	over time as this stressor in-
		   creases the number of open files per	bogo-loop and this in-
		   creases 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
		   integers using a Fibonacci search. A	Fibonacci  seaarch  is
		   similar  to a bsearch except	that it	uses the Fibonacci se-
		   ries	to divide the search into  unequal  sized  spaces.  It
		   avoids  the costly division operator	found in bsearches and
		   examines closer elements on each search step	so there is  a
		   slight  compute  and	 cache advantage over bsearch.	By de-
		   fault, 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
		   specify  the	 size as % of free space on the	file system or
		   in units of Bytes, KBytes, MBytes and GBytes	using the suf-
		   fix 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, FIOQ-
		   SIZE, FIGETBSZ, FIOCLEX, FIONCLEX, FIONBIO, FIOASYNC, FIOQ-
		   SIZE, FIFREEZE, FITHAW,  FICLONE,  FICLONERANGE,  FIONREAD,
		   FIONWRITE and FS_IOC_RESVSP ioctls if these are defined.

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

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

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

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

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

       File race stressor
	    --filerace N
		   start N workers that	each run 8 concurrent  processes  that
		   exercise  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 random-
		   ized	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
		   reliable  metric  of	performance because of the highly ran-
		   domized 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 specific  bit  using	 cmpxchg  (compare/ex-
		   change);  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 distribu-
		   tion	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 ar-
		   gument.

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

	    --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  (In-
		   tel	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 compiler.

	    --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  immedi-
		   ately exit.

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

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

	    --fork-pageout
		   enable force	paging-out of memory resident  pages  in  fork
		   stressor 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
		   madvise(2) on all pages of the forked process. Where	possi-
		   ble 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.

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

	    --forkheavy-allocs N
		   attempt N resource allocation loops per stressor  instance.
		   Resources include pipes, file descriptors, memory mappings,
		   pthreads, timers, ptys, semaphores, message queues and tem-
		   porary  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 im-
		   plemented then this will stop  new  brk  pages  from	 being
		   swapped out.

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

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

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

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

		   Method	Description
		   all		iterate	over all the following floating	point methods:
		   float128add	128 bit	floating point 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
		   floating point types.

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

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

       File punch and hole filling stressor
	    --fpunch N
		   start  N  workers that punch	and fill holes in a 16 MB file
		   using five concurrent processes per stressor	exercising  on
		   the same file. Where	available, this	uses fallocate(2) FAL-
		   LOC_FL_KEEP_SIZE,	     FALLOC_FL_PUNCH_HOLE,	  FAL-
		   LOC_FL_ZERO_RANGE,	FALLOC_FL_COLLAPSE_RANGE   and	  FAL-
		   LOC_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 iterations 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  Man-
		   delbrot 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, ran-
		   dom and powers of 2.	The files are truncated	and  allocated
		   to trigger SIGXFSZ signals.

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

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

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

	    --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
		   --funccall-method option. This exercises stack function ar-
		   gument  passing  and	re-ordering on the stack and in	regis-
		   ters.

	    --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), clongdou-
		   ble	(complex  long	double),  float16,  float32,  float64,
		   float80,  float128,	decimal32,  decimal64  and decimal128.
		   Note	that some of these types are only available with  spe-
		   cific architectures and compiler versions.

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

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

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

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

	    --futex-ops	N
		   stop	futex workers after N bogo successful futex wait oper-
		   ations.

       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), ge-
		   tresuid(2), getrlimit(2),  prlimit(2),  getrusage(2),  get-
		   sid(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 work-
		   ers to try to force forms of	locking	contention in the ker-
		   nel on the more complex cases. Each system  call  is	 exer-
		   cised  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  get-
		   dents64(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/urandom	 pool  using  the  getrandom(2)	 system	  call
		   (Linux) or getentropy(2) (OpenBSD).

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

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

	    --goto-direction [ forward | backward | random ]
		   select  the	branching direction in the stressor loop, for-
		   ward	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  in-
		   structions.

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

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

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

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

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

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

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

	    --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 hash-
		   ing 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 dis-
		   tribution of	items in hash buckets versus the expected dis-
		   tribution of	items. Typically a chi squared value close  to
		   1.0 indicates a good	hash distribution.

	    --hash-method method
		   specify the hashing method to use, by default all the hash-
		   ing methods are cycled through. Methods available are:

		   Method      Description
		   all	       cycle through all the hashing methods
		   adler32     Mark  Adler  checksum,  a  modification	of the
			       Fletcher	checksum
		   coffin      xor and 5 bit rotate left hash
		   coffin32    xor and 5 bit rotate  left  hash	 with  32  bit
			       fetch optimization
		   crc32c      compute CRC32C (Castagnoli CRC32) integer hash
		   djb2a       Dan Bernstein hash using	the xor	variant
		   fnv1a       FNV-1a  Fowler-Noll-Vo  hash using the xor then
			       multiply	variant
		   jenkin      Jenkin's	integer	hash
		   kandr       Kernighan and Richie's multiply by 31  and  add
			       hash  from  "The	 C  Programming	Language", 2nd
			       Edition
		   knuth       Donald E. Knuth's hash from "The	 Art  Of  Com-
			       puter Programming", Volume 3, chapter 6.4
		   loselose    Kernighan  and Richie's simple hash from	"The C
			       Programming Language", 1st Edition
		   mid5	       xor shift hash of the middle  5	characters  of
			       the string. Designed by Colin Ian King
		   muladd32    simple  multiply	and add	hash using 32 bit math
			       and xor folding of overflow
		   muladd64    simple multiply and add hash using 64 bit  math
			       and xor folding of overflow
		   mulxror32   32  bit multiply, xor and rotate	right. Mangles
			       32 bits where possible. Designed	by  Colin  Ian
			       King
		   mulxror64   64  bit	multiply, xor and rotate right.	64 Bit
			       version of mulxror32
		   murmur3_32  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 program-
			       ming book
		   sobel       Justin Sobel's bitwise shift hash
		   x17	       multiply	by 17 and add. The multiplication  can
			       be  optimized  down  to a fast right shift by 4
			       and add on some architectures
		   xor	       simple rotate shift and xor of values
		   xorror32    32 bit exclusive-or with	right rotate  hash,  a
			       fast string hash, designed by Colin Ian King
		   xorror64    64 bit version of xorror32
		   xxhash      the "Extremely fast" hash in non-streaming mode

	    --hash-ops N
		   stop	after N	hashing	rounds

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

	    --hdd-bytes	N
		   write  N  bytes  for	each hdd process, the default is 1 GB.
		   One can specify the size as % of free  space	 on  the  file
		   system  or in units of Bytes, KBytes, MBytes	and GBytes us-
		   ing 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  synchro-
				   nous	I/O, also use the sync option.
		   dsync	   ensure  output  has been transferred	to un-
				   derlying hardware  and  file	 metadata  has
				   been	updated	(using the O_DSYNC open	flag).
				   This	 is  equivalent	to each	write(2) being
				   followed by a  call	to  fdatasync(2).  See
				   also	the fdatasync option.
		   fadv-dontneed   advise  kernel  to expect the data will not
				   be accessed in the near future.
		   fadv-noreuse	   advise kernel to expect the data to be  ac-
				   cessed only once.
		   fadv-normal	   advise  kernel there	are no explicit	access
				   pattern for the data. This is  the  default
				   advice assumption.
		   fadv-rnd	   advise  kernel to expect random access pat-
				   terns for the data.
		   fadv-seq	   advise kernel to expect  sequential	access
				   patterns for	the data.
		   fadv-willneed   advise  kernel to expect the	data to	be ac-
				   cessed in the near future.
		   fsync	   flush all modified in-core data after  each
				   write  to  the  output  device using	an ex-
				   plicit fsync(2) call.
		   fdatasync	   similar to fsync, but do not	flush the mod-
				   ified metadata unless metadata is  required
				   for	later  data  reads  to be handled cor-
				   rectly. This	uses an	explicit  fdatasync(2)
				   call.
		   iovec	   use	 readv/writev	multiple  buffer  I/Os
				   rather  than	 read/write.  Instead	of   1
				   read/write  operation, the buffer is	broken
				   into	an iovec of 16 buffers.
		   noatime	   do not update the file  last	 access	 time-
				   stamp, this can reduce metadata writes.
		   sync		   ensure  output  has been transferred	to un-
				   derlying hardware (using  the  O_SYNC  open
				   flag).   This   is  equivalent  to  a  each
				   write(2)  being  followed  by  a  call   to
				   fsync(2). See also the fsync	option.
		   rd-rnd	   read	data randomly.
		   rd-seq	   read	data sequentially.
		   syncfs	   write  all  buffered	 modifications of file
				   metadata and	data on	 the  filesystem  that
				   contains the	hdd worker files.
		   utimes	   force  update  of  file timestamp which may
				   increase metadata writes.
		   wr-rnd	   write data randomly.	The wr-seq option can-
				   not be used at the same time.
		   wr-seq	   write data sequentially. This  is  the  de-
				   fault if no write modes are specified.

	    Note  that some of these options are mutually exclusive, for exam-
	    ple, 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
		   heapsort.

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

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

	    --heapsort-size N
		   specify  number  of	32  bit	 integers  to sort, default is
		   262144 (256 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	random timer intervals of 0..499999 nanoseconds.  Run-
		   ning	 this  stressor	 with  appropriate  privilege will run
		   these with the SCHED_RR policy.

	    --hrtimers-adjust
		   enable automatic timer rate adjustment to try  to  maximize
		   the	hrtimer	 frequency.  The signal	rate is	measured every
		   0.1 seconds and the hrtimer delay is	adjusted  to  try  and
		   set	the  optimal  hrtimer  delay  to  generate the highest
		   hrtimer rates.

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

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

	    --hsearch-method [ hsearch-libc | hsearch-nonlibc ]
		   select  either  the	libc  implementation  of  hsearch or a
		   slightly optimized non-libc implementation of hsearch.  The
		   default  is the libc	implementation if it exists, otherwise
		   the non-libc	version.

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

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

       Hyperbolic functions stressor
	    --hyperbolic N
		   start N workers that	exercise sinh, cosh, and tanh libm hy-
		   perbolic 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
		   functions are exercised sequentially, however one can spec-
		   ify	just  one  function to be used if required.  Available
		   options are as follows:

		   Method  Description
		   all	   iterate through all	of  the	 following  hyperbolic
			   functions
		   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 forc-
		   ing instruction cache reloads.

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

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

	    --icmp-flood-max-size
		   use a maximum packet	size of	65535 bytes instead of the de-
		   fault 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.  Re-
		   quires CAP_SYS_RESOURCE capability.

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

       Inode ioctl flags stressor
	    --inode-flags N
		   start  N  workers  that  exercise  inode  flags  using  the
		   FS_IOC_GETFLAGS and FS_IOC_SETFLAGS ioctl(2)	and inode  at-
		   tributes  using  file_getattr(2)  and file_getatt(2).  This
		   attempts to apply all the available inode flags onto	a  di-
		   rectory 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	direc-
		   tory	 and  file to try to force races. This is a Linux only
		   stressor, see ioctl_iflags(2) for more details.

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

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

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

       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,	multi-
		   plication, 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
		   available:

		   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  com-
		   patible with	the original stress tool.

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

       IO mixing stressor
	    --iomix N
		   start  N  workers  that perform a mix of sequential,	random
		   and memory mapped read/write	operations as well  as	random
		   copy	file read/writes, forced sync'ing and (if run as root)
		   cache  dropping.   Multiple	child processes	are spawned to
		   all share a single file and perform	different  I/O	opera-
		   tions 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	opera-
		   tions.

       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  per-
		   formed  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	opera-
		   tions 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	 loca-
		   tions.

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

	    --ipsec-mb-feature [ sse | avx | avx2 | avx512 | 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 setting, hence high frequency SIGPROF signals are
		   not normally	possible.  A busy loop spins  on  getitimer(2)
		   calls  to  consume CPU and hence decrement the itimer based
		   on amount of	time spent in CPU and system time.

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

	    --itimer-ops N
		   stop	itimer stress workers after N bogo itimer SIGPROF sig-
		   nals.

	    --itimer-rand
		   select  an interval timer frequency based around the	inter-
		   val 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 gen-
		   erated 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	itera-
		   tion	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	compo-
			     nents 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  low-
		   est,	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 inte-
		   gers	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 ac-
		   cess	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 in-
		   tegers.

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

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

       Kernel key management stressor
	    --key N
		   start  N  workers  that  create  and	 manipulate keys using
		   add_key(2) and ketctl(2). As	many keys are created  as  the
		   per	user  limit  allows and	then the following keyctl com-
		   mands  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	 vari-
		   ous 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 vir-
		   tual	 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 region and the stressor handles  the  MMIO
		   exits.

	    --kvm-ops N
		   stop	 kvm stressors after N virtual machines	have been cre-
		   ated, 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 ar-
		   chitectures or kernels, so one may need  to	specify	 these
		   manually.  One  can	specify	3 out of the 4 cache geometric
		   parameters, these are as follows:

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

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

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

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

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

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

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

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

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

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

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

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

       LED stressor (Linux)
	    --led N
		   start  N  workers  that exercise the	/sys/class/leds	inter-
		   faces 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 de-
		   fault  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 var-
		   ious	list operations.

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

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

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

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

	    --llc-affinity-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
		   reduced if there is	as  system  limit  on  the  number  of
		   pthreads that can be	created.

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

       Lock and	increment memory stressor (x86 and ARM)
	    --lockbus N
		   start N workers that	rapidly	lock and increment 64 bytes of
		   randomly chosen memory from a 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 fc-
		   ntl(2), F_SETLK, F_GETLK). Each worker creates  a  1024  KB
		   file	 and  attempts	to  hold  a maximum of 1024 concurrent
		   locks with a	child process that also	 tries	to  hold  1024
		   concurrent  locks.  Old  locks  are unlocked	in a first-in,
		   first-out basis.

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

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

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

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

       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	mecha-
		   nisms.   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 fc-
		   ntl(2), F_OFD_SETLK,	F_OFD_GETLK).  Each worker  creates  a
		   1024	KB file	and attempts to	hold a maximum of 1024 concur-
		   rent	 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
		   functions with input	values 1 to 10000.  Results are	sanity
		   checked to ensure no	variation occurs after each  round  of
		   10000 computations.

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

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

		   Method  Description
		   all	   iterate  over  all  the below logarithmic functions
			   methods
		   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 oper-
		   ations and then destroys  them.  Linux  only	 and  requires
		   CAP_SYS_ADMIN capability.

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

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

	    --lsearch-method [ lsearch-libc | lsearch-nonlibc |	lsearch-sen-
	    tinel ]
		   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 sen-
		   tinel 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 mod-
		   ules	 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 set-
		   tings 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),
		   realloc(3),	 posix_memalign(3),   aligned_alloc(3),	 mema-
		   lign(3) and free(3).	By default, up	to  65536  allocations
		   can	be  active  at any point, but this can be altered with
		   the	--malloc-max  option.	Allocation,  reallocation  and
		   freeing are chosen at random; 50% of	the time memory	is al-
		   location (via one of	malloc,	calloc or realloc, posix_mema-
		   lign,  aligned_alloc, memalign) and 50% of the time alloca-
		   tions are free'd.  Allocation sizes are also	 random,  with
		   the	maximum	 allocation  size  controlled  by  the	--mal-
		   loc-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
		   randomly  selected  from  1 to N bytes. One can specify the
		   size	as % of	total available	memory or in units  of	Bytes,
		   KBytes,  MBytes  and	 GBytes	using the suffix b, k, m or g.
		   Large allocation sizes cause	the memory  allocator  to  use
		   mmap(2) rather than expanding the heap using	brk(2).

	    --malloc-max N
		   maximum  number  of active allocations allowed. Allocations
		   are chosen at random	and placed in an allocation slot.  Be-
		   cause  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
		   relates  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	option will do nothing if pthreads are not supported.

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

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

	    --malloc-trim
		   periodically	trim memory allocation by  attempting  to  re-
		   lease  free memory from the heap every 65536	allocation it-
		   erations. This can be a time	 consuming  operation.	It  is
		   only	 available  with libc malloc implementations that sup-
		   port	malloc_trim(3).

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

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

		   By default, this will exercise all the matrix stress	 meth-
		   ods one by one on a 128 x 128 element matrix. One can spec-
		   ify	 a  specific  matrix  stress  method  with  the	 --ma-
		   trix-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 ma-
			      trix
		   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 re-
		   sult	in a floating point compute throughput bound stressor,
		   where as large values result	in a cache and/or memory band-
		   width bound stressor.

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

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

		   By  default,	 this  will  exercise all the 3D matrix	stress
		   methods one by one 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
		   result in a floating	point compute throughput bound	stres-
		   sor,	 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 com-
		   pared to the	default	 and  will  perform  more  data	 cache
		   stalls.

       Memory contention stressor
	    --mcontend N
		   start  N  workers that produce memory contention read/write
		   patterns. Each stressor runs	with 5 threads that  read  and
		   write  to  two  different  mappings	of the same underlying
		   physical page. Various caching operations  are  also	 exer-
		   cised  to  cause  sub-optimal  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 op-
		   erations.

       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  mem-
		   move(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
			     memmove 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 mem-
			     ory  moving build with -O2	optimization and where
			     possible use CPU specific optimizations
		   naive_o3  use optimized naive byte by byte copying and mem-
			     ory 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 us-
		   ing the suffix b, k,	m or g.

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

	    --memfd-madvise
		   enable random madvise page advice on	 memfd	memory	mapped
		   regions to add a little more	VM exercising.

	    --memfd-mlock
		   attempt  to	mlock(2) mmap'd	pages into memory causing more
		   memory 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 stressor	down significantly  and	 hence	is  an	opt-in
		   memfd stressor option.

       Memory hotplug stressor (Linux)
	    --memhotplug N
		   start  N workers that offline and online memory hotplug re-
		   gions. 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 sup-
		   port	integer	vectors.  x86-64 cpus  that  support  uncached
		   (non-temporal  "nt")	 writes	 also  exercise	128, 64	and 32
		   writes providing higher write rates than the	normal	cached
		   writes.  x86-64 also	exercises repeated string stores using
		   64, 32, 16 and 8 bit	writes.	 CPUs that support prefetching
		   reads also exercise 64 prefetched "pf" reads.  This	memory
		   stressor  allows  one  to also specify the maximum read and
		   write rates.	The stressors will run at maximum speed	if  no
		   read	or write rates are specified.

	    --memrate-bytes N
		   specify  the	size of	the memory buffer being	exercised. The
		   default size	is 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.
		   Available 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 ac-
		   cesses 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
		   various  ways to try	and trip thermal overrun.  Each	stres-
		   sor will start 1 or more threads.  The number of threads is
		   chosen so that there	will be	at least  1  thread  per  CPU.
		   Note	 that the optimal choice for N is a value that divides
		   into	the number of CPUs.

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

		   Method	Description
		   all		iterate	over all the below memthrash methods
		   chunk1	memset	1 byte chunks of random	data into ran-
				dom locations
		   chunk8	memset 8 byte chunks of	random data into  ran-
				dom locations
		   chunk64	memset 64 byte chunks of random	data into ran-
				dom locations
		   chunk256	memset	256  byte  chunks  of random data into
				random locations
		   chunkpage	memset page size chunks	of  random  data  into
				random locations
		   copy128	copy 128 byte chunks from chunk	N + 1 to chunk
				N with streaming reads and writes with 128 bit
				memory accesses	where possible.
		   flip		flip (invert) all bits in random locations
		   flush	flush cache line in random locations
		   lock		lock  randomly	choosing  locations (Intel x86
				and ARM	CPUs only)
		   matrix	treat memory as	a 2 x 2	matrix and swap	random
				elements
		   memmove	copy all the data in buffer to the next	memory
				location
		   memset	memset the memory with random data
		   memset64	memset the memory with a random	64  bit	 value
				in 64 byte chunks using	non-temporal stores if
				possible or normal stores as a fallback
		   memsetstosd	memset	the  memory using x86 32 bit rep stosd
				instruction (x86 only)
		   mfence	stores with write serialization
		   numa		memory bind pages across numa nodes
		   prefetch	prefetch data at random	memory locations
		   random	randomly run any of the	memthrash methods  ex-
				cept for `random' and `all'
		   reverse	swap  8	 bit values from start to end and work
				towards	the middle
		   spinread	spin loop read the same	random	location  2^19
				times
		   spinwrite	spin  loop write the same random location 2^19
				times
		   swap		step through memory swapping bytes in steps of
				65 and 129 byte	strides
		   swap64	work through memory swapping adjacent 64  byte
				chunks
		   swapfwdrev	swap  64 bit values from start to end and work
				towards	the middle and then from end to	 start
				and work towards the middle.
		   tlb		work through memory in sub-optimial strides of
				prime  multiples  of  the cache	line size with
				reads and then	writes	to  cause  Translation
				Lookaside Buffer (TLB) misses.

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

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

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

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

	    --mergesort-size N
		   specify  number  of	32  bit	 integers  to sort, default is
		   262144 (256 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
		   exercise a file's metadata  with  sequences	of  open,  256
		   lseeks  and	writes,	fdatasync, close, fsync	and then stat,
		   open, 256 lseeks, reads, occasional	file  memory  mapping,
		   close, unlink and lstat.

	    --metamix-bytes N
		   set the size	of metamix files, the default is 1 MB. One can
		   specify  the	 size as % of free space on the	file system or
		   in units of Bytes, KBytes, MBytes and GBytes	using the suf-
		   fix 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  pow-
		   ers	of two nanosecond sleep	delays.	Once all the instances
		   have	completed, the minimum,	maximum	and mean  sleep	 times
		   are	reported  for  the  sleep  delays  across all the min-
		   nanosleep stressor instances.

	    --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  de-
		   lay	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
		   require root	privilege.

       Misaligned read/write stressor
	    --misaligned N
		   start N workers that	perform	misaligned read	and writes. By
		   default,  this  will	 exercise  128 bit misaligned read and
		   writes in 8 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 SIG-
		   BUS,	 SIGILL	 or  SIGSEGV,  these  are handled and the mis-
		   aligned stressor method causing the error is	disabled.

	    --misaligned-method	method
		   Available misaligned	stress methods are described  as  fol-
		   lows:

		   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 op-
	    erations) 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	opera-
		   tions.

       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-con-
		   tiguous pages are locked . This is then repeated until  the
		   maximum  allowed mlocks or a	maximum	of 262144 mappings are
		   made.  Next,	all future mappings are	mlocked	and the	worker
		   attempts to map 262144 pages, then all pages	are  munlocked
		   and the pages are unmapped.

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

       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	track-
		   ing low memory and swap allocations (but some swapping  may
		   occur).  Once either	the maximum number of child process is
		   reached or all mlockable  in-core  memory  is  locked  then
		   child processes are killed and the stress test is repeated.

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

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

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

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

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

	    --mmap-bytes N
		   allocate N bytes in total for all  the  mmap	 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.

	    --mmap-file
		   enable file based memory mapping and	by  default  use  syn-
		   chronous 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
		   memory pressure by preventing pages from swapped out.

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

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

	    --mmap-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  synchro-
		   nous	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  con-
		   current mmap	stressors and will slow	down the stressor.

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

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

       Random memory map/unmap stressor
	    --mmapaddr N
		   start N workers that	memory map pages at  a	random	memory
		   location  that  is  not already mapped.  On 64 bit machines
		   the random address is randomly chosen 32 bit	or 64 bit  ad-
		   dress.  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
		   memory 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 mem-
		   ory 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  randomized  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  par-
		   ent to exercise page	handling harder.

	    --mmapcow-free
		   after  each	page  is  modified and before each page	is un-
		   mapped use madvise(2) MADV_FREE (if it is available)	to in-
		   dicate 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 pro-
		   duces significant amounts of	VM activity, a	lot  of	 cache
		   misses and with minimal swapping.

	    --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 tra-
		   verse /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 de-
		   pend	on the speed of	access 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_POPU-
		   LATE	 when  available  and will also	read the first byte in
		   each	page to	ensure pages are faulted into memory to	 force
		   memory population from file.

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

       Fixed address memory map	stressor
	    --mmapfixed	N
		   start N workers that	perform	fixed address allocations from
		   the top virtual address down	to 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_POPULATE.  If successfully map'd	then the allocation is
		   remap'd first to a large range of addresses based on	a ran-
		   dom start and finally an  address  that  is	several	 pages
		   higher in memory. Mappings and remappings are madvised with
		   random madvise options to further exercise the mappings.

	    --mmapfixed-mlock
		   attempt  to	mlock(2) mmap'd	pages into memory causing more
		   memory 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
		   madvised  with  MADV_NOHUGEPAGE  and	MADV_HUGEPAGE settings
		   and then 1/64th of the normal small	page  size  pages  are
		   touched.  Finally,  an  attempt  to unmap a small page size
		   page	at the end of the mapping is made (these may  fail  on
		   huge	 pages)	 before	 the set of pages are unmapped.	By de-
		   fault 8192 mappings are attempted per round of mappings  or
		   until swapping is detected.

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

	    --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
		   contiguous  pages  and then unmapping the middle page hence
		   splitting the mapping into two. This	is then	repeated until
		   the maximum allowed mappings	or a maximum  of  262144  map-
		   pings 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
		   related  system calls on randonmly sized mappings. The map-
		   pings are either anonymous mapped  or  file	mapped	(on  a
		   small  file or on a memfd file where	available). This exer-
		   cises  mmap(2)  (random  options  and  flags),   munmap(2),
		   mlock(2),  munlock(2),  madvise(2),	posix_madvise(3), min-
		   core(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
		   mapping operations. Metrics are reported for	all successful
		   system calls	and memory operations.

	    --mmaprandom-ops N
		   stop	after N	random memory mapping bogo-operations.	Gener-
		   ally,  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 de-
		   fault  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  se-
		   lected  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 tor-
		   tured with calls  to	 madvise(2),  mremap(2),  mprotect(2),
		   msync(2),  mlock(2),	 munlock(2),  mseal(2)	and mincore(2)
		   while the underlying	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
		   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.

	    --mmaptorture-msync	N
		   memory mapped pages are msync'd various times per  bogo-op-
		   eration, 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	opera-
		   tions.

       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  mod-
		   probe we can	simply run the userspace modprobe program in a
		   loop.  To  stress  test the kernel module autoloader	we can
		   stress tests	using the upstream kernel  tools/testing/self-
		   tests/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 user-
		   space modprobe call will also prevent  calls	 if  the  same
		   module  exists  already.  The stress-ng modules stressor is
		   designed to help stress test	the finit_module() system call
		   even	if the module is already loaded,  testing  races  that
		   are otherwise hard to reproduce.

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

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

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

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

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

       Monte Carlo computations	of <pi>	and e and various integrals
	    --monte-carlo N
		   start N stressors that compute <pi> and e (Euler's  number)
		   using  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
		   follows:

		   Method     Description
		   all	      use all the random number	generators
		   arc4	      use the libc cryptographically-secure pseudoran-
			      dom 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 val-
			      ues.
		   lcg	      use a 32 bit  Paker-Miller  Linear  Congruential
			      Generator, with a	division optimization.
		   pcg32      use  a 32	bit O'Neill Permuted Congruential Gen-
			      erator.
		   mwc64      use the 64 bit  stress-ng	 Multiply  With	 Carry
			      random number generator.
		   random     use the libc random(3) Non-linear	Additive Feed-
			      back 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  com-
		   pute	<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  Reliable  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 set-
		   tings 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 combinations.

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

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

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

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

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

	    --mremap-bytes N
		   initially allocate N	bytes per remap	stress worker, the de-
		   fault 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
		   memory 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  de-
		   fault, msgsnd sends messages	with a mtype of	1, this	option
		   allows  one to send messages	types in the range 1..N	to ex-
		   ercise the message queue receive ordering. This  will  also
		   impact throughput performance.

       Synchronize file	with memory map	(msync)	stressor
	    --msync N
		   start N stressors that msync	data from a file backed	memory
		   mapping  from  memory  back	to the file and	msync modified
		   data	from the file back to the mapped  memory.  This	 exer-
		   cises  the  msync(2)	 MS_SYNC and MS_INVALIDATE sync	opera-
		   tions.

	    --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 us-
		   ing the suffix b, k,	m or g.

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

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

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

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

	    --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-ex-
		   ecutable  mapped  regions  of child processes (Linux	only).
		   The unmappings map shared memory regions page by page  with
		   a  prime  sized  stride that	creates	many temporary mapping
		   holes.  One the unmappings are complete the child will exit
		   and a new one is started.  Note that	this may trigger  seg-
		   mentation  faults  in  the child process, these are handled
		   where  possible  by	forcing	 the  child  process  to  call
		   _exit(2).

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

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

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

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

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

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

	    --nanosleep-method [ all | cstate |	random | ns | us | ms ]
		   select the nanosleep	sleep duration	method.	  By  default,
		   cstate residency durations (if they exist) and random dura-
		   tions  are  used.   This option allows one to select	one of
		   the three methods:

		   Method  Description
		   all	   use cstate and random nanosecond durations.
		   cstate  use cstate nanosecond durations. It is  recommended
			   to  also use	--nanosleep-threads 1 to exercise less
			   conconcurrent nanosleeps to allow CPUs to drop into
			   deep	C states.
		   random  use random nanosecond durations between 1 and  2^18
			   nanoseconds.
		   ns	   use 1ns (nanosecond)	nanosleeps
		   us	   use 1<mu>s (microsecond) nanosleeps
		   ms	   use 1ms (millisecond) nanosleeps

	    --nanosleep-ops N
		   stop	 the  nanosleep	stressor after N bogo nanosleep	opera-
		   tions.

	    --nanosleep-threads	N
		   specify the number of concurrent pthreads to	run per	stres-
		   sor.	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)
		   commands  across  all  the  available  network devices. The
		   ioctls exercised by this stressor are as follows:  SIOCGIF-
		   CONF, SIOCGIFINDEX, SIOCGIFNAME, SIOCGIFFLAGS, SIOCGIFADDR,
		   SIOCGIFNETMASK,  SIOCGIFMETRIC,  SIOCGIFMTU,	SIOCGIFHWADDR,
		   SIOCGIFMAP and SIOCGIFTXQLEN. See netdevice(7) for more de-
		   tails 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 connec-
		   tor.	Each event received is counted	as  a  bogo  op.  This
		   stressor  can only be run on	Linux and requires CAP_NET_AD-
		   MIN 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  in-
		   structions.	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	avail-
		   able	nop instructions. If the  chosen  INSTR	 generates  an
		   SIGILL  signal, then	the stressor falls back	to the vanilla
		   nop instruction.

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

       /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
		   exercising 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	 migrate_pages(2)  to  move the	stressors and mbind(2)
		   and move_pages(2) to	move the pages of the  mapped  buffer.
		   After  each	move,  the buffer is written to	force activity
		   over	the bus	which results cache misses.   This  test  will
		   only	run on hardware	with NUMA enabled.

	    --numa-bytes N
		   specify  the	 total number bytes to be exercised by all the
		   workers, the	given size is divided by the number of workers
		   and rounded to the nearest page size. The default is	 4  MB
		   per	worker.	 One can specify the size as % of total	avail-
		   able	memory or in units of Bytes, KBytes, MBytes and	GBytes
		   using the suffix b, k, m or g.

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

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

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

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

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

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

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

		   Method  Description
		   inc	   use	 incrementing  32  bit	opcode	patterns  from
			   0x00000000 to 0xfffffff inclusive.
		   mixed   use a mix of	incrementing 32	 bit  opcode  patterns
			   and random 32 bit opcode patterns that are also in-
			   verted,  encoded  with  gray	 encoding  and bit re-
			   versed.
		   random  generate opcodes using random bytes from a mwc ran-
			   dom 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)  op-
		   erations  on	 /dev/zero.  The  maximum opens	at one time is
		   system defined, so the test will run	up to this maximum, or
		   65536 open file descriptors,	which ever comes first.

	    --open-fd
		   run a child process that scans /proc/$PID/fd	 and  attempts
		   to  open the	files that the stressor	has opened. This exer-
		   cises 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  num-
		   ber	of  files  or  a percentage of the maximum per-process
		   open	file system limit.

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

       Page table and TLB stressor
	    --pagemove N
		   start N workers that	mmap a memory region  (default	4  MB)
		   and then shuffle pages to the virtual address of the	previ-
		   ous	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 exer-
		   cised. One can specify the size as  %  of  total  available
		   memory  or in units of Bytes, KBytes, MBytes	and GBytes us-
		   ing the suffix b, k,	m or g.

	    --pagemove-mlock
		   attempt to mlock(2) mmap'd and mremap'd pages  into	memory
		   causing  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-
		   operation.

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

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

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

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

	    --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  re-
		   duce	uncore 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
		   operations.

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

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

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

	    --physpage-mtrr
		   enable  setting  various  memory  type rage register	(MTRR)
		   types on physical pages (Linux and x86 only).

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

       Physical	page mmap stressor (using /dev/mem)
	    --physmmap N
		   start  N  workers that try to mmap available	System RAM (as
		   specified by	/proc/iomem)  using  /dev/mem  and  randomized
		   private  or shared pages. This requires CAP_SYS_ADMIN capa-
		   bilities 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_sig-
		   nal(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
		   exercise  pipe  I/O.	 This exercises	memory write and reads
		   as  well  as	 context  switching.   Each  worker  has   two
		   processes, a	reader and a writer.

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

	    --pipe-ops N
		   stop	pipe stress workers after N  bogo  pipe	 write	opera-
		   tions.

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

	    --pipe-size	N
		   specifies the size of the pipe in bytes (for	 systems  that
		   support  the	F_SETPIPE_SZ fcntl() command). Setting a small
		   pipe	size will cause	the pipe to fill and block  more  fre-
		   quently,  hence  increasing the context switch rate between
		   the pipe writer and the pipe	reader processes. As  of  ver-
		   sion	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	opera-
		   tions.

	    --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  pro-
		   tection  key	 pkey(2)  and the pkey_mprotect(2) call	(Linux
		   only). This will try	to allocate a pkey and	use  this  for
		   the	page  protection, however, if this fails then the spe-
		   cial	pkey -1	will be	used (and the kernel will use the nor-
		   mal 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 con-
		   tain	one or more stressor functions prefixed	 with  stress_
		   in their name. By default the plugin	stressor will find all
		   functions  prefixed with stress_ in their name and exercise
		   these one by	one in a  round-robin  loop,  but  a  specific
		   stressor  can be selected using the --plugin-method option.
		   The stressor	function takes no parameters and returns 0 for
		   success and non-zero	for failure (and  will	terminate  the
		   plugin stressor). Each time a stressor function is executed
		   the	bogo-op	 counter  is incremented by one. The following
		   example performs 10000 nop instructions 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	 exam-
		   ple:

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

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

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

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

	    --poll-random-us N
		   use a random	timeout	of N microseconds for ppoll(2) and ps-
		   elect(2)  calls  instead  of	the default of 20000 microsec-
		   onds.

       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 func-
		   tion	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  (hy-
			   potenuse)
		   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)
		   system call options.	Each batch of prctl calls is performed
		   inside  a new child process to ensure the limit of prctl is
		   contained inside a new process every	time.  Some prctl  op-
		   tions  are  architecture  specific,	however, this stressor
		   will	exercise these even if they are	not implemented.

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

       L3 cache	prefetching stressor
	    --prefetch N
		   start N workers that	benchmark  prefetch  and  non-prefetch
		   reads  of  a	L3 cache sized buffer. The buffer is read with
		   loops of 8 x	64 bit reads per iteration.  In	 the  prefetch
		   cases,  data	 is prefetched ahead of	the current read posi-
		   tion	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	statistics will	vary from run-
		   to-run due to system	noise and CPU frequency	scaling.

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

	    --prefetch-method N
		   select the prefetching method. Available methods are:

		   Method	   Description
		   builtin	   Use the __builtin_prefetch(3) function  for
				   prefetching.	This is	the default.
		   builtinl0	   Use	the __builtin_prefetch(3) function for
				   prefetching,	with a locality	0 hint.
		   builtinl3	   Use the __builtin_prefetch(3) function  for
				   prefetching,	with a locality	3 hint.
		   dcbt		   Use	the  ppc64  dcbt  instruction to fetch
				   data	into the L1 cache (ppc64 only).
		   dcbtst	   Use the ppc64 dcbtst	instruction  to	 fetch
				   data	into the L1 cache (ppc64 only).
		   prefetcht0	   Use	 the  x86  prefetcht0  instruction  to
				   prefetch data into all levels of the	 cache
				   hierarchy (x86 only).
		   prefetcht1	   Use	the x86	prefetcht1 instruction (tempo-
				   ral data with respect to first level	cache)
				   to prefetch data into  level	 2  cache  and
				   higher (x86 only).
		   prefetcht2	   Use	the x86	prefetcht2 instruction (tempo-
				   ral	data  with  respect  to	 second	 level
				   cache)  to prefetch data into level 2 cache
				   and higher (x86 only).
		   prefetchnta	   Use the x86 prefetchnta  instruction	 (non-
				   temporal  data  with	 respect  to all cache
				   levels)  into  a  location  close  to   the
				   processor,  minimizing cache	pollution (x86
				   only).
		   prfm_pldl1keep  Use	the  aarch64  prfm  instruction	  with
				   pld1keep  operation	(retained  or temporal
				   prefetch, allocated 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, allocated 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, allocated 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-tempo-
				   ral	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-tempo-
				   ral 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-tempo-
				   ral	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 Mul-
		   tiple 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 extremely	small chance that the values found are
		   non-prime.  The  search becomes computationally more	expen-
		   sive	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 rel-
			      atively 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  ex-
		   pressed  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  pri-
		   ority  process  will	 run in	priority over the low priority
		   process, causing the	high priority process  to  become  un-
		   runnable.

	    --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  un-
			    runnable 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,  however  "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 un-
		   privileged users.

       Privileged CPU instructions stressor
	    --priv-instr N
		   start N workers that	exercise various architecture specific
		   privileged  instructions  that  cannot be executed by user-
		   space 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 priv-
		   ileged 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  de-
		   scriptor  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,  us-
		   ing	 this	option	will  randomize	 the  offset  on  each
		   write/read cycle.

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

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

	    --pthread-ops N
		   stop	 pthread  workers  after  N bogo pthread create	opera-
		   tions.

       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 follow randomly chosen pointers from
		   each	node, chasing around the entire	node space. This exer-
		   cises 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  pseudoter-
		   minals 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  de-
		   fault 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_GETINFO,  Q_GETSTATS  and	Q_SYNC quotactl(2) commands on
		   all the available mounted block  based  file	 systems.  Re-
		   quires 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	termi-
		   nated  rapidly with the aim to create race conditions where
		   affinity changing occurs during process run states.

	    --race-sched-method	[ all |	next | prev | rand | randinc | sync-
	    next | syncprev ]
		   Select the method moving  a	process	 to  a	specific  CPU.
		   Available methods are described as follows:

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

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

       Radixsort stressor
	    --radixsort	N
		   start N workers that	 sort  random  8  byte	strings	 using
		   radixsort(3)

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

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

	    --radixsort-size N
		   specify number of strings to	sort, default is 262144	(256 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
		   available or	multiple calls to write(2) if not.

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

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

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

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

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

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

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

	    --randist-compact
		   Allocate all	the list objects using one large heap  alloca-
		   tion	 and divide this up for	all the	list objects. This re-
		   moves 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
		   allocated.

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

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

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

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

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

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

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

	    --rawpkt-port N
		   start at port P. For	N rawpkt worker	processes, ports P  to
		   (P  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
		   exist, is not up or does not	support	the  domain  then  the
		   loopback (lo) interface is used as the default.

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

	    --rawudp-port N
		   start  at port P. For N rawudp worker processes, ports P to
		   (P 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
		   random 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
		   default file	size is	 64  MB.   Readaheads  and  reads  are
		   batched into	16 readaheads and then 16 reads.

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

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

       Reboot stressor
	    --reboot N
		   start N workers that	exercise the  reboot(2)	 system	 call.
		   When	 possible, it will create a process in a PID namespace
		   and perform a reboot	power off command that should shutdown
		   the process.	 Also, the stressor exercises  invalid	reboot
		   magic  values  and  invalid reboots when there are insuffi-
		   cient privileges 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  expres-
		   sions  and execute them against a set of text strings. This
		   exercises the regex C library with a	range of various  sim-
		   ple 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
		   exercising register move instructions.  Each	bogo-op	repre-
		   sents 1000 calls of a shuffling function that shuffles  the
		   registers  32  times. Only implemented for the GCC compiler
		   since this requires register	annotations  and  optimization
		   level 0 to compile appropriately.

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

       Memory page reordering stressor
	    --remap N
		   start N workers that	map 512	pages and re-order these pages
		   using  the deprecated system	call remap_file_pages(2). Sev-
		   eral	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, de-
		   fault is 512	pages.

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

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

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

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

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

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

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

       Writing temporary files in reverse position stressor
	    --revio N
		   start N workers continually writing in reverse position or-
		   der to temporary files. The default mode is to stress  test
		   reverse  position ordered writes with randomly sized	sparse
		   holes between each write.  With the --aggressive option en-
		   abled 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 us-
		   ing 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	reada-
		   head	 action	 over  the  entire  file once it has been com-
		   pletely 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	avail-
		   able	then one can use splice	to use more efficient  in-ker-
		   nel data passing instead of buffer copying.

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

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

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

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

       Rlimit stressor
	    --rlimit N
		   start  N  workers  that  exceed resource limits via setting
		   rlimit(2) and trying	to  exceed  these  limits,  generating
		   SIGXCPU, SIGXFSZ and	SIGSEGV	signals.

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

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

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

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

	    --rotate-method method
		   specify  the	 method	 of  rotation to use. The `all'	method
		   uses	all the	methods	and is the default.

		   Method  Description
		   all	   exercise with all the rotate	stressor methods (see below):
		   rol8	   8 bit unsigned rotate left by 1 bit
		   ror8	   8 bit unsigned rotate right by 1 bit
		   rol16   16 bit unsigned rotate left by 1 bit
		   ror16   16 bit unsigned rotate right	by 1 bit
		   rol32   32 bit unsigned rotate left by 1 bit
		   ror32   32 bit unsigned rotate right	by 1 bit
		   rol64   64 bit unsigned rotate left by 1 bit
		   ror64   64 bit unsigned rotate right	by 1 bit
		   rol128  128 bit unsigned rotate left	by 1 bit
		   ror128  128 bit unsigned rotate right by 1 bit

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

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

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

       Real-time clock stressor
	    --rtc N
		   start N workers that	exercise the real time clock (RTC) in-
		   terfaces via	/dev/rtc and /sys/class/rtc/rtc0. No  destruc-
		   tive	 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  re-
		   peatedly  select  random  a scheduling policy and then exe-
		   cutes a short duration randomly chosen time	consuming  ac-
		   tivity. 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	stres-
		   sor instance, range from 1 to 64, default is	16.

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

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

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

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

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

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

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

	    --sctp-port	P
		   start at sctp port P. For N sctp worker processes, ports  P
		   to  (P 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).  Af-
		   ter each SEAL command is issued the	stressor  also	sanity
		   checks if the seal operation	has sealed the file correctly.
		   (Linux only).

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

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

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

       Secret memory stressor (Linux >=	5.11)
	    --secretmem	N
		   start  N  workers  that mmap	pages using file mapping off a
		   memfd_secret(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 frag-
		   mented by unmapping the middle page and then	 umapping  the
		   first  and  last pages. This	tries to force page fragmenta-
		   tion	and also trigger out of	 memory	 (OOM)	kills  of  the
		   stressor when the secret memory is exhausted.  Note this is
		   a  Linux  5.11+  only  stressor  and	the kernel needs to be
		   booted with "secretmem=" option to allocate a secret	memory
		   reservation.

	    --secretmem-ops N
		   stop	secretmem stress workers after N  stress  loop	itera-
		   tions.

       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 al-
		   low	the  I/O  to  occur  in	the cache, causing greater CPU
		   load. Large file sizes force	more I/O operations  to	 drive
		   causing  more  wait time and	more I/O on the	drive. One can
		   specify the size in units  of  Bytes,  KBytes,  MBytes  and
		   GBytes using	the suffix b, k, m or g.

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

	    --sem-ops N
		   stop	semaphore stress workers after N bogo semaphore	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 al-
		   lowed.

	    --sem-shared
		   share the semaphore across all sem stressor instances. Nor-
		   mally  each	semaphore stressor shares a semaphore with its
		   child processes, this option	 produces  more	 locking  con-
		   tention  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	 sema-
		   phore. This stresses	fast semaphore operations and produces
		   rapid context switching.

	    --sem-sysv-ops N
		   stop	 semaphore  stress workers after N bogo	System V sema-
		   phore 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 defined and	GETALL succeeding and is an opt-in op-
		   tion	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
		   default  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 or-
		   phaned 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), sethost-
		   name(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	shell-
		   sort(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  ob-
		   jects  using	 the  POSIX  shared memory interfaces.	By de-
		   fault, 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
		   created. One	can specify the	size as	% of  total  available
		   memory  or in units of Bytes, KBytes, MBytes	and GBytes us-
		   ing the suffix b, k,	m or g.

	    --shm-mlock
		   attempt to mlock(2) shared memory objects into memory caus-
		   ing more memory pressure by preventing pages	 from  swapped
		   out.

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

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

       System V	shared memory stressor
	    --shm-sysv N
		   start N workers that	allocate shared	memory using the  Sys-
		   tem	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 cre-
		   ated. One can specify the size as % of total	available mem-
		   ory 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 caus-
		   ing	more  memory pressure by preventing pages from swapped
		   out.

	    --shm-sysv-ops N
		   stop	after N	shared memory create and destroy  bogo	opera-
		   tions 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  suc-
		   cessfully handled.

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

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

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

	    --sigchld-ops N
		   stop	the sigchld workers after N SIGCHLD signals  are  suc-
		   cessfully 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
		   indirectly 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	gener-
		   ate 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  asynchro-
		   nous	I/O via	SIGIO.

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

       System signals stressor
	    --signal N
		   start  N workers that exercise the signal system call three
		   different signal handlers, SIG_IGN (ignore),	a SIGCHLD han-
		   dler	and SIG_DFL (default action).  For  the	 SIGCHLD  han-
		   dler, the stressor sends itself a SIGCHLD signal and	checks
		   if  it  has	been handled. For other	handlers, the stressor
		   checks that the SIGCHLD handler has not been	called.	  This
		   stress test calls the signal	system call directly when pos-
		   sible  and  will  try to avoid the C	library	attempt	to re-
		   place 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  ex-
		   ercise.  An	alternative signal stack is used that is large
		   enough to handle all	the nested signal calls.  The  -v  op-
		   tion	 will  log  the	approximate size of the	stack required
		   and the average stack size per nested call.

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

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

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

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

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

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

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

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

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

       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 ac-
		   cess	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  sigsus-
		   pend(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 sys-
		   tems	that support SIGTRAP, the signal  is  generated	 using
		   raise(SIGTRAP).  Only x86 Linux systems the SIGTRAP is also
		   generated by	an int 3 instruction.

	    --sigtrap-ops N
		   stop	sigtrap	stress workers after N	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
		   attempts.

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

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

       Random memory and processor cache line stressor via a skiplist
	    --skiplist N
		   start N workers that	store and then search for integers us-
		   ing	a  skiplist.  By default, 65536	integers are added and
		   searched.  This is a	useful method to exercise  random  ac-
		   cess	of memory and processor	cache.

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

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

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

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

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

       System management interrupts (SMI) stressor
	    --smi N
		   start N workers that	attempt	to generate system  management
		   interrupts  (SMIs)  into  the x86 ring -2 system management
		   mode	(SMM) by  exercising  the  advanced  power  management
		   (APM)  port	0xb2.  This requires the --pathological	option
		   and root privilege and is only  implemented	on  x86	 Linux
		   platforms. This probably does not work in a virtualized en-
		   vironment.  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	activ-
		   ity.	This involves a	pair of	client/server  processes  per-
		   forming rapid connect, send and receives and	disconnects on
		   the local host.

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

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

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

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

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

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

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

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

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

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

       Socket abusing stressor
	    --sockabuse	N
		   start  N  workers  that abuse a socket file descriptor with
		   various file	based system that don't	normally act on	 sock-
		   ets.	 The kernel should handle these	illegal	and unexpected
		   calls gracefully.

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

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

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

	    --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  do-
		   main	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 re-
		   ceiver 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
		   exist, is not up or does not	support	the  domain  then  the
		   loopback (lo) interface is used as the default.

	    --sockmany-ops N
		   stop	after N	connections.

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

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

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

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

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

       Sparse matrix stressor
	    --sparsematrix N
		   start N workers that	exercise 3 different sparse matrix im-
		   plementations based on hashing, Judy	array (for 64 bit sys-
		   tems), 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  val-
		   ues,	 random	 values	 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  ma-
		   trix	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 meth-
			     ods (see below):
		   hash	     use a hash	table and allocate nodes on  the  heap
			     for  each	unique	value at a (x, y) matrix posi-
			     tion.
		   hashjudy  use a hash	table for x coordinates	and a Judy ar-
			     ray for y coordinates for values at a (x, y)  ma-
			     trix position.
		   judy	     use  a Judy array with a unique 1-to-1 mapping of
			     (x, y) matrix position into the array.
		   list	     use a circular linked-list	for sparse y positions
			     each with circular	linked-lists for sparse	x  po-
			     sitions 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 ref-
			     erenced will get  physically  mapped.  Note  that
			     large  sparse  matrices  cannot  be mmap'd	due to
			     lack of virtual address limitations, and too many
			     referenced	pages can trigger the  out  of	memory
			     killer on Linux.
		   qhash     use  a  hash  table  with pre-allocated nodes for
			     each unique value.	This is	a quick	hash table im-
			     plementation, nodes are not allocated  each  time
			     with  calloc  and	are allocated from a pre-allo-
			     cated pool	leading	to quicker hash	table  perfor-
			     mance than	the hash method.
		   rb	     use a red-black balanced tree using one tree node
			     for  each	unique	value at a (x, y) matrix posi-
			     tion.
		   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 im-
		   mediately. 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
		   toolchains.

	    --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 oper-
		   ation

       Splice stressor (Linux)
	    --splice N
		   move	 data from /dev/zero to	/dev/null through a pipe with-
		   out any copying between kernel address space	and  user  ad-
		   dress  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 over-
		   flows 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 par-
		   ent 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  aggres-
		   sive.

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

	    --stack-unmap
		   unmap  a  single page in the	middle of a large buffer allo-
		   cated on the	stack on each stack  allocation.  This	forces
		   the	stack  mapping	into multiple separate allocation map-
		   pings.

       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, str-
		   casecmp, strcat, strchr, strcoll, strcmp,  strcpy,  strlen,
		   strncasecmp,	 strncat,  strncmp,  strrchr and strxfrm.  See
		   string(3) for more information on these  string  functions.
		   The	`all'  method is the default and will exercise all the
		   string methods.

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

       STREAM memory stressor
	    --stream N
		   start N workers exercising a	memory bandwidth stressor very
		   loosely based on the	STREAM "Sustainable  Memory  Bandwidth
		   in High Performance Computers" benchmarking tool by John D.
		   McCalpin,  Ph.D. This stressor allocates 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
		   benchmark  code,  DO	NOT submit results based on this as it
		   is intended to in stress-ng just to stress memory and  com-
		   pute	 and  NOT  intended  for STREAM	accurate tuned or non-
		   tuned benchmarking  whatsoever.  Use	 the  official	STREAM
		   benchmarking	 tool  if you desire accurate and standardised
		   STREAM benchmarks.

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

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

	    --stream-l3-size N
		   Specify the CPU Level 3 cache size in bytes.	 One can spec-
		   ify	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  pre-
		   vent	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 `nor-
		   mal'.

	    --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
		   performance.	 This  option  enables this optimization, how-
		   ever, it may	lead to	degraded performance if	 the  compiler
		   does	 not  insert  the  prefetching	in the correct places.
		   Best	to enable this for the default --stream-index  0  set-
		   ting.

       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
		   mutually blocking/unblocking	 tied  processes.  By  default
		   message  passing over a pipe	is used, but different methods
		   are available.

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

	    --switch-method [ mq | pipe	| sem-sysv ]
		   select  the preferred context switch	block/run synchroniza-
		   tion	method,	these are as follows:

		   Method    Description
		   mq	     use posix message queue with a 1 item size.  Mes-
			     sages  are	 passed	 between a sender and receiver
			     process.
		   pipe	     single character messages are passed down a  sin-
			     gle character sized pipe between a	sender and re-
			     ceiver process.
		   sem-sysv  a	 SYSV  semaphore  is  used  to	block/run  two
			     processes.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	    --syscall-method method
		   select  the choice of system	calls to executed based	on the
		   fastest test	duration times.	 Note that this	 includes  the
		   time	 to  setup, execute the	system call and	cleanup	after-
		   wards.  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  geo-
			      metric mean of all the test times
		   geomean1   select  tests  that are less or equal to 2 x the
			      geometric	mean of	all the	test times
		   geomean1   select tests that	are less or equal to 3	x  the
			      geometric	mean of	all the	test times

	    --syscall-ops N
		   stop	after N	system calls

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

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

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

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

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

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

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

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

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

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

	    --timer-freq F
		   run timers at F Hz; range from 1 to	1000000000  Hz	(Linux
		   only).  By selecting	an appropriate frequency stress-ng can
		   generate hundreds of	thousands of  interrupts  per  second.
		   Note:  it is	also worth using --timer-slack 0 for high fre-
		   quencies 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  pre-
		   dictable.

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

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

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

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

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

       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  in-
		   terrupts  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_BOOTTIME 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	appro-
		   priate  for	monotonic  clocks  perform a check for reverse
		   time	warping. At the	end of the run there  are  time	 wrap-
		   around  checks. This	stressor exercises clock_gettime(2) on
		   all	available   clocks,   gettimeofday(2),	 time(2)   and
		   getrusage(2)	 to  check for unexpected time behaviour. Note
		   that	only some clocks are reliably monotonic.

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

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

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

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

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

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

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

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

	    --touch-method [ random | open | creat ]
		   select the method the file is created, either randomly  us-
		   ing	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 de-
		   fault 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	 exer-
		   cise	memory and cache with the various tree operations.

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

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

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

       Trigonometric functions stressor
	    --trig N
		   start  N  workers  that  exercise  sin,  cos, sincos	(where
		   available)  and  tan	 libm  trigonometric  functions	 using
		   float, double and long double floating point	variants. Each
		   function is exercised 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.	Avail-
		   able	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 in-
		   struction  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 inte-
		   gers	 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 ran-
		   dom access of memory	and processor cache.

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

	    --tsearch-size N
		   specify  the	 size (number of 32 bit	integers) in the array
		   to tsearch. Size can	be from	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	destroys it. A new random 192.168.*.* IPv4 address  is
		   used	each time a tunnel is created.

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

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

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

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

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

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

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

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

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

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

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

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

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

       File umask stressor
	    --umask N
		   start N workers that	 exercise  setting  umask  and	creat-
		   ing/fstat'ing/closing/unlinking  a  file  and  checking the
		   file	mode is	set correctly. This exercises umask mask  val-
		   ues 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 unmount-
		   ing 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
		   operations.

       Unlink stressor
	    --unlink N
		   start  N  workers that each run 4 processes per worker that
		   create, open, unlink	and close 1024 files in	randomized or-
		   der 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 disassoci-
		   ating 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  get-
		   pid(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 oper-
		   ations (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
		   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.

	    --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  mil-
		   liseconds).	The  load  is  changed	based  on  the --vary-
		   load-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  de-
		   scribed as follows:

		   Method  Description
		   all			randomly  select  any  one  of all the
					following methods:
		   fma			perform	 multiply-add  operations,  on
					modern	processors  these  may be com-
					piled into fused-multiply-add instruc-
					tions.
		   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  mem-
					set(3).
		   mcw64		compute	 64 bit	random numbers using a
					mwc random generator.
		   nop			waste cycles using no-op instructions.
		   pause		stop execution using  CPU  pause/yield
					or  memory  barrier instructions where
					available.
		   procname		where possible,	 change	 the  stressor
					process	name.
		   random		a random mix of	all the	workload meth-
					ods,  changing	the workload method on
					every spin-loop.
		   sqrt			perform	 double	  precision   floating
					point sqrt(3) and hypot(3) math	opera-
					tions.
		   vecfp		perform	multiplication and addition on
					a vector of 64 double precision	float-
					ing point values.

	    --varyload-type T
		   select  the	varying	load type. The available types are de-
		   scribed 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	incre-
			     ments of 1	and then directly back down to 1.
		   saw-dec   repeatedly	 vary  the  load  from	N down to 1 in
			     decrements	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), get-
		   timeofday(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
		   comparison  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 pro-
		   duced by this mix depend on the processor architecture  and
		   the vector math optimisations 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
		   double precision) addition,	multiplication,	 division  and
		   negation on vectors of 128, 64, 32, 16 and 8	floating point
		   values.  The	-v option will show the	approximate throughput
		   in millions of floating pointer operations per  second  for
		   each	 operation.   For x86, the gcc/clang target clones at-
		   tribute has been used to produced vector optimizations  for
		   a range of mmx, sse,	avx and	processor features.

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

		   Method	  Description
		   all		  iterate through all of the following	vector
				  methods
		   floatv128add	  addition of a	vector of 128 single precision
				  floating point values
		   floatv64add	  addition  of a vector	of 64 single precision
				  floating point values
		   floatv32add	  addition of a	vector of 32 single  precision
				  floating point values
		   floatv16add	  addition  of a vector	of 16 single precision
				  floating point values
		   floatv8add	  addition of a	vector of 8  single  precision
				  floating point values
		   floatv128mul	  multiplication  of  a	 vector	 of 128	single
				  precision floating point values
		   floatv64mul	  multiplication of a vector of	64 single pre-
				  cision floating point	values
		   floatv32mul	  multiplication of a vector of	32 single pre-
				  cision floating point	values
		   floatv16mul	  multiplication of a vector of	16 single pre-
				  cision floating point	values
		   floatv8mul	  multiplication of a vector of	8 single  pre-
				  cision floating point	values
		   floatv128div	  division of a	vector of 128 single precision
				  floating point values
		   floatv64div	  division  of a vector	of 64 single precision
				  floating point values
		   floatv32div	  division of a	vector of 32 single  precision
				  floating point values
		   floatv16div	  division  of a vector	of 16 single precision
				  floating point values
		   floatv8div	  division of a	vector of 8  single  precision
				  floating point values
		   doublev128add  addition of a	vector of 128 double precision
				  floating point values
		   doublev64add	  addition  of a vector	of 64 double precision
				  floating point values
		   doublev32add	  addition of a	vector of 32 double  precision
				  floating point values
		   doublev16add	  addition  of a vector	of 16 double precision
				  floating point values
		   doublev8add	  addition of a	vector of 8  double  precision
				  floating point values
		   doublev128mul  multiplication  of  a	 vector	 of 128	double
				  precision floating point values
		   doublev64mul	  multiplication of a vector of	64 double pre-
				  cision floating point	values
		   doublev32mul	  multiplication of a vector of	32 double pre-
				  cision floating point	values
		   doublev16mul	  multiplication of a vector of	16 double pre-
				  cision floating point	values
		   doublev8mul	  multiplication of a vector of	8 double  pre-
				  cision 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	opera-
		   tions.  For	example,  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
		   operations on various 128 bit vectors. A mix	of vector math
		   operations  are  performed on the following vectors:	16 x 8
		   bits, 8 x 16	bits, 4	x 32 bits, 2 x 64 bits and where  sup-
		   ported  1  x	128 bits. The metrics produced by this mix de-
		   pend	on the processor architecture and the vector math  op-
		   timisations 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 vec-
		   tors	comprised of 8,	16, 32,	64 and 128 bit unsigned	 inte-
		   gers.  The  integers	 are shuffled around the vector	with 4
		   shuffle operations per loop,	65536 loops make up one	 bogo-
		   op of shuffling. The	data shuffling rates and shuffle oper-
		   ation  rates	 are  logged  when  using the -v option.  This
		   stressor  exercises	vector	load,  shuffle/permute,	 pack-
		   ing/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	 equa-
		   vlent 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 perfor-
		   mance  vs  the  expected compute performance	based on total
		   run time is shown for the first vecwide worker. The vecwide
		   stressor exercises  various	processor  vector  instruction
		   mixes  and  how well	the compiler can map the vector	opera-
		   tions to the	target instruction set.

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

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

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

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

	    --vfork-max	P
		   create P processes and then wait for	them to	exit per iter-
		   ation.  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
		   madvise(2)  on all pages of the vforked process. Where pos-
		   sible 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
		   default  is 64 MB. This also	enables	the --vforkmany-vm op-
		   tion.  One can specify the size as  %  of  total  available
		   memory  or in units of Bytes, KBytes, MBytes	and GBytes us-
		   ing the suffix b, k,	m or g.

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

	    --vm-bytes N
		   mmap	 N  bytes  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-
		   writing to it.

	    --vm-locked
		   Lock	 the pages of the mapped region	into memory using mmap
		   MAP_LOCKED (since Linux 2.5.37).  This is similar to	 lock-
		   ing 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 `collapse', `dontneed', `hugepage',	`mergeable'  ,
		   `nohugepage',  `normal',  `random', `sequential', `unmerge-
		   able' and `willneed'	advice.	If this	 option	 is  not  used
		   then	 the default is	to pick	random madvise advice for each
		   mmap	call. See madvise(2) for more details.

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

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

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

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

		   The	vm  methods  containing	 `prime'  in their name	have a
		   stride of the largest prime less  than  2^64,  allowing  to
		   them	 to thoroughly step through memory and touch all loca-
		   tions 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  cor-
		   rectly either, use tools such as memtest86 instead.

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

		   Available vm	stress methods are described as	follows:

		   Method	 Description
		   all		 iterate  over	all  the  vm stress methods as
				 listed	below.
		   cache-lines	 work through memory in	64  byte  cache	 sized
				 steps	writing	 a single byte per cache line.
				 Once the write	is  complete,  the  memory  is
				 read  to  verify  the values are written cor-
				 rectly.
		   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 (in-
				 verted). This will  effectively  invert  each
				 byte in 8 passes.
		   fwdrev	 write	to  even  addressed bytes in a forward
				 direction and odd addressed bytes in  reverse
				 direction.  rhe  contents  are	sanity checked
				 once all the addresses	have been written to.
		   galpat-0	 galloping pattern zeros. This sets  all  bits
				 to  0	and flips just 1 in 4096 bits to 1. It
				 then checks to	see if the 1s are pulled  down
				 to 0 by their neighbours or of	the neighbours
				 have been pulled up to	1.
		   galpat-1	 galloping pattern ones. This sets all bits to
				 1 and flips just 1 in 4096 bits to 0. It then
				 checks	to see if the 0s are pulled up to 1 by
				 their	neighbours  or	of the neighbours have
				 been pulled down to 0.
		   gray		 fill the memory with  sequential  gray	 codes
				 (these	 only  change  1 bit at	a time between
				 adjacent bytes) and then check	 if  they  are
				 set correctly.
		   grayflip	 fill  memory with adjacent bytes of gray code
				 and inverted gray code	 pairs	to  change  as
				 many  bits  at	 a time	between	adjacent bytes
				 and check if these are	set correctly.
		   incdec	 work sequentially through memory  twice,  the
				 first pass increments each byte by a specific
				 value	and  the  second  pass decrements each
				 byte back to the original  start  value.  The
				 increment/decrement value changes on each in-
				 vocation of the stressor.
		   inc-nybble	 initialise   memory  to  a  set  value	 (that
				 changes on each invocation of	the  stressor)
				 and  then sequentially	work through each byte
				 incrementing the bottom 4 bits	by 1  and  the
				 top 4 bits by 15.
		   lfsr32	 fill  memory  with values generated from a 32
				 bit Galois linear feedback shift register us-
				 ing 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).
		   modulo-x	 fill memory over 23 iterations.  Each	itera-
				 tion  starts  one byte	further	along from the
				 start of the memory and  steps	 along	in  23
				 byte  strides.	In each	stride,	the first byte
				 is set	to a  random  pattern  and  all	 other
				 bytes are set to the inverse.	Then it	checks
				 see  if  the first byte contains the expected
				 random	  pattern.   This   exercises	 cache
				 store/reads as	well as	seeing if neighbouring
				 cells influence each other.
		   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,  sequen-
				 tially	 invert	 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  mem-
				 ory  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  in-
				 crementing  bytes and then re-do again	decre-
				 menting bytes.
		   rand-set	 sequentially work through memory  in  64  bit
				 chunks	setting	bytes in the chunk to the same
				 8 bit random value.  The random value changes
				 on  each  chunk.   Check that the values have
				 not changed.
		   rand-sum	 sequentially set all memory to	random	values
				 and then summate the number of	bits that have
				 changed from the original set values.
		   read64	 sequentially  read  memory  using 32 x	64 bit
				 reads per bogo	loop. Each loop	equates	to one
				 bogo operation.  This	exercises  raw	memory
				 reads.
		   ror		 fill  memory  with  a random pattern and then
				 sequentially rotate 64	bits of	 memory	 right
				 by  one  bit,	then  check the	final load/ro-
				 tate/stored values.
		   rowhammer	 try to	 force	memory	corruption  using  the
				 rowhammer  memory  stressor. This fetches two
				 32 bit	integers  from	memory	and  forces  a
				 cache	flush  on  the	two addresses multiple
				 times.	This has been known to force bit flip-
				 ping on some hardware,	especially with	 lower
				 frequency memory refresh cycles.
		   swap		 fill  memory  in  64  byte chunks with	random
				 patterns. Then	swap each 64 chunk with	a ran-
				 domly 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  address  lines to see	if any address
				 lines are stuck low.  This  works  best  with
				 physical memory addressing, however, exercis-
				 ing  these  virtual  addresses	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 expected. 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 address lines to see if  any  address
				 lines	are  stuck  high. This works best with
				 physical memory addressing, however, exercis-
				 ing these virtual addresses  has  some	 value
				 too.
		   walk-1d	 for  each  byte  in memory, walk through each
				 data line setting them	to high	(and the  oth-
				 ers  are  set low) and	check that the written
				 value is as expected. 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	itera-
				 tion.
		   write64ds	 sequentially  write  to  memory using 32 x 64
				 bit direct store writes per bogo loop.	  Each
				 loop  equates to one bogo operation. This ex-
				 ercises cacheless write combining (WC)	memory
				 type protocol for memory writes and  is  only
				 available  on	x86  systems with the movediri
				 instruction built with	gcc and	clang  compil-
				 ers.  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  ex-
				 ercises  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	avail-
				 able if the compiler supports vector  types).
				 Each loop equates to one bogo operation. This
				 exercises  raw	memory writes.	Note that mem-
				 ory writes are	not checked at the end of each
				 test iteration.
		   wrrd128nt	 write to memory in 128	bit chunks using  non-
				 temporal  writes (bypassing the cache).  Each
				 chunk is written 4 times to hammer  the  mem-
				 ory. Then check to see	if the data is correct
				 using	non-temporal  reads if they are	avail-
				 able or normal	 memory	 reads	if  not.  Only
				 available  with  processors that provide non-
				 temporal 128 bit writes.
		   zero-one	 set all memory	bits to	zero and then check if
				 any bits are not zero.	Next, set all the mem-
				 ory 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 us-
		   ing 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 addressing patterns. Each method	will  set  the
		   memory to a random pattern in a write phase and then	sanity
		   check this in a read	phase.

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

		   Available  vm  address stress methods are described as fol-
		   lows:

		   Method   Description
		   all	    iterate over all the vm stress methods  as	listed
			    below.
		   bitposn  iteratively	write to memory	in powers of 2 strides
			    of	max_stride  to 1 and then read check memory in
			    powers  of	2  strides  1  to   max_stride	 where
			    max_stride	is  half the size of the memory	mapped
			    region. All	bit positions of  the  memory  address
			    space are bit flipped in the striding.
		   dec	    work  through  the address range backwards sequen-
			    tially, byte by byte.
		   decinv   like dec, but with all the relevant	 address  bits
			    inverted.
		   flip	    address  memory  using  gray  coded	 addresses and
			    their inverse to flip as  many  address  bits  per
			    write/read operation
		   gray	    work  through  memory with gray coded addresses so
			    that each change of	address	 just  changes	1  bit
			    compared to	the previous address.
		   grayinv  like  gray,	but with the all relevant address bits
			    inverted, hence all	bits change apart  from	 1  in
			    the	address	range.
		   inc	    work  through  the	address	range forwards sequen-
			    tially, byte by byte.
		   incinv   like inc, but with all the relevant	 address  bits
			    inverted.
		   pwr2	    work  through  memory addresses in steps of	powers
			    of two.
		   pwr2inv  like pwr2, but with	the all	relevant address  bits
			    inverted.
		   rev	    work  through  the	address	range with the bits in
			    the	address	range reversed.
		   revinv   like rev, but with all the relevant	 address  bits
			    inverted.

	    --vm-addr-mlock
		   attempt  to	mlock(2) pages into memory causing more	memory
		   pressure 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
		   using process_vm_writev(2) and process_vm_readv(2). This is
		   feature is only supported on	Linux.	Memory	transfers  are
		   only	verified if the	--verify option	is enabled.

	    --vm-rw-bytes N
		   mmap	 N  bytes  per vm-rw worker, the default is 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
		   address space causing a SIGSEGV on return from the unmap.

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

       Vmsplice	stressor (Linux)
	    --vm-splice	N
		   move	data from memory to /dev/null through a	 pipe  without
		   any	copying	 between kernel	address	space and user address
		   space using vmsplice(2) and splice(2).  This	is only	avail-
		   able	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 suf-
		   fix 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),
		   mincore(2)  and access 32 pages in a	randomly selected vir-
		   tual	memory 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  in-
		   structions  (VNNI)  used  in	 convolutional	neural network
		   loops. A 256	byte vector is operated	upon using 8 bit  mul-
		   tiply  with	16  bit	 summation, 16 bit multiply and	32 bit
		   summation, and 8 bit	summation. When	processor features al-
		   low,	these operations using 512, 256	and 128	bit vector op-
		   erations. Generic non-vectorized code  variants  also  pro-
		   vided  (which may be	vectorized by more advanced optimising
		   compilers).

	    --vnni-intrinsic
		   just	use the	vnni methods that use intrinsic	VNNI  instruc-
		   tions 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 op-
				erations on 64 x 8 bit integers, (x86 vpaddb)
		   vpaddb256	8 bit vector addition using 256	bit vector op-
				erations on 32 x 8 bit integers, (x86 vpaddb)
		   vpaddb128	8  bit	vector	addition using 128 bit vectors
				operations  on	32  x  8  bit  integers,  (x86
				vpaddb)
		   vpaddb	8  bit	vector addition	using 8	bit sequential
				addition (may be vectorized by the compiler)
		   vpdpbusd512	8 bit vector multiplication  of	 unsigned  and
				signed	8 bit values followed by 16 bit	summa-
				tion 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	summa-
				tion 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	summa-
				tion 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	summa-
				tion using sequential operations (may be  vec-
				torized	by the compiler)
		   vpdpwssd512	16  bit	 vector	multiplication of unsigned and
				signed 16 bit values followed by 32 bit	summa-
				tion using 512 bit vector operations on	64 x 8
				bit integers, (x86 vpdpwssd)
		   vpdpwssd256	16 bit vector multiplication of	 unsigned  and
				signed 16 bit values followed by 32 bit	summa-
				tion using 256 bit vector operations on	64 x 8
				bit integers, (x86 vpdpwssd)
		   vpdpwssd128	16  bit	 vector	multiplication of unsigned and
				signed 16 bit values followed by 32 bit	summa-
				tion using 128 bit vector operations on	64 x 8
				bit integers, (x86 vpdpwssd)
		   vpdpwssd	16 bit vector multiplication of	 unsigned  and
				signed 16 bit values followed by 32 bit	summa-
				tion  using sequential operations (may be vec-
				torized	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 instruc-
		   tions are used.

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

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

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

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

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

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

       scheduler workload stressor
	    --workload N
		   start  N  workers that exercise the scheduler with items of
		   work	that are started at random times with random sleep de-
		   lays	between	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  microsec-
		   onds.   The	--workload-threads option allows work items to
		   be taken from a queue and run concurrently if the  schedul-
		   ing 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 run-
		   ning	work item when running with the	default	of zero	worker
		   threads.  This emulates bursty scheduled compute,  such  as
		   handling  input  packets  where  one	 may have lots of work
		   items bunched together or with random unpredictable	delays
		   between work	items.

	    --workload-load L
		   specify the percentage run time load	of each	work item with
		   respect to the run quanta duration. Essentially the run du-
		   ration  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
					following methods:
		   fma			perform	 multiply-add  operations,  on
					modern processors these	 may  be  com-
					piled into fused-multiply-add instruc-
					tions.
		   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 mem-
					set(3).
		   mcw64		compute	64 bit random numbers using  a
					mwc random generator.
		   nop			waste cycles using no-op instructions.
		   pause		stop  execution	 using CPU pause/yield
					or memory barrier  instructions	 where
					available.
		   procname		where  possible,  change  the stressor
					process	name.
		   random		a random mix of	all the	workload meth-
					ods, changing the workload  method  on
					every spin-loop.
		   sqrt			perform	  double   precision  floating
					point sqrt(3) and hypot(3) math	opera-
					tions.
		   vecfp		perform	multiplication and addition on
					a vector of 64 double precision	float-
					ing point values.

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

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

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

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

	    --workload-dist [ cluster |	even | poisson | random1 | random2 |
	    random3 ]
		   specify the scheduling distribution of work items, the  de-
		   fault  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  distrib-
			    uted using a single	random variable. The clustered
			    start  times  causes a burst of items to be	sched-
			    uled in a bunch with no delays between each	 clus-
			    tered work item.
		   even	    evenly  distribute	scheduling  start times	across
			    the	workload slice
		   poisson  generate scheduling	events that occur individually
			    at random moments, but which tend to occur	at  an
			    average rate (known	as a Poisson process).
		   random1  evenly  randomly distribute	scheduling start times
			    using a single random variable.
		   random2  randomly distribute	scheduling start times using a
			    sum	of two random variables, much like throwing  2
			    dice.
		   random3  randomly distribute	scheduling start times using a
			    sum	 of three random variables, much like throwing
			    3 dice.

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

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

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

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

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

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

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

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

       Yield scheduling	stressor
	    -y N, --yield N
		   start N workers that	call sched_yield(2). This stressor en-
		   sures 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 oper-
		   ations.

	    --yield-procs N
		   specify the number of child processes to run	 per  stressor
		   instance. 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
		   require 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	benchmarking 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 exer-
		   cising on /dev/zero.

       Zlib stressor
	    --zlib N
		   start N workers compressing and decompressing  random  data
		   using  zlib.	 Each  worker has two processes, one that com-
		   presses 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 compres-
		   sion, 1 = fastest compression and 9 = best compression.

	    --zlib-mem-level L
		   specify the reserved	compression  state  memory  for	 zlib.
		   Default is 8.

		   Value
		     1	  minimum memory usage.
		     9	  maximum memory usage.

	    --zlib-method method
		   specify  the	 type  of  random data to send to the zlib li-
		   brary.  By default, the data	stream is created from a  ran-
		   dom	selection  of the different data generation processes.
		   However one can specify just	one method to be used  if  re-
		   quired.   Available	zlib  data  generation methods are de-
		   scribed 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 increment-
				ing counter.
		   inc16	16  bit	 incrementing  values  starting	from a
				random 16 bit value.
		   latin	Random latin sentences from a sample of	 Lorem
				Ipsum text.
		   lehmer	Fast  random  values  generated	using Lehmer's
				generator using	a 128 bit multiply.
		   lfsr32	Values generated from a	32 bit	Galois	linear
				feedback  shift	 register using	the polynomial
				x^32 + x^31 + x^29 + x + 1. This  generates  a
				ring  of   2^32	 - 1 unique values (all	32 bit
				values except for 0).
		   logmap	Values generated from a	logistical map of  the
				equation 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 sen-
				tences 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	selec-
				tion tree optimization.	Pink  noise  is	 where
				the  power  spectral density is	inversely pro-
				portional to the frequency of the  signal  and
				hence is slightly compressible.
		   random	segments  of  the  data	 stream	are created by
				randomly calling the different data generation
				methods.
		   rarely1	data that has a	single 1  in  every  32	 bits,
				randomly located.
		   rarely0	data  that  has	 a  single 0 in	every 32 bits,
				randomly located.
		   rdrand	generate random	data using rdrand  instruction
				(x86)  or  use 64 bit mwc psuedo-random	number
				generator for non-x86 systems.
		   ror32	generate a 32  bit  random  value,  rotate  it
				right  0  to  7	 places	 and store the rotated
				value for each of the rotations.
		   text		random ASCII text.
		   utf8		random 8 bit data encoded to UTF-8.
		   zero		all zeros, compresses very easily.

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

	    --zlib-strategy S
		   specifies the strategy to use when deflating	data. This  is
		   used	to tune	the compression	algorithm. Default is 0.

		   Value
		     0	  used for normal data (Z_DEFAULT_STRATEGY).
		     1	  for data generated by	a filter or predictor (Z_FILTERED)
		     2	  forces huffman encoding (Z_HUFFMAN_ONLY).
		     3	  Limit	match distances	to one run-length-encoding (Z_RLE).
		     4	  prevents dynamic huffman codes (Z_FIXED).

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

		   Value
		     0	  creates an endless deflate stream until stressor stops.
		     n	  creates an stream of n bytes over and	over again.
			  Each block will be closed with Z_STREAM_END.

	    --zlib-window-bits W
		   specify the window bits used	to specify the history	buffer
		   size.  The  value is	specified as the base two logarithm of
		   the buffer size (e.g. value 9 is 2^9	= 512 bytes).  Default
		   is 15.

		    Value
		   -8-(-15)  raw deflate format.
		     8-15    zlib format.
		    24-31    gzip format.
		    40-47    inflate auto format detection using zlib deflate format.

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

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

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

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

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

       stress-ng --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-mul-
	      tiple-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
	      permutation mix.

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

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

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

	      runs 8 cpu stressors and stops after 800000 bogo operations.

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

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

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

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

       stress-ng --cpu -1 --cpu-method all -t 1h --cpu-load 90

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

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

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

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

	      run 4 instances of all the stressors for 5 minutes.

       stress-ng --random 64

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

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

	      run  64  instances of all	the different cpu stressors and	verify
	      that the computations are	correct	for 10 minutes with a bogo op-
	      erations 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
	      online 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)	simul-
	      taneously, maximize the settings	(memory	 sizes,	 file  alloca-
	      tions, 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 an-
	      other 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 num-
	      bered 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  mem-
		    ory).
	   2	    One	or more	stressors failed.
	   3	    One	or more	stressors failed to initialise because of lack
		    of	resources,  for	example	ENOMEM (no memory), ENOSPC (no
		    space on file system) or a missing or unimplemented	system
		    call.
	   4	    One	or more	stressors were not implemented on  a  specific
		    architecture or operating system.
	   5	    A stressor has been	killed by an unexpected	signal.
	   6	    A  stressor	 exited	 by exit(2) which was not expected and
		    timing metrics could not be	gathered.
	   7	    The	bogo ops metrics maybe	untrustworthy.	This  is  most
		    likely  to	occur  when a stress test is terminated	during
		    the	update of a bogo-ops counter such as when it has  been
		    OOM	killed.	A less likely reason is	that the counter ready
		    indicator has been corrupted.

BUGS
       File bug	reports	at: https://github.com/ColinIanKing/stress-ng/issues -
       please  note  that no support will be provided if stress-ng is packaged
       without 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  mem-
       ory segments are	removed	cleanly.

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

       Note that the stress-ng cpu, io,	vm and hdd tests are different	imple-
       mentations 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