• Stars
    star
    1,191
  • Rank 39,271 (Top 0.8 %)
  • Language
    C
  • License
    GNU General Publi...
  • Created over 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

  • 300+ stress tests
  • 80+ CPU specific stress tests that exercise floating point, integer, bit manipulation and control flow
  • 20+ virtual memory stress tests
  • 40+ file system stress tests
  • 30+ 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 and SunOs/Dilos/Solaris. with gcc, musl-gcc, clang, icc, icx, tcc and pcc.
  • tested on alpha, armel, armhf, arm64, hppa, i386, m68k, mips32, mips64, power32, ppc64el, risc-v, sh4, s390x, sparc64, 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.

Tarballs

Tarballs of each version of stress-ng can be downloaded using the URL:

https://github.com/ColinIanKing/stress-ng/tarball/version

where version is the relevant version number, for example:

https://github.com/ColinIanKing/stress-ng/tarball/V0.13.05

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++
  • libaio-dev
  • libapparmor-dev
  • libatomic1
  • libattr1-dev
  • libbsd-dev
  • libcap-dev
  • libeigen3-dev
  • libgbm-dev
  • libgcrypt-dev
  • libglvnd-dev
  • libipsec-mb-dev
  • libjpeg-dev
  • libjudy-dev
  • libkeyutils-dev
  • libkmod-dev
  • libmd-dev
  • libmpfr-dev
  • libsctp-dev
  • libxxhash-dev
  • zlib1g-dev

RHEL, Fedora, Centos:

  • gcc
  • g++
  • eigen3-devel
  • Judy-devel
  • keyutils-libs-devel
  • kmod-devel
  • libaio-devel
  • libatomic
  • libattr-devel
  • libbsd-devel
  • libcap-devel
  • libgbm-devel
  • libgcrypt-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
  • libaio-devel
  • libatomic-static
  • libattr-devel
  • libbsd-devel
  • libcap-devel
  • libgbm-devel
  • libgcrypt-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

ClearLinux:

  • devpkg-eigen
  • devpkg-Judy
  • devpkg-kmod
  • devpkg-attr
  • devpkg-libbsd
  • devpkg-libgcrypt
  • devpkg-libjpeg-turbo
  • devpkg-libsctp
  • devpkg-mesa

Alpine Linux:

  • build-base
  • eigen-dev
  • jpeg-dev
  • judy-dev
  • keyutils-dev
  • kmod-dev
  • libaio-dev
  • libatomic
  • libattr
  • libbsd-dev
  • libcap-dev
  • libgcrypt-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 -j

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:

	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)

Contributing to stress-ng:

Send patches to [email protected] 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 --stdout | 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 and regressions found with stress-ng

stress-ng has found Kernel and QEMU bugs/regressions 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.

Contributors

Many thanks to the following contributors to stress-ng (in alphabetical order):

Abdul Haleem, Aboorva Devarajan, Adriand Martin, Adrian Ratiu, Aleksandar N. Kostadinov, Alexander Kanavin, Alexandru Ardelean, Alfonso Sánchez-Beato, Allen H, André Wild, Anton Eliasson, Arjan van de Ven, Baruch Siach, Bryan W. Lewis, Camille Constans, Carlos Santos, Christian Ehrhardt, Christopher Brown, Chunyu Hu, Danilo Krummrich, Davidson Francis, David Turner, Dominik B Czarnota, Dorinda Bassey, Eder Zulian, Eric Lin, Erik Stahlman, Fabien Malfoy, Fabrice Fontaine, Fernand Sieber, Florian Weimer, Francis Laniel, Guilherme Janczak, Hui Wang, Iyán Méndez Veiga, James Hunt, Jan Luebbe, Jianshen Liu, John Kacur, Jules Maselbas, Julien Olivain, Kenny Gong, Khalid Elmously, Khem Raj, Luca Pizzamiglio, Luis Chamberlain, Luis Henriques, Matthew Tippett, Mauricio Faria de Oliveira, Maxime Chevallier, Maya Rashish, Mayuresh Chitale, Meysam Azad, Mike Koreneff, Nick Hanley, Paul Menzel, Piyush Goyal, Ralf Ramsauer, Rosen Penev, Siddhesh Poyarekar, Shoily Rahman, Thadeu Lima de Souza Cascardo, Thia Wyrod, Thinh Tran, Tim Gardner, Tim Gates, Tim Orling, Tommi Rantala, Witold Baryluk, Yong-Xuan Wang, Zhiyi Sun.

More Repositories

1

christmas-obfuscated-C

Obuscated C Christmas programs
C
375
star
2

powerstat

Powerstat measures the power consumption of a machine using the battery stats or the Intel RAPL interface. The output is like vmstat but also shows power consumption statistics. At the end of a run, powerstat will calculate the average, standard deviation and min/max of the gathered data.
C
76
star
3

forkstat

Forkstat is a program that logs process fork(), exec() and exit() activity. It is useful for monitoring system behaviour and to track down rogue processes that are spawning off processes and potentially abusing the system.
C
57
star
4

pagemon

Pagemon is an interactive memory/page monitoring tool allowing one to browse the memory map of an active running process.
C
30
star
5

fwts

The tool fwts comprises of over fifty tests that are designed to exercise and test different aspects of a machine's firmware.
C
26
star
6

faultstat

page fault tracking tool
C
17
star
7

smemstat

Smemstat reports the physical memory usage taking into consideration shared memory. The tool can either report a current snapshot of memory usage or periodically dump out any changes in memory.
C
15
star
8

cpustat

cpustat periodically dumps out the current CPU utilisation statistics of running processes. cpustat has been optimised to have a minimal CPU overhead and typically uses about 35% of the CPU compared to top. cpustat also includes some simple statistical analysis options that can help characterise the way CPUs are being loaded.
C
15
star
9

kernelscan

kernel scanning parser
C
8
star
10

linux-next

clone of https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next
C
8
star
11

health-check

The health-check tool monitors processes in various ways to help identify areas where it is consuming too many resources. One can trace one or more processes (including all their threads and child processes too) for a full story of system activity.
C
8
star
12

power-calibrate

Power-calibrate calibrates the power consumption of a mobile device that has a battery power source. It will attempt to calculate the power usage of 1% of CPU utiltisation.
C
8
star
13

debug-code

debug code
Roff
6
star
14

cmos-dump

cmos dumping tool
C
4
star
15

suspend-blocker

The suspend-blocker tool parses the kernel log and will explain the reasons that suspend was woken up or which wakelocks blocked suspend from working.
C
4
star
16

e820-bios

Find legacy BIOS E820 memory mapping information via int 0x15
C
4
star
17

x86rdrand-benchmark

x86 rdrand benchmarking tool
C
3
star
18

pagein

tool to force pages in
C
3
star
19

eventstat

Eventstat periodically dumps out the current kernel event state. It keeps track of current events and outputs the change in events on each output update. The tool requires sudo to run since it needs to write to /proc/timer_stats to start and stop the event monitoring.
C
3
star
20

scripts

various scripts for debugging
Shell
2
star
21

fiemap

Reads file extents using the FIEMAP ioctl
C
2
star
22

idlestat

clone of Linaro idlestat + fixes
C
2
star
23

autotest-client-tests

Python
2
star
24

tiny-smart

A tiny minimal example of how to read SMART data log values
C
2
star
25

eatpages

Program to consume pages to force low memory kernel and application failures
C
2
star
26

tpm2-scripts

Linux TPM driver TPM 2.0 test scripts. The master branch can be rebased at any time. If I ever decide to freeze this, I will create a merge-only next branch that will also provide baseline for the master.
Python
2
star
27

x86latency-test

x86 cyclic latency sleep test
C
1
star
28

rseq

arch portable rseq test in C (with minimal assembler)
C
1
star
29

man-pages

clone of http://git.kernel.org/pub/scm/docs/man-pages/man-pages
Roff
1
star
30

pkg-spl-ubuntu

pkg-spl (ubuntu clone from kernel.ubuntu.com)
C
1
star
31

cppcheck-auto

cppcheck auto build and diff script
Shell
1
star
32

syzkaller-script

wrapper to autobuild and test kernels with syzkaller
Shell
1
star
33

fnotifystat

Fnotifystat is a program that dumps the file system activity in a given period of time.
C
1
star
34

smi

smi generator and counter example
C
1
star
35

kernel-smoke-tests

kernel-smoke-tests
Shell
1
star