stress-ng 将以各种可选择的方式对计算机系统进行压力测试。它旨在练习计算机的各种物理子系统以及各种操作系统内核接口。压力特征:
stress-ng 最初的目的是让机器努力工作并解决硬件问题,例如热超限以及仅在系统受到严重冲击时才会出现的操作系统错误。请谨慎使用stress-ng,因为某些测试可能会使系统在设计不良的硬件上运行过热,并且还可能导致过度的系统抖动,而这可能很难停止。
stress-ng还可以测量测试吞吐率;这对于观察不同操作系统版本或硬件类型之间的性能变化非常有用。但是,它从未打算用作精确的基准测试套件,因此请勿以这种方式使用它。
使用root权限运行stress-ng将调整Linux系统上的内存不足设置,使压力源在内存不足的情况下无法被杀死,因此请谨慎使用。通过适当的权限,stress-ng 可以允许调整 ionice 类和 ionice 级别,同样,这应该小心使用。
可以使用以下 URL 下载stress-ng 每个版本的 tarball:
https://github.com/ColinIanKing/stress-ng/tarball/version
其中 version 是相关版本号,例如:
https://github.com/ColinIanKing/stress-ng/tarball/V0.13.05
docker run --rm ghcr.io/colinianking/stress-ng --help
或者
docker run --rm colinianking/stress-ng --help
最新版本的stress-ng可在各种Ubuntu版本的Ubuntustress-ng ppa中找到:
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
要构建,以下库将确保功能齐全的stress-ng构建:(注意更新的 disto 版本不需要 libattr)。
Debian、Ubuntu:
RHEL、Fedora、Centos:
RHEL、Fedora、Centos(静态构建):
苏塞:
清除Linux:
阿尔卑斯Linux:
快照:
注意:构建将尝试检测构建依赖项,如果未安装支持库,则会构建禁用功能的映像。
在构建时,stress-ng 将检测目标构建系统上可用的内核功能,并适当地启用压力测试。 Stress-ng 已在 Ubuntu、Debian、Debian GNU/Hurd、Slackware、RHEL、SLES、Centos、kFreeBSD、OpenBSD、NetBSD、FreeBSD、Debian kFreeBSD、DragonFly BSD、OS X、Minix、Solaris 11.3、OpenIndiana 和希阿库。移植到其他类似 POSIX/UNIX 的操作系统应该相对容易。
注意:从 git 存储库获取更改后始终运行make clean
,以强制构建重新生成构建配置文件。支持使用 make -j 的并行构建。
要在 BSD 系统上构建,需要 gcc 和 GNU make:
CC=gcc gmake clean
CC=gcc gmake
要在 OS X 系统上构建,只需使用:
make clean
make -j
要在 MINIX 上构建,需要 gmake 和 clang:
CC=clang gmake clean
CC=clang gmake
要在 SunOS 上构建,需要 GCC 和 GNU make,构建时使用:
CC=gcc gmake clean
CC=gcc gmake
要在 Dilos 上构建,需要 GCC 和 GNU make,构建使用:
CC=gcc gmake clean
CC=gcc gmake
在 Haiku R1/beta5 上构建:
# GCC
make clean
make
# Clang
CC=clang make clean
CC=clang make
要构建静态图像(例如,对于 Android),请使用:
# 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
使用 Tiny C 编译器构建:
make clean
CC=tcc make
要使用 PCC 便携式 C 编译器进行构建,请使用:
make clean
CC=pcc make
使用 musl C 库构建:
make clean
CC=musl-gcc
要使用 Intel C 编译器 icc 进行构建,请使用:
make clean
CC=icc make
要使用 Intel C 编译器 icx 进行构建,请使用:
make clean
CC=icx make
要使用 gcc 执行交叉编译,请使用静态构建,指定工具链(CC 和 CXX)。例如,mips64 交叉构建:
make clean
STATIC=1 CC=mips64-linux-gnuabi64-gcc CXX=mips64-linux-gnuabi64-g++ make -j $(nproc)
要对 qnx 执行交叉编译,例如 aarch64 qnx 交叉构建:
make clean
CC=aarch64-unknown-nto-qnx7.1.0-gcc CXX=aarch64-unknown-nto-qnx7.1.0-g++ STATIC=1 make
构建选项:DEBUG,在启用调试 (-g) 的情况下构建:
make clean
DEBUG=1 make
构建选项:LTO、链接时间优化(计算压力源性能提高约 1-2%):
make clean
LTO=1 make
构建选项:PEDATIC,启用 pedantic 构建标志:
make clean
PEDANTIC=1 make
构建选项:GARBAGE_COLLECT,警告未使用的代码:
make clean
GARBAGE_COLLECT=1 make
构建选项:UNEXPECTED=1,警告意外的 #ifdef 代码:
make clean
UNEXPECTED=1 make
将补丁发送至 [email protected] 或通过 https://github.com/ColinIanKing/stress-ng 合并请求
Ubuntustress-ng 参考指南包含简要概述和工作示例。
运行 4 个 CPU、2 个虚拟内存、1 个磁盘和 8 个 fork 压力源 2 分钟并打印测量结果:
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
在所有在线 CPU 上运行矩阵压力源 60 秒并测量温度:
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)
混合运行 4 个 I/O 压力源并检查磁盘 SMART 元数据的更改:
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
使用 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)
使用性能指标生成并测量分支未命中:
sudo stress-ng --branch 1 --perf -t 10 | 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%)
在 ZFS 文件系统上运行 I/O 压力源的排列,排除带有内核日志错误检查的 rawdev 压力源:
stress-ng --class io --permute 0 -x rawdev -t 1m --vmstat 1 --klog-check --temp-path /zfs-pool/test
仅限 x86:使用 RAPL 接口在 8 个并发 3D 矩阵压力源上测量功率,并启用验证。请注意,读取 RAPL 需要 root 权限。
sudo stress-ng --matrix-3d 8 --matrix-3d-size 512 --rapl -t 10 --verify
stress-ng: info: [4563] setting to a 10 secs run per stressor
stress-ng: info: [4563] dispatching hogs: 8 matrix-3d
stress-ng: info: [4563] matrix-3d:
stress-ng: info: [4563] core 6.11 W
stress-ng: info: [4563] dram 2.71 W
stress-ng: info: [4563] pkg-0 8.20 W
stress-ng: info: [4563] psys 16.90 W
stress-ng: info: [4563] uncore 0.06 W
stress-ng: info: [4563] skipped: 0
stress-ng: info: [4563] passed: 8: matrix-3d (8)
stress-ng: info: [4563] failed: 0
stress-ng: info: [4563] metrics untrustworthy: 0
stress-ng: info: [4563] successful run completed in 11.38 secs
衡量 C 州居住权:
stress-ng --intmath 0 -t 1m --c-states
stress-ng: info: [6998] setting to a 1 min run per stressor
stress-ng: info: [6998] dispatching hogs: 8 intmath
stress-ng: info: [6998] intmath:
stress-ng: info: [6998] C0 99.98%
stress-ng: info: [6998] C1 0.00%
stress-ng: info: [6998] C1E 0.01%
stress-ng: info: [6998] C3 0.00%
stress-ng: info: [6998] C6 0.01%
stress-ng: info: [6998] C7s 0.00%
stress-ng: info: [6998] C8 0.00%
stress-ng: info: [6998] POLL 0.00%
stress-ng: info: [6998] skipped: 0
stress-ng: info: [6998] passed: 8: intmath (8)
stress-ng: info: [6998] failed: 0
stress-ng: info: [6998] metrics untrustworthy: 0
stress-ng: info: [6998] successful run completed in 1 min
stress-ng 已发现各种内核、QEMU 错误/回归以及 libc 错误;已采取适当的修复措施来解决这些问题:
2015年:
2016年:
2017年:
2018:
2019:
2020年:
2021 年:
2022 年:
2023 年:
2024 年:
2020年:
2021 年:
2022 年:
2023 年:
2024 年:
2015年:
2016年:
2017年:
2018:
2019:
2020年:
2021 年:
2022 年:
2023 年:
2024 年:
我热衷于将任何使用stress-ng 的研究或项目的引用添加到stress-ng 项目页面。我也很欣赏有关通过stress-ng发现的内核错误或性能回归的信息。
非常感谢stress-ng的以下贡献者(按字母顺序排列):
Abdul Haleem、Aboorva Devarajan、Adriand Martin、Adrian Ratiu、Aleksandar N. Kostadinov、Alexander Kanavin、Alexandru Ardelean、Alfonso Sánchez-Beato、Allen H、Amit Singh Tomar、Andrey Gelman、André Wild、Anisse Astier、Anton Eliasson、Arjan van de文、巴鲁克·西亚奇、布莱恩·W·刘易斯、卡米尔·康斯坦斯、卡洛斯·桑托斯、克里斯蒂安·埃哈特、克里斯托弗·布朗、胡春宇、丹尼尔·安德里斯、丹尼尔·霍奇斯、达尼洛·克鲁姆里奇、戴维森·弗朗西斯、大卫·特纳、丹尼斯·奥夫辛科、多米尼克·B·查尔诺塔、多林达·贝西、埃德·祖利安、埃里克·林、埃里克·斯塔尔曼、埃尔万·维鲁、法比恩马尔福、法布里斯·方丹、费尔南德·西伯、弗洛里安·韦默、弗朗西斯Laniel、Guilherme Janczak、王辉、Hsieh-Tseng Shen、Iyán Méndez Veiga、Ivan Shapovalov、James Hunt、Jan Luebbe、刘建深、Jimmy Ho、John Kacur、Julee、Jules Maselbas、Julien Olivain、Kenny Kong、Khalid Elmously、Khem拉杰、卢卡·皮萨米利奥、路易斯·张伯伦、路易斯·恩里克斯、卢卡斯杜菲纳、马泰奥·伊塔利亚、马修·蒂佩特、毛里西奥·法利亚·德·奥利维拉、马克西姆·谢瓦利埃、马克斯·凯勒曼、玛雅·拉什什、马尤雷什·奇塔莱、梅萨姆·阿扎德、迈克·科热内夫、穆尼久·卡马塔、Myd Xia、尼克·汉利、尼古拉斯·基克斯、保罗·门泽尔、皮尤什·戈亚尔、拉尔夫拉姆绍尔、罗森·佩内夫、黄儒林、萨沙·豪尔、 Sergey Matyukevich、Siddhesh Poyarekar、Shoily Rahman、Stian Onarheim、Thadeu Lima de Souza Cascardo、Thia Wyrod、Thinh Tran、Tim Gardner、Tim Gates、Tim Orling、Tommi Rantala、Witold Baryluk、Yiwei Lin、Yong-Xuan Wang、Zhiyi Sun。