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

FreeBSD Manual Pages

  
 
  

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

NAME
       stress-ng  - stress "next generation", a	tool to	load and stress	a com-
       puter system

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

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

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

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

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

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

OPTIONS
       General stress-ng control options:

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

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

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

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

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

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

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

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

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

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

       -h, --help
	      show help.

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

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

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

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

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

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

       --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,	this does not  replace
	      the  output  from	stdout,	but creates a logged copy of it	in the
	      specified	file. Lines of output are automatically	fsync'd	to the
	      log file to try to reduce	data loss.

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

       --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-in
	      as many pages in the processes as	possible. It also periodically
	      drops the	page cache, frees reclaimable slab objects  and	 page-
	      cache  as	 well  as  assign pages	to different NUMA nodes.  This
	      will cause considerable amount of	thrashing of swap on an	 over-
	      committed	system.

       -t N, --timeout T
	      run  each	stress test for	at least T seconds. One	can also spec-
	      ify the units of time in seconds,	minutes, hours,	days or	 years
	      with  the	 suffix	 s, m, h, d or y. Each stressor	will be	sent a
	      SIGALRM signal at	the timeout time, however if the  stress  test
	      is  swapped out, in an uninterruptible system call or performing
	      clean up (such as	removing hundreds of test file)	it may take  a
	      while  to	finally	terminate.  A 0	timeout	will run stress-ng for
	      ever with	no timeout. The	default	timeout	is 24 hours.

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

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

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

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

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

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

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

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

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

       Stressor	specific options:

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

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

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

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

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

       Affinity	stressor
	    --affinity N
		   start  N  workers that run 16 processes that	rapidly	change
		   CPU affinity	 (for  systems	that  provide  sched_setaffin-
		   ity()).  Rapidly  switching	CPU affinity can contribute to
		   poor	cache behaviour	and high context switch	rate.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       Bad alternative stack stressor
	    --bad-altstack N
		   start  N  workers  that  create  broken  alternative	signal
		   stacks for SIGSEGV and SIGBUS handling that in turn	create
		   secondary SIGSEGV/SIGBUS errors.  A variety of randomly se-
		   lected nefarious methods are	used to	create the stacks:

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

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

       Bad ioctl stressor
	    --bad-ioctl	N
		   start  N  workers  that perform a range of illegal bad read
		   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 (\q	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  branching,
			      one  using  masking and shifting with no branch-
			      ing, one using shifting and bitwise or'ing.
		   max	      find the maximum of two 32 bit unsigned integers
			      without a	temporary variable. Computed two ways,
			      one using	xor'ing	and  masking,  one  using  the
			      ternary operator.
		   min	      find the minimum of two 32 bit unsigned integers
			      without a	temporary variable. Computed two ways,
			      one  using  xor'ing  and	masking, one using the
			      ternary operator.
		   parity     compute the parity of a 32 bit unsigned integer.
			      Computed five ways, two using bit	counting,  one
			      using  multiplication, shifting and xor'ing, one
			      using shifting and xor'ing, one using a  builtin
			      parity function.
		   pwr2	      determine	 if  a	32  bit	 unsigned integer is a
			      power of 2. Computed using bit counting and with
			      mask of value - 1.
		   rnddnpwr2  find the nearest power of	2 of a 32 bit unsigned
			      integer, rounded down. Computed three ways,  one
			      using  bit  counting  and	 shifting,  one	 using
			      shifting and or'ing, one using a shift  and  the
			      builtin ctz function.
		   rnduppwr2  find the nearest power of	2 of a 32 bit unsigned
			      integer,	rounded	 up.  Computed three ways, one
			      using  bit  counting  and	 shifting,  one	 using
			      shifting	and  or'ing, one using a shift and the
			      builtin ctz function.
		   reverse    reverse the bits of a 32 bit  unsigned  integer.
			      Computed	six ways, one using bit	shifting loop,
			      one using	bit shitting and mask loop, one	 using
			      parallelised  masking and	shifting, one using 64
			      bit multiplication, one using 32 bit multiplica-
			      tion, one	using the builtin  bitreverse32	 func-
			      tion.
		   sign	      calculate	 the  sign of a	32 bit signed integer.
			      Computed two ways, one using a  branchless  less
			      than  zero operator, one using sign bit shifting
			      and negation.
		   swap	      swap two 32 bit signed integers without a	tempo-
			      rary variable. Computed two ways,	one using sub-
			      traction and addition, one using xor'ing.
		   zerobyte   determine	of a 32	bit unsigned integer  contains
			      one  or  more zero bytes.	Computed two ways, one
			      with per byte zero checking, one using bit mask-
			      ing.

       Branch stressor
	    --branch N
		   start N workers that	randomly branch	to 1024	 randomly  se-
		   lected  locations and hence exercise	the CPU	branch predic-
		   tion	logic.

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

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

	    --brk-bytes	N
		   maximum brk growth as N bytes per brk worker. One can spec-
		   ify	the size as % of total available memory	or in units of
		   Bytes, KBytes, MBytes and GBytes using the suffix b,	 k,  m
		   or g.

	    --brk-mlock
		   attempt  to mlock 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 hier-
		   archy cannot	be determined, built-in	defaults will apply.

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

	    --cache-ops	N
		   stop	cache thrash workers after N bogo cache	thrash	opera-
		   tions.

	    --cache-permute
		   permute  the	selected cache flags when exercising cache for
		   an improved mix of cache operations.	Recommend  also	 using
		   --cache-enable-all with this	option.

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

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

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

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

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

       Cache hammering stessor
	    --cachehammer N
		   start N workers that	exercise the cache with	 a  randomized
		   mix	 of   memory  read/writes  and	where  possible	 cache
		   prefetches and cache	flushes	to random addresses  in	 three
		   memory mapped regions, one of which is shared among all the
		   cache stressors and is the size of the L3 cache, one	is lo-
		   cal	to  each instance and is 4 times the L3	cache size and
		   one is a single page	mapping	that cannot be read  or	 writ-
		   ten.

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

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

       Cache line stressor
	    --cacheline	N
		   start  N workers that exercise reading and writing individ-
		   ual bytes in	a shared buffer	that is	the size  of  a	 cache
		   line.  Each	stressor 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.

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

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

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

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

		   Method		    Description
		   all			    iterate  over all the Eigen	2D ma-
					    trix operations
		   add-longdouble	    addition of	two matrices  of  long
					    double floating point values
		   add-double		    addition of	two matrices of	double
					    floating point values
		   add-float		    addition of	two matrices of	float-
					    ing	point values
		   determinant-longdouble   determinant	of matrix of long dou-
					    ble	floating point values
		   determinant-double	    determinant	 of  matrix  of	double
					    floating point values
		   determinant-float	    determinant	of matrix of  floating
					    point values
		   inverse-longdouble	    inverse  of	 matrix	of long	double
					    floating point values
		   inverse-double	    inverse of matrix of double	float-
					    ing	point values
		   inverse-float	    inverse  of	 matrix	 of   floating
					    point values
		   multiply-longdouble	    multiplication  of two matrices of
					    long double	floating point values
		   multiply-doublee	    multiplication of two matrices  of
					    double floating point values
		   multiply-float	    multiplication  of two matrices of
					    floating point values
		   transpose-longdouble	    transpose of matrix	of long	double
					    floating point values
		   transpose-double	    transpose  of  matrix  of	double
					    floating point values
		   transpose-float	    transpose  of  matrix  of floating
					    point values

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

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

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

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

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

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

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

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

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

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

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

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

	    --epoll-sockets N
		   specify the maximum number of concurrently open sockets al-
		   lowed in server.  Setting a high value  impacts  on	memory
		   usage and may trigger out of	memory conditions.

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

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

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

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

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

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

	    --exec-method [ all	| execve | execveat ]
		   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_CREATED_QUERY,    F_DUPFD,	   F_DUPFD_CLOEXEC,   F_GETFD,
		   F_SETFD, F_GETFL, F_SETFL, F_GETOWN,	F_SETOWN, F_GETOWN_EX,
		   F_SETOWN_EX,	   F_GETSIG,	F_SETSIG,     F_GETOWNER_UIDS,
		   F_GETLEASE,	  F_GETLK,    F_SETLK,	  F_SETLKW,   F_UNLCK,
		   F_OFD_GETLK,	F_OFD_SETLK, F_OFD_SETLKW, F_GET_FILE_RW_HINT,
		   F_SET_FILE_RW_HINT, F_GET_RW_HINT and F_SET_RW_HINT.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	    --fifo-readers N
		   for each worker, create N fifo reader workers that read the
		   named pipe using simple blocking reads. Default is 4, range
		   1..64.

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

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

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

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

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

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

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

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

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

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

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

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

	    --flipflop-ops N
		   stop	 after	N  bogo-ops, in	this case a bogo-op is 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  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  randomly	 sized
		   ICMP	 ping packets.	This stressor requires the CAP_NET_RAW
		   capbility.

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

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

       Idle page scan stressor (Linux)
	    --idle-page	N
		   start N workers that	walks through  every  page  exercising
		   the	Linux  /sys/kernel/mm/page_idle/bitmap	interface. Re-
		   quires CAP_SYS_RESOURCE capability.

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

       Inode ioctl flags stressor
	    --inode-flags N
		   start  N  workers  that  exercise  inode  flags  using  the
		   FS_IOC_GETFLAGS and FS_IOC_SETFLAGS ioctl(2). 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-fast
		   when	available use int_fast64_t, int_fast32_t, int_fast16_t
		   and int_fast8_t types instead of int64_t, int32_t,  int16_t
		   and	int8_t types. Note that	these may or may not be	faster
		   than	normal integer operations depending on the compiler.

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

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

		   for	the  --intmath-fast  option, the following methods are
		   available:

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

	    --intmath-ops N
		   stop	intmath	workers	after N	bogo integer math operations.

       Data synchronization (sync) stressor
	    -i N, --io N
		   start N workers  continuously  calling  sync(2)  to	commit
		   buffer cache	to disk.  This can be used in conjunction with
		   the	--hdd stressor.	This is	a legacy stressor that is com-
		   patible with	the original stress tool.

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

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

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

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

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

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

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

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

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

       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  destroys	them.  Linux only and requires
		   CAP_SYS_ADMIN capability.

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

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

	    --lsearch-method [ lsearch-libc | lsearch-nonlibc |	lsearch-sen-
	    tinel ]
		   select either the  libc  implementation  of	lsearch	 or  a
		   slightly  optimized non-libc	implementation of lsearch or a
		   lsearch that	uses the search	key as the end of  array  sen-
		   tinel  to  remove an	index compare per loop.	The default is
		   the libc implementation if it exists,  otherwise  the  non-
		   libc	version.

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

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

       Linux Security Modules system call stressor
	    --lsm N
		   start   N  workers  that  exercise  the  LSM	 system	 calls
		   lsm_list_modules 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-numa
		   assign memory mapped	pages to randomly selected NUMA	nodes.
		   This	is disabled for	systems	that do	not support NUMA.

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

       Memory barrier stressor (Linux)
	    --membarrier N
		   start  N  workers  that exercise the	membarrier 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-numa
		   assign memory mapped	pages to randomly selected NUMA	nodes.
		   This	is disabled for	systems	that do	not support NUMA.

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

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

       Memory hotplug stressor (Linux)
	    --memhotplug N
		   start  N workers that offline and online memory hotplug re-
		   gions. Linux	only and requires CAP_SYS_ADMIN	capabilities.

	    --memhotplug-mmap
		   enable random 1 K to	1 MB memory mapping/unmappings	before
		   each	offline	event.

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

       Memory read/write stressor
	    --memrate N
		   start N workers that	exercise a buffer with 1024, 512, 256,
		   128,	 64,  32, 16 and 8 bit reads and writes. 1024, 512 and
		   256 reads and writes	are available with compilers that sup-
		   port	integer	vectors.  x86-64 cpus  that  support  uncached
		   (non-temporal  "nt")	 writes	 also  exercise	128, 64	and 32
		   writes providing higher write rates than the	normal	cached
		   writes.  x86-64 also	exercises repeated string stores using
		   64, 32, 16 and 8 bit	writes.	 CPUs that support prefetching
		   reads also exercise 64 prefetched "pf" reads.  This	memory
		   stressor  allows  one  to also specify the maximum read and
		   write rates.	The stressors will run at maximum speed	if  no
		   read	or write rates are specified.

	    --memrate-bytes N
		   specify  the	size of	the memory buffer being	exercised. The
		   default size	is 256 MB. One can specify the size  in	 units
		   of  Bytes, KBytes, MBytes and GBytes	using the suffix b, k,
		   m or	g, or cache sizes with L1, L2, L3 or LLC (lower	 level
		   cache size).

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

	    --memrate-method
		   specify a memrate stress method, some methods are available
		   to specific architectures or	toolchains that	support	 them.
		   Available memrate stress methods are	described as follows:

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

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

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

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

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

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

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

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

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

	    --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
		   int64wrds	 4 x 64	bit direct stores (x86 only)
		   int64wtnt	 4 x 64	bit non-temporal stores	(x86 only)
		   int64inc	 2 x 64	bit integer increments
		   int64atomic	 2 x 64	bit atomic integer increments
		   int128rd	 1 x 128 bit integer reads
		   int128wr	 1 x 128 bit integer writes
		   int128inc	 1 x 128 bit integer increments
		   int128atomic	 1 x 128 bit atomic integer increments

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

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

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

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

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

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

       Many child memory mapped	page lock/unlock process stressor
	    --mlockmany	N
		   start  N  workers  that  fork  off  a default of 1024 child
		   processes in	total; each child will attempt to  anonymously
		   mmap	 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  in  total for all the mmap stressor in-
		   stances, the	default	is 256 MB. One can specify the size as
		   % of	total available	memory or in units of  Bytes,  KBytes,
		   MBytes and GBytes using the suffix b, k, m or g.

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

	    --mmap-madvise
		   enable randomized madvise(2)	settings on pages.

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

	    --mmap-mlock
		   attempt to mlock 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.

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

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

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

	    --mmapcow-fork
		   fork	 child process to exercise pages in parallel with par-
		   ent to exercice page	handling harder.

	    --mmapcow-free
		   after each page is modified and before  each	 page  is  un-
		   mapped  use madvise MADV_FREE (if it	is available) to indi-
		   cate	the page is free

	    --mmapcow-mlock
		   attempt to mlock each modified page,	this can increase  the
		   number  of page faults. Only	available with the mlock2 sys-
		   tem call.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       Huge page memory	mapping	stressor
	    --mmaphuge N
		   start  N  workers  that attempt to mmap a set of huge pages
		   and large huge page sized mappings. Successful mappings are
		   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-numa
		   assign memory mapped	pages to randomly selected NUMA	nodes.
		   This	is disabled for	systems	that do	not support NUMA.

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

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

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

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

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

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

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

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

	    --mmaptorture-ops N
		   stop	after N	iterations of memory  mapping  torture	opera-
		   tions.

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

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

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

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

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

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

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

	    --monte-carlo-method [ all | e | exp | pi |	sin | sqrt | squircle
	    ]
		   specify the computation to perform, options are as follows:

		   Method    Description
		   all	     use all monte carlo computation methods
		   e	     compute Euler's constant e
		   exp	     integrate exp(x ^ 2) for x	= 0..1
		   pi	     compute <pi> from the area	of a circle
		   sin	     integrate sin(x) for x = 0..<pi>
		   sqrt	     integrate sqrt(1 +	x ^ 4) for x = 0..1
		   squircle  area of a unit squircle x ^ 4 + y ^ 4 = 1

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

	    --monte-carlo-rand [ all | drand48 | getrandom | lcg | pcg32 |
	    mwc64 | random | xorshift ]
		   specify the random number generator to use, options are  as
		   follows:

		   Method     Description
		   all	      use all the random number	generators
		   arc4	      use the libc cryptographically-secure pseudoran-
			      dom arc4random(3)	number generator.
		   drand48    use   the	 libc  linear  congruential  algorithm
			      drand48(3) using 48-bit integer arithmetic.
		   getrandom  use the getrandom(2) system call for random val-
			      ues.
		   lcg	      use a 32 bit  Paker-Miller  Linear  Congruential
			      Generator, with a	division optimization.
		   pcg32      use  a 32	bit O'Neill Permuted Congruential Gen-
			      erator.
		   mwc64      use the 64 bit  stress-ng	 Multiply  With	 Carry
			      random number generator.
		   random     use the libc random(3) Non-linear	Additive Feed-
			      back random number generator.
		   xorshift   use  a  32  bit  Marsaglia shift-register	random
			      number generator.

	    --monte-carlo-samples N
		   specify the number of random	number samples to use to  com-
		   pute	<pi> or	e, default is 100000.

       Multi-precision floating	operations (mpfr) stressor
	    --mpfr N
		   start  N  workers  that  exercise  multi-precision floating
		   point operations using  the	GNU  Multi-Precision  Floating
		   Point  Reliable  library (mpfr). Operations computed	are as
		   follows:

		   Method  Description
		   apery   calculate Apery's constant <zeta>(3);  the  sum  of
			   1/(n	^ 3).
		   cosine  compute  cos(<theta>)  for  <theta> = 0 to 2<pi> in
			   100 steps.
		   euler   compute e using n = (1 + (1 / n)) ^ n.
		   exp	   compute 1000	exponentials.
		   log	   computer 1000 natural logarithms.
		   omega   compute   the    omega    constant	 defined    by
			   <Omega>e^<Omega>  =	1 using	efficient iteration of
			   <Omega>n+1 =	(1 + <Omega>n) / (1 + e^<Omega>n).
		   phi	   compute the Golden Ratio <phi> using	series.
		   sine	   compute sin(<theta>)	for <theta> = 0	 to  2<pi>  in
			   100 steps.
		   nsqrt   compute square root using Newton-Raphson.

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

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

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

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

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

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

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

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

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

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

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

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

       Memory Sealing
	    --mseal N
		   start  N  memory  sealing  stressors	that exercise madvise,
		   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 proc stressor (Linux)
	    --netlink-proc N
		   start  N  workers  that  spawn  child processes and monitor
		   fork/exec/exit process events via the proc netlink  connec-
		   tor.	 Each  event  received	is  counted as a bogo op. This
		   stressor can	only be	run on Linux and requires  CAP_NET_AD-
		   MIN capability.

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

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

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

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

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

       NO-OP CPU instruction stressor
	    --nop N
		   start  N  workers that consume cpu cycles issuing no-op in-
		   structions. This stressor is	 available  if	the  assembler
		   supports the	"nop" instruction.

	    --nop-instr	INSTR
		   use	alternative  nop instruction INSTR. For	x86 CPUs INSTR
		   can be one of nop, pause, nop2  (2  byte  nop)  through  to
		   nop15  (15  byte  nop) and fnop. For	ARM CPUs, INSTR	can be
		   one of nop or yield.	For PPC64 CPUs,	INSTR can  be  one  of
		   nop,	mdoio, mdoom or	yield. For S390	CPUs, INSTR can	be one
		   of  nop  or	nopr. For other	processors, INSTR is only nop.
		   The random INSTR option selects a random mix	of the	avail-
		   able	 nop  instructions.  If	 the chosen INSTR generates an
		   SIGILL signal, then the stressor falls back to the  vanilla
		   nop instruction.

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

       /dev/null stressor
	    --null N
		   start N workers that	exercise /dev/null with	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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       Process signals (pidfd_send_signal) stressor
	    --pidfd N
		   start  N  workers  that  exercise  signal  sending  via the
		   pidfd_send_signal 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  (tempo-
				   ral data with respect to first level	cache)
				   to  prefetch	 data  into  level 2 cache and
				   higher (x86 only).
		   prefetcht2	   Use the x86 prefetcht2 instruction  (tempo-
				   ral	data  with  respect  to	 second	 level
				   cache) to prefetch data into	level 2	 cache
				   and higher (x86 only).
		   prefetchnta	   Use	the  x86 prefetchnta instruction (non-
				   temporal data with  respect	to  all	 cache
				   levels)   into  a  location	close  to  the
				   processor, minimizing cache pollution  (x86
				   only).
		   prfm_pldl1keep  Use	 the  aarch64  prfm  instruction  with
				   pld1keep operation  (retained  or  temporal
				   prefetch,  allocated	in the cache normally)
				   to prefetch data into level 1 of the	 cache
				   hierarchy (aarch64 only).
		   prfm_pldl2keep  Use	 the  aarch64  prfm  instruction  with
				   pld1keep operation  (retained  or  temporal
				   prefetch,  allocated	in the cache normally)
				   to prefetch data into level 2 of the	 cache
				   hierarchy (aarch64 only).
		   prfm_pldl3keep  Use	 the  aarch64  prfm  instruction  with
				   pld1keep operation  (retained  or  temporal
				   prefetch,  allocated	in the cache normally)
				   to prefetch data into level 3 of the	 cache
				   hierarchy (aarch64 only).
		   prfm_pldl1strm  Use	 the  aarch64  prfm  instruction  with
				   pld1strm operation (streaming or non-tempo-
				   ral prefetch, for data that	is  used  only
				   once)  to prefetch data into	level 1	of the
				   cache hierarchy (aarch64 only).
		   prfm_pldl2strm  Use	the  aarch64  prfm  instruction	  with
				   pld1strm operation (streaming or non-tempo-
				   ral	prefetch,  for	data that is used only
				   once) to prefetch data into level 2 of  the
				   cache hierarchy (aarch64 only).
		   prfm_pldl3strm  Use	 the  aarch64  prfm  instruction  with
				   pld1strm operation (streaming or non-tempo-
				   ral prefetch, for data that	is  used  only
				   once)  to prefetch data into	level 3	of the
				   cache hierarchy (aarch64 only).

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

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

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

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

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

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

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

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

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

	    --prio-inv-type [ inherit |	none | protect ]
		   select the mutex lock priority inversion type, described as
		   follows:

		   Type	    Description
		   inherit  The	priority of the	process	owning the mutex  lock
			    is	run with highest priority of any other process
			    waiting on the lock	to  avoid  priority  inversion
			    deadlock.
		   none	    The	 priority of the process owning	the mutex lock
			    is not affected by its mutex ownership.  This  may
			    lead  to  the  high	priority process to become un-
			    runnable on	a single thread	system.
		   protect  The	priority of the	process	owning the mutex  lock
			    is given the priority of the mutex (in this	stress
			    test  case,	 the maximum priority) during the lock
			    ownership.

	    --prio-inv-policy [	batch |	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 x	4) - 1 are used. The default  starting	port  is  port
		   14000.

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

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

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

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

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

       Random number generator stressor
	    --rdrand N
		   start N workers that	read a random number from  an  on-chip
		   random number generator This	uses the rdrand	instruction on
		   Intel  x86  processors  or  the  darn instruction on	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 and with a readahead option to	force a	reada-
		   head	action over the	entire file  once  it  has  been  com-
		   pletely written.

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

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

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

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

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

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

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

       Rlimit stressor
	    --rlimit N
		   start N workers that	exceed 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 x 4) - 1 are used for	ipv4, ipv6 domains and ports P
		   to P	- 1 are	used for the unix domain.

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

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

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

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

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

       Secret memory stressor (Linux >=	5.11)
	    --secretmem	N
		   start  N  workers  that mmap	pages using file mapping off a
		   memfd_secret	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.

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

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

	    --shm-sysv-mlock
		   attempt  to mlock 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
		   reuse  the  file descriptor by passing it back from the re-
		   ceiver to the sender	and re-sending it  again  rather  than
		   opening /dev/null each time.

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

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

	    --sockmany-ops N
		   stop	after N	connections.

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

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

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

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

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

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

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

	    --sparsematrix-method [ all	| hash | hashjudy | judy | list	| mmap
	    | qhash | rb ]
		   specify  the	 type  of sparse matrix	implementation to use.
		   The `all' method uses all the methods and is	the default.

		   Method    Description
		   all	     exercise with all the sparsematrix	stressor meth-
			     ods (see below):
		   hash	     use a hash	table and allocate nodes on  the  heap
			     for  each	unique	value at a (x, y) matrix posi-
			     tion.
		   hashjudy  use a hash	table for x coordinates	and a Judy ar-
			     ray for y coordinates for values at a (x, y)  ma-
			     trix position.
		   judy	     use  a Judy array with a unique 1-to-1 mapping of
			     (x, y) matrix position into the array.
		   list	     use a circular linked-list	for sparse y positions
			     each with circular	linked-lists for sparse	x  po-
			     sitions for the (x, y) matrix coordinates.
		   mmap	     use  a  non-sparse	 mmap  the  entire  2-d	matrix
			     space. Only (x, y)	matrix positions that are ref-
			     erenced will get  physically  mapped.  Note  that
			     large  sparse  matrices  cannot  be mmap'd	due to
			     lack of virtual address limitations, and too many
			     referenced	pages can trigger the  out  of	memory
			     killer on Linux.
		   qhash     use  a  hash  table  with pre-allocated nodes for
			     each unique value.	This is	a quick	hash table im-
			     plementation, nodes are not allocated  each  time
			     with  calloc  and	are allocated from a pre-allo-
			     cated pool	leading	to quicker hash	table  perfor-
			     mance than	the hash method.
		   rb	     use a red-black balanced tree using one tree node
			     for  each	unique	value at a (x, y) matrix posi-
			     tion.
		   splay     use a splay tree using one	 tree  node  for  each
			     unique value at a (x, y) matrix position.

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

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

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

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

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

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

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

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

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

       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 x c[i]
		   add	      c[i] = a[i] + b[i]
		   triad      a[i] = b[i] + (c[i] x scalar)

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

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

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

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

	    --stream-mlock
		   attempt to mlock 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.

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

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

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

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

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

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

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

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

       Uprobe stressor (Linux)
	    --uprobe N
		   start  N workers that trace the entry to libc function get-
		   pid() 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 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-flush
		   cache flush mapped memory after each	memory region has been
		   completely written to.

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

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

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

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

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

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

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

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

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

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

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

		   Available vm	stress methods are described as	follows:

		   Method	 Description
		   all		 iterate  over	all  the  vm stress methods as
				 listed	below.
		   cache-lines	 work through memory in	64  byte  cache	 sized
				 steps	writing	 a single byte per cache line.
				 Once the write	is  complete,  the  memory  is
				 read  to  verify  the values are written cor-
				 rectly.
		   cache-stripe	 work through memory in	64  byte  cache	 sized
				 chunks, writing in ascending address order on
				 even  offsets and descending address order on
				 odd offsets.
		   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).
		   modulo-x	 fill memory over 23 iterations.  Each	itera-
				 tion  starts  one byte	further	along from the
				 start of the memory and  steps	 along	in  23
				 byte  strides.	In each	stride,	the first byte
				 is set	to a  random  pattern  and  all	 other
				 bytes are set to the inverse.	Then it	checks
				 see  if  the first byte contains the expected
				 random	  pattern.   This   exercises	 cache
				 store/reads as	well as	seeing if neighbouring
				 cells influence each other.
		   move-inv	 sequentially fill memory 64 bits of memory at
				 a  time with random values, and then check if
				 the memory is set correctly.	Next,  sequen-
				 tially	 invert	 each 64 bit pattern and again
				 check if the memory is	set as expected.
		   mscan	 fill each bit in each byte with 1s then check
				 these are set,	fill each  bit	in  each  byte
				 with 0s and check these are clear.
		   one-zero	 set  all memory bits to one and then check if
				 any bits are not one. Next, set all the  mem-
				 ory  bits  to	zero and check if any bits are
				 not zero.
		   prime-0	 iterate 8 times by stepping through memory in
				 very large prime strides clearing just	on bit
				 at a time in every byte. Then check to	see if
				 all bits are set to zero.
		   prime-1	 iterate 8 times by stepping through memory in
				 very large prime strides setting just on  bit
				 at a time in every byte. Then check to	see if
				 all bits are set to one.
		   prime-gray-0	 first step through memory in very large prime
				 strides clearing just on bit (based on	a gray
				 code)	in  every  byte. Next, repeat this but
				 clear the other 7 bits. Then check to see  if
				 all bits are set to zero.
		   prime-gray-1	 first step through memory in very large prime
				 strides  setting just on bit (based on	a gray
				 code) in every	byte. Next,  repeat  this  but
				 set  the  other  7 bits. Then check to	see if
				 all bits are set to one.
		   prime-incdec	 step through memory in	large prime steps  in-
				 crementing  bytes and then re-do again	decre-
				 menting bytes.
		   rand-set	 sequentially work through memory  in  64  bit
				 chunks	setting	bytes in the chunk to the same
				 8 bit random value.  The random value changes
				 on  each  chunk.   Check that the values have
				 not changed.
		   rand-sum	 sequentially set all memory to	random	values
				 and then summate the number of	bits that have
				 changed from the original set values.
		   read64	 sequentially  read  memory  using 32 x	64 bit
				 reads per bogo	loop. Each loop	equates	to one
				 bogo operation.  This	exercises  raw	memory
				 reads.
		   ror		 fill  memory  with  a random pattern and then
				 sequentially rotate 64	bits of	 memory	 right
				 by  one  bit,	then  check the	final load/ro-
				 tate/stored values.
		   rowhammer	 try to	 force	memory	corruption  using  the
				 rowhammer  memory  stressor. This fetches two
				 32 bit	integers  from	memory	and  forces  a
				 cache	flush  on  the	two addresses multiple
				 times.	This has been known to force bit flip-
				 ping on some hardware,	especially with	 lower
				 frequency memory refresh cycles.
		   swap		 fill  memory  in  64  byte chunks with	random
				 patterns. Then	swap each 64 chunk with	a ran-
				 domly chosen chunk. Finally, reverse the swap
				 to put	the  chunks  back  to  their  original
				 place	and check if the data is correct. This
				 exercises   adjacent	and   random	memory
				 load/stores.
		   walk-0a	 in  the  given	memory mapping,	work through a
				 range of specially chosen  addresses  working
				 through  address  lines to see	if any address
				 lines are stuck low.  This  works  best  with
				 physical memory addressing, however, exercis-
				 ing  these  virtual  addresses	has some value
				 too.
		   walk-0d	 for each byte in memory,  walk	 through  each
				 data line setting them	to low (and the	others
				 are  set  high)  and  check  that the written
				 value is as expected. This checks if any data
				 lines are stuck.
		   walk-1a	 in the	given memory mapping, work  through  a
				 range	of  specially chosen addresses working
				 through address lines to see if  any  address
				 lines	are  stuck  high. This works best with
				 physical memory addressing, however, exercis-
				 ing these virtual addresses  has  some	 value
				 too.
		   walk-1d	 for  each  byte  in memory, walk through each
				 data line setting them	to high	(and the  oth-
				 ers  are  set low) and	check that the written
				 value is as expected. This checks if any data
				 lines are stuck.
		   walk-flush	 walk through memory a byte at	a  time	 writ-
				 ing/flushing/reading  8 bytes of incrementing
				 8 bit data. For  architectures	 that  support
				 user  space  cache  flushing  this will cause
				 high data cache miss rates.
		   write64	 sequentially write to memory using  32	 x  64
				 bit  writes  per bogo loop. Each loop equates
				 to one	bogo  operation.  This	exercises  raw
				 memory	 writes.  Note	that memory writes are
				 not checked at	the end	of  each  test	itera-
				 tion.
		   write64ds	 sequentially  write  to  memory using 32 x 64
				 bit direct store writes per bogo loop.	  Each
				 loop  equates to one bogo operation. This ex-
				 ercises cacheless write combining (WC)	memory
				 type protocol for memory writes and  is  only
				 available  on	x86  systems with the movediri
				 instruction built with	gcc and	clang  compil-
				 ers.  Note that memory	writes are not checked
				 at the	end of each test iteration.
		   write64nt	 sequentially write to memory using  32	 x  64
				 bit  non-temporal writes per bogo loop.  Each
				 loop equates to one bogo operation. This  ex-
				 ercises  cacheless  raw  memory writes	and is
				 only available	on x86	sse2  capable  systems
				 built with gcc	and clang compilers. Note that
				 memory	 writes	 are not checked at the	end of
				 each test iteration.
		   write1024v	 sequentially write to memory using 1  x  1024
				 bit  vector  write per	bogo loop (only	avail-
				 able if the compiler supports vector  types).
				 Each loop equates to one bogo operation. This
				 exercises  raw	memory writes.	Note that mem-
				 ory writes are	not checked at the end of each
				 test iteration.
		   wrrd128nt	 write to memory in 128	bit chunks using  non-
				 temporal  writes (bypassing the cache).  Each
				 chunk is written 4 times to hammer  the  mem-
				 ory. Then check to see	if the data is correct
				 using	non-temporal  reads if they are	avail-
				 able or normal	 memory	 reads	if  not.  Only
				 available  with  processors that provide non-
				 temporal 128 bit writes.
		   zero-one	 set all memory	bits to	zero and then check if
				 any bits are not zero.	Next, set all the mem-
				 ory bits to one and check if any bits are not
				 one.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       Virtual Memory Area (VMA) stressor
	    --vma N
		   start M workers  that  create  pthreads  to	mmap,  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 randomly chosen.

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

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

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

	    --vnni-method N
		   select the VNNI method to be	exercised, may be one of:

		   Method	Description
		   all		exercise all the following VNNI	methods
		   vpaddb512	8 bit vector addition using 512	bit vector op-
				erations on 64 x 8 bit integers, (x86 vpaddb)
		   vpaddb256	8 bit vector addition using 256	bit vector op-
				erations on 32 x 8 bit integers, (x86 vpaddb)
		   vpaddb128	8 bit vector addition using  128  bit  vectors
				operations  on	32  x  8  bit  integers,  (x86
				vpaddb)
		   vpaddb	8 bit vector addition using 8  bit  sequential
				addition (may be vectorized by the compiler)
		   vpdpbusd512	8  bit	vector	multiplication of unsigned and
				signed 8 bit values followed by	16 bit	summa-
				tion using 512 bit vector operations on	64 x 8
				bit integers, (x86 vpdpbusd)
		   vpdpbusd256	8  bit	vector	multiplication of unsigned and
				signed 8 bit values followed by	16 bit	summa-
				tion using 256 bit vector operations on	32 x 8
				bit integers, (x86 vpdpbusd)
		   vpdpbusd128	8  bit	vector	multiplication of unsigned and
				signed 8 bit values followed by	16 bit	summa-
				tion using 128 bit vector operations on	32 x 8
				bit integers, (x86 vpdpbusd)
		   vpdpbusd	8  bit	vector	multiplication of unsigned and
				signed 8 bit values followed by	16 bit	summa-
				tion  using sequential operations (may be vec-
				torized	by the compiler)
		   vpdpwssd512	16 bit vector multiplication of	 unsigned  and
				signed 16 bit values followed by 32 bit	summa-
				tion using 512 bit vector operations on	64 x 8
				bit integers, (x86 vpdpwssd)
		   vpdpwssd256	16  bit	 vector	multiplication of unsigned and
				signed 16 bit values followed by 32 bit	summa-
				tion using 256 bit vector operations on	64 x 8
				bit integers, (x86 vpdpwssd)
		   vpdpwssd128	16 bit vector multiplication of	 unsigned  and
				signed 16 bit values followed by 32 bit	summa-
				tion using 128 bit vector operations on	64 x 8
				bit integers, (x86 vpdpwssd)
		   vpdpwssd	16  bit	 vector	multiplication of unsigned and
				signed 16 bit values followed by 32 bit	summa-
				tion using sequential operations (may be  vec-
				torized	by the compiler)

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

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

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

       CPU wait	instruction stressor
	    --waitcpu N
		   start  N workers that exercise processor wait instructions.
		   For x86 these are pause, tpause and umwait (when available)
		   and nop. For	ARM the	yield instruction is used.  For	 PPC64
		   the	yield,	mdoio  and  mdooom  instructions are used. For
		   RISC-V the pause instruction	is used. For Loong64 the  dbar
		   instruction is used.	For other architectures	no-op instruc-
		   tions are used.

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

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

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

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

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

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

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

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

	    --workload-method method
		   select  the	workload method. Each quanta of	execution time
		   is consumed using a tight spin-loop	executing  a  workload
		   method. The available methods are described as follows:

		   Method  Description
		   all			randomly  select  any  one  of all the
					following methods:
		   fma			perform	 multiply-add  operations,  on
					modern	processors  these  may be com-
					piled into fused-multiply-add instruc-
					tions.
		   getpid		get the	stressor's PID via getpid(2).
		   time			get the	current	time via time(2).
		   inc64		increment a 64 bit integer.
		   memmove		copy (move) a 1	MB buffer  using  mem-
					move(3).
		   memread		read  from  a  1  MB buffer using fast
					memory reads.
		   memset		write to a  1  MB  buffer  using  mem-
					set(3).
		   mcw64		compute	 64 bit	random numbers using a
					mwc random generator.
		   nop			waste cycles using no-op instructions.
		   pause		stop execution using  CPU  pause/yield
					or  memory  barrier instructions where
					available.
		   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 compressed.
		   lrand48	Uniformly  distributed	pseudo-random  32  bit
				values generated from lrand48(3).
		   morse	Morse code generated from  random  latin  sen-
				tences from a sample of	Lorem Ipsum text.
		   nybble	randomly  distributed  bytes  in  the range of
				0x00 to	0x0f.
		   objcode	object code selected from a random start point
				in the stress-ng text segment.
		   parity	7 bit binary data with 1 parity	bit.
		   pink		pink noise in the range	0..255 generated using
				the Gardner method with	the  McCartney	selec-
				tion  tree  optimization.  Pink	noise is where
				the power spectral density is  inversely  pro-
				portional  to  the frequency of	the signal and
				hence is slightly compressible.
		   random	segments of the	data  stream  are  created  by
				randomly calling the different data generation
				methods.
		   rarely1	data  that  has	 a  single 1 in	every 32 bits,
				randomly located.
		   rarely0	data that has a	single 0  in  every  32	 bits,
				randomly located.
		   rdrand	generate  random data using rdrand instruction
				(x86) or use 64	bit mwc	 psuedo-random	number
				generator for non-x86 systems.
		   ror32	generate  a  32	 bit  random  value, rotate it
				right 0	to 7  places  and  store  the  rotated
				value for each of the rotations.
		   text		random ASCII text.
		   utf8		random 8 bit data encoded to UTF-8.
		   zero		all zeros, compresses very easily.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       stress-ng --with	cpu,matrix,vecmath,fp --seq 8 -t 1m

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

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

	      show all the stressors in	the io class

       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.

				 26 June 2025			  STRESS-NG(1)

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

home | help