stress-ng

stress-ng will stress test a computer system in various selectable ways. It
was designed to exercise various physical subsystems of a computer as well as
the various operating system kernel interfaces. Stress-ng features:

  * Over 250 stress tests
  * 85+ CPU specific stress tests that exercise floating point, integer,
    bit manipulation and control flow
  * over 20 virtual memory stress tests
  * portable: builds on Linux, Solaris, *BSD, Minix, Android, MacOS X,
    GNU/Hurd, Haiku, Windows Subsystem for Linux and SunOs/Dilos with
    gcc, clang, tcc and pcc.
  * tested on x86-64, i386, s390x, ppc64el, armhf, arm64, sparc64, risc-v,
    m68k

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

To build, the following libraries will ensure a fully functional stress-ng
build: (note libattr is not required for more recent disto releases).

Debian, Ubuntu:

  * libaio-dev
  * libapparmor-dev
  * libattr1-dev
  * libbsd-dev
  * libcap-dev
  * libgcrypt11-dev
  * libipsec-mb-dev
  * libjudy-dev
  * libkeyutils-dev
  * libsctp-dev
  * libatomic1
  * zlib1g-dev
  * libkmod-dev

RHEL, Fedora, Centos:

  * libaio-devel
  * libattr-devel
  * libbsd-devel
  * libcap-devel
  * libgcrypt-devel
  * Judy-devel
  * keyutils-libs-devel
  * lksctp-tools-devel
  * libatomic
  * zlib-devel
  * kmod-devel

RHEL, Fedora, Centos (static builds):

  * libaio-devel
  * libattr-devel
  * libbsd-devel
  * libcap-devel
  * libgcrypt-devel
  * Judy-devel
  * keyutils-libs-devel
  * lksctp-tools-devel
  * libatomic-static
  * zlib-devel
  * glibc-static

SUSE:
  * keyutils-devel
  * libaio-devel
  * libapparmor-devel
  * libattr-devel
  * libbsd-devel
  * libcap-devel
  * libseccomp-devel
  * lksctp-tools-devel
  * libatomic1
  * zlib-devel
  * libkmod-devel

NOTE: the build will try to detect build dependencies and will build an image
with functionality disabled if the support libraries are not installed.

To build on BSD systems, one requires gcc and GNU make:
        CC=gcc gmake clean
	CC=gcc gmake

To build on OS X systems, just use:
	make clean
	make

To build on MINIX, gmake and clang are required:
	CC=clang gmake clean
	CC=clang gmake

To build on SunOS, one requires GCC and GNU make, build using:
	CC=gcc gmake clean
	CC=gcc gmake

To build on Dilos, one requires GCC and GNU make, build using:
	CC=gcc gmake clean
	CC=gcc gmake

To build on Haiku Alpha 4:
	make clean
	make

To build a static image (example, for Android), use:
	make clean
	STATIC=1 make

To build with full warnings enabled:
	make clean
	PEDANTIC=1 make

To build with the Tiny C compiler:
	make clean
	CC=tcc make

To build  with the PCC portable C compiler use:
	make clean
	CC=pcc make

To build with the musl C library:
	CC=musl-gcc make

For more information, see: https://kernel.ubuntu.com/~cking/stress-ng/

I am keen to add to the stress-ng project page any citations to research or
projects that use stress-ng.  I also appreciate information concerning kernel
bugs or performance regressions found with stress-ng.

Contributing to stress-ng:

Send patches to colin.king@canonical.com or merge requests at
https://github.com/ColinIanKing/stress-ng
