The latest release of stress-ng 0.08.00 now contains a new job scripting feature. Jobs allow one to bundle up a set of stress options into a script rather than cram them all onto the command line. One can now also run multiple invocations of a stressor with the latest version of stress-ng and conbined with job scripts we now have a powerful way of running more complex stress tests.
The job script commands are essentially the stress-ng long options without the need for the '--' option characters. One option per line is allowed.
For example:
$ stress-ng --cpu 1 --matrix 1 --verbose --tz --timeout 60s --cpu 1 --matrix -1 --icache 1
would become:
$cat example.job
verbose
tz
timeout 60
cpu 1
matrix 1
icache 1
One can also add comments using the # character prefix. By default the stressors will be run in parallel, but one can use the "run sequential" command in the job script to run the stressors sequentially.
The following script runs the mmap stressor multiple times using more memory on each run:
$ cat mmap.job
run sequential # one job at a time
timeout 2m # run for 2 minutes
verbose # verbose output
#
# run 4 invocations and increase memory each time
#
mmap 1
mmap-bytes 25%
mmap 1
mmap-bytes 50%
mmap 1
mmap-bytes 75%
mmap 1
mmap-bytes 100%
Some of the stress-ng stressors have various "methods" that allow one to modify the way the stressor behaves. The following example shows how job scripts can be uses to exercise a system using different stressor methods:
$ cat /usr/share/stress-ng/example-jobs/matrix-methods.job
#
# hot-cpu class stressors:
# various options have been commented out, one can remove the
# proceeding comment to enable these options if required.
#
# run the following tests in parallel or sequentially
#
run sequential
# run parallel
#
# verbose
# show all debug, warnings and normal information output.
#
verbose
#
# run each of the tests for 60 seconds
# stop stress test after N seconds. One can also specify the units
# of time in seconds, minutes, hours, days or years with the suf‐
# fix s, m, h, d or y.
#
timeout 1m
# tz
# collect temperatures from the available thermal zones on the
# machine (Linux only). Some devices may have one or more thermal
# zones, where as others may have none.
tz
#
# matrix stressor with examples of all the methods allowed
#
# start N workers that perform various matrix operations on float‐
# ing point values. By default, this will exercise all the matrix
# stress methods one by one. One can specify a specific matrix
# stress method with the --matrix-method option.
#
#
# Method Description
# all iterate over all the below matrix stress methods
# add add two N × N matrices
# copy copy one N × N matrix to another
# div divide an N × N matrix by a scalar
# hadamard Hadamard product of two N × N matrices
# frobenius Frobenius product of two N × N matrices
# mean arithmetic mean of two N × N matrices
# mult multiply an N × N matrix by a scalar
# prod product of two N × N matrices
# sub subtract one N × N matrix from another N × N matrix
# trans transpose an N × N matrix
#
matrix 0
matrix-method all
matrix 0
matrix-method add
matrix 0
matrix-method copy
matrix 0
matrix-method div
matrix 0
matrix-method frobenius
matrix 0
matrix-method hadamard
matrix 0
matrix-method mean
matrix 0
matrix-method mult
matrix 0
matrix-method prod
matrix 0
matrix-method sub
matrix 0
matrix-method trans
Various example job scripts can be found in /usr/share/stress-ng/example-job, one can use these as a base for writing more complex stressors. The example jobs have all the options commented (using the text from the stress-ng manual) to make it easier to see how each stressor can be run.
Version 0.08.00 landed in Ubuntu 17.10 Artful Aardvark and is available as a snap and I've got backports in ppa:colin-king/white for older releases of Ubuntu.