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 various physical subsystems of	a com-
       puter  as  well	as  the	 various  operating  system kernel interfaces.
       stress-ng also has a wide range of CPU specific stress tests that exer-
       cise floating point, integer, bit manipulation and control flow.

       stress-ng was originally	intended to make a machine work	hard and  trip
       hardware	 issues	 such  as thermal overruns as well as operating	system
       bugs that only  occur  when  a  system  is  being  thrashed  hard.  Use
       stress-ng  with	caution	as some	of the tests can make a	system run hot
       on poorly designed hardware and also can	cause excessive	system 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.

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.

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

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

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

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

       --iostat	S
	      every S seconds show I/O statistics on the  device  that	stores
	      the  stress-ng temporary files. This is either the device	of the
	      current working directory	or  the	 --temp-path  specified	 path.
	      Currently	a Linux	only option.  The fields output	are:

	      Column Heading   Explanation
	      Inflight	       number of I/O requests that have	been issued to
			       the device driver but have not yet completed
	      Rd K/s	       read rate in 1024 bytes per second
	      Wr K/s	       write rate in 1024 bytes	per second
	      Dscd K/s	       discard rate in 1024 bytes per second
	      Rd/s	       reads per second
	      Wr/s	       writes per second
	      Dscd/s	       discards	per second

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

	      run sequential   # run stressors sequentially
	      verbose	       # verbose output
	      metrics-brief    # show metrics at end of	run
	      timeout 60s      # stop each stressor after 60 seconds
	      #
	      #	vm stressor options:
	      #
	      vm 2	       # 2 vm stressors
	      vm-bytes 128M    # 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.

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

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

       --log-lockless
	      log  messages  use  a  lock  to avoid intermingling of blocks of
	      stressor messages, however this may cause	contention when	 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.

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

       --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.  This will perform multiple runs	with  all  the
	      permutations of the stressors up to 2^20 permumtations. Use this
	      in  conjunction with the --with or --class option	to specify the
	      stressors	to permute.

       --progress
	      display the run progress when running stressors with  the	 --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.

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

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

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

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

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

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

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

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

       --settings
	      show the various option settings.

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

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

       --smart
	      scan the block devices for changes S.M.A.R.T. statistics	(Linux
	      only).  This  requires root privileges to	read the Self-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()).  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 as
	      many  pages  in  the processes as	possible. It also periodically
	      drops the	page cache, frees reclaimable slab objects  and	 page-
	      cache.  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 50,000 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	to stderr any unexpected fail-
	      ures.

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

       -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()).  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 randonly 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
		   ioctls (using _IOR)	and  write  ioctls  (using  _IOR  with
		   PROT_NONE mapped pages) across the device drivers. This ex-
		   ercises  page  size,	64 bit,	32 bit,	16 bit and 8 bit reads
		   as well as NULL addresses, non-readable pages and PROT_NONE
		   mapped pages. Currently only	for  Linux  and	 requires  the
		   --pathological option.

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

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

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

       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 future allocated pages into	memory causing
		   more	 memory	 pressure. If mlock(MCL_FUTURE)	is implemented
		   then	this  will  stop  newly	 allocated  pages  from	 being
		   swapped out.

	    --bigheap-ops N
		   stop	 the  big  heap	workers	after N	bogo allocation	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	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 five different	 ways,
			      two with bit counting, one with 64 bit multipli-
			      cation, one with parallelised masking and	shift-
			      ing, 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 braching, one
			      using masking and	shifting  with	no  branching,
			      one using	shifting and bitwise or'ing.
		   max	      find the maximum of two 32 bit unsigned integers
			      without a	temporary variable. Computed two ways,
			      one  using  xor'ing  and	masking, one using the
			      ternary 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 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 4 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	hierarchy can-
		   not 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-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-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 has 2 running processes that exercise
		   just	two bytes that are next	to each	other.	The intent  is
		   to  try and trigger cacheline corruption, stalls and	misses
		   with	shared memory accesses.	For an N byte sized cacheline,
		   it is recommended to	run N /	2 stressor instances.

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

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

		   Method     Description
		   all	      iterate over all the below cpu stress methods.
		   adjacent   increment	a specific byte	 in  a	cacheline  and
			      read  the	 adjacent  byte,  check	for corruption
			      every 7 increments.
		   atomicinc  atomically increment a specific byte in a	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. This is intended to	be in-
		   tentionally racy and	exercise a range of chattr  attributes
		   by enabling and disabling them on a file shared amongst the
		   N chattr stressor processes.	(Linux only).

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

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

	    --chdir-dirs N
		   exercise chdir on N directories. The	default	is 8192	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.

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

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

       Clone stressor
	    --clone N
		   start N workers that	create clones (via  the	 clone(2)  and
		   clone3()  system calls).  This will rapidly try to create a
		   default of 8192 clones that immediately die and wait	 in  a
		   zombie  state until they are	reaped.	 Once the maximum 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		     50,000 8 bit unsigned integer divisions
		   div16	     50,000 16 bit unsigned integer divisions
		   div32	     50,000 32 bit unsigned integer divisions
		   div64	     50,000 64 bit unsigned integer divisions
		   div128	     50,000 128	bit unsigned integer divisions
		   double	     1000 iterations of	a mix of double	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 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 MD5, NT,
		   SHA-1, SHA-256, SHA-512, scrypt, SunMD5  and	 yescrypt  en-
		   cryption methods.

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

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

       Cyclic stressor
	    --cyclic N
		   start  N  workers that exercise the real time FIFO or Round
		   Robin schedulers with cyclic	 nanosecond  sleeps.  Normally
		   one	would just use 1 worker	instance with this stressor to
		   get reliable	statistics. By default this stressor  measures
		   the	first  10  thousand latencies and calculates the mean,
		   mode, minimum, maximum latencies along with various latency
		   percentiles for the just  the  first	 cyclic	 stressor  in-
		   stance.  One	has to run this	stressor with CAP_SYS_NICE ca-
		   pability 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 [ deadline | fifo |	rr ]
		   specify the desired real time scheduling policy,  deadline,
		   fifo	(first-in, first-out) or rr (round-robin).

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

	    --cyclic-samples N
		   measure N samples. Range from 1 to 100000000	samples.

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

       Daemon stressor
	    --daemon N
		   start N workers that	each create a daemon that dies 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 add (_Decimal32)
		   df64add   64	bit decimal floating point add (_Decimal64)
		   df128add  128 bit decimal floating point add	(_Decimal128)
		   df32mul   32	bit decimal floating point multiply (_Decimal32)
		   df64mul   64	bit decimal floating point multiply (_Decimal64)
		   df128mul  128 bit decimal floating point multiply (_Decimal128)
		   df32div   32	bit decimal floating point divide (_Decimal32)
		   df64div   64	bit decimal floating point divide (_Decimal64)
		   df128div  128 bit decimal floating point divide (_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,	rename and rmdir.

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

       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	    mutiplication of two  matrices  of
					    long double	floating point values
		   multiply-doublee	    mutiplication  of  two matrices of
					    double floating point values
		   multiply-float	    mutiplication of two  matrices  of
					    floating point values
		   transpose-longdouble	    transpose of matrix	of long	double
					    floating point values
		   transpose-double	    transpose	of  matrix  of	double
					    floating point values
		   transpose-float	    transpose of  matrix  of  floating
					    point values

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

	    --eigen-size N
		   specify  the	2D matrix size N 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 * 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 ]
		   select the exec system call to use; all will	perform	a ran-
		   dom choice between execve(2)	and execveat(2),  execve  will
		   use	execve(2)  and	execveat will use execveat(2) if it is
		   available.

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

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

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

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

       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-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_DUPFD,  F_DUPFD_CLOEXEC,	F_GETFD,   F_SETFD,   F_GETFL,
		   F_SETFL,   F_GETOWN,	 F_SETOWN,  F_GETOWN_EX,  F_SETOWN_EX,
		   F_GETSIG,	F_SETSIG,    F_GETLK,	 F_SETLK,    F_SETLKW,
		   F_OFD_GETLK,	F_OFD_SETLK and	F_OFD_SETLKW.

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

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

	    --fd-fork-fds N
		   specify maximum number of file descriptors  to  be  opened.
		   The	default	 is 2 million, with a range of 1000 to 16 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 /

       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  100,000
		   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 on all pages	of the forked process. Where  possible
		   this	will try to set	every page in the new process with us-
		   ing	madvise	 MADV_MERGEABLE,  MADV_WILLNEED, MADV_HUGEPAGE
		   and MADV_RANDOM flags. Linux	only.

       Heavy process forking stressor
	    --forkheavy	N
		   start N workers that	fork child  processes  from  a	parent
		   that	 has thousands of allocated system resources. The fork
		   becomes a heavyweight operations as it has to duplicate the
		   resource references of the parent. Each  stressor  instance
		   creates  and	reaps up to 4096 child processes that are 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 future allocated pages into	memory causing
		   more	memory pressure. If mlock(MCL_FUTURE)  is  implemented
		   then	this will stop new brk pages from being	swapped	out.

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

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

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

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

		   Method	Description
		   all		iterate	over all the following floating	point methods:
		   float128add	128 bit	floating point add
		   ibm128add	IBM 128	bit floating point add (powerpc)
		   float80add	80 bit floating	point add
		   float64add	64 bit floating	point add
		   float32add	32 bit binary32	floating point add
		   floatadd	floating point add
		   bf16add	bf16 floating point add
		   doubleadd	double precision floating point	add
		   ldoubleadd	long double precision floating point add
		   float128mul	128 bit	floating point multiply
		   ibm128mul	IBM 128	bit floating point multiply (powerpc)
		   float80mul	80 bit floating	point multiply
		   float64mul	64 bit floating	point multiply
		   float32mul	32 bit binary32	floating point multiply
		   floatmul	floating point multiply
		   bf16mul	bf16 floating point multiply
		   doublemul	double precision floating point	multiply
		   ldoublemul	long double precision floating point multiply
		   float128div	128 bit	floating point divide
		   ibm128div	IBM 128	bit floating point divide (powerpc)
		   float80div	80 bit floating	point divide
		   float64div	64 bit floating	point divide
		   float32div	32 bit binary32	floating point divide
		   floatdiv	floating point divide
		   bf16div	bf16 floating point divide
		   doublediv	double precision floating point	divide
		   ldoublediv	long double precision floating point divide

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

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

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

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

       File punch and hole filling stressor
	    --fpunch N
		   start  N  workers that punch	and fill holes in a 16 MB file
		   using five concurrent processes per stressor	exercising  on
		   the same file. Where	available, this	uses fallocate(2) 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 RLIMIT_FSIZE) with file sizes that are	fixed,	random
		   and	powers	of 2. The files	are truncated and allocated to
		   trigger SIGXFSZ signals.

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

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

	    --fstat-dir	directory
		   specify  the	 directory to fstat to override	the default of
		   /dev.  All the files	in the directory will be  fstat'd  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,  getppid,  getcwd,
		   getgid,  getegid, getuid, getgroups,	getpgrp, getpgid, get-
		   priority,   getresgid,   getresuid,	 getrlimit,   prlimit,
		   getrusage, getsid, gettid, getcpu, gettimeofday, uname, ad-
		   jtimex, sysfs. 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.

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

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

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

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

       CPU pipeline and	branch prediction stressor
	    --goto N
		   start N workers that	perform	1024 forward branches (to next
		   instruction)	or backward branches (to previous instruction)
		   for	each  bogo  operation  loop.   By  default, every 1024
		   branches the	direction is randomly chosen to	be forward  or
		   backward.  This stressor exercises suboptimal pipelined 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  of
		   0.95..1.05 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  murmur3_32 hash,	Austin Appleby's Murmur3 hash,
			       32 bit variant
		   nhash       exim's nhash.
		   pjw	       a non-cryptographic hash	 function  created  by
			       Peter  J. Weinberger of AT&T Bell Labs, used in
			       UNIX ELF	object files
		   sdbm	       sdbm hash as used in the	SDBM database and  GNU
			       awk
		   sedgwick    simple  hash  from Robert Sedgwick's C 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	hyper-
		   bolic  functions using float, double	and long double	float-
		   ing point variants. Each function is	exercised 10,000 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	randonly 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 pages stressor (Linux)
	    --idle-scan	N
		   start  N  workers  that  scan the idle page bitmap across a
		   range of physical pages. This  sets	and  checks  for  idle
		   pages  via  the  idle  page	tracking  interface  /sys/ker-
		   nel/mm/page_idle/bitmap.  This is for Linux only.

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

	    --idle-page	N
		   start N workers that	walks through  every  page  exercising
		   the	Linux  /sys/kernel/mm/page_idle/bitmap	interface. 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). This attempts
		   to apply all	the available inode flags onto a directory and
		   file	 even  if  the	underlying file	system may not support
		   these flags (errors are just	ignored).  Each	worker runs  4
		   threads  that  exercise the flags on	the same directory and
		   file	to try to force	races. This is a Linux only  stressor,
		   see ioctl_iflags(2) for more	details.

	    --inode-flags-ops N
		   stop	the inode-flags	workers	after N	ioctl flag setting 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-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

	    --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 ]
		   to be performed.  The default is both in and	out.   specify
		   if  port reads in, port read	writes out or reads and	writes
		   are

       IO scheduling class and priority	stressor
	    --ioprio N
		   start N workers that	exercise  the  ioprio_get(2)  and  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	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. The virtual  machine  reads,  increments  and
		   writes to port 0x80 in a spin loop and the stressor handles
		   the I/O transactions. Currently for x86 and Linux only.

	    --kvm-ops N
		   stop	 kvm stressors after N virtual machines	have been 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 the	l1cache	size  buffer  into  memory  to
		   prevent it from being swapped out.

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

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

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

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

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

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

       File lease stressor
	    --lease N
		   start  N workers locking, unlocking and breaking leases via
		   the fcntl(2)	F_SETLEASE  operation.	The  parent  processes
		   continually	lock and unlock	a lease	on a file while	a user
		   selectable number of	child processes	open the file  with  a
		   non-blocking	 open to generate SIGIO	lease breaking 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 5,000 64 bit integers into
		   circleq (doubly linked circle queue), list  (doubly	linked
		   list),  slist  (singly  linked list), slistt	(singly	linked
		   list	using tail), stailq (singly  linked  tail  queue)  and
		   tailq  (doubly  linked  tail	queue) lists. The intention of
		   this	stressor is to exercise	memory and cache with the 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 cachline	write,
		   x86 and ppc64 only.

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

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

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

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

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

       Lock and	increment memory stressor (x86 and ARM)
	    --lockbus N
		   start N workers that	rapidly	lock and increment 64 bytes of
		   randomly chosen memory from a 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, locka (advisory), POSIX lockf and
		   Linux  open	file  lock (lockofd) locking mechanisms.  Each
		   worker creates a 1024 KB file and attempts to hold a	 maxi-
		   mum 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 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  destoys  them.  Linux  only and requires
		   CAP_SYS_ADMIN capability.

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

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

	    --lsearch-method [ lsearch-libc | lsearch-nonlibc |	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 and	lsm_get_self_attr, (Linux only).  Each
		   bogo-op loop	fetches	a list of available  security  modules
		   and	fetching  LSM  attributes  as well as some invalid LSM
		   system calls	to exercise error handling.

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

       Madvise stressor
	    --madvise N
		   start  N  workers  that apply random	madvise(2) advise 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  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-ops N
		   stop	mcontend stressors after N bogo	read/write operations.

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

	    --membarrier-ops N
		   stop	membarrier stress workers after	N bogo membarrier  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 mmap'd pages into memory causing more mem-
		   ory pressure	by preventing pages from swapped out.

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

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

       Memory hotplug stressor (Linux)
	    --memhotplug N
		   start  N workers that offline and online memory hotplug 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-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.

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

       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.

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

	    --mknod-ops	N
		   stop	directory thrash workers after	N  bogo	 mknod	opera-
		   tions.

       Mapped memory pages lock/unlock stressor
	    --mlock N
		   start  N  workers  that lock	and unlock memory mapped pages
		   using mlock(2), munlock(2), mlockall(2) and	munlockall(2).
		   This	 is  achieved by the mapping of	three contiguous pages
		   and then locking the	second page, hence  ensuring  non-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.

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

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

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

       Memory mapping (mmap/munmap) stressor
	    --mmap N
		   start N  workers  continuously  calling  mmap(2)/munmap(2).
		   The	initial	 mapping  is  a	large chunk (size specified by
		   --mmap-bytes) followed by  pseudo-random  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 per	mmap stress 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.

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

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

	    --mmap-mprotect
		   change  protection  settings	 on each page of memory.  Each
		   time	a page or a group of pages are mapped or remapped then
		   this	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 or
		   have	less than 2 NUMA nodes.

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

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

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

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

       Huge page memory	mapping	stressor
	    --mmaphuge N
		   start  N  workers  that attempt to mmap a set of huge pages
		   and large huge page sized mappings. Successful mappings are
		   madvised with MADV_NOHUGEPAGE  and  MADV_HUGEPAGE  settings
		   and	then  1/64th  of  the normal small page	size pages are
		   touched. Finally, an	attempt	to unmap  a  small  page  size
		   page	 at  the end of	the mapping is made (these may fail on
		   huge	pages) before the set of pages are  unmapped.  By  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 mmap'd huge	pages into memory causing more
		   memory pressure by preventing pages from swapped out.

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

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

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

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

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

       Kernel module loading stressor (Linux)
	    --module N
		   start  N workers that use finit_module() to load the	module
		   specified or	the hello test module, if is available.	 There
		   are	different ways to test loading modules.	Using modprobe
		   calls in a loop, using the kernel kernel module autoloader,
		   and this stress-ng module stressor. To  stress  tests  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	proection set-
		   tings  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  remap'd	pages into memory causing more
		   memory pressure by preventing pages from swapped out.

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

       Memory Sealing
	    --mseal N
		   start N memory sealing  stressors  that  exercise  madvise,
		   mremap,  mprotect  and  mseal 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
		   with	random delays from 1 to	2^18 nanoseconds. This	should
		   exercise the	high resolution	timers and scheduler.

	    --nanosleep-method [ all | cstate |	random | ns | us | ms ]
		   select  the	nanosleep  sleep duration method.  By default,
		   cstate residency durations (if they exist) and random 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 1us (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 com-
		   mands across	all the	available network devices. The	ioctls
		   exercised  by  this	stressor  are as follows: SIOCGIFCONF,
		   SIOCGIFINDEX,   SIOCGIFNAME,	  SIOCGIFFLAGS,	  SIOCGIFADDR,
		   SIOCGIFNETMASK,  SIOCGIFMETRIC,  SIOCGIFMTU,	SIOCGIFHWADDR,
		   SIOCGIFMAP and SIOCGIFTXQLEN. See netdevice(7) for more de-
		   tails of these ioctl	commands.

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

       Netlink stressor	(Linux)
	    --netlink-proc N
		   start N workers that	 spawn	child  processes  and  monitor
		   fork/exec/exit  process events via the proc netlink 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 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).	For ARM	CPUs, INSTR can	be one of  nop
		   or  yield.  For PPC64 CPUs, INSTR can be one	of nop,	mdoio,
		   mdoom or yield. For S390 CPUs, INSTR	can be one of  nop  or
		   nopr.  For  other processors, INSTR is only nop. The	random
		   INSTR option	selects	a randon mix of	the available nop  in-
		   structions. If the chosen INSTR generates an	SIGILL signal,
		   then	 the  stressor	falls back to the vanilla nop instruc-
		   tion.

	    --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	writes,	lseek,
		   ioctl, fcntl, fallocate and fdatasync. For  just  /dev/null
		   write benchmarking use the --null-write option.

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

	    --null-write
		   just	 write to /dev/null with 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 and more than	1 NUMA
		   node.

	    --numa-bytes N
		   specify the total number bytes to be	exercised by  all  the
		   workers, the	given size is divided by the number of workers
		   and	rounded	 to the	nearest	page size. The default is 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  mmap'd  and  mremap'd pages into	memory
		   causing more	 memory	 pressure  by  preventing  pages  from
		   swapped out.

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

       Memory page swapping stressor
	    --pageswap N
		   start N workers that	exercise page swap in  and  swap  out.
		   Pages  are allocated	and paged out using madvise MADV_PAGE-
		   OUT.	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.

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

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

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

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

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

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

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

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

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

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

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

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

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

	    --pipe-ops N
		   stop	pipe stress workers after N  bogo  pipe	 write	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) and the pkey_mprotect call (Linux	only).
		   This	 will try to allocate a	pkey and use this for the page
		   protection, however,	if this	fails then the special pkey -1
		   will	be used	(and the kernel	will use the  normal  mprotect
		   mechanism  instead).	  Various  page	 protection  mixes  of
		   read/write/exec/none	will be	 cycled	 through  on  randomly
		   chosen pre-allocated	pages.

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

       Stress-ng plugin	stressor
	    --plugin N
		   start  N  workers that run user provided stressor functions
		   loaded from a shared	library. The shared library  can  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 10,000 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 power	functions with
		   input values	0 to 1 in steps	of 0.001; the results are san-
		   ity 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  (temporal
				data  with  respect  to	 first level cache) to
				prefetch data into level 2  cache  and	higher
				(x86 only).
		   prefetcht2	Use  the  x86 prefetcht2 instruction (temporal
				data with respect to second  level  cache)  to
				prefetch  data	into  level 2 cache and	higher
				(x86 only).
		   prefetchnta	Use the	x86 prefetchnta	instruction  (non-tem-
				poral  data  with respect to all cache levels)
				into a location	close to the processor,	 mini-
				mizing cache pollution (x86 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 quicky.
		   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 |	idle | fifo | other | rr ]
		   select  the	scheduling  policy.  "Normal" policies (batch,
		   idle	and other) can be selected as  an  unprivileged	 user,
		   however  "Real Time"	policies (fifo and rr) can only	be se-
		   lected with the appropriate privilege.  By  default	"fifo"
		   is  selected	 but it	will fall back to "other" for unprivi-
		   leged 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() and pread() with
		   lseek() 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().  Using	 pwrite()  and
		   pread() should perform I/O without altering the shared file
		   descriptor  file  offset.  The main worker process performs
		   I/O using lseek()/write()  and  lseek()/read()  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 ioctls upon the ptys	before
		   closing them.

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

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

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

	    --qsort-method [ qsort-libc	| qsort-bm ]
		   select either the libc implementation of qsort or the J. L.
		   Bentley  and	M. D. McIlroy implementation of	qsort. The 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.

	    --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, 100,000 items are
		   allocated.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       Read-ahead stressor
	    --readahead	N
		   start N workers that	randomly seek and  perform  4096  byte
		   read/write I/O operations on	a file with readahead. The de-
		   fault file size is 64 MB.  Readaheads and reads are batched
		   into	16 readaheads and then 16 reads.

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

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

       Reboot stressor
	    --reboot N
		   start N workers that	exercise the  reboot(2)	 system	 call.
		   When	 possible, it will create a process in a PID namespace
		   and 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 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 occurs to force heavy	rescheduling activity.
		   When	the -v verbose option is used the distribution of  the
		   number  of yields across the	nice levels is printed for the
		   first stressor out of the N stressors.

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

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

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

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

       Writing temporary files in reverse position stressor
	    --revio N
		   start N workers continually writing in reverse position 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.

	    --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	CPU and	file size resource im-
		   its,	generating SIGXCPU and SIGXFSZ 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  SIGSEV  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 * 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	 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. 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, sethostname,
		   setpgid, setpgrp, setuid,  setgroups,  setreuid,  setregid,
		   setresuid,  setresgid  and setrlimit.  Some of these	system
		   calls are OS	specific.

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

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

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

	    --shellsort-size N
		   specify number of 32	 bit  integers	to  sort,  default  is
		   262144 (256 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 shared memory objects into	memory causing
		   more	memory pressure	by preventing pages from swapped out.

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

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

	    --shm-sysv N
		   start  N workers that allocate shared memory	using the 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 shared memory segment into memory  causing
		   more	memory pressure	by preventing pages from swapped out.

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

       SIGSEV stressor
	    --sigsegv N
		   start  N workers that rapidly create	and catch segmentation
		   faults generated via	illegal	memory	access,	 illegal  vdso
		   system calls, illegal port reads, illegal interrupts	or 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	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
		   re-use 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-ops N
		   stop	after N	spinmem	bogo operations. A bogo	 operation  is
		   1000	transactions betewen the two spinmem proceesses.

	    --spinmem-method [ 8bit | 16bit | 32bit | 64bit ]
		   select  the	size of	the memory write/reads,	the default is
		   32 bit.

       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 stack pages	into memory causing more  mem-
		   ory 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 buffers that	are at
		   least 4 times the size of the CPU L2	cache and  continually
		   performs  rounds  of	following computations on large	arrays
		   of double precision floating	point numbers:

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

		   Since this is loosely based on  a  variant  of  the	STREAM
		   benchmark  code,  DO	NOT submit results based on this as it
		   is intended to in stress-ng just to stress memory and  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 the	stream buffers into memory to  prevent
		   them	from being swapped out.

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

       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 variabil-
		   ity 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 variabil-
		   ity	in the timer interval to make the scheduling less pre-
		   dictable.

       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 250,000  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  trigonometric  functions	 using	float,
		   double  and long double floating point variants. Each func-
		   tion	is exercised 10,000 times per bogo-operation.

	    --trig-method function
		   specify a trigonometric stress function.  By	 default,  all
		   the	functions  are exercised sequentially, however one can
		   specify just	one function to	be used	if  required.	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.

       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 exercice /proc/mounts. Small	random
		   delays are used between mount and umount calls  to  try  to
		   trigger race	conditions on the umount calls.

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

       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() using the Linux uprobe	kernel tracing mechanism. This
		   requires CAP_SYS_ADMIN capabilities and a modern Linux  up-
		   robe	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
		   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.

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

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

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

       Vector 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-vm
		   deprecated since stress-ng V0.14.03

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

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

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

	    --vforkmany-vm-bytes N
		   mmap	N bytes	per vm worker for more	memory	pressure,  the
		   default  is 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-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 'dontneed', 'hugepage', 'mergeable' , 'nohugepage',
		   'normal', 'random', 'sequential', 'unmergeable' and	'will-
		   need'  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.
		   checkboard	 work	through	  memory  writing  alternative
				 zero/one bit values into memory  in  a	 mixed
				 checkerboard	pattern.   Memory  is  swapped
				 around	to  ensure  every  bit	is  read,  bit
				 flipped  and  re-written and then re-read for
				 verification.
		   flip		 sequentially work  through  memory  8	times,
				 each time just	one bit	in memory flipped (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).
		   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.
		   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.
		   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.
		   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.
		   mscan	 fill each bit in each byte with 1s then check
				 these	are  set,  fill	 each bit in each byte
				 with 0s and check these are clear.
		   prime-0	 iterate 8 times by stepping through memory in
				 very large prime strides clearing just	on bit
				 at a time in every byte. Then check to	see if
				 all bits are set to zero.
		   prime-1	 iterate 8 times by stepping through memory in
				 very large prime strides setting just on  bit
				 at a time in every byte. Then check to	see if
				 all bits are set to one.
		   prime-gray-0	 first step through memory in very large prime
				 strides clearing just on bit (based on	a gray
				 code)	in  every  byte. Next, repeat this but
				 clear the other 7 bits. Then check to see  if
				 all bits are set to zero.
		   prime-gray-1	 first step through memory in very large prime
				 strides  setting just on bit (based on	a gray
				 code) in every	byte. Next,  repeat  this  but
				 set  the  other  7 bits. Then check to	see if
				 all bits are set to one.
		   rowhammer	 try to	 force	memory	corruption  using  the
				 rowhammer  memory  stressor. This fetches two
				 32 bit	integers  from	memory	and  forces  a
				 cache	flush  on  the	two addresses multiple
				 times.	This has been known to force bit flip-
				 ping on some hardware,	especially with	 lower
				 frequency memory refresh cycles.
		   walk-0d	 for  each  byte  in memory, walk through each
				 data line setting them	to low (and the	others
				 are set high)	and  check  that  the  written
				 value is as expected. This checks if any data
				 lines are stuck.
		   walk-1d	 for  each  byte  in memory, walk through each
				 data line setting them	to high	(and the  oth-
				 ers  are  set low) and	check that the written
				 value is as expected. This checks if any data
				 lines are stuck.
		   walk-0a	 in the	given memory mapping, work  through  a
				 range	of  specially chosen addresses working
				 through address lines to see if  any  address
				 lines	are  stuck  low.  This works best with
				 physical memory addressing, however, exercis-
				 ing these virtual addresses  has  some	 value
				 too.
		   walk-1a	 in  the  given	memory mapping,	work through a
				 range of specially chosen  addresses  working
				 through  address  lines to see	if any address
				 lines are stuck high. This  works  best  with
				 physical memory addressing, however, exercis-
				 ing  these  virtual  addresses	has some value
				 too.
		   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.
		   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
				 memory	 writes	 are not checked at the	end of
				 each test iteration.
		   wrrd128nt	 write to memory in 128	bit chunks using  non-
				 temporal  writes (bypassing the cache).  Each
				 chunk is written 4 times to hammer  the  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  or
		   have	less than 2 NUMA nodes.

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

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

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

	    --vm-rw-bytes N
		   mmap	N bytes	per vm-rw worker, the default is  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, munmap,
		   mlock, munlock, madvise, msync, mprotect, mincore  and  ac-
		   cess	32 pages in a randomly selected	virtual	memory address
		   space. This is designed to trip races on VMA	page modifica-
		   tions.   Every 15 seconds a different virtual address space
		   is randonly chosen.

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

       Vector neural network instructions stressor
	    --vnni N
		   start N workers that	exercise  vector  neural  network  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  100,000  microsecond
		   slice of time has 100 work items that start at random times
		   during  the	slice.	The  work  items  by default run for a
		   quanta of 1000 microseconds scaled by the  percentage  work
		   load	(default of 30%).  For a slice of S microseconds and a
		   work	 item  quanta  duration	 of Q microseconds, S /	Q work
		   items are executed per slice. For a work load of L percent,
		   the run time	per item is the	quanta Q x L /	100  microsec-
		   onds.  The --workload-hreads	option allows work items to be
		   taken  from	a queue	and run	concurrently if	the scheduling
		   run times overlap.
		   If a	work item is already running when a new	work  item  is
		   scheduled  to  run  then  the  new work item	is delayed and
		   starts directly after the completion	of the currently  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.
		   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	| 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	100,000	microseconds (0.1 seconds).

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

	    --workload-threads N
		   use N process threads to take scheduler  work  items	 of  a
		   workqueue  and  run the work	item (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 | 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	reads, lseeks,
		   ioctls and mmaps. For just /dev/zero	read benchmarking  use
		   the --zero-read option.

	    --zero-ops N
		   stop	zero stress workers after N /dev/zero bogo read	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 com-
				pressed.
		   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 --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 --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 10,000 nanoseconds. At  the  end
	      of  1 minute of stressing, the latency distribution with 2500 ns
	      intervals	will be	displayed. NOTE: this must  be	run  with  the
	      CAP_SYS_NICE  capability	to  enable the real time scheduling to
	      get accurate measurements.

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

	      runs 8 cpu stressors and stops after 800000 bogo operations.

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

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

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

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

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

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

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

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

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

	      run 4 instances of all the stressors for 5 minutes.

       stress-ng --random 64

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

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

	      run 64 instances of all the different cpu	stressors  and	verify
	      that the computations are	correct	for 10 minutes with a bogo 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 --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-2025 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.

				3 January 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+14.3.quarterly>

home | help