MCPcopy Index your code
hub / github.com/ColinIanKing/stress-ng

github.com/ColinIanKing/stress-ng @V0.21.03

Chat with this repo
repository ↗ · DeepWiki ↗ · release V0.21.03 ↗ · + Follow
6,782 symbols 19,525 edges 1,223 files 2,495 documented · 37%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

stress-ng (stress next generation)

Packaging status

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:

  • 370+ stress tests
  • 100+ CPU specific stress tests that exercise floating point, integer, bit manipulation and control flow
  • 60+ virtual memory stress tests
  • 80+ file system stress tests
  • 50+ memory/CPU cache stress tests
  • portable: builds on Linux (Debian, Devuan, RHEL, Fedora, Centos, Slackware OpenSUSE, Ubuntu, etc..), Solaris, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Minix, Android, MacOS X, Serenity OS, GNU/Hurd, Haiku, Windows Subsystem for Linux, Cygwin and SunOs/Dilos/Solaris. with gcc, musl-gcc, clang, icc, icx, tcc and pcc.
  • tested on Alpha, ARMEL, ARMHF, ARM64, HPPA, i386, loong64, M68k, MIPS32, MIPS64, OpenRisc (OR1K), Power32, PPC64el, RISC-V, sh4, s390x, SPARC64, VAX (on NetBSD) x86-64

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.

Sponsoring the project

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

Running latest stress-ng snapshot in a container

docker run --rm ghcr.io/colinianking/stress-ng --help

or

docker run --rm colinianking/stress-ng --help

Debian packages for Ubuntu

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

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:

  • gcc g++ libacl1-dev libaio-dev libapparmor-dev libatomic1 libattr1-dev libbsd-dev libcap-dev libeigen3-dev libgbm-dev libcrypt-dev libglvnd-dev libipsec-mb-dev libjpeg-dev libjudy-dev libkeyutils-dev libkmod-dev libmd-dev libmpfr-dev libsctp-dev libxxhash-dev liblzma-dev zlib1g-dev

RHEL, Fedora, Centos:

  • gcc g++ eigen3-devel Judy-devel keyutils-libs-devel kmod-devel libacl-devel libaio-devel libatomic libattr-devel libbsd-devel libcap-devel libgbm-devel libcrypt-devel libglvnd-core-devel libglvnd-devel libjpeg-devel libmd-devel mpfr-devel libX11-devel libXau-devel libxcb-devel lksctp-tools-devel xorg-x11-proto-devel xxhash-devel zlib-devel

RHEL, Fedora, Centos (static builds):

  • gcc g++ eigen3-devel glibc-static Judy-devel keyutils-libs-devel libacl-devel libaio-devel libatomic-static libattr-devel libbsd-devel libcap-devel libgbm-devel libcrypt-devel libglvnd-core-devel libglvnd-devel libjpeg-devel libmd-devel libX11-devel libXau-devel libxcb-devel lksctp-tools-devel mpfr-devel xorg-x11-proto-devel xxhash-devel zlib-devel

SUSE: * gcc gcc-c++ eigen3-devel keyutils-devel libaio-devel libapparmor-devel libatomic1 libattr-devel libbsd-devel libcap-devel libgbm-devel libglvnd-devel libjpeg-turbo libkmod-devel libmd-devel libseccomp-devel lksctp-tools-devel mpfr-devel xxhash-devel zlib-devel

Alpine Linux: * build-base eigen-dev jpeg-dev judy-dev keyutils-dev kmod-dev libacl-dev libaio-dev libatomic libattr libbsd-dev libcap-dev libmd-dev libseccomp-dev lksctp-tools-dev mesa-dev mpfr-dev xxhash-dev zlib-dev

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

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 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] successful run completed in 1 min

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

Core symbols most depended-on inside this repo

pr_fail
called by 1866
core-log.c
stress_proc_state_set
called by 1374
core-helper.c
stress_time_now
called by 1004
core-time.c
pr_inf
called by 648
core-log.c
syscall_time_now
called by 630
stress-syscall.c
pr_inf_skip
called by 594
core-log.c
stress_setting_get
called by 546
core-setting.c
stress_sync_start_wait
called by 380
core-sync.c

Shape

Function 5,627
Class 1,144
Enum 11

Languages

C97%
C++3%

Modules by API surface

stress-syscall.c373 symbols
stress-sysbadaddr.c198 symbols
core-shim.c162 symbols
stress-fd-abuse.c147 symbols
stress-dev.c139 symbols
stress-ng.c102 symbols
stress-cpu.c93 symbols
stress-filerace.c73 symbols
core-helper.c69 symbols
stress-sparsematrix.c63 symbols
core-filesystem.c56 symbols
stress-vm.c49 symbols

For agents

$ claude mcp add stress-ng \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page