Loading repository data…
Loading repository data…
ColinIanKing / repository
This is the stress-ng upstream project git repository. 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 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:
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.
stress-ng is free and will always be free. Sponsoring the project is a great way to help pay for the running costs (hardware, power, etc) to support the development process.
Sponsor link: https://github.com/sponsors/ColinIanKing
docker run --rm ghcr.io/colinianking/stress-ng --help
or
docker run --rm colinianking/stress-ng --help
Recent versions of stress-ng are available in the Ubuntu stress-ng ppa for various Ubuntu releases:
https://launchpad.net/~colin-king/+archive/ubuntu/stress-ng
sudo add-apt-repository ppa:colin-king/stress-ng
sudo apt update
sudo apt install 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:
RHEL, Fedora, Centos:
RHEL, Fedora, Centos (static builds):
SUSE:
Alpine Linux:
NOTE: the build will try to detect build dependencies and will build an image with functionality disabled if the support libraries are not installed.
A library check can also be turned off explicitly by emptying the matching LIB_* variable, even when the library is installed. This is useful for embedded or distro builds that do not want stressors pulling in extra dependencies, for example:
make LIB_ACL= LIB_EGL= LIB_GBM= LIB_GLES2= LIB_JPEG=
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. Parallel builds using
make -j are supported.
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 cross build for OpenRisc (OR1K), install the cross compiler and use static builds:
export PATH=$PATH:$HOME/or1k/or1k-none-linux-musl/bin
export CC=or1k-none-linux-musl-gcc
STATIC=1 make
To build on MINIX, gmake, binutils and clang are required:
CC=clang LD=clang gmake clean
CC=clang LD=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 R1/beta5:
# GCC
make clean
make
# Clang
CC=clang make clean
CC=clang make
To build a static image (example, for Android), use:
# path to Android NDK
# get NDK from https://developer.android.com/ndk/downloads
export NDK=$HOME/android-ndk-r27c
export PATH=$PATH:$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
export TARGET=aarch64-linux-android
# Define Android API level
export API=27
export CC=$TARGET$API-clang
make clean
STATIC=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:
make clean
CC=musl-gcc
To build with the Intel C compiler icc use:
make clean
CC=icc make
To build with the Intel C compiler icx use:
make clean
CC=icx make
To perform a cross-compilation using gcc, use a static build, specify the toolchain (both CC and CXX). For example, a mips64 cross build:
make clean
STATIC=1 CC=mips64-linux-gnuabi64-gcc CXX=mips64-linux-gnuabi64-g++ make -j $(nproc)
To perform a cross-compilation for QNX 7.1, for example, an aarch64 QNX cross build:
make clean
CC=aarch64-unknown-nto-qnx7.1.0-gcc CXX=aarch64-unknown-nto-qnx7.1.0-g++ STATIC=1 make
To perform a cross-compilation for QNX 8, for example, an aarch64 QNX cross build:
make clean
CC=aarch64-unknown-nto-qnx8.0.0-gcc CXX=aarch64-unknown-nto-qnx8.0.0-g++ make
To use clang-scan for static analysis (e.g. using clang-21):
make clean
CC=clang-21 make -f Makefile.config -j $(nproc)
CC=scan-build-21 make
To generate a PDF version of the manual (requires ps2pdf to be installed)
make pdf
Build option: DEBUG, build with debug (-g) enabled:
make clean
DEBUG=1 make
Build option: BUILD_SMALL, build small (unoptimized) executable
make clean
BUILD_SMALL=1 make
Build option: LTO, Link Time Optimization (~1-2% performance improvement on compute stressors):
make clean
LTO=1 make
Build option: PEDANTIC, enable pedantic build flags:
make clean
PEDANTIC=1 make
Build option: GARBAGE_COLLECT, warn of unused code:
make clean
GARBAGE_COLLECT=1 make
Build option: UNEXPECTED=1, warn of unexpected #ifdef'd out code:
make clean
UNEXPECTED=1 make
Build option: SOURCE_DATE_EPOCH=seconds since epoch, add build date
make clean
SOURCE_DATE_EPOCH=1750685870 make
Build option: EXTRA_BUILDINFO=1, add CFLAGS, CXXFLAGS and LDFLAGS to --buildinfo option NOTE: This can lead to build information being leaked and is not recommended for any distro releases.
make clean
EXTRA_BUILDINFO=1 make -j 10
Send patches to colin.i.king@gmail.com or merge requests at https://github.com/ColinIanKing/stress-ng
The Ubuntu stress-ng reference guide contains a brief overview and worked examples.
Run 8 CPU stressors for 60 seconds:
stress-ng --cpu 8 --timeout 60
stress-ng: info: [184401] setting to a 1 min run per stressor
stress-ng: info: [184401] dispatching hogs: 8 cpu
stress-ng: info: [184401] skipped: 0
stress-ng: info: [184401] passed: 8: cpu (8)
stress-ng: info: [184401] failed: 0
stress-ng: info: [184401] metrics untrustworthy: 0
stress-ng: info: [184401] successful run completed in 1 min
Run 8 CPU stressors for 2 minutes, just using the square root CPU stressor method and show compute metrics:
stress-ng --cpu 8 --timeout 2m --cpu-method sqrt --metrics
stress-ng: info: [184135] setting to a 2 mins run per stressor
stress-ng: info: [184135] dispatching hogs: 8 cpu
stress-ng: metrc: [184135] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s CPU used per RSS Max
stress-ng: metrc: [184135] (secs) (secs) (secs) (real time) (usr+sys time) instance (%) (KB)
stress-ng: metrc: [184135] cpu 1531429 120.00 916.87 0.28 12762.02 1669.78 95.54 3148
stress-ng: info: [184135] skipped: 0
stress-ng: info: [184135] passed: 8: cpu (8)
stress-ng: info: [184135] failed: 0
stress-ng: info: [184135] metrics untrustworthy: 0
stress-ng: info: [184135] successful run completed in 2 mins
Run 8 CPU stressors for 60 seconds and report thermal zone temperatures
stress-ng --cpu 8 --timeout 60 --tz
stress-ng: info: [184291] setting to a 1 min run per stressor
stress-ng: info: [184291] dispatching hogs: 8 cpu
stress-ng: info: [184291] cpu:
stress-ng: info: [184291] B0D4 96.05 C (369.20 K)
stress-ng: info: [184291] INT3400_Thermal 20.00 C (293.15 K)
stress-ng: info: [184291] SEN1 41.05 C (314.20 K)
stress-ng: info: [184291] acpitz 96.00 C (369.15 K)
stress-ng: info: [184291] iwlwifi_1 28.00 C (301.15 K)
stress-ng: info: [184291] pch_skylake 62.50 C (335.65 K)
stress-ng: info: [184291] x86_pkg_temp 73.25 C (346.40 K)
stress-ng: info: [184291] skipped: 0
stress-ng: info: [184291] passed: 8: cpu (8)
stress-ng: info: [184291] failed: 0
stress-ng: info: [184291] metrics untrustworthy: 0
stress-ng: info: [184291] success