stress-ng  0.13.05
About: 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.
  Fossies Dox: stress-ng-0.13.05.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

stress-ng Documentation

Some Fossies usage hints in advance:

  1. To see the Doxygen generated documentation please click on one of the items in the steelblue colored "quick index" bar above or use the side panel at the left which displays a hierarchical tree-like index structure and is adjustable in width.
  2. If you want to search for something by keyword rather than browse for it you can use the client side search facility (using Javascript and DHTML) that provides live searching, i.e. the search results are presented and adapted as you type in the Search input field at the top right.
  3. Doxygen doesn't incorporate all member files but just a definable subset (basically the main project source code files that are written in a supported language). So to search and browse all member files you may visit the Fossies stress-ng-0.13.05.tar.xz contents page and use the Fossies standard member browsing features (also with source code highlighting and additionally with optional code folding).
README.md

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 650 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, mips64

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.

Building stress-ng

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.

At build-time stress-ng will detect kernel features that are available on the target build system and enable stress tests appropriately. Stress-ng has been build-tested on Ubuntu, Debian, Debian GNU/Hurd, Slackware, RHEL, SLES, Centos, kFreeBSD, OpenBSD, NetBSD, FreeBSD, Debian kFreeBSD, DragonFly BSD, OS X, Minix, Solaris 11.3, OpenIndiana and Hiaku. Ports to other POSIX/UNIX like operating systems should be relatively easy.

NOTE: ALWAYS run make clean after fetching changes from the git repository to force the build to regenerate the build configuration file.

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

Contributing to stress-ng:

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

Quick Start Reference Guide

The Ubuntu stress-ng reference guide contains a brief overview and worked examples.

Examples

Run 4 CPU, 2 virtual memory, 1 disk and 8 fork stressors for 2 minutes and print measurements:

stress-ng --cpu 4 --vm 2 --hdd 1 --fork 8 --timeout 2m --metrics
stress-ng: info:  [573366] setting to a 120 second (2 mins, 0.00 secs) run per stressor
stress-ng: info:  [573366] dispatching hogs: 4 cpu, 2 vm, 1 hdd, 8 fork
stress-ng: info:  [573366] successful run completed in 123.78s (2 mins, 3.78 secs)
stress-ng: info:  [573366] stressor       bogo ops real time  usr time  sys time   bogo ops/s     bogo ops/s CPU used per
stress-ng: info:  [573366]                           (secs)    (secs)    (secs)   (real time) (usr+sys time) instance (%)
stress-ng: info:  [573366] cpu              515396    120.00    453.02      0.18      4294.89        1137.24        94.42
stress-ng: info:  [573366] vm              2261023    120.01    223.80      1.80     18840.15       10022.27        93.99
stress-ng: info:  [573366] hdd              367558    123.78     10.63     11.67      2969.49       16482.42        18.02
stress-ng: info:  [573366] fork             598058    120.00     68.24     65.88      4983.80        4459.13        13.97

Run matrix stressor on all online CPUs for 60 seconds and measure temperature:

stress-ng --matrix -1 --tz -t 60
stress-ng: info:  [1171459] setting to a 60 second run per stressor
stress-ng: info:  [1171459] dispatching hogs: 8 matrix
stress-ng: info:  [1171459] successful run completed in 60.01s (1 min, 0.01 secs)
stress-ng: info:  [1171459] matrix:
stress-ng: info:  [1171459]               acpitz0   75.00 C (348.15 K)
stress-ng: info:  [1171459]               acpitz1   75.00 C (348.15 K)
stress-ng: info:  [1171459]          pch_skylake   60.17 C (333.32 K)
stress-ng: info:  [1171459]         x86_pkg_temp   62.72 C (335.87 K)

Run a mix of 4 I/O stressors and check for changes in disk S.M.A.R.T. metadata:

sudo stress-ng --iomix 4 --smart -t 30s
stress-ng: info:  [1171471] setting to a 30 second run per stressor
stress-ng: info:  [1171471] dispatching hogs: 4 iomix
stress-ng: info:  [1171471] successful run completed in 30.37s
stress-ng: info:  [1171471] Device     ID S.M.A.R.T. Attribute                 Value      Change
stress-ng: info:  [1171471] sdc        01 Read Error Rate                   88015771       71001
stress-ng: info:  [1171471] sdc        07 Seek Error Rate                   59658169          92
stress-ng: info:  [1171471] sdc        c3 Hardware ECC Recovered            88015771       71001
stress-ng: info:  [1171471] sdc        f1 Total LBAs Written               481904395         877
stress-ng: info:  [1171471] sdc        f2 Total LBAs Read                 3768039248        5139
stress-ng: info:  [1171471] sdd        be Temperature Difference             3670049           1

Benchmark system calls using the VDSO:

stress-ng --vdso 1 -t 5 --metrics
stress-ng: info:  [1171584] setting to a 5 second run per stressor
stress-ng: info:  [1171584] dispatching hogs: 1 vdso
stress-ng: info:  [1171585] stress-ng-vdso: exercising vDSO functions: clock_gettime time gettimeofday getcpu
stress-ng: info:  [1171585] stress-ng-vdso: 9.88 nanoseconds per call (excluding 1.73 nanoseconds test overhead)
stress-ng: info:  [1171584] successful run completed in 5.10s
stress-ng: info:  [1171584] stressor       bogo ops real time  usr time  sys time   bogo ops/s     bogo ops/s CPU used per
stress-ng: info:  [1171584]                           (secs)    (secs)    (secs)   (real time) (usr+sys time) instance (%)
stress-ng: info:  [1171584] vdso          430633496      5.10      5.10      0.00  84375055.96    84437940.39        99.93
stress-ng: info:  [1171584] vdso               9.88 nanoseconds per call (average per stressor)

Generate and measure branch misses using perf metrics:

sudo stress-ng --branch 1 --perf -t 10 2>& 1 | grep Branch
stress-ng: info:  [1171714]                604,703,327 Branch Instructions            53.30 M/sec
stress-ng: info:  [1171714]                598,760,234 Branch Misses                  52.77 M/sec (99.02%)

Bugs found with stress-ng

stress-ng has found several Linux Kernel bugs and appropriate fixes have been landed to address these issues:

Kernel improvements that used stress-ng

Presentations

Citations

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.