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、Allen H、Amit Singh Tomar、Andrey Gelman、André Wild、Anisse Astier、Anton Eliasson、Arjan van Elias Ven、巴魯克·西亞赫、布萊恩·W·劉易斯、卡米爾·康斯坦斯、卡洛斯·桑托斯、克里斯蒂安·埃爾哈特、克里斯托弗·布朗、胡春雨、丹尼爾·安德里斯、丹尼爾·霍奇斯、達尼洛·克魯姆里奇、戴維森·弗朗西斯、大衛·特納、丹尼斯·奧夫辛科、多米尼克·B·查爾諾塔、多林達·巴西、埃德·祖利安、艾瑞克·林、艾瑞克·史塔爾曼、埃爾萬·維魯、法比恩·馬爾福、法布里斯·方丹、費爾南德·西伯、弗洛里安·韋默、法蘭西斯·拉尼爾、吉列爾梅·揚恰克、王輝、沈謝曾、伊揚·門德斯·韋加、伊凡·沙波瓦洛夫、詹姆斯·亨特、揚·呂貝, 劉建深, 吉米·何, 約翰·卡庫爾, 朱利, 朱爾斯·馬塞爾巴斯, 朱利安·奧利文, 肯尼·龔, Khalid Elmously, Khem Raj, 盧卡·皮薩米利奧, 路易斯·張伯倫, 路易斯·恩里克斯, 盧卡斯·杜菲納, 馬泰奧·伊塔利亞, 馬修·蒂皮特, 毛里西奧·法裡亞·德·奧利維拉,馬克西姆·謝瓦利埃、馬克斯·凱勒曼、瑪雅·拉什什、馬尤雷什·奇塔萊、梅薩姆·阿扎德、邁克·科列內夫、蒲田宗久、Myd Xia、尼克·漢利、尼古拉斯·基克斯、保羅·門澤爾、皮尤什·戈亞爾、拉爾夫·拉姆紹爾、羅森·佩內夫、黃儒林、薩沙豪爾、謝爾蓋·馬秋科維奇、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。